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

AWS Canary访问Secrets Manager触发KMS AccessDeniedException报错求助

AWS Secrets Manager加密规则及报错解决方案

核心疑问解答

即使未主动配置自定义加密密钥,AWS Secrets Manager(ASM)也会默认对存储的所有秘密进行KMS加密,默认使用AWS为当前账户自动创建的托管KMS密钥(别名固定为aws/secretsmanager),该加密机制默认开启无法关闭。
你收到KMS访问拒绝报错的原因是:调用GetSecretValue接口获取秘密时,除了ASM本身的权限,还需要调用者持有对应KMS密钥的解密权限,你当前的Canary运行IAM角色缺少该权限。

解决方案

根据你使用的KMS密钥类型,选择对应操作:

  • 使用默认AWS托管aws/secretsmanager密钥(即当前你未主动配置加密的场景)
    1. 进入AWS KMS控制台,切换到对应区域(你当前的资源都在us-west-1),选择「AWS托管的密钥」分类
    2. 找到别名为aws/secretsmanager的密钥,复制它的ARN
    3. 给Canary运行的IAM角色附加如下权限的策略:
    {
      "Effect": "Allow",
      "Action": "kms:Decrypt",
      "Resource": "替换为你刚才复制的aws/secretsmanager密钥的ARN"
    }
    
  • 后续如果改用自定义KMS密钥加密ASM秘密
    除了给IAM角色添加上述kms:Decrypt权限外,还需要在自定义KMS密钥的密钥策略中,添加允许该Canary IAM角色执行解密操作的声明。

附加代码优化建议

你当前提供的代码存在两处可优化点:

  1. getKeyCert函数没有返回值,后续const [ key, cert ] = await getKeyCert();会得到undefined,需要补充返回逻辑,比如return [key.SecretString, cert.SecretString]
  2. 连续两次调用同一个SecretId获取密钥,属于重复请求,你可以只调用一次getSecretValue,同时取出key和cert值,减少不必要的API调用开销。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 13:06:10