gpt4 book ai didi

amazon-web-services - 将 SSM 参数安全地传递给 CodeBuild 项目

转载 作者:行者123 更新时间:2023-12-04 13:17:21 24 4
gpt4 key购买 nike

我有一个带有 buildspec 的 CodeBuild 项目,它需要数据库密码值才能运行。我希望这个构建规范与环境无关,但每个环境都需要不同的数据库密码。每个环境的数据库密码值都存储在它自己的 key 下的 SSM 存储中。

在这种情况下,将数据库密码传递给 CodeBuild 项目的更好方法是什么?

使用 CodeBuild 的 env.parameter-store
似乎推荐的方法是使用 CodeBuild 的内置解决方案 ( env.parameter-store ),但是我必须为每个环境加载密码,然后在构建脚本中选择一个密码:

# Supported Variables
#---------------------
# - ENVIRONMENT
#

version: 0.2

env:
parameter-store:
DB_PASSWORD_PROD: "/acme/prod/DB_PASSWORD"
DB_PASSWORD_STAGE: "/acme/stage/DB_PASSWORD"
DB_PASSWORD_QA: "/acme/qa/DB_PASSWORD"

phases:
build:
commands:
- |-
case "${ENVIRONMENT}" in
"prod") DB_PASSWORD="${DB_PASSWORD_PROD}" ;;
"stage") DB_PASSWORD=${DB_PASSWORD_STAGE} ;;
"qa") DB_PASSWORD=${DB_PASSWORD_QA} ;;
esac
- echo "Doing something with \$DB_PASSWORD…"

这将需要向 SSM 发出三个请求,并且会使构建规范更加复杂。这种方法对我来说看起来不是最佳的。

也许有一种方法可以使用 env.parameter-store 中的 ENVIRONMENT 变量以某种方式构造 SSM key 。 ?

从 CodePipeline 传递 SSM 参数

另一种方法是将密码从 CodePipeline 作为环境变量直接传递给 CodeBuild 项目。这将大大简化构建规范。但是从安全的角度来看它安全吗?

在 CodeBuild 脚本中手动获取 SSM 参数

从脚本手动调用 SSM 来加载所需的值会更好吗?
# Supported Variables
#---------------------
# - ENVIRONMENT
#

version: 0.2

phases:
build:
commands:
- >-
DB_PASSWORD=$(
aws ssm get-parameter
--name "/acme/${ENVIRONMENT}/DB_PASSWORD"
--with-decryption
--query "Parameter.Value"
--output text
)
- echo "Doing something with \$DB_PASSWORD…"

这种方法会更安全吗?

最佳答案

Using CodeBuild's env.parameter-store



看着 documentation ,没有办法动态构造SSM参数key,每个环境预加载参数就是错误的。这会影响性能并对 API 速率限制产生负面影响,并使安全审计更加困难。

Get SSM parameters manually in CodeBuild script



我想这可以工作,但它会使脚本更复杂,并且还会将其与 SSM 参数存储更紧密地耦合,因为它需要了解 SSM 存储和 key 名称结构。

Pass SSM parameters from CodePipeline



看着 documentation有一个名为 PARAMETER_STORE 的特定环境变量类型.这允许在调用 CodeBuild 构建项目之前从 SSM 参数存储中获取值。

我相信这是实现预期结果的最干净的方法,它不应该以负面方式影响安全性,因为参数只会在构建项目调用时由 CodePipeline 解析:

- Name: stage-stage
Actions:
- Name: stage-stage-action
RunOrder: 1
ActionTypeId:
Category: Build
Provider: CodeBuild
Owner: AWS
Version: "1"
Configuration:
ProjectName: !Ref BuildProject
EnvironmentVariables: |-
[{
"type":"PARAMETER_STORE",
"name":"DB_PASSWORD",
"value":"/acme/stage/DB_PASSWORD"
}]

- Name: prod-stage
Actions:
- Name: prod-stage-action
RunOrder: 1
ActionTypeId:
Category: Build
Provider: CodeBuild
Owner: AWS
Version: "1"
Configuration:
ProjectName: !Ref BuildProject
EnvironmentVariables: |-
[{
"type":"PARAMETER_STORE",
"name":"DB_PASSWORD",
"value":"/acme/prod/DB_PASSWORD"
}]

- Name: qa-stage
Actions:
- Name: qa-stage-action
RunOrder: 1
ActionTypeId:
Category: Build
Provider: CodeBuild
Owner: AWS
Version: "1"
Configuration:
ProjectName: !Ref BuildProject
EnvironmentVariables: |-
[{
"type":"PARAMETER_STORE",
"name":"DB_PASSWORD",
"value":"/acme/qa/DB_PASSWORD"
}]

关于amazon-web-services - 将 SSM 参数安全地传递给 CodeBuild 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59117170/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com