You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用AWS Go SecretsManager缓存客户端的Lambda函数正确资源权限配置

问题根因与解决方案

1. 关于sts assumed-role的疑问说明

Lambda运行时会自动扮演你为其配置的执行角色,生成的身份ARN格式为arn:aws:sts::[账户ID]:assumed-role/[角色名]/[函数实例标识],这是Lambda的正常运行逻辑,和跨账户无关,不属于故障原因。

2. 报错的两个核心原因

2.1 IAM Action大小写错误

AWS IAM权限的Action字段大小写敏感,你尝试添加的secretsManager:DescribeSecret中服务名的M大写是错误写法,正确写法为全小写的secretsmanager:DescribeSecret。

2.2 权限策略的Condition限制了DescribeSecret调用

你原有的资源策略中,Condition配置是针对GetSecretValue接口的限制:仅当请求的VersionStage为AWSCURRENT时允许访问。但DescribeSecret接口调用时不会传递VersionStage参数,会直接命中Condition的拒绝逻辑,哪怕你把Action改成secretsmanager:*也会被拦截。

3. 修复方案

3.1 修正Secrets Manager资源策略

将两个接口的权限拆分为两个独立Statement,避免Condition误拦截:

{
  "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"
        }
      }
    },
    {
      "Effect" : "Allow",
      "Principal" : {
        "AWS" : "arn:aws:iam::111111111111:role/MyLambda-FunctionNameRole-1TG1EVGPEQ8TZ"
      },
      "Action" : "secretsmanager:DescribeSecret",
      "Resource" : "*"
    }
  ]
}

3.2 检查Lambda执行角色的身份权限

除了Secrets Manager的资源策略,还需要确认Lambda绑定的执行角色本身的权限策略中,已经允许了secretsmanager:GetSecretValue和secretsmanager:DescribeSecret两个操作,资源范围匹配你的密钥ARN。

3.3 代码无需额外修改

缓存客户端的原有逻辑、包括GetSecretStringWithStage的调用都可以保留,权限配置正确后即可正常运行。


内容的提问来源于stack exchange,提问作者tgilino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 02:27:01