タグベースの制限のための AWS Identity and Access Management (AWS IAM) ポリシーを作成したいと考えています。PrincipalTag、ResourceTag、RequestTag、および TagKeys 条件キーを使用したいと考えています。
解決策
次の IAM ポリシー例では、条件キーを使用してタグベースの制限を作成しています。
**注:**実行できる API アクションを決定するには、使用しているサービスの API ドキュメントを確認するのがベストプラクティスです。
PrincipalTag 条件キー
aws:PrincipalTag/tag-key 条件キーを使用して、リクエストを行うプリンシパルに添付されているタグを IAM ポリシーのタグと一致させます。
次の IAM ポリシーの例では、Amazon Simple Storage Service (Amazon S3) バケットに制限を設けています。Amazon S3 PutObject アクションは、プロダクトマネージャーという肩書きのユーザーを除くすべてのユーザーにバケットアクセスを拒否します。
{
"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 バージョンおよび ec2:ResourceTag などの AWS サービスで使用できます。詳細については、「AWS サービスのアクション、リソース、条件キー」を参照してください。
次の IAM ポリシーの例では、ユーザーはテスト環境にあるインスタンスを起動、停止、終了できます。
{
"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 ポリシーで指定されたタグペアと比較します。この条件キーは、リソースまたはリソースタグを作成し、タグの値を確認するアクションに使用できます。
次のポリシー例では、ユーザーが Amazon Elastic Block Store (Amazon EBS) ボリュームを作成するときに、ユーザーに特定の Env タグを作成するように強制します。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 ポリシーで指定されたキーと比較します。この条件キーは、リソースにアタッチされているタグキーを検証します。
1 つのリクエストで複数のタグキーと値のペアを定義できるため、リクエストには複数の値を指定できます。これらの値を比較するには、ForAllValues または ForAnyValue セット演算子を使用します。
次のポリシー例は、AWS リソースで作成されるタグを制限します。Env タグと CostCenter タグは、ユーザーが新しい Amazon EBS ボリュームで作成できる唯一のタグキーです。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 リソースにアクセスする権限を定義する