AWS中已创建资源策略仍报secretsmanager:GetSecretValue权限错误
问题分析与解决方案
你的核心问题是资源策略中的Principal配置错误:当前策略允许的是secretsmanager.amazonaws.com服务访问该机密,但实际需要授权的是你的Lambda函数的执行角色——因为是Lambda在调用SecretsManager的API。
修复方案一:修正SecretsManager资源策略
将资源策略的Principal替换为你Lambda函数的执行角色ARN,示例如下:
{ "Version" : "2012-10-17", "Statement" : [ { "Action" : "secretsmanager:GetSecretValue", "Resource" : "arn:aws:secretsmanager:Region:AccountId:secret:SecretName-123123", "Effect" : "Allow", "Principal" : { "AWS" : "arn:aws:iam::AccountId:role/LambdaExecutionRoleName" } } ] }
- 替换
AccountId为你的AWS账号ID - 替换
LambdaExecutionRoleName为Lambda函数关联的执行角色名称
修复方案二:给Lambda执行角色添加权限(推荐)
更符合IAM最佳实践的方式是直接在Lambda的执行角色中添加允许访问SecretsManager的权限策略,而非修改SecretsManager的资源策略。示例权限策略如下:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "secretsmanager:GetSecretValue", "Resource": "arn:aws:secretsmanager:Region:AccountId:secret:SecretName-123123" } ] }
将该策略附加到Lambda的执行角色上即可。
额外检查项
- 确认Lambda执行角色的信任策略允许
lambda.amazonaws.com服务扮演该角色(默认创建的Lambda角色已包含此配置) - 确认机密对象的ARN完全匹配,注意SecretsManager的ARN后缀可能包含随机字符串(如示例中的
-123123),需与实际ARN一致
内容的提问来源于stack exchange,提问作者Roberto Chirila
相关产品推荐
相关产品推荐

