AWS Secrets Manager使用NotPrincipal资源策略保存报错如何处理
问题根因
你对Deny + NotPrincipal的组合逻辑理解没有错误,报错的核心原因是遗漏了AWS AssumeRole身份的ARN规则:
- 当你通过控制台/CLI切换为
LeadDeveloperRole身份操作时,AWS实际识别到的当前生效Principal ARN不是静态的IAM角色ARNarn:aws:iam::111111111:role/LeadDeveloperRole,而是STS服务生成的会话ARN,格式为arn:aws:sts::111111111:assumed-role/LeadDeveloperRole/[自定义会话名] - 你的现有策略中
NotPrincipal列表只写了IAM角色的静态ARN,没有包含你当前正在使用的AssumedRole会话身份,因此Deny规则会直接拦截你当前的操作身份,系统检测到该策略保存后你将失去密钥的管理权限,就抛出了对应报错。 - 即使你添加了显式Allow规则也不会生效,因为AWS IAM权限判定逻辑中Deny规则优先级高于所有Allow规则。
修复方案
在Deny语句的NotPrincipal.AWS列表中,补充两个角色对应的AssumedRole通配符ARN即可,修正后的完整策略如下:
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "AWS":[ "arn:aws:iam::111111111:role/LeadDeveloperRole", "arn:aws:iam::111111111:role/AdminRole" ] }, "Action": [ "secretsmanager:*" ], "Resource":"arn:aws:secretsmanager:region:111111111:secret:secretid-xxxx1i" }, { "Effect":"Deny", "NotPrincipal":{ "AWS":[ "arn:aws:iam::111111111:role/LeadDeveloperRole", "arn:aws:sts::111111111:assumed-role/LeadDeveloperRole/*", "arn:aws:iam::111111111:role/AdminRole", "arn:aws:sts::111111111:assumed-role/AdminRole/*" ] }, "Action": [ "secretsmanager:*" ], "Resource":"arn:aws:secretsmanager:region:111111111:secret:secretid-xxxx1i" } ] }
通配符*可以匹配所有通过对应角色生成的会话,不会限制会话名称,同时仍然保证其他身份都会被Deny规则拦截,符合你的权限控制需求。
内容的提问来源于stack exchange,提问作者user10916892
相关产品推荐
相关产品推荐

