ポリシーの構造 - Amazon Elastic Compute Cloud

ポリシーの構造

次のトピックでは、IAM ポリシーの簡単な構造について説明します。

ポリシー構文

IAM ポリシーは 1 つ以上のステートメントで構成される JSON ドキュメントです。各ステートメントは次のように構成されます。

{ "Statement":[{ "Effect":"effect", "Action":"action", "Resource":"arn", "Condition":{ "condition":{ "key":"value" } } } ] }

ステートメントはさまざまなエレメントで構成されます。

  • [Effect]: effect は、Allow または Deny にすることができます。デフォルトでは、IAM ユーザーはリソースおよび API アクションを使用するアクセス許可がないため、リクエストはすべて拒否されます。明示的な許可はデフォルトに優先します。明示的な拒否はすべての許可に優先します。

  • [Action]: action は、アクセス許可を付与または拒否する対象とする、特定の API アクションです。action の指定については、Amazon EC2 のアクション を参照してください。

  • [Resource]: アクションによって影響を及ぼされるリソースです。Amazon EC2 API アクションの中には、アクションによって作成/変更できるリソースをポリシー内で特定できるものもあります。Amazon リソースネーム (ARN) を使用して、またはステートメントがすべてのリソースに適用されることを示すワイルドカード (*) を使用して、リソースを指定します。詳細については、「Amazon EC2 API アクションでサポートされるリソースレベルのアクセス許可」を参照してください。

  • [Condition]: condition はオプションです。ポリシーの発効条件を指定するために使用します。Amazon EC2 の条件を指定する方法については、Amazon EC2 の条件キー を参照してください。

Amazon EC2 の IAM ポリシーステートメント例についての詳細は、「AWS CLI または AWS SDK で使用するサンプルポリシー」を参照してください。

Amazon EC2 のアクション

IAM ポリシーステートメントで、IAM をサポートするすべてのサービスから任意の API アクションを指定できます。Amazon EC2 の場合、API アクション ec2: の名前に次のプレフィックスを使用します。例: ec2:RunInstances および ec2:CreateImage

単一のステートメントに複数のアクションを指定するには、次のようにコンマで区切ります。

"Action": ["ec2:action1", "ec2:action2"]

ワイルドカードを使用して複数のアクションを指定することもできます。たとえば、以下のように「Describe」という単語で始まる名前のすべてのアクションを指定できます。

"Action": "ec2:Describe*"

Amazon EC2 API アクションをすべて指定するには、* ワイルドカードを以下のように使用します。

"Action": "ec2:*"

Amazon EC2 アクションのリストについては、『Amazon EC2 API Reference』の「アクション」を参照してください。

Amazon EC2 API アクションでサポートされるリソースレベルのアクセス許可

リソースレベルのアクセス許可とは、ユーザーがアクションを実行可能なリソースを指定できることを意味します。Amazon EC2 では、リソースレベルのアクセス許可が部分的にサポートされます。これは、特定の Amazon EC2 アクションでは、満たす必要がある条件、またはユーザーが使用できる特定のリソースに基づいて、ユーザーがそれらのアクションをいつ使用できるかを制御できることを意味します。たとえば、特定の AMI のみを使用して、特定のタイプのインスタンスだけを起動するアクセス許可をユーザーに付与できます。

IAM ポリシーステートメントでリソースを指定するには、Amazon リソースネーム (ARN) を使用します。ARN 値の指定については、「Amazon EC2 用の Amazon リソースネーム (ARN)」を参照してください。API アクションが個々の ARN をサポートしていない場合は、ワイルドカード (*) を使用して、アクションによってすべてのリソースが影響を受ける可能性があることを指定する必要があります。

リソースレベルのアクセス許可をサポートする Amazon EC2 API アクション、およびポリシーで使用できる ARN と条件キーがわかる表を見るには、IAM ユーザーガイド の「Amazon EC2 のアクション、リソース、および条件キー」を参照してください。Amazon EC2 の条件キーについては、後のセクションで詳しく説明します。

Amazon EC2 API アクションに対して使用する IAM ポリシーで、タグベースのリソースレベルアクセス許可を適用できます。これにより、ユーザーがどのリソースを作成、変更、または使用できるかを制御しやすくなります。詳細については、「リソース作成時にタグ付けするアクセス許可の付与」を参照してください。

Amazon EC2 用の Amazon リソースネーム (ARN)

各 IAM ポリシーステートメントは、ARN を使用して指定したリソースに適用されます。

ARN には以下の一般的な構文があります。

arn:aws:[service]:[region]:[account]:resourceType/resourcePath
service

サービス (例: ec2)。

リージョン

リソースのリージョン (例: us-east-1)。

アカウント

ハイフンなしの AWS アカウント ID (例: 123456789012)。

resourceType

リソースの種類 (例: instance)。

resourcePath

リソースを識別するパス。パスにワイルドカードの * が使用できます。

たとえば、以下のように ARN を使用して、ステートメント内で特定のインスタンス (i-1234567890abcdef0) を指定することができます。

"Resource": "arn:aws:ec2:us-east-1:123456789012:instance/i-1234567890abcdef0"

以下のように * ワイルドカードを使用して、特定のアカウントに属するすべてのインスタンスを指定できます。

"Resource": "arn:aws:ec2:us-east-1:123456789012:instance/*"

また、以下のように * ワイルドカードを使用して、特定のアカウントに属するすべての Amazon EC2 リソースを指定することもできます。

"Resource": "arn:aws:ec2:us-east-1:123456789012:*"

すべてのリソースを指定する場合、または特定の API アクションが ARN をサポートしていない場合は、以下のように、Resource エレメント内で * ワイルドカードを使用します。

"Resource": "*"

Amazon EC2 API アクションの多くが複数のリソースと関連します。たとえば、AttachVolume では Amazon EBS ボリュームをインスタンスにアタッチするため、IAM ユーザーはボリュームおよびインスタンスを使用するアクセス許可が必要です。1 つのステートメントで複数のリソースを指定するには、次のように ARN をカンマで区切ります。

"Resource": ["arn1", "arn2"]

Amazon EC2 リソースの ARN のリストについては、IAM ユーザーガイド の「Amazon EC2 で定義されるリソースタイプ」を参照してください。

Amazon EC2 の条件キー

ポリシーステートメントでは、オプションで有効になるタイミングを制御する条件を指定できます。各条件には 1 つ以上のキーと値のペアが含まれます。条件キーは大文字小文字を区別しません。私たちは AWS 範囲の条件キーに加え、追加のサービス固有の条件キーを定義しました。

Amazon EC2 のサービス固有の条件キーのリストについては、IAM ユーザーガイドの「Amazon EC2 の条件キー」を参照してください。Amazon EC2 は、AWS 全体の条件キーも実装します。詳細については、『IAM ユーザーガイド』の「すべてのリクエストで利用可能な情報」を参照してください。

IAM ポリシーで条件キーを使用するには、Condition ステートメントを使用します。たとえば、次のポリシーは、セキュリティグループのインバウンドルールとアウトバウンドルールを追加および削除するアクセス許可をユーザーに付与します。ec2:Vpc 条件キーを使用して、これらのアクションを実行できる対象は、特定の VPC 内のセキュリティグループに限ることを指定します。

{ "Version": "2012-10-17", "Statement":[{ "Effect":"Allow", "Action": [ "ec2:AuthorizeSecurityGroupIngress", "ec2:AuthorizeSecurityGroupEgress", "ec2:RevokeSecurityGroupIngress", "ec2:RevokeSecurityGroupEgress"], "Resource": "arn:aws:ec2:region:account:security-group/*", "Condition": { "StringEquals": { "ec2:Vpc": "arn:aws:ec2:region:account:vpc/vpc-11223344556677889" } } } ] }

複数の条件、または単一の条件に複数のキーを指定する場合、論理 AND 演算を使用してそれらを評価します。1 つのキーに複数の値を使用して単一の条件を指定する場合、論理 OR 演算を使用して条件を評価します。アクセス許可が付与されるには、すべての条件を満たしている必要があります。

条件を指定する際にプレースホルダーも使用できます。たとえば、IAM ユーザーに、そのユーザーの IAM ユーザー名を指定したタグ付きのリソースを使用するアクセス許可を与えることができます。詳細については、IAM ユーザーガイド の「ポリシー変数」を参照してください。

重要

多くの条件キーはリソースに固有のものであり、一部の API アクションでは複数のリソースを使用します。条件キーを使用してポリシーを作成する場合は、ポリシーステートメントの Resource 要素で、条件キーが適用されるリソースを指定します。指定しない場合、そのポリシーはユーザーに対してすべてのアクションの実行を禁止します。これは、条件キーが適用されないリソースに対して条件チェックが失敗するためです。リソースを指定しない場合や、ポリシーの Action 要素に複数の API アクションを含めている場合は、...IfExists 条件タイプを使用して、条件キーが適用されないリソースに対して無視されるようにする必要があります。詳細については、『IAM ユーザーガイド』の「...IfExists 条件」を参照してください。

すべての Amazon EC2 アクションは、aws:RequestedRegion および ec2:Region 条件キーをサポートします。詳細については、「例: 特定のリージョンへのアクセスの制限」を参照してください。

ec2:SourceInstanceARN キーは、リクエストの生成元インスタンスの ARN を指定する条件に使用できます。この条件キーは、使用可能な AWS 全体を対象しており、サービス固有ではありません。ポリシーの例については、「EC2 インスタンスがボリュームをアタッチまたはデタッチすることを許可する」と「例: 特定のインスタンスが他の AWS サービスでリソースを表示できるようにする」を参照してください。ec2:SourceInstanceARN キーは、ステートメントの Resource 要素に ARN を入力する変数として使用することはできません。

Amazon EC2 のポリシーステートメントの例については、AWS CLI または AWS SDK で使用するサンプルポリシー を参照してください。

ユーザーが必要なアクセス許可を持っているかどうかを確認する

IAM ポリシーを作成したら、ポリシーを本稼働環境に置く前に、そのポリシーがユーザーに特定の API アクションおよび必要なリソースを使用するアクセス許可を付与しているかどうかを確認することをお勧めします。

まずテスト目的の IAM ユーザーを作成し、作成した IAM ポリシーをテストユーザーにアタッチします。次に、テストユーザーとしてリクエストを作成します。

テストしている Amazon EC2 アクションがリソースを作成または変更する場合、DryRun パラメータを使用してリクエストを作成する (または、--dry-run オプションで AWS CLI コマンドを実行する) 必要があります。この場合、発信者は認証チェックを行いますが、操作は完了しません。たとえば、実際に終了させることなく、ユーザーが特定のインスタンスを終了できるかどうかを確認できます。テストユーザーに必要なアクセス許可がある場合、リクエストで DryRunOperation が返されます。必要なアクセス許可がない場合は UnauthorizedOperation が返されます。

ポリシーが想定したアクセス許可をユーザーに付与していない場合、または過度に許可されている場合、必要に応じてポリシーを調整し、必要な結果を得るまで再テストできます。

重要

ポリシーの変更が反映され、有効になるには数分間かかります。したがって、ポリシーの更新をテストするには 5 分かかると見ておいてください。

認証チェックが失敗した場合、リクエストでは診断情報でエンコードされたメッセージが返されます。DecodeAuthorizationMessage アクションを使用してメッセージをデコードできます。詳細については、AWS Security Token Service API リファレンス の「DecodeAuthorizationMessage」、および「AWS CLI Command Reference」の「decode-authorization-message」を参照してください。