【发布时间】:2021-11-06 08:13:39
【问题描述】:
我们目前有 AWS lambda 函数使用 AWS Secret 上的以下资源权限从 AWS Secrets Manager 检索密钥(lambda 函数和密钥属于同一个 AWS 账户):
{
"Version" : "2012-10-17",
"Statement" : [ {
"Effect" : "Allow",
"Principal" : {
"AWS" : "arn:aws:iam::111111111111:role/MyLambda-FunctionNameRole-1TG1EVGPEQ8TZ"
},
"Action" : "secretsmanager:GetSecretValue",
"Resource" : "*",
"Condition" : {
"ForAnyValue:StringEquals" : {
"secretsmanager:VersionStage" : "AWSCURRENT"
}
}
} ]
}
由于更频繁的秘密查找,我想使用 AWS Go SecretsManager Caching 添加秘密缓存,但收到以下错误消息:
AccessDeniedException:用户:arn:aws:sts::111111111111:assumed-role/MyLambda-FunctionName-DNV2M7OYIFMX/MyLambda-FunctionName-eoFcAmXLBOV1 无权执行:secretsmanager:DescribeSecret 资源:secrets_key_name
秘密 arn 前缀是:
arn:aws:secretsmanager:us-east-1
创建缓存管理器的代码:
session := session.Must(session.NewSession(aws.NewConfig().WithRegion("us-east-1")))
secretCache, _ := secretcache.New(
func(c *secretcache.Cache) {
c.Client = secretsmanager.New(session)
},
)
以及检索秘密的代码:
secretCache.GetSecretString(secrets_key_name)
我尝试将 secretsManager:DescribeSecret 添加到秘密资源权限中的操作,以及更改为 secretsManager:*,但我仍然收到错误消息。我怀疑它与
arn:aws:sts::111111111111:assumed-role
但我不确定为什么请求假定角色(相关的 lambda 函数和机密都属于同一个 aws 帐户)或如何修复它。非常感谢任何帮助!
编辑:通过不设置秘密 VersionStage,我能够直接使用 SecretsManager API(没有缓存客户端)生成类似的错误消息,尽管文档指出不指定的行为应该像使用“AWSCURRENT”一样,即想要的。考虑到可能类似,我将缓存客户端代码切换为以下代码,但仍然收到相同的错误:
secretCache.GetSecretStringWithStage(secrets_key_name, "AWSCURRENT")
【问题讨论】:
标签: amazon-web-services go aws-lambda aws-secrets-manager