AWS资源策略Condition限制导致Lambda无法访问Secrets Manager密钥
错误原因分析
核心问题:资源策略的Condition匹配逻辑不匹配实际请求身份
Lambda执行时会通过STS服务扮演指定IAM角色,此时请求Secrets Manager的身份ARN是临时会话ARN(即错误信息中的arn:aws:sts::1111111111111111:assumed-role/my-secret/my-lambda),而非IAM角色的原始ARN(arn:aws:iam::1111111111111111:role/my-role-foo)。
你配置的资源策略中,Condition规则基于aws:PrincipalArn匹配IAM角色的原始ARN格式(arn:aws:iam::1111111111111111:role/my-role*),但实际请求的身份ARN是STS扮演后的会话ARN,格式完全不匹配,导致这条Allow策略无法触发生效。
错误提示的补充说明
错误信息提到“no identity-based policy allows the secretsmanager:GetSecretValue action”,是因为你仅在Secrets Manager密钥上配置了资源型策略,没有给Lambda执行角色添加对应的身份型策略(直接附加在IAM角色上的权限策略)。但这不是触发本次错误的直接原因——即使添加身份型策略,资源策略的Condition不匹配问题依然存在,只是错误提示会变化。
可选修正方案
- 修改资源策略的Condition匹配规则:将
aws:PrincipalArn的匹配值改为STS会话ARN的格式,示例:"Condition" : { "ArnLike" : { "aws:PrincipalArn" : "arn:aws:sts::1111111111111111:assumed-role/my-role-foo*" } } - 改用更可靠的匹配方式:比如通过
aws:SourceArn匹配Lambda函数的ARN,确保只有指定Lambda能访问,示例:"Condition" : { "ArnEquals" : { "aws:SourceArn" : "arn:aws:lambda:us-east-1:1111111111111111:function:your-lambda-name" } } - 添加身份型策略:直接给Lambda执行角色附加允许访问该Secrets Manager密钥的权限策略,此时可根据权限管控需求选择保留或移除资源策略。
内容的提问来源于stack exchange,提问作者pkaramol
相关产品推荐
相关产品推荐

