跳至内容

PrincipalTag、ResourceTag、RequestTag 和 TagKeys 条件键如何控制 IAM 策略中的访问权限?

2 分钟阅读
0

我想在 AWS Identity and Access Management (IAM) 策略中使用基于 PrincipalTag、ResourceTag、RequestTag 和 TagKeys 标签的条件键来控制对 AWS 资源的访问。

解决方法

以下 IAM 示例策略使用条件键控制对带有标签的 AWS 资源的访问权限。

要确定您可以完成的 API 操作,最佳做法是查看您使用的服务的 API 文档。

PrincipalTag 条件键

使用 aws:PrincipalTag/tag-key 条件键比较以下标签:

  • 附加到提出请求的主体的标签
  • 您在 IAM 策略中指定的标签

在以下示例中,Amazon Simple Storage Service (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/tag-key 与全局版本 aws:ResourceTag 和 AWS 服务(例如 ec2:ResourceTag)结合使用。

在以下示例中,IAM 策略允许用户启动、停止和终止测试环境中的 Amazon Elastic Compute Cloud (Amazon EC2) 实例:

{
  "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 策略中指定的标签对进行比较。您可以使用此条件键控制创建资源的操作,并在这些操作期间验证标签。

在以下示例中,只有当用户包含值为 DevProdQAEnv 标签时,IAM 策略才允许用户创建 Amazon Elastic Block Store (Amazon EBS) 卷:

{
  "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 集合运算符比较这些值。

在以下示例中,IAM 策略限制在 AWS 资源上创建标签。它仅允许用户在创建新的 Amazon EBS 卷时创建 EnvCostCenter 标签。带有 aws:TagKeys 标签键的 ForAllValues 集合运算符允许用户将所需的标签附加到资源。该策略在资源创建期间将这些标签键设置为可选,并防止使用其他键值对创建标签:

{
  "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 官方已更新 2 个月前