IAM政策问题:SRE无法删除信任CloudTrail的trail前缀角色
问题原因
删除trail22角色失败的核心原因是当前IAM政策中,将iam:DetachRolePolicy和iam:CreateRole等操作放在了同一个权限声明里,并且附加了sts:AWSServiceName条件。这个条件仅在创建角色并指定信任实体为CloudTrail服务时生效,而执行解绑角色策略(iam:DetachRolePolicy)、删除角色(iam:DeleteRole)这类操作时,系统不会触发该条件的验证,导致权限被拒绝。
另外,原政策中的条件无法强制确保创建的角色信任实体严格符合要求,sts:AWSServiceName只是辅助条件,需要直接校验角色的信任策略文档才能达到精准控制的目的。
修正后的IAM政策
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iam:CreateRole", "Resource": [ "arn:aws:iam::123456789012:role/trail*", "arn:aws:iam::123456789012:role/service-role/trail*" ], "Condition": { "StringEquals": { "iam:AssumeRolePolicyDocument": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"cloudtrail.amazonaws.com\"},\"Action\":\"sts:AssumeRole\"}]}" } } }, { "Effect": "Allow", "Action": [ "iam:DeleteRole", "iam:AttachRolePolicy", "iam:DetachRolePolicy" ], "Resource": [ "arn:aws:iam::123456789012:role/trail*", "arn:aws:iam::123456789012:role/service-role/trail*" ] }, { "Effect": "Allow", "Action": [ "iam:CreatePolicy", "iam:DeletePolicy" ], "Resource": [ "arn:aws:iam::123456789012:policy/service-role/Cloudtrail-CW-access-policy-*" ] } ] }
修正说明
- 拆分权限声明:把
iam:CreateRole单独分离,确保只有创建角色时才校验信任策略;删除、解绑等操作无需附加条件,避免权限被误拦截。 - 强制信任实体格式:使用
iam:AssumeRolePolicyDocument条件直接匹配指定的信任策略JSON字符串,严格保证创建的trail*角色只能被CloudTrail服务信任,比原有的sts:AWSServiceName条件更精准。 - 保留原有资源范围:维持对
trail*前缀角色及指定前缀策略的权限控制,完全符合初始需求。
内容的提问来源于stack exchange,提问作者Tony Chou
相关产品推荐
相关产品推荐

