メニュー
AWS Identity and Access Management
ユーザーガイド

IAM ポリシー

ポリシー は、ID またはリソースにアタッチされたときに、そのアクセス権限を定義する AWS のエンティティです。AWS は、ユーザーなどのプリンシパルがリクエストを行ったときに、それらのポリシーを評価します。ポリシーでのアクセス許可により、リクエストが許可されるか拒否されるかが決まります。ポリシーはアイデンティティベースのポリシーとしてプリンシパルにアタッチされるか、リソースベースのポリシーとしてリソースにアタッチされた JSON ドキュメントとして AWS に保存されます。

アイデンティティベースのポリシー

アイデンティティベースのポリシーは、IAM ユーザー、ロール、グループなど、プリンシパル (または ID) にアタッチできるアクセス権限ポリシーです。これらのポリシーは、ID が実行できるアクション、リソース、および条件を制御します。アイデンティティベースのポリシーはさらに次のように分類できます。

  • 管理ポリシー – AWS アカウント内の複数のユーザー、グループ、およびロールにアタッチできるスタンドアロンのアイデンティティベースポリシーです。次の 2 種類の管理ポリシーを使用できます。

    • AWS 管理ポリシー – AWS が作成および管理する管理ポリシー。ポリシーを初めて利用する場合は、AWS 管理ポリシーから開始することをお勧めします。

    • カスタマー管理ポリシー – AWS アカウントで作成および管理する管理ポリシー。カスタマー管理ポリシーでは、AWS 管理ポリシーに比べて、より正確にポリシーを管理できます。ビジュアルエディタで IAM ポリシーを作成および編集することも、JSON ポリシードキュメントを直接作成することもできます。詳細については、「IAM ポリシーの作成」および「IAM ポリシーの編集」を参照してください。

  • インラインポリシー – 自身で作成および管理するポリシーで、単一のユーザー、グループ、またはロールに直接埋め込まれています

    管理ポリシーまたはインラインポリシーのどちらを使用するかを選択する方法については、「管理ポリシーとインラインポリシー」を参照してください。

リソースベースのポリシー

リソースベースのポリシーは、Amazon S3 バケットなどのリソースにアタッチする JSON ポリシードキュメントです。これらのポリシーは、指定されたプリンシパルがそのリソースでどのような条件下でアクションを実行できるかを制御します。リソースベースのポリシーはインラインポリシーであり、管理リソースベースのポリシーはありません。

IAM ID は技術的には AWS リソースですが、IAM IDにリソースベースのポリシーをアタッチすることはできません。IAM でアイデンティティベースのポリシーを使用する必要があります。リソースベースのポリシーをサポートするサービスを確認するには、「IAM と連携する AWS サービス」を参照してください。リソースベースのポリシーの詳細については、「アイデンティティベースおよびリソースベースのポリシー」を参照してください。

信頼ポリシー は、どのプリンシパルがそのロールを果たすことができるかを定義するロールにアタッチされるリソースベースのポリシーです。IAM でロールを作成する場合、ロールには 2 つのものが必要です。最初はロールを担うことができる人物を示す信頼ポリシーです。2 つ目は、そのロールで何ができるかを示すアクセス権限ポリシーです。ロールの信頼ポリシーにアカウントを追加しても、信頼関係は半分しか確立されていない点に注意してください。デフォルトでは、アカウントの管理者がロールを引き受ける権限をユーザーに付与しない限り、信頼されたアカウントのユーザーはロールを引き受けることができません。詳細については、「ロールを切り替えるユーザーアクセス権限の付与」を参照してください。

重要

AWS のドキュメント全体で、上記の特定のカテゴリに言及せずに IAM ポリシーを参照する場合は、アイデンティティベースのカスタマー管理ポリシーを意味します。

JSON ポリシーの概要

ポリシーはアイデンティティベースのポリシーとしてプリンシパルにアタッチされるか、リソースベースのポリシーとしてリソースにアタッチされた JSON ドキュメントとして AWS に保存されます。JSON 構文を理解する必要はありません。ビジュアルエディタを使用して、JSON を使用することなくカスタマー管理ポリシーを作成および編集することができます。ただし、グループに対してインラインポリシーを使用する場合は、JSON エディタでこれらのポリシーを作成および編集する必要があります。ビジュアルエディターの詳細については、「IAM ポリシーの作成」および「IAM ポリシーの編集」を参照してください。

JSON ポリシーの概要

ユーザー、グループ、ロール、リソースにアクセス許可を割り当てるには、JSON ポリシーを作成します。このポリシーは、アクセス許可を定義したドキュメントです。ポリシードキュメントには以下の要素が含まれます。

  • Effect – ポリシーがアクセスを許可または拒否するかどうか

  • Action – ポリシーによって許可または拒否されるアクションのリスト

  • Resource – アクションを起こすことができるリソースのリスト

  • Condition (オプション) – ポリシーがアクセス許可を付与する状況

これらのポリシーの要素の詳細または他の要素については「IAM JSON ポリシーエレメントのリファレンス」を参照してください。

ポリシーとは、JSON を使用して保存されるドキュメントです。ポリシーは 1 つ以上のステートメントで構成され、各ステートメントが 1 セットのアクセス許可を記述します。以下に簡単なポリシーの例を挙げます。

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::example_bucket" } }

特定の IAM アイデンティティ (グループ、ユーザー、またはロール) に、このポリシーをアタッチできます。それが ID にとって唯一のポリシーである場合、ID は、その 1 つのアクション (ListBucket) のみを 1 つの Amazon S3 バケット (example_bucket) に対して実行できます。

リソースのアクセス権限を指定するには、Amazon SNS トピック、Amazon S3 バケット、または Amazon Glacier ボールトといったリソースにリソースベースのポリシーをアタッチします。その場合、ポリシーには誰がリソースにアクセスできるかについての情報(プリンシパルと呼ばれる)を含める必要があります。(アイデンティティベースのポリシーの場合、プリンシパルは、ポリシーが関連付けられている IAM ユーザー、またはグループからポリシーを取得するユーザーとなります)。詳細については、「アイデンティティベースおよびリソースベースのポリシー」を参照してください。

次の例は、Amazon S3 バケットに接続される可能性のあるリソースベースのポリシーを示しています。ポリシーは特定の AWS アカウントに対して、mybucket で Amazon S3 アクションを実行するアクセス権限を与えます。このアクションには、バケットおよびバケット内のオブジェクトの使用が含まれます。(このポリシーではアカウントに対してのみ信頼が付与されているため、指定された Amazon S3 アクションを実行するには、アクションへのアクセス許可をアカウント内の個々のユーザーに付与する必要があります。)

{ "Version": "2012-10-17", "Id": "S3-Account-Permissions", "Statement": [{ "Sid": "1", "Effect": "Allow", "Principal": {"AWS": ["arn:aws:iam::ACCOUNT-ID-WITHOUT-HYPHENS:root"]}, "Action": "s3:*", "Resource": [ "arn:aws:s3:::mybucket", "arn:aws:s3:::mybucket/*" ] }] }

IAM ポリシーによるアクセスコントロールは、インターフェイスとは関係ありません。たとえば、ユーザーが AWS マネジメントコンソール にアクセスできるように、ユーザーにパスワードを発行することができ、また AWS マネジメントコンソール 内におけるユーザーのアクションをユーザー (またはユーザーの属するグループ) ポリシーでコントロールすることができます。または、AWS への API 呼び出しを実行するための AWS アクセスキーをユーザーに提供し、ライブラリまたはそれらのアクセスキーを認証に使用するクライアントを通してユーザーが呼び出すことができるアクションをポリシーで制御することもできます。

一般的なシナリオをカバーする基本的なポリシーの例については、「ポリシーの例」を参照してください。

AWS 管理ポリシーと Policy Generator は AWS マネジメントコンソール の IAM コンソールから入手できます。コンソールにあるポリシー作成ツールの詳細については、「IAM ポリシーを管理する」を参照してください。加えて AWS Policy Generator オンラインを使用すると、コンソールへアクセスしないで AWS 製品向けにポリシーを作成することができます。

複数のステートメントと複数のポリシー

特定のエンティティに複数のポリシーを関連付けることが可能です。1 つのエンティティに複数のアクセス許可を付与する場合、権限ごとに別々のポリシーを用意するか、あるいは 1 つのポリシーにすべての権限を含めることも可能です。

一般的に、ポリシー内の各ステートメントは、1 つの権限についての情報を含んでいます。ポリシーに複数のステートメントが含まれる場合、評価時においてステートメント全体に論理 OR が適用されます。同様に、1 つのリクエストに対して複数のポリシーを適用する場合、評価時においてポリシー全体に論理 OR が適用されます。

ユーザーに複数のポリシーが適用される場合もよくあります(必ずしもポリシーを関連付ける必要はありません)。たとえば、IAM ユーザーである Bob に複数のポリシーが関連付けられており、別のポリシーが彼の所属するグループに関連付けられているとします。その彼がバケットポリシー(リソースベースのポリシー)を持つ Amazon S3 バケットにアクセスする場合、関連するすべてのポリシーが評価され、結果は常に、アクセスが許可されるか拒否されるかのいずれかとなります。評価のロジックの詳細については、「IAM JSON ポリシーの評価論理」を参照してください。

ポリシーの構造

各ポリシーは JSON ドキュメントです。以下の図が示しているように、ポリシーには以下の事項を含みます。

  • 広範な情報を含む任意のポリシー(ドキュメントの最上部に記載)

  • 1 つまたはそれ以上の個別のステートメント

各ステートメントには、1 回限りのアクセス許可についての核になる情報が含まれています。ポリシーが複数のステートメントを含んでいる場合、AWS は評価時にステートメント全体で論理 OR を適用します。複数のポリシーがリクエストに適合する場合、AWS は評価時にポリシー全体で論理 OR を適用します。

一般的なポリシーの構造

ステートメントの情報は、一連のエレメントの中に含まれています。これらのエレメントの詳細については、「IAM JSON ポリシーエレメントのリファレンス」を参照してください。

例 複数のステートメントが含まれるポリシー

ポリシーには複数のステートメントが含まれることがよくあります。この場合、各ステートメントによってさまざまなリソースセットへのアクセス許可が付与されたり、特定の条件下でアクセス許可が付与されたりします。たとえば、次のポリシーには 3 つのステートメントがあり、各ステートメントによって別個のアクセス許可セットが付与されます。ポリシーがアタッチされたユーザーまたはグループが、AWS アカウント 123456789012 に属するものとします。(ポリシーは、他のアカウントのリソースを参照できません)。ステートメントによって、以下が実行されます。

  • 1 つ目のステートメントでは Sid(ステートメント ID)エレメントが FirstStatement に設定されており、ユーザーは自分のパスワードを管理できます。このステートメントの Resource エレメントは「すべてのリソース」を意味する * ですが、実際には、ChangePassword API(または同等の change-password CLI コマンド)はリクエストを行うユーザーのパスワードにのみ影響を与えます。

  • 2 つ目のステートメント("Sid": "SecondStatement")では、ユーザーは AWS アカウントのすべての Amazon S3 バケットを一覧表示できます。このステートメントの Resource エレメントは「すべてのリソース」を意味する "*" ですが、ポリシーでは他のアカウントのリソースへのアクセスが許可されていないため、ユーザーは自分の AWS アカウントのバケットのみ一覧表示できます。(このアクセス許可は、ユーザーが AWS マネジメントコンソールからバケットにアクセスする際に必要です)。

  • 3 つ目のステートメント ("Sid": "ThirdStatement") では、ユーザーは confidential-data というバケット内にあるオブジェクトをリストしたり取得することができます。ただし、これはユーザーが多要素認証 (MFA) デバイスで短期的な認証情報を使用して検証した場合に限ります。ポリシーの Condition エレメントによって、ユーザーが MFA 認証されているかどうかが確認されます。認証されている場合、ユーザーはバケット内のオブジェクトを一覧表示して取得できます。

    ポリシーステートメントに Condition エレメントが含まれている場合、このステートメントは Condition エレメントが true に評価されるときのみ有効になります。この場合、ユーザーが MFA 認証されているときのみ Condition エレメントが true に評価されます。ユーザーが MFA 認証されていない場合、この Condition は false に評価されます。この場合、このポリシーの 3 つ目のステートメントが無効になり、ユーザーは confidential-data バケットにアクセスできません。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "FirstStatement", "Effect": "Allow", "Action": ["iam:ChangePassword"], "Resource": "*" }, { "Sid": "SecondStatement", "Effect": "Allow", "Action": "s3:ListAllMyBuckets", "Resource": "*" }, { "Sid": "ThirdStatement", "Effect": "Allow", "Action": [ "s3:List*", "s3:Get*" ], "Resource": [ "arn:aws:s3:::confidential-data", "arn:aws:s3:::confidential-data/*" ], "Condition": {"Bool": {"aws:MultiFactorAuthPresent": "true"}} } ] }