首页 > 解决方案 > 将 Hashicorp Vault 与 GitLab 管道一起使用的最佳方式是什么?

问题描述

假设我想用 Vault 中的值创建一个变量。

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

是否可以?

还有其他方法可以在管道中使用 Vault 机密吗?

标签: gitlabgitlab-cihashicorp-vault

解决方案


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 希望让用户轻松进行现代机密管理。作为 GitLab CI 托管应用程序流程的一部分,我们现在为用户提供在 Kubernetes 集群中安装 Vault 的能力。
这将支持 Helm 图表安装中项目级别的密钥、令牌和其他机密的安全管理。

请参阅文档问题


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 作业中使用 HashiCorp Vault 机密

在 GitLab 12.10 中,GitLab 为 GitLab Runner 引入了获取机密并将其注入 CI 作业的功能。GitLab 现在通过在文件中构建新语法来扩展JWT Vault 身份验证方法。这使您可以更轻松地通过 GitLab 配置和使用 HashiCorp Vault。secrets.gitlab-ci.yml

https://about.gitlab.com/images/13_4/vault_ci.png -- 在 CI 作业中使用 HashiCorp Vault 机密

请参阅文档问题


请参阅GitLab 13.9(2021 年 2 月)

Vault JWT(JSON Web Token)支持 GitLab 环境。

为了简化与 HashiCorp Vault 的集成,我们提供了 Vault JWT 令牌支持。从启动开始,您可以根据 JWT 中的数据限制访问。此版本为您提供了限制对凭据的访问的新维度:作业目标环境。

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

请参阅文档问题


推荐阅读