使用集群管理项目安装 Vault
- Tier: Free, Premium, Ultimate
- Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
HashiCorp Vault 是一个密钥管理解决方案, 可用于安全地管理和存储密码、凭证、证书等。通过安装 Vault, 可以为您的应用程序、GitLab CI/CD 作业等使用的凭证提供单一的安全数据存储。 它还可以作为为基础设施中的系统和部署提供 SSL/TLS 证书的一种方式。 利用 Vault 作为所有这些凭证的单一来源, 可以通过单一访问源、控制点和审计性来提高安全性, 围绕所有敏感凭证和证书进行管理。此功能需要授予 GitLab 最高级别的访问权限和控制权。 因此,如果 GitLab 被攻破,这个 Vault 实例的安全性也会受到威胁。 为避免此安全风险,GitLab 建议使用您自己的 HashiCorp Vault 来利用 CI 外部密钥。
假设您已经从
管理项目模板 创建了项目,
要安装 Vault,您应该从 helmfile.yaml 中取消注释这一行:
- path: applications/vault/helmfile.yaml默认情况下,您会获得一个基本 Vault 设置,没有可扩展的存储后端。 这对于简单测试和小规模部署来说已经足够,但它的扩展能力有限, 并且由于它是单实例部署,升级 Vault 应用程序会导致停机。
要在生产环境中最佳地使用 Vault,理想情况下您应该对 Vault 的内部结构
以及如何配置它有深入的了解。这可以通过阅读
Vault 配置指南、
Vault 文档 和
Vault Helm chart 的 values.yaml 文件 来实现。
至少,大多数用户会设置:
- 一个 seal 用于主密钥的额外加密
- 一个 storage backend, 适合环境和存储安全要求
- HA Mode
- Vault UI
以下是一个示例 values 文件(applications/vault/values.yaml),
它配置了 Google Key Management Service 用于自动解封,
使用 Google Cloud Storage 后端,启用 Vault UI,
并启用 HA 模式,包含 3 个 pod 副本。
下面的 storage 和 seal 部分是示例,应替换为适合您环境的特定设置。
# 启用 Vault WebUI
ui:
enabled: true
server:
# 禁用内置数据存储卷,因为它不适合高可用模式
dataStorage:
enabled: false
# 启用高可用模式
ha:
enabled: true
# 配置 Vault 监听 8200 端口用于正常流量,8201 端口用于集群间流量
config: |
listener "tcp" {
tls_disable = 1
address = "[::]:8200"
cluster_address = "[::]:8201"
}
# 配置 Vault 将数据存储在 GCS Bucket 后端
storage "gcs" {
path = "gcs://my-vault-storage/vault-bucket"
ha_enabled = "true"
}
# 配置 Vault 使用 GKMS 密钥进行存储解封
seal "gcpckms" {
project = "vault-helm-dev-246514"
region = "global"
key_ring = "vault-helm-unseal-kr"
crypto_key = "vault-helm-unseal-key"
}成功安装 Vault 后,您必须
初始化 Vault
并获取初始 root token。您需要访问部署了 Vault 的 Kubernetes 集群才能执行此操作。
要初始化 Vault,请获取一个运行在 Kubernetes 内部的 Vault pod 的 shell
(通常使用 kubectl 命令行工具完成)。当您进入 pod 的 shell 后,
运行 vault operator init 命令:
kubectl -n gitlab-managed-apps exec -it vault-0 sh
/ $ vault operator init这应该会为您提供解封密钥和初始 root token。请务必记录下这些信息并妥善保管, 因为在 Vault 的整个生命周期中都需要它们来解封 Vault。