1.はじめに

前回のIAM入門 認証でまとめましたユーザなどへの権限を定義する認可についてまとめていきます。

2.IAMとは

改めてIAMとは何かというと公式から引用します。

AWS Identity and Access Management (IAM) は、AWS リソースへのアクセスを安全に管理するためのウェブサービスです。IAM により、誰を認証 (サインイン) し、誰にリソースの使用を承認する (アクセス権限を持たせる) かを制御します。

かいつまむと、「誰」と「権限」を定義するサービスです。多くの場合認証と認可という表現がされます。それらを定義していく機能になります。

ちなみに認証と認可は以下の通り。

  • 認証:確認相手が「誰」であるかを確かめること。
  • 認可:確認相手が「何」をできるかを定めること。

今回は「何」ができるか、つまり認可について基本的な事項をまとめていきます。

3.IAMでの認可とは

IAMで認可を設定する機能を「IAM ポリシー」と呼びます。 まずは認証の機能であるIAMユーザとIAMグループとのかかわりを見てみましょう。

今回も基本的な部分でまとめています。話を簡単にするため、今回は認可の中でもアイデンティティベースのポリシー、つまりユーザやグループに対する認可についてのみ扱います。

認証と認可

IAM ポリシーはIAM ユーザやIAMグループに対して実施可能なアクションなどを定義し、権限を付与、割り当てて利用します。

グループに割り当てを行うことで、まとめて権限を管理することができるため、基本的にはグループへの割り当てを行うほうが良いといえます。

4.ポリシーの構成

AWSポリシーはほとんどJSON形式で定義されています。構成イメージを公式ドキュメントから引用します。各要素についてまとめていきます。

ポリシー構成

JSON ポリシードキュメント構造

Optional top-level elements

jsonファイル全体に適用されるポリシー言語のバージョンを指定します。 基本的には以下の通りです。

1
"Version": "2012-10-17"

Statement

具体的な権限を記述するためのコンテナ的な位置づけです。 1つのポリシーには複数のStatementを含めることができます。

Sid(オプション)

SidはStatement iDの略で、複数のStatementがある場合に区別をしやすくするための記述です。

1
"Sid": "FirstStatement",

Effect

Allow または Denyを指定し、権限の許可か拒否かを定義します。

1
"Effect": "Allow"

Principal(オプション、一部のみ必須)

Principalは「このルールを誰に割り当ててよいか」を指定します。 指定はARNを指定します。

前段のイメージ図の通りポリシーは色々なユーザやグループに割り当てるため、この指定は必須ではありません。

用途としては「特定のグループだけS3のバケットを利用できるようにしたい」みたいな場合に、「特定のグループ」を指定する利用方法になります。

1
"Principal": {"AWS": ["arn:aws:iam::ACCOUNT-ID-:root"]},

Action

Actionでは権限を与えたい、または拒否したい具体的な操作を指定します。

1
"Action": ["iam:ChangePassword"]

アクション自体は多くの種類があるため、覚えるものでなく都度参照して合致するものを選択する、という使い方がよいと思います。

Resource(オプション、一部のみ必須)

このActionなどで操作してよい対象(リソース)を指定します。指定方法はPrincipalと同様にARNを用います。 例えば「EC2の中でも特定のインスタンスだけ」にしたい場合に「特定のインスタンス」を指定する利用方法になります。 指定しない場合は、このポリシーをアタッチ(割り当て)しているリソースのみが対象になります。

よく現場で利用する方法としてはワイルドカードで以下のようにすることがあります。

1
"Resource": "*"

Condition(オプション)

ポリシーでアクセス許可を与える場合の条件を指定します。よく用いるのはMFAが有効になっているユーザに対しては権限を与えたい、という感じですね。 この場合の起債は下記の通りとなります。

1
"Condition": {"Bool": {"aws:MultiFactorAuthPresent": "true"}}

5.ポリシー作成

ここまでポリシーの中身をマニュアルチックに見てきましたが、これらを全部把握して構築するのは大変です。 そのため、AWSではポリシーを作る方法やテンプレートが複数用意されています。

  1. 管理ポリシーとインラインポリシー
  2. ビジュアルエディタ
  3. ポリシーのテスト

管理ポリシーとインラインポリシー

手作業ですべてのポリシーを作成することは現実的ではないです。そのため、AWSが作成し、管理しているポリシーがあり、それをAWS管理ポリシーといいます。一方でユーザが自由に作成したものをカスタマ管理ポリシーと呼びます。

また管理者の違いではなく、記載方法として特定のプリンシパルエンティティ(ロール、ユーザ、グループなどの総称)と1対1で定義するポリシーもあります。

これらの特徴をまとめます。

種類 利用方法 概要
AWS管理ポリシー プリンシパルエンティティにアタッチする AWSが管理をしており、典型的なテンプレートとして利用が可能。アップデートなどの変更も実施される。
カスタマー管理ポリシー プリンシパルエンティティにアタッチする 各カスタマーで自身で作成したポリシー
インラインポリシー 特定のプリンシパルエンティティに埋め込む 厳密な利用者を定義したい場合に作成する専用のポリシー

6.ポリシーのベストプラクティス

ここまで見てきた内容についてBlackBeltにあるベストプラクティスをまとめます。

  • 最小限の権限を付与する。
  • はじめはAWS管理ポリシーを用いる。なれたらAWS管理ポリシーをカスタマイズしたカスタマー管理ポリシーを作成する。
  • ポリシーはユーザではなくグループ単位に割り当てる
    • 管理を容易にすることができる。
  • インラインポリシーではなく、カスタマー管理ポリシーを使用する
    • カスタマイズが可能、再利用性が高い、ポリシーの管理を集約できるなどのメリット
  • 安全性を向上させるためにCondition要素を利用する
    • 許容するIPアドレス、日時、MFAデバイス認証の要求、SSLの要求などを指定する

20190129 AWS Black Belt Online Seminar AWS Identity and Access Management (AWS IAM) Part1

7.まとめ

今回はIAMの中でも権限を定義するポリシーに注目してまとめてきました。ポリシーを使うことで特定の権限をグループ単位に付与、または拒否できるなどを行うことでAWS利用者へのコントロールを適切にしていきましょう。

次回はIAMロールについてまとめていきます。

関連記事