メニュー
Amazon Elastic Compute Cloud
Linux インスタンス用ユーザーガイド

ポリシーの構造

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

ポリシー構文

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

Copy
{ "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) を使用する必要があります。ARN 値の指定については、「Amazon EC2 用の Amazon リソースネーム」を参照してください。どの API がどの ARN をサポートするかについては、Amazon EC2 API アクションでサポートされるリソースレベルのアクセス許可 を参照してください。API アクションが ARN をサポートしていない場合は、* ワイルドカードを使用すると、アクションがすべてのリソースに影響するように指定できます。

  • [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

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

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

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

Copy
"Action": "ec2:Describe*"

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

Copy
"Action": "ec2:*"

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

Amazon EC2 用の Amazon リソースネーム

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

重要

現時点では、すべての API アクションが個々の ARN をサポートしているわけではありません。今後、Amazon EC2 リソースに対する API アクションおよび ARN のサポートを追加していきます。どの Amazon EC2 API アクションでどの ARN を使用できるかについて、また各 ARN でサポートされる条件キーについては、Amazon EC2 API アクションでサポートされるリソースレベルのアクセス許可 を参照してください。

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

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

service

サービス (例: ec2)。

リージョン

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

アカウント

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

resourceType

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

resourcePath

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

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

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

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

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

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

Copy
"Resource": "*"

以下の表では、Amazon EC2 API アクションによって使用される各リソースの種類の ARN を説明しています。

リソースタイプ ARN

すべての Amazon EC2 リソース

arn:aws:ec2:*

特定リージョンの特定アカウントが所有するすべての Amazon EC2 リソース

arn:aws:ec2:region:account:*

カスタマーゲートウェイ

arn:aws:ec2:region:account:customer-gateway/cgw-id

cgw-id には cgw-xxxxxxxx が入ります

DHCP オプションセット

arn:aws:ec2:region:account:dhcp-options/dhcp-options-id

dhcp-options-id には dopt-xxxxxxxx が入ります

イメージ

arn:aws:ec2:region::image/image-id

image-id には AMI、AKI または ARI の ID が入り、account は使用されません

インスタンス

arn:aws:ec2:region:account:instance/instance-id

instance-id には i-xxxxxxxx または i-xxxxxxxxxxxxxxxxx が入ります。

インスタンスプロファイル

arn:aws:iam::account:instance-profile/instance-profile-name

instance-profile-name にはインスタンスプロファイルの名前が入り、region は使用されません

インターネットゲートウェイ

arn:aws:ec2:region:account:internet-gateway/igw-id

igw-id には igw-xxxxxxxx が入ります

キーペア

arn:aws:ec2:region:account:key-pair/key-pair-name

key-pair-name にはキーペア名が入ります (例: gsg-keypair)

ネットワーク ACL

arn:aws:ec2:region:account:network-acl/nacl-id

nacl-id には acl-xxxxxxxx が入ります

ネットワークインターフェイス

arn:aws:ec2:region:account:network-interface/eni-id

eni-id には eni-xxxxxxxx が入ります

配置グループ

arn:aws:ec2:region:account:placement-group/placement-group-name

placement-group-name にはプレイスメントグループ名が入ります (例: my-cluster)

ルートテーブル

arn:aws:ec2:region:account:route-table/route-table-id

route-table-id には rtb-xxxxxxxx が入ります

セキュリティグループ

arn:aws:ec2:region:account:security-group/security-group-id

security-group-id には sg-xxxxxxxx が入ります

スナップショット

arn:aws:ec2:region::snapshot/snapshot-id

snapshot-id には snap-xxxxxxxx または snap-xxxxxxxxxxxxxxxxx が入り、account は使用されません

サブネット

arn:aws:ec2:region:account:subnet/subnet-id

subnet-id には subnet-xxxxxxxx が入ります

ボリューム

arn:aws:ec2:region:account:volume/volume-id

volume-id には vol-xxxxxxxx または vol-xxxxxxxxxxxxxxxxx が入ります。

VPC

arn:aws:ec2:region:account:vpc/vpc-id

vpc-id には vpc-xxxxxxxx が入ります

VPC ピア接続

arn:aws:ec2:region:account:vpc-peering-connection/vpc-peering-connection-id

このとき、vpc-peering connection-id は pcx-xxxxxxxx です。

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

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

ARN の一般的な情報については、アマゾン ウェブ サービス全般のリファレンスAmazon Resource Names (ARN) and AWS Service Namespaces を参照してください。Amazon EC2 アクションによって作成または変更されるリソースの詳細について、および IAM ポリシーステートメントで使用できる ARN の詳細については、Amazon EC2 API ReferenceIAM ユーザーへの、Amazon EC2 リソースに対するアクセス許可の付与を参照してください。

Amazon EC2 の条件キー

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

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

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

Amazon EC2 には AWS 範囲の条件キー (Available Keys を参照) に加え、以下のサービス固有の条件キーが実装されています。 (Amazon EC2 用のサービス固有の条件キーのサポートは今後さらに追加される予定です)

重要

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

条件キー キーと値のペア 評価の種類

ec2:AccepterVpc

"ec2:AccepterVpc":"vpc-arn"

このとき、vpc-arn はピア VPC の VPC ARN です。

ARN、Null

ec2:AvailabilityZone

"ec2:AvailabilityZone":"az-api-name"

az-api-name にはアベイラビリティーゾーン名が入ります (例: us-west-2a)。

アベイラビリティーゾーンを一覧表示するには、describe-availability-zones を使用します。

文字列、Null

ec2:EbsOptimized

"ec2:EbsOptimized":"optimized-flag"

optimized-flag には true | false が入ります

ブール値、Null

ec2:ImageType

"ec2:ImageType":"image-type-api-name"

image-type-api-name には ami | aki | ari が入ります

文字列、Null

ec2:InstanceProfile

"ec2:InstanceProfile":"instance-profile-arn"

instance-profile-arn にはインスタンスプロファイル ARN が入ります

ARN、Null

ec2:InstanceType

"ec2:InstanceType":"instance-type-api-name"

instance-type-api-name にはインスタンスタイプの名前が入ります。

文字列、Null

ec2:Owner

"ec2:Owner":"account-id"

account-id には amazon | aws-marketplace | aws-account-id が入ります

文字列、Null

ec2:ParentSnapshot

"ec2:ParentSnapshot":"snapshot-arn"

snapshot-arn にはスナップショット ARN が入ります

ARN、Null

ec2:ParentVolume

"ec2:ParentVolume":"volume-arn"

volume-arn にはボリューム ARN が入ります

ARN、Null

ec2:PlacementGroup

"ec2:PlacementGroup":"placement-group-arn"

placement-group-arn にはプレイスメントグループ ARN が入ります

ARN、Null

ec2:PlacementGroupStrategy

"ec2:PlacementGroupStrategy":"placement-group-strategy"

placement-group-strategy には cluster が入ります

文字列、Null

ec2:ProductCode

"ec2:ProductCode":"product-code"

product-code には製品コードが入ります

文字列、Null

ec2:Public

"ec2:Public":"public-flag"

AMI の public-flagtrue | false です

ブール値、Null

ec2:Region

"ec2:Region":"region-name"

region-name にはリージョン名が入ります (例: us-west-2) リージョンを一覧表示するには、describe-regions を使用します。

文字列、Null

ec2:RequesterVpc

"ec2:RequesterVpc":"vpc-arn"

このとき、vpc-arn はリクエスタの VPC の VPC ARN です。

ARN、Null

ec2:ResourceTag/tag-key

"ec2:ResourceTag/tag-key":"tag-value"

tag-keytag-value にはタグとキーのペアが入ります

文字列、Null

ec2:RootDeviceType

"ec2:RootDeviceType":"root-device-type-name"

root-device-type-name には ebs | instance-store が入ります

文字列、Null

ec2:Subnet

"ec2:Subnet":"subnet-arn"

subnet-arn にはサブネット ARN が入ります

ARN、Null

ec2:Tenancy

"ec2:Tenancy":"tenancy-attribute"

tenancy-attribute には default | dedicated が入ります | host

文字列、Null

ec2:VolumeIops

"ec2:VolumeIops":"volume-iops"

volume-iops には 1 秒あたりの入力/出力オペレーション (IOPS) が入ります。範囲は 100 から 20,000 です

数値、Null

ec2:VolumeSize

"ec2:VolumeSize":"volume-size"

volume-size にはボリュームのサイズが入ります (GiB 単位)

数値、Null

ec2:VolumeType

"ec2:VolumeType":"volume-type-name"

volume-type-name は、汎用 SSD ボリュームの場合は gp2、プロビジョンド IOPS SSD ボリュームの場合は io1、スループット最適化 HDD ボリュームの場合は st1、Cold HDD ボリュームの場合は sc1、マグネティック ボリュームの場合は standard です。

文字列、Null

ec2:Vpc

"ec2:Vpc":"vpc-arn"

vpc-arn には VPC ARN が入ります

ARN、Null

アクションごとに、どの Amazon EC2 リソースでどの条件キーが使用できるかについては、Amazon EC2 API アクションでサポートされるリソースレベルのアクセス許可 を参照してください。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 Command Line Interface Reference」の「decode-authorization-message」を参照してください。