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

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

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

Amazon EC2 API アクションでリソースレベルのアクセス許可がサポートされない場合、アクションを使用するアクセス許可をユーザーに付与できますが、ポリシーステートメントのリソース要素として * を指定する必要があります。

Amazon EC2 アクションによって作成または変更されるリソースの詳細と、IAM ポリシーステートメントで使用できる ARN および Amazon EC2 条件キーの詳細については、IAM ユーザーガイド の「Amazon EC2 のアクション、リソース、および条件キー」を参照してください。

詳細とポリシー例については、Amazon EC2 ユーザーガイドの「Amazon EC2 の IAM ポリシー」を参照してください。

Tagging に関するリソースレベルのアクセス権限

一部のリソース作成 Amazon EC2 API アクションでは、リソースの作成時にタグを指定できます。詳細については、「リソースにタグを付ける」を参照してください。

ユーザーが作成時にリソースをタグ付けできるようにするには、リソースを作成するアクションを使用するアクセス権限が必要です (たとえば、ec2:RunInstancesec2:CreateVolume など)。タグがリソース作成アクションで指定されている場合、Amazon は ec2:CreateTags アクションで追加の承認を実行してユーザーがタグを作成するアクセス権限を持っているかどうかを確認します。そのため、ユーザーには、ec2:CreateTags アクションを使用する明示的なアクセス権限が必要です。

ec2:CreateTags アクションの場合、ec2:CreateAction 条件キーを使用してタグ付け権限をリソース作成アクションのみに制限できます。たとえば、次のポリシーではユーザーがインスタンスを起動し、起動時にインスタンスおよびボリュームにタグを適用できます。ユーザーには、既存のリソースへのタグ付けが許可されません (ec2:CreateTags アクションを直接呼び出すことはできません)。

{ "Statement": [ { "Effect": "Allow", "Action": [ "ec2:RunInstances" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:region:account:*/*", "Condition": { "StringEquals": { "ec2:CreateAction" : "RunInstances" } } } ] }

同様に、次のポリシーでは、ユーザーがボリュームを作成し、ボリューム作成時にボリュームにタグを適用することができます。ユーザーには、既存のリソースへのタグ付けが許可されません (ec2:CreateTags アクションを直接呼び出すことはできません)。

{ "Statement": [ { "Effect": "Allow", "Action": [ "ec2:CreateVolume" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:region:account:*/*", "Condition": { "StringEquals": { "ec2:CreateAction" : "CreateVolume" } } } ] }

ec2:CreateTags アクションは、タグがリソース作成アクション時に適用された場合のみ評価されます。したがって、リクエストでタグが指定されていない場合、リソースを作成するアクセス権限を持っているユーザー (タグ付け条件がないと仮定) には、ec2:CreateTags アクションを実行するアクセス権限が必要ありません。ただし、ユーザーがタグを使用してリソースを作成しようとした場合、ユーザーが ec2:CreateTags アクションを使用するアクセス権限を持っていない場合はリクエストに失敗します。

タグが起動テンプレートに提供され、起動テンプレートが ec2:CreateTags アクションで指定されている場合、ec2:RunInstances アクションも評価されます。ポリシーの例については、「起動テンプレートのタグ」を参照してください。

リソースに適用されたタグキーと値は、次の条件キーを使用して制御できます。

  • aws:RequestTag: 特定のタグキーまたはタグキーと値がリクエストに存在している必要があることを指定する場合に使用します。リクエストでは他のタグも指定できます。

    • StringEquals 条件演算子とともに使用して、特定のタグキーと値の組み合わせを適用します。たとえば、タグ cost-center=cc123: を適用します。

      "StringEquals": { "aws:RequestTag/cost-center": "cc123" }
    • StringLike 条件演算子とともに使用して、リクエストで特定のタグキーを適用します。たとえば、タグキー purpose を適用します。

      "StringLike": { "aws:RequestTag/purpose": "*" }
  • aws:TagKeys: リクエストで使用されるタグキーを適用する場合に使用します。

    • リクエストにタグが指定されている場合は、ForAllValues 修飾子を使用して特定のタグキーのみを適用します (リクエストにタグが指定されている場合、特定のタグキーのみが許可されます。他のタグは許可されません)。たとえば、タグキー environment または cost-center が適用されます:

      "ForAllValues:StringEquals": { "aws:TagKeys": ["environment","cost-center"] }
    • ForAnyValue 修飾子とともに使用して、指定されたタグキーの少なくとも 1 つがリクエストに存在することを要求します。たとえば、タグキー environment または webserver のうち少なくとも 1 つがリクエストに存在している必要があります。

      "ForAnyValue:StringEquals": { "aws:TagKeys": ["environment","webserver"] }

これらの条件キータグ付けをサポートするリソース作成アクションと、ec2:CreateTags および ec2:DeleteTags アクションに適用できます。

リソースの作成時にタグを指定するようにユーザーに強制するには、リソース作成アクションで aws:RequestTag 修飾子とともに aws:TagKeys 条件キーまたは ForAnyValue 条件キーを使用する必要があります。ユーザーがリソース作成アクションのタグを指定しない場合、ec2:CreateTags アクションは評価されません。

条件においては、条件キーでは大文字と小文字が区別されず、条件値では大文字と小文字が区別されます。したがって、タグキーの大文字と小文字を区別するには、条件の値としてタグキーが指定される aws:TagKeys 条件キーを使用します。

複数値の条件の詳細については、『IAM ユーザーガイド』の「複数のキー値をテストする条件を作成する」を参照してください。IAM ポリシーの例は、「AWS CLI または AWS SDK で使用するサンプルポリシー」を参照してください。