如何使用 PrincipalTag、ResourceTag、RequestTag 和 TagKeys 条件键创建基于标签的 IAM 限制策略?

上次更新日期:2021 年 2 月 9 日

我想为基于标签的限制创建 AWS Identity and Access Management (IAM) 策略。如何使用 PrincipalTag、ResourceTag、RequestTag 和 TagKeys 条件键?

简短描述

使用以下 IAM 示例策略为您的使用案例创建带条件键的基于标签的限制。

解决方法

PrincipalTag 条件键

aws:PrincipalTag 条件键用于将附加到发出请求的主体的标签与 IAM 策略中的标签进行匹配。使用带有匹配标签键 (如果请求的主体具备此标签键) 的 IAM 标签值输入 PrincipalTag 键的值。

以下 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 策略评估期间,使用带匹配键值对 (如果 AWS 资源存在此键值对) 的IAM 标签值输入 ResourceTag 键的值。此条件键可与全局版本 aws:ResourceTagec2: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 策略中指定的标签对进行比较。在创建资源或资源上标签的操作中,此条件键可用于检查标签的值。

以下示例 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 策略中指定的键进行比较。使用 AWS 资源请求中的标签列表输入 TagKeys 键的值。TagKeys 条件键用于验证附加到资源的标签键。

由于您可以在一个请求中定义多个标签键值对,因此该请求可以有多个值。可以使用 ForAllValuesForAnyValue 集合运算符比较这些值。

以下示例策略限制在 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"
                    ]
                }
            }
        }
    ]
}

这篇文章对您有帮助吗?


您是否需要账单或技术支持?