amazon-web-services - AWS IAM 策略仅允许对具有特定标签的资源执行角色删除操作
问题描述
我正在创建一个跨账户角色以分布在多个 AWS 账户中。目标是允许我的一个 lambda 承担这个 CrossAccount 角色并在目标账户中创建 CFN 堆栈。
为了允许删除堆栈,我需要将ec2:TerminateInstances之类的操作分配给角色。但我不想允许对所有资源“*”执行操作。如何只允许对具有特定标签的资源执行此操作?
我尝试了以下政策条件,但它不起作用。当尝试删除堆栈时,我在ec2:TerminateInstances操作上遇到未经授权的错误。
- Effect: "Allow"
Action:
- "ec2:TerminateInstances"
Resource: "*"
Condition:
StringEquals:
aws:RequestTag/Usage: TestOnlyTag
我在正确的轨道上吗?
请注意,此角色需要在创建堆栈之前部署到目标帐户中。所以这里没有办法指定Instance-Id。
解决方案
事实证明我应该使用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"
推荐阅读
- javascript - JS:事件分配
- javascript - 在 Javascript 中的 iFrame 中触发滚动事件的问题
- javascript - 如何显示来自 API 的对象数组以供显示
- c - 递归大学作业给出了没有解释的递减成绩
- reactjs - 类型的大问题:index.d.ts 不是模块
- api - 如何覆盖 Opencart 3 中的 api 控制器?
- shell - var=命令的输出,然后对var执行操作
- r - 在 LaTeX 上创建论文并将 R 包导入 LaTeX
- arrays - Swift:数组的初始容量、ReserveCapacity() 和避免重新分配
- highcharts - Highcharts - 自定义树状图的图例