【发布时间】:2021-11-06 10:52:26
【问题描述】:
在调试 AWS SecretsManager Caching Go 的问题时,我恢复使用 AWS SecretsManager API 并遇到以下错误消息:
AccessDeniedException:用户:arn:aws:sts::redacted:assumed-role/MyLambdaFunctionName-DNV2M7OYIFMX/MyLambdaFunctionName-eoFcAmXLBOV1 无权执行:secretsmanager:GetSecretValue on resource:my_secret_name
代码是:
session := session.Must(session.NewSession(aws.NewConfig().WithRegion("us-east-1")))
secretMgr := secretsmanager.New(session)
res, err := secretMgr.GetSecretValue(
&secretsmanager.GetSecretValueInput{
SecretId: String("my_secret_name")
},
)
秘密资源策略设置为:
{
"Version" : "2012-10-17",
"Statement" : [ {
"Effect" : "Allow",
"Principal" : {
"AWS" : "arn:aws:iam::redacted:role/MyLambdaFunctionNameRole-DNV2M7OYIFMX"
},
"Action" : "secretsmanager:GetSecretValue",
"Resource" : "*",
"Condition" : {
"ForAnyValue:StringEquals" : {
"secretsmanager:VersionStage" : "AWSCURRENT"
}
}
} ]
}
只要我更改代码以包含值为“AWSCURRENT”的 VersionStage 参数,代码就会正确执行而不会出现错误:
session := session.Must(session.NewSession(aws.NewConfig().WithRegion("us-east-1")))
secretMgr := secretsmanager.New(session)
res, err := secretMgr.GetSecretValue(
&secretsmanager.GetSecretValueInput{
SecretId: String("my_secret_name"),
VersionStage: String("AWSCURRENT"),
},
)
根据SecretsManager API documentation,VersionStage: "AWSCURRENT" 似乎应该是默认配置(如果未指定):
如果您未指定 VersionStage 或 VersionId,则默认是对 VersionStage 值为 AWSCURRENT 的版本执行操作。
谁能解释为什么省略 VersionStage 会导致此错误消息,和/或为什么它与 IAM 承担的角色有任何关系,因为 AWS 密钥和 lambda 函数都在同一个账户中?谢谢!
【问题讨论】:
标签: amazon-web-services go aws-lambda amazon-iam aws-secrets-manager