使用GitLab管道使用Hashicorp保管库的最佳方法是什么?



,假设我想用金库中的值制作一个变量。

variables:
  $SSH_PRIVATE_KEY: `vault kv get -field=private_key project/production`
before_script:
  - echo "$SSH_PRIVATE_KEY"

可能吗?

有其他方法可以在管道内使用保险库秘密?

原始答案2019年7月:

您可以看到它在脚本步骤之前/之后使用,并在末尾带有一个被撤销的令牌。
请参阅gitlab.eng.cleardata.com pub/pipelines/gcp-ci.yml作为一个示例:

# Obtains credentials via vault (the gitlab-runner authenticates to vault using its AWS credentials)
# Configures the `gcloud` sdk and `kubectl` to authenticate to our *production* cluster
#
# Note: Do not override the before_script or the after_script in your job
#
.auth-prod: &auth-prod
  image: cleardata/bionic
  before_script:
    - |
      export CLUSTER_NAME=production
      export CLUSTER_LOCATION=us-central1
      export CLUSTER_PROJECT_ID=cleardata-production-cluster
    - vault login -method=aws -path=gitlab-ci -no-print header_value=gitlab.eng.cleardata.com
    - GCP_CREDS=$(vault read -field=private_key_data gitlab-ci/gcp/cleardata-production-cluster/key/deployment-key)
    - gcloud auth activate-service-account --key-file=<(base64 -d <<<$GCP_CREDS)
    - gcloud auth configure-docker
    - gcloud beta container clusters get-credentials $CLUSTER_NAME --region $CLUSTER_LOCATION --project $CLUSTER_PROJECT_ID
  after_script:
    - vault token revoke -self

2020年3月更新:gitlab 12.9

支持这一点

Hashicorp Vault Gitlab CI/CD托管应用程序

Gitlab希望使用户可以轻松拥有现代秘密管理。现在,我们为用户提供了在Kubernetes群集中安装库的能力,作为Gitlab CI托管申请过程的一部分。
这将支持掌舵图表的项目级别的密钥,令牌和其他秘密的安全管理。

请参阅文档和问题。


2020年4月:Gitlab 12.10:

从Hashicorp Vault检索CI/CD秘密

在此版本中, gitlab添加了对轻量级JSON Web令牌(JWT(身份验证的支持,以与您现有的Hashicorp Vault 进行集成。

现在,您可以通过利用Hashicorp的JWT身份验证方法来无缝地为CI/CD作业提供秘密,而不是手动必须在Gitlab中提供秘密作为变量。

请参阅文档和问题。


参见Gitlab 13.4(2020年9月(

仅适用于高级/白银:

在CI Jobs中使用Hashicorp Vault Secret

在Gitlab 12.10中,GitLab引入了GitLab Runner的功能,以将秘密获取并注入CI作业。GitLab现在通过在.gitlab-ci.yml文件中构建新的secrets语法来扩展JWT Vault身份验证方法。这使您更容易与gitlab配置和使用hashicorp库。

https://about.gitlab.com/images/13_4/vault_ci.png-在CI Jobs中使用Hashicorp Vault Secrets

请参阅文档和问题。


参见Gitlab 13.9(2021年2月(

Vault JWT(JSON Web令牌(支持Gitlab环境。

为了简化与Hashicorp保险库的集成,我们已经发货了Vault JWT令牌支持。从发布中,您可以根据JWT中的数据。此版本为您提供了限制的新维度访问凭据:作业目标的环境。

此版本扩展了现有的Vault JWT令牌以支持基于环境的也限制。由于environment名称可以由运行的用户提供管道,我们建议您使用新的基于环境的限制最大安全性已经存在的ref_type值。

请参阅文档和问题。

我们在建造者图像中烤了一个辅助脚本,可以将指向秘密的gitlab ci/cd作业变量转换为包含金库秘密的作业env vars。在我们的情况下,我们还使用Accepto auth方法来限制临时保险箱访问令牌的有效性。

一个例子是:

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.

添加到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

添加到.gitlab-ci.yml作业定义的步骤。

script:
  - get-vault-secrets-by-approle > ${VAULT_VAR_FILE}
  - source ${VAULT_VAR_FILE} && rm ${VAULT_VAR_FILE}

这是对我们使用的Get-vault-scretscrets-by-approle辅助脚本的引用。
这是设计背后思维的文章。

" trefor_script"选项不符合我们的工作流程,因为我们在gitlab-ci.yml定义中定义了特权和非私有阶段的组合。特权作业包和发布代码时,非特权作业构建和QA代码。Vault_role_id和Vault_secret_id作业变量仅应为特权软件包和发布作业可见。

我还尝试了使用Include's,Extend和Yaml锚点,但我想将项目合并到现有的YAML地图(script: {}before_script: {}(中,而不是用模板中的地图中的所有项目。

相关内容

最新更新