アマゾン EC2 リソース作成時にタグ付けするアクセス許可の付与
一部のリソース作成 アマゾン EC2 API アクションではリソースの作成時にタグを指定できます。リソースタグを使用して、属性ベースの制御 (ABAC) を実装できます。詳細についてはリソースのタグ付けおよび属性ベースのアクセスを使用するアクセスの制御を参照してください。
ユーザーがリソースの作成時にタグを付けるにはリソースを作成するアクション (ec2:RunInstances
や ec2:CreateVolume
など) を使用するためのアクセス許可が必要です。タグがリソース作成アクションで指定されている場合、アマゾン は ec2:CreateTags
アクションで追加の認可を実行してユーザーがタグを作成するアクセス許可を持っているかどうかを確認します。そのため、ユーザーにはec2:CreateTags
アクションを使用する明示的なアクセス権限が必要です。
ec2:CreateTags
アクションの IAM ポリシー定義で、Condition
要素と 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
アクションはタグが起動テンプレートに指定されている場合にも評価されます。ポリシーの例については起動テンプレートのタグを参照してください。
特定のタグへのアクセスの制御
IAM ポリシーの Condition
要素で追加の条件を使用して、リソースに適用できるタグキーとタグ値を制御できます。
次の条件キーは前のセクションの例で使用できます。
-
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
アクションに適用できます。アマゾン EC2 API アクションがタグ付けをサポートしているかどうかについてはアマゾン EC2 のアクション、リソース、および条件キーを参照してください
リソースの作成時にタグを指定するようにユーザーに強制するにはリソース作成アクションで aws:RequestTag
修飾子とともに aws:TagKeys
条件キーまたは ForAnyValue
条件キーを使用する必要があります。ユーザーがリソース作成アクションのタグを指定しない場合、ec2:CreateTags
アクションは評価されません。
条件においては条件キーでは大文字と小文字が区別されず、条件値では大文字と小文字が区別されます。したがって、タグキーの大文字と小文字を区別するには条件の値としてタグキーが指定される aws:TagKeys
条件キーを使用します。
IAM ポリシーの例はアマゾン EC2 API へのアクセスを制御するポリシーの例を参照してください。詳細については「IAM ユーザーガイド」の「複数のキーまたは値を含む IAM 条件」参照してください。