PrincipalTag、ResourceTag、RequestTag、および TagKeys 条件キーを使用して、タグベースの制限のための IAM ポリシーを作成するにはどうすればよいですか?

最終更新日: 2021 年 2 月 9 日

タグベースの制限のための 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 タグの値とともに入力されます (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"
                    ]
                }
            }
        }
    ]
}