タグベースの制限のための AWS Identity and Access Management (IAM) ポリシーを作成したいと考えています。PrincipalTag、ResourceTag、RequestTag、および TagKeys の各条件キーを使用するにはどうすればよいですか?
簡単な説明
以下のサンプル IAM ポリシーを使用して、ユースケースの条件キーを使用してタグベースの制限を作成します。
解決方法
PrincipalTag 条件キー
aws:PrincipalTag 条件キーは、リクエストを実行するプリンシパルにアタッチされたタグと IAM ポリシーのタグを照合するために使用されます。PrincipalTag キーの値は、リクエストのプリンシパルに一致するタグキーがある IAM タグの値と比較されます (存在する場合)。
次のサンプル IAM ポリシーは、Amazon Simple Storage Service (Amazon S3) バケットに制限を提供します。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 リソースへのアクセスの制御」を参照してください。
IAM ポリシーの評価中、ResourceTag タグは IAM タグと比較されます。ResourceTag キーの値は、一致するキーと値のペアを持つ IAM タグの値と比較されます (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 条件キー
ユーザーリクエストで渡されたキーと値のペアを IAM ポリシーで指定されたタグペアと比較するために使用される aws:RequestTag/tag-key 条件キー。条件キーは、リソースを作成し、またはリソースでタグを作成するアクションで使用でき、タグの値をチェックします。
例えば、次の IAM ポリシーを参照してください。Amazon Elastic Block Store (Amazon EBS) ボリュームの作成時に、ユーザーが「Dev」、「Prod」、または「QA」の値を持つ特定のタグ「Env」を作成するように強制します。
{
"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"
]
}
}
}
]
}
TagKeys 条件キー
aws:TagKeys 条件キーは、リクエスト内のタグキーと IAM ポリシーで指定されたキーを比較するために使用されます。TagKeys キーの値は、AWS リソースリクエストのタグのリストと比較されます。TagKeys 条件キーは、リソースにアタッチされたタグキーを検証するために使用されます。
リクエストで複数のタグのキーと値のペアを定義できるため、リクエストは複数の値を持つことができます。これらの値は、ForAllValues または ForAnyValue セット演算子を使用して比較できます。
以下のサンプルポリシーは、AWS リソースに作成されるタグを制限します。「Env」および「CostCenter」タグは、ユーザーが新しい Amazon EBS ボリュームで作成できる唯一のタグキーです。aws:TagKeys とともに ForAllValues セット演算子を使用すると、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 リソースにアクセスするためのアクセス許可を定義する
AWS リクエスト時のアクセスの制御