带有环境变量的 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 目录