我正在创建一个CrossAccount角色,以在多个AWS账户之间分配。目标是允许我的一个lambda承担此CrossAccount角色,并在目标帐户中创建CFN堆栈。
为了允许删除堆栈,我需要向该角色分配诸如 ec2:TerminateInstances 之类的操作。但是我不想允许对所有资源“ *”进行操作。如何只允许对具有特定标签的资源执行此操作?
我尝试了以下政策条件,但它不起作用。尝试删除堆栈时,我在 ec2:TerminateInstances 操作中遇到了未经授权的错误。
- Effect: "Allow"
Action:
- "ec2:TerminateInstances"
Resource: "*"
Condition:
StringEquals:
aws:RequestTag/Usage: TestOnlyTag
我在正确的轨道上吗?
请注意,在创建堆栈之前,需要将此角色部署到目标帐户中。因此,无法在此处指定Instance-Id。
答案 0 :(得分:0)
事实证明,我应该使用 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"