【问题标题】:What are the correct resource permissions for AWS Lambda functions using AWS Golang SecretsManager Caching client?使用 AWS Golang SecretsManager 缓存客户端的 AWS Lambda 函数的正确资源权限是什么?
【发布时间】: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


    【解决方案1】:

    事实证明,这显然与 issue 中提到的相似 - 从秘密资源策略中删除条件可以修复它:

     {
          "Version" : "2012-10-17",
          "Statement" : [ {
            "Effect" : "Allow",
            "Principal" : {
              "AWS" : "arn:aws:iam::redacted:role/MyLambdaFunctionNameRole-DNV2M7OYIFMX"
            },
            "Action" : "secretsmanager:GetSecretValue",
            "Resource" : "*"
        }
    

    我不确定为什么调用 GetSecretStringWithStage("my_secret_name","AWSCURRENT") 并没有像将 VersionStage 添加到 SecretsManager API 调用那样解决问题......但那是另一天的事了。

    感谢LRutten 帮助解决这个问题!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-21
      • 2021-09-12
      • 2023-04-03
      • 2015-09-20
      • 2023-02-02
      • 1970-01-01
      • 2019-10-14
      • 1970-01-01
      相关资源
      最近更新 更多