Gre*_*ory 5 gitlab gitlab-ci hashicorp-vault
假设我想使用 Vault 中的值创建一个变量。
variables:
$SSH_PRIVATE_KEY: `vault kv get -field=private_key project/production`
before_script:
- echo "$SSH_PRIVATE_KEY"
Run Code Online (Sandbox Code Playgroud)
是否可以?
是否有另一种方法可以在管道内使用 Vault 机密?
2019年7月原始答案:
\n您可以看到它在脚本步骤之前/之后使用,最后有一个已撤销的令牌。
\n看gitlab.eng.cleardata.com pub/pipelines/gcp-ci.yml一个例子:
# Obtains credentials via vault (the gitlab-runner authenticates to vault using its AWS credentials)\n# Configures the `gcloud` sdk and `kubectl` to authenticate to our *production* cluster\n#\n# Note: Do not override the before_script or the after_script in your job\n#\n.auth-prod: &auth-prod\n image: cleardata/bionic\n before_script:\n - |\n export CLUSTER_NAME=production\n export CLUSTER_LOCATION=us-central1\n export CLUSTER_PROJECT_ID=cleardata-production-cluster\n - vault login -method=aws -path=gitlab-ci -no-print header_value=gitlab.eng.cleardata.com\n - GCP_CREDS=$(vault read -field=private_key_data gitlab-ci/gcp/cleardata-production-cluster/key/deployment-key)\n - gcloud auth activate-service-account --key-file=<(base64 -d <<<$GCP_CREDS)\n - gcloud auth configure-docker\n - gcloud beta container clusters get-credentials $CLUSTER_NAME --region $CLUSTER_LOCATION --project $CLUSTER_PROJECT_ID\n after_script:\n - vault token revoke -self\nRun Code Online (Sandbox Code Playgroud)\n2020 年 3 月更新:GitLab 12.9 支持此功能
\n\n\n\nHashiCorp Vault GitLab CI/CD 托管应用程序
\n亚搏体育appGitLab希望让用户能够轻松地进行现代化的秘密管理。我们现在为用户提供在 Kubernetes 集群中安装 Vault 的能力,作为 GitLab CI 托管应用程序流程的一部分。
\n
\n这将支持 Helm 图表安装中项目级别的密钥、令牌和其他机密的安全管理。
2020 年 4 月:GitLab 12.10:
\n\n\n\n在此版本中,GitLab 添加了对轻量级 JSON Web 令牌 (JWT) 身份验证的支持,以与现有的 HashiCorp Vault 集成。
\n现在,您可以利用 HashiCorp\xe2\x80\x99s JWT 身份验证方法无缝地向 CI/CD 作业提供机密,而不必手动提供机密作为 GitLab 中的变量。
\n
请参阅GitLab 13.4(2020 年 9 月)
\n仅适用于高级/银级:
\n\n\n在 CI 作业中使用 HashiCorp Vault 机密
\n在 GitLab 12.10 中,GitLab 引入了 GitLab Runner 获取机密并将其注入 CI 作业的功能。GitLab 现在正在通过在文件中构建新语法来扩展JWT Vault 身份验证方法。这使您可以更轻松地配置 HashiCorp Vault 并将其与 GitLab 结合使用。
\nsecrets.gitlab-ci.ymlhttps://about.gitlab.com/images/13_4/vault_ci.png -- 在 CI 作业中使用 HashiCorp Vault 机密
\n\n
请参阅GitLab 13.9(2021 年 2 月)
\n\n\nVault JWT(JSON Web 令牌)支持 GitLab 环境。
\n为了简化与 HashiCorp Vault 的集成,我们\xe2\x80\x99 提供了\nVault JWT 令牌支持。从启动开始,您就可以根据\nJWT 中的数据限制访问。此版本为您提供了限制\n凭据访问的新维度:作业目标环境。
\n此版本扩展了现有的 Vault JWT 令牌,也支持基于环境的\n限制。由于
\n\nenvironment名称可以由运行管道的用户提供,因此我们建议您使用基于环境的新限制和现有ref_type值,以实现最大的安全性。
小智 5
我们在构建器镜像中内置了一个帮助程序脚本,可以将指向机密的 GitLab CI/CD 作业变量转换为包含 Vault 机密的作业环境变量。在我们的例子中,我们还使用 appRole auth 方法来限制临时 Vault 访问令牌的有效性。
一个示例用例是:
I want a job env var "MY_SECRET_TOKEN" with a value from a Vault secret.
So I add a CI/CD variable called V_MY_SECRET_TOKEN="secret/<path>/<key>"
Then I insert a job step to retrieve the secret value and populate
the MY_SECRET_TOKEN with the value associated with the key.
Run Code Online (Sandbox Code Playgroud)
添加到 GitLab 中 CICD 作业设置的变量。
VAULT_ADDR=https://vault.example.com:8200
VAULT_ROLE_ID=db02de05-fa39-4855-059b-67221c5c2f63
VAULT_SECRET_ID=6a174c20-f6de-a53c-74d2-6018fcceff64
VAULT_VAR_FILE=/var/tmp/vault-vars.sh
Run Code Online (Sandbox Code Playgroud)
添加到 .gitlab-ci.yml 作业定义中的步骤。
script:
- get-vault-secrets-by-approle > ${VAULT_VAR_FILE}
- source ${VAULT_VAR_FILE} && rm ${VAULT_VAR_FILE}
Run Code Online (Sandbox Code Playgroud)
这是对我们使用的get-vault-secrets-by-approle帮助程序脚本的引用。这是设计背后的思考
的文章。
“before_script”选项不适合我们的工作流程,因为我们在 gitlab-ci.yml 定义中定义了特权阶段和非特权阶段的组合。非特权作业构建和质量检查代码,而特权作业打包和发布代码。VAULT_ROLE_ID 和 VAULT_SECRET_ID 作业变量应该仅对特权打包和发布作业可见。
我还尝试使用 include、extend 和 yaml 锚点,但我想将项目合并到现有的 yaml 映射(script: {}或before_script: {})中,而不是用模板替换映射中的所有项目。
| 归档时间: |
|
| 查看次数: |
5420 次 |
| 最近记录: |