使用AWS re:Post即您表示您同意 AWS re:Post 使用条款

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

2 分钟阅读
0

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

解决方法

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

**注意:**要确定您可以完成的 API 操作,最佳实践是查看您正在使用的服务的 API 文档。

PrincipalTag 条件键

使用 aws:PrincipalTag/tag-key 条件键,将附加到发出请求的主体的标签与 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 资源的访问

您可以将此条件键用于全局 aws:ResourceTag 版本和 AWS 服务,例如 ec2:ResourceTag。有关更多信息,请参阅 Actions, resources, and condition keys for AWS services

以下示例 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 必须具有 DevProdQA 值:

{
  "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 策略中指定的键进行比较。此条件键验证附加到资源的标签键。

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

以下示例策略限制在 AWS 资源上创建的标签。EnvCostCenter 标签是用户使用新的 Amazon EBS 卷仅可以创建的标签键。使用带有 aws:TagKeysForAllValues 集合操作符允许用户在 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 官方
AWS 官方已更新 9 个月前