我有一个带有buildspec的CodeBuild项目,它需要数据库密码值来操作。我希望这个构建规范与环境无关,但是每个环境都需要不同的数据库密码。每个环境的数据库密码值都存储在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中使用环境变量来构造SSM密钥
从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…"这种方法会更安全吗?
发布于 2019-11-30 16:08:24
使用CodeBuild的env.parameter.参数-存储
从文档的角度来看,没有办法动态地构造SSM参数键,而且每个环境的预加载参数都是错误的。这将影响性能,并对API的速率限制产生负面影响,并将使安全审计更加困难。
在CodeBuild脚本中手动获取SSM参数
我想这是可行的,但它将使脚本更加复杂,并将它与SSM参数存储更紧密地结合在一起,因为它需要了解SSM存储和密钥名结构。
从CodePipeline传递SSM参数
查看文档,有一个特定的环境变量类型,名为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"
}]https://stackoverflow.com/questions/59117170
复制相似问题