首页 > 解决方案 > AWS IAM 策略仅允许对具有特定标签的资源执行角色删除操作

问题描述

我正在创建一个跨账户角色以分布在多个 AWS 账户中。目标是允许我的一个 lambda 承担这个 CrossAccount 角色并在目标账户中创建 CFN 堆栈。

为了允许删除堆栈,我需要将ec2:TerminateInstances之类的操作分配给角色。但我不想允许对所有资源“*”执行操作。如何只允许对具有特定标签的资源执行此操作?

我尝试了以下政策条件,但它不起作用。当尝试删除堆栈时,我在ec2:TerminateInstances操作上遇到未经授权的错误。

- Effect: "Allow"
  Action:
    - "ec2:TerminateInstances"
  Resource: "*"
  Condition:
    StringEquals:
      aws:RequestTag/Usage: TestOnlyTag

我在正确的轨道上吗?

请注意,此角色需要在创建堆栈之前部署到目标帐户中。所以这里没有办法指定Instance-Id。

标签: amazon-web-servicesyamlamazon-iam

解决方案


事实证明我应该使用ResourceTag而不是RequestTag。根据 AWS 文档https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html ,以下是这两者之间的区别

资源 – 根据这些资源上的标签控制对 AWS 服务资源的访问。为此,请使用 ResourceTag/key-name 条件键根据附加到资源的标签确定是否允许访问资源。

请求 – 控制可以在请求中传递哪些标签。为此,请使用 aws:RequestTag/key-name 条件键来指定可以在请求中传递哪些标签键值对来标记或取消标记 AWS 资源。

以下是工作方针。

- Effect: "Allow"
  Action:
    - "ec2:TerminateInstances"
  Resource: "*"
  Condition:
    StringEquals:
      aws:ResourceTag/Usage: "TestOnlyTag"

推荐阅读