AWS Secrets Manager 找不到指定的密钥

Posted

技术标签:

【中文标题】AWS Secrets Manager 找不到指定的密钥【英文标题】:AWS Secrets Manager can’t find the specified secret 【发布时间】:2020-01-09 07:47:06 【问题描述】:

我正在使用 AWS Fargate 并通过 Secrets Manager 存储敏感数据。任务定义应该从秘密存储中获取环境变量

- name: "app"
  image: "ecr-image:tag"
  essential: true
  secrets:
    - name: "VAR1"
      valueFrom: "arn:aws:secretsmanager:us-east-1:111222333444:secret:var-one-secret"
    - name: "VAR2"
      valueFrom: "arn:aws:secretsmanager:us-east-1:111222333444:secret:var-two-secret"
    - name: "VAR3"
      valueFrom: "arn:aws:secretsmanager:us-east-1:111222333444:secret:var-two-private"

但由于某种原因它失败并出现以下错误

ResourceNotFoundException: Secrets Manager can’t find the specified secret. status code: 400, request id

我觉得有点奇怪,因为

IAM 有权限获取秘密值,而且

当只留下 VAR1 变量时,一切都按预期工作

AWS CLI 能够毫无问题地检索每个密钥

例如

aws secretsmanager get-secret-value --secret-id var-two-secret

我的配置可能有什么问题?任何提示表示赞赏

【问题讨论】:

【参考方案1】:

此错误的另一个潜在原因是未设置密钥;秘密名称可能存在,但没有值。有关设置值的步骤,请参阅https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_update-secret.html

【讨论】:

【参考方案2】:

好的,所以诀窍是明确指定 ARN。您应该使用完整标识符,而不仅仅是提供秘密名称

arn:aws:secretsmanager:us-east-1:111222333444:secret:var-two-secret-ID0o2R

请注意密码名称末尾的-ID0o2R 后缀。

我仍然不清楚为什么某些变量在没有它的情况下也可以工作。

UPD

但是,如果您的密钥名称以连字符结尾,后跟 六个字符(在 Secrets Manager 添加连字符和六个 到 ARN 的字符),然后您尝试将其用作部分 ARN,然后 这些字符会导致 Secrets Manager 假定您是 指定完整的 ARN。这种混乱可能会导致意外 结果。

从我的包含连字符的变量名中可以看出,Secrets Manager 在通过短名称解析时遇到了困难

【讨论】:

不只是一个连字符,而是一个连字符后跟正好 6 个字符:-secret?‍♀️ Bit me too...为什么是 AWS? 这确实是我在 AWS 中见过的最令人困惑、最浪费时间、最令人难以置信的反功能之一。他们有很多。感谢您为我节省了数小时或数天的调试时间。【参考方案3】:

如果您未在 ARN 末尾指定 GUID,Secrets Manager 会尝试进行部分 ARN 匹配。但是,it is imperfect 因为部分 ARN 可能会发生冲突。如果您在同一帐户中获取机密,则可以只使用机密名称(机密后的部分:并且不包括破折号 6 字符 -GUID)而不是完整的 ARN。但是使用完整的 ARN 总是最好的。

【讨论】:

以上是关于AWS Secrets Manager 找不到指定的密钥的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 Secrets Manager 密钥注册 AWS Batch 作业定义

AWS Systems Manager Parameter Store 和 AWS Secrets Manager 之间的区别?

AWS Secrets Manager 异常访问被拒绝

AWS Secrets Manager 使用 AWS-SDK Java 更新密钥请求

如何规范存储在 AWS Secrets Manager 上的私钥

AWS Secrets Manager 和 Spring Boot