AWS Identity and Access Management (IAM) ポリシーで、PrincipalTag、ResourceTag、RequestTag、TagKeys のタグベースの条件キーを使用して AWS リソースへのアクセスを制御したいです。
解決策
以下の IAM ポリシー例では、条件キーを使用して、AWS リソースへのアクセスをタグに基づいて制御しています。
実行できる API アクションを決定するには、使用しているサービスの API ドキュメントを確認するのがベストプラクティスです。
PrincipalTag 条件キー
aws:PrincipalTag/Tag-Key 条件キーを使用して次のタグを比較します。
- リクエストを行うプリンシパルにアタッチされているタグ
- IAM ポリシーで指定するタグ
次の例における Amazon Simple Storage Service (Amazon S3) PutObject アクションは、Product-Manager という肩書きのユーザーを除くすべてのユーザーにバケットアクセスを拒否します。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DenyAllButProductManagers",
"Effect": "Deny",
"Principal": {
"AWS": "*"
},
"Action": [
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::productionbucket/*"
],
"Condition": {
"StringNotEquals": {
"aws:PrincipalTag/job-title": "Product-Manager"
}
}
}
]
}
ResourceTag 条件キー
aws:ResourceTag/tag-key 条件キーを使用して、IAM ポリシーで指定されているタグのキーと値のペアを AWS リソースにアタッチされているキーと値のペアと比較します。詳細については、「AWS リソースへのアクセスの制御」を参照してください。
条件キー aws:ResourceTag/Tag-Key は、グローバルバージョンの aws:ResourceTag や ec2:ResourceTag などの AWS サービスで使用できます。
次の例では、IAM ポリシーにより、ユーザーはテスト環境にある Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを起動、停止、終了できます。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowOnlyForTestEnvironment",
"Effect": "Allow",
"Action": [
"ec2:TerminateInstances",
"ec2:StartInstances",
"ec2:StopInstances"
],
"Resource": "arn:aws:ec2:*:*:instance/*",
"Condition": {
"StringLike": {
"ec2:ResourceTag/Env": "test"
}
}
}
]
}
RequestTag 条件キー
aws: RequestTag/tag-key 条件キーを使用して、ユーザーリクエスト内のキーと値のペアを IAM ポリシーで指定されたタグペアと比較します。この条件キーを使用して、リソースを作成するアクションを制御し、これらの操作中にタグを検証できます。
次の例では、IAM ポリシーによりユーザーが Amazon Elastic Block Store (Amazon EBS) ボリュームを作成できるのは、Env タグが Dev、Prod、QA のいずれかを含む場合のみです。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowCreateVolumeWithEnvTag",
"Effect": "Allow",
"Action": "ec2:CreateVolume",
"Resource": "arn:aws:ec2:*:*:volume/*",
"Condition": {
"StringEquals": {
"aws:RequestTag/Env": [
"Dev",
"Prod",
"QA"
]
}
}
}
]
}
TagKey 条件キー
条件キー aws:TagKeys を使用して、リクエスト内のタグキーを IAM ポリシーで指定したタグキーと比較します。この条件キーは、リソースにアタッチされているタグキーを検証します。
リクエストに複数のキーと値のペアが含まれている場合、ForAllValues または ForAnyValue 集合演算子を使用してこれらの値を比較します。
次の例では、IAM ポリシーが AWS リソースでのタグ作成を制限しています。これにより、ユーザーは新しい Amazon EBS ボリュームを作成するときに、Env タグと CostCenter タグのみを作成できます。ForAllValues 集合演算子と aws:TagKeys 条件キーにより、ユーザーは必要なタグを AWS リソースにアタッチできます。このポリシーでは、リソース作成時にこれらのタグキーの付加を選択できるようにして、他のキーと値のペアでのタグ作成を防止します。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "ec2:CreateVolume",
"Resource": "arn:aws:ec2:*:*:volume/*",
"Condition": {
"ForAllValues:StringEquals": {
"aws:TagKeys": [
"Env",
"CostCenter"
]
}
}
}
]
}
関連情報
IAM チュートリアル: タグに基づいて AWS リソースにアクセスする権限を定義する