【问题标题】:AWS CodeBuild secrets-manager config with environment variable带有环境变量的 AWS CodeBuild secrets-manager 配置
【发布时间】:2020-05-09 01:04:46
【问题描述】:

更新:

不确定这是什么时候发生的,但正如现在描述的那样。

以及在 Pipeline 构建操作中直接设置密钥的选项。


原问题:

我在 AWS CodePipeline 的构建阶段为 secret-id 设置了一个环境变量。例如。 $SECRET_ID.

我想在 CodeBuild buildspec.yml 中使用它来根据我的环境从 Secrets Manager 中获取一组密钥。是否可以在 buildspec 文件中自引用其他变量?

这是我预期它会起作用的方式,但事实并非如此。

version: 0.2

env:
  secrets-manager:
    MY_SECRET: ${SECRET_ID}

phases:
  build:
    commands:
      - echo $MY_SECRET

我在构建日志中收到以下错误。

Secrets Manager Error Message: ValidationException: Invalid name. Must be a valid name containing alphanumeric characters, or any of the following: -/_+=.@!

【问题讨论】:

  • 这应该是可能的,因为 MY_SECRET 毕竟是一个环境变量。运行构建阶段是否会将预期的秘密放入容器中?
  • @sash 糟糕,应该添加了构建日志错误。感谢更新。
  • 从错误看来 ${SECRET_ID} 无效。你能在你的 ${SECRET_ID} 上做一个 echo @hyperdrive 并检查它是否符合secret-id:json-key:version-stage:version-id 的格式,如文档docs.aws.amazon.com/codebuild/latest/userguide/… 中所述。
  • 是的,如果我删除 secrets-manager,$SECRET_ID 或 ${SECRET_ID} 是正确的值。如果我对 id 进行硬编码,我确实会得到秘密值。我感觉 secrets-manager 的 codebuild 实现不支持这样做。
  • ${SECRET_ID} 应该采用这种格式secret-id:json-key,假设你有demo 秘密管理器和key 秘密和content,那么你需要使用demo:key 和它将返回 JSON 格式。参考docs.aws.amazon.com/codebuild/latest/userguide/…

标签: amazon-web-services aws-codepipeline aws-secrets-manager


【解决方案1】:

我遇到了同样的错误

将 arn 设置为环境变量,如下所示

导出 SECRET_ID=arn:aws:secretsmanager:...

会有用的

【讨论】:

  • 请务必用完整的句子给出更详细的答案。
【解决方案2】:

您只需要直接引用它。作为 : 在哪里-

(必需)本地环境变量名称。在构建期间使用此名称访问变量。 (必需)用作密钥唯一标识符的名称或 Amazon 资源名称 (ARN)。要访问您的 AWS 账户中的密钥,只需指定密钥名称。要访问不同 AWS 账户中的密钥,请指定密钥 ARN。

版本:0.2

环境: 秘密经理: MY_SECRET:SECRET_ID

阶段: 建造: 命令: - 回显 $MY_SECRET

【讨论】:

  • 当然可以直接使用。这个问题的原因是询问如何不直接使用它。还是我错过了你在说什么?
【解决方案3】:

您也可以在其中一个阶段调用 AWS API。

version: 0.2

phases:
  build:
    commands:
      - SECRET_JSON=$(aws secretsmanager get-secret-value --secret-id $SECRET_ID)
      - MY_SECRET_VALUE=$(echo $SECRET_JSON | jq -r '.SecretString' | jq -r '.mySecretKey')
      - echo $MY_SECRET_VALUE

其中.SecretString 由secretsmanager 的输出结构给出,mySecretKey 是secret 中键值对的自定义键。

【讨论】:

  • 感谢您的发帖,它实际上让我回过头来看看这个,我原来的方法现在有效:)
  • @hyperdrive,你是如何让你的原始方法工作的?我无法让它为自己工作。
  • @johnsimer 我不确定它是否适合我...在 CodePipeline > Build 阶段,为SECRET_ID 设置一个纯文本环境变量,设置为秘密名称。然后在构建规范中,我完全按照上面的方式引用它。
猜你喜欢
  • 2017-06-25
  • 1970-01-01
  • 1970-01-01
  • 2019-08-30
  • 2021-10-14
  • 1970-01-01
  • 1970-01-01
  • 2017-06-17
  • 1970-01-01
相关资源
最近更新 更多