带有环境变量的 AWS CodeBuild secrets-manager 配置

Posted

技术标签:

【中文标题】带有环境变量的 AWS CodeBuild secrets-manager 配置【英文标题】:AWS CodeBuild secrets-manager config with environment variable 【发布时间】: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/… 【参考方案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 设置一个纯文本环境变量,设置为秘密名称。然后在构建规范中,我完全按照上面的方式引用它。

以上是关于带有环境变量的 AWS CodeBuild secrets-manager 配置的主要内容,如果未能解决你的问题,请参考以下文章

使用 aws codebuild 未收到有关 bitbucket 拉取请求的 Sonar 评论

AWS CodePipeline 能否在不劫持 CodeBuild 的工件设置的情况下触发 AWS CodeBuild?

在 AWS CodeBuild 期间使用 npm install 时未创建 node_modules 目录

AWS Batch 与 AWS CodeBuild

Elastic Beanstalk 始终在从 Codebuild 部署时更新环境

无法将更改从 AWS CodeBuild 推送到 AWS CodeCommit