如何配置权限仅允许用户通过删除CloudFormation栈删除对应AWS资源
可行方案说明
这个需求可以通过IAM的**全局条件键aws:CalledVia**实现,该条件专门用于限制用户只有通过指定AWS服务发起的操作才会被允许,用户直接操作资源时不匹配条件,权限不会生效。
具体配置步骤
- 第一步:给该power user用户开放
cloudformation:DeleteStack的允许权限,无需额外限制,确保用户可以正常发起CF栈删除请求 - 第二步:给该用户配置所有关联资源的删除/修改权限,同时添加条件限制仅当操作由CloudFormation服务发起时才生效,策略示例如下:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lambda:DeleteFunction", "ec2:TerminateInstances", "s3:DeleteBucket", // 补充其他CF栈删除时需要用到的资源操作权限 ], "Resource": "*", "Condition": { "StringEquals": { "aws:CalledVia": "cloudformation.amazonaws.com" } } } ] }
逻辑验证
- 用户直接在Lambda、EC2等资源控制台发起删除/修改操作时,属于用户直接调用资源服务API,不满足
aws:CalledVia的匹配条件,对应权限不生效,操作会被拒绝 - 用户发起CF栈删除请求后,CloudFormation服务会代表用户调用对应资源的删除API,此时请求的
aws:CalledVia参数会被AWS自动填充为cloudformation.amazonaws.com,匹配条件后权限生效,删栈流程可正常执行
补充说明
如果CF栈中存在需要先修改属性才能删除的资源,可把对应的修改操作也加到上述策略的Action列表中,同样受aws:CalledVia条件限制,不会开放给用户直接操作。整个方案不需要调整CloudFormation栈本身的配置,仅修改用户侧的IAM策略即可落地。
内容的提问来源于stack exchange,提问作者Fed.Ushel
相关产品推荐
相关产品推荐

