Amazon EC2 のアイデンティティベースのポリシー - Amazon Elastic Compute Cloud

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

デフォルトでは、ユーザーには Amazon EC2 リソースを作成または変更、または Amazon EC2 API、Amazon EC2 コンソールあるいは CLI を使用するタスクを実行する許可がありません。ユーザーがリソースを作成または変更、およびタスクを実行できるようにするには、IAM ポリシーを作成する必要があります。これによって、必要な特定のリソースおよび API アクションを使用するための許可をユーザーに付与し、その後、ポリシーをその許可が必要なユーザー、グループまたは IAM ロールにアタッチします。

ポリシーをユーザー、ユーザーのグループ、またはロールにアタッチする場合、ポリシーによって特定リソースの特定タスクを実行するユーザーの許可が許可または拒否されます。IAM ポリシーの一般的な情報については、「IAM ユーザーガイド」の「IAM の許可とポリシー」を参照してください。カスタム IAM ポリシーの管理と作成の詳細については、「IAM ポリシーの管理」を参照してください。

IAM ポリシーは、1 つ以上の Amazon EC2 アクションを使用するアクセス許可を付与または拒否する必要があります。さらに、このアクションで使用できるリソース (すべてのリソースか、場合によっては特定のリソース) も指定する必要があります。このポリシーには、リソースに適用する条件も含めることができます。

最初に、Amazon EC2 の AWS マネージドポリシーがニーズを満たしているかどうかを確認できます。満たしていない場合は、独自のカスタムポリシーを作成できます。詳細については、「Amazon EC2 の AWS マネージドポリシー」を参照してください。

ポリシー構文

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

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

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

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

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

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

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

ポリシー要件の詳細については、「IAM ユーザーガイド」の「IAM JSON ポリシーリファレンス」を参照してください。Amazon EC2 の IAM ポリシーステートメントの例については、「Amazon EC2 API へのアクセスを制御するポリシーの例」を参照してください。

Amazon EC2 のアクション

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

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

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

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

"Action": "ec2:Describe*"
注記

現在、すべての Amazon EC2 Describe* API アクションがリソースレベルのアクセス許可をサポートしているわけではありません。Amazon EC2のリソースレベルの許可の詳細については、Amazon EC2 のアイデンティティベースのポリシーを参照してください。

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

"Action": "ec2:*"

Amazon EC2 アクションのリストを確認するには、サービス認証リファレンスAmazon EC2 で定義されるアクションを参照してください。

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

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

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

リソースレベルのアクセス許可をサポートする Amazon EC2 API アクション、およびポリシーで使用できる ARN と条件キーがわかる表を見るには、Amazon EC2 のアクション、リソース、および条件キーを参照してください。

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

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

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

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

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

サービス (例: ec2)。

region

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

account-id

ハイフンなしの 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 ボリュームをインスタンスにアタッチするため、ユーザーはボリュームおよびインスタンスを使用する許可が必要です。1 つのステートメントで複数のリソースを指定するには、次のように ARN をカンマで区切ります。

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

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

Amazon EC2 の条件キー

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

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

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

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 ポリシーエレメント: 変数およびタグを参照してください。

重要

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

ec2:Attribute 条件キー

ec2:Attribute 条件キーは、リソースの属性によってアクセスをフィルタリングする条件に使用できます。

この条件キーは、プリミティブデータ型のプロパティ (文字列や整数など)、または [値] のプロパティのみを含む複雑な AttributeValue オブジェクト (ModifyImageAttribute API アクションの Description または ImdsSupport オブジェクトなど) に使用できます。条件キーは、ModifyImageAttributeLaunchPermission オブジェクトなど、複数のプロパティを含む複雑なオブジェクトには使用できません。

例えば、次のポリシーでは、ModifyImageAttributeAPI アクションの複雑な Description オブジェクトによるアクセスをフィルタリングするために ec2:Attribute/Description 条件キーを使用します。条件キーは、イメージの説明を Production または Development のいずれかに変更するリクエストのみを許可します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:ModifyImageAttribute", "Resource": "arn:aws:ec2:us-east-1::image/ami-*", "Condition": { "StringEquals": { "ec2:Attribute/Description": [ "Production", "Development" ] } } } ] }

次のポリシー例では、ModifyImageAttribute API アクションのプリミティブな Attribute プロパティによるアクセスをフィルタリングするために ec2:Attribute 条件キーを使用します。この条件キーは、イメージの説明を変更しようとするすべてのリクエストを拒否します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "ec2:ModifyImageAttribute", "Resource": "arn:aws:ec2:us-east-1::image/ami-*", "Condition": { "StringEquals": { "ec2:Attribute": "Description" } } } ] }

ec2:ResourceID 条件キー

指定された API アクションで次の ec2:ResourceID 条件キーを使用する場合、条件キーの値は、API アクションによって作成される結果のリソースを指定するために使用されます。ec2:ResourceID 条件キーを使用して、API リクエストで指定されたソース リソースを指定することはできません。指定された API で次の ec2:ResourceID 条件キーのいずれかを使用する場合は、常にワイルドカード (*) を指定する必要があります。別の値を指定した場合、条件はランタイム中に常に * に解決されます。例えば、CopyImage API で ec2:ImageId 条件キーを使用するには、次のように条件キーを指定する必要があります。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:CopyImage", "Resource": "arn:aws:ec2:us-east-1::image/ami-*", "Condition": { "StringEquals": { ec2:ImageID": "*" } } } ] }

これらの API アクションではこれらの条件キーを使用しないことをお勧めします。

  • ec2:DhcpOptionsIDCreateDhcpOptions

  • ec2:ImageIDCopyImageCreateImageImportImageRegisterImage

  • ec2:InstanceIDRunInstances および ImportInstance

  • ec2:InternetGatewayIDCreateInternetGateway

  • ec2:NetworkAclIDCreateNetworkAcl

  • ec2:NetworkInterfaceIDCreateNetworkInterface

  • ec2:PlacementGroupNameCreatePlacementGroup

  • ec2:RouteTableIDCreateRouteTable

  • ec2:SecurityGroupIDCreateSecurityGroup

  • ec2:SnapshotIDCopySnapshotCreateSnapshotCreateSnapshotsImportSnapshots

  • ec2:SubnetIDCreateSubnet

  • ec2:VolumeIDCreateVolume および ImportVolume

  • ec2:VpcIDCreateVpc

  • ec2:VpcPeeringConnectionIDCreateVpcPeeringConnection

特定のリソース ID に基づいてアクセスをフィルタリングするには、次のように Resource ポリシー要素を使用することをお勧めします。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:CopyImage", "Resource": "arn:aws:ec2:us-east-1::image/ami-01234567890abcdef" } ] }

ec2:SourceInstanceARN 条件キー

ec2:SourceInstanceARN を使用して、リクエスト元のインスタンスの ARN を指定します。これは AWS グローバル条件キーであり、Amazon EC2 以外のサービスで使用できるということです。ポリシーの例については、「例: 特定のインスタンスが他の AWS サービスでリソースを表示できるようにする」を参照してください。

属性ベースのアクセスを使用するアクセスの制御

EC2 リソースを使用するための許可をユーザーに付与する IAM ポリシーを作成する場合、ポリシーの Condition 要素にタグ情報を含めることで、タグに基づいてアクセスをコントロールできます。これは、属性ベースのアクセス制御 (ABAC) と呼ばれます。ABAC を使用すると、ユーザーが変更、使用、または削除できるリソースをより適切に制御できます。詳細については、AWS の ABAC とはを参照してください。

例えば、インスタンスを終了することをユーザーに許可するが、インスタンスに environment=production タグが付いている場合はアクションを拒否するポリシーを作成できます。これを行うには、aws:ResourceTag 条件キーを使用し、リソースにアタッチされているタグに基づいてリソースへのアクセスを許可または拒否します。

"StringEquals": { "aws:ResourceTag/environment": "production" }

Amazon EC2 API アクションが aws:ResourceTag 条件キーを使用したアクセスの制御をサポートしているかどうかについては、Amazon EC2 のアクション、リソース、および条件キーを参照してください。Describe アクションはリソースレベルのアクセス権限をサポートしないため、条件のない別のステートメントでそれらのアクセス権限を指定する必要があることに注意してください。

IAM ポリシーの例は、Amazon EC2 API へのアクセスを制御するポリシーの例を参照してください。

タグに基づいてリソースへのユーザーのアクセスを許可または拒否する場合は、ユーザーが同じリソースに対してそれらのタグを追加または削除することを明示的に拒否することを検討する必要があります。そうしないと、ユーザーはそのリソースのタグを変更することで、制限を回避してリソースにアクセスできてしまいます。

ユーザー、グループ、およびロールに許可を付与する

アクセス権限を付与するには、ユーザー、グループ、またはロールにアクセス許可を追加します。

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

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

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

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

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

重要

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

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