Подключить Hashicorp Vault для секретов
На этой странице
HashiCorp Vault является комплексным решением по управлению жизненным циклом секретов. Для получения доступа к секретам Vault вы можете использовать оператор Vault Secrets Operator в кластере Kubernetes. Оператор синхронизирует секреты между Vault и Kubernetes в неймспейсе кластера.
Helm чарт vault-secrets-operator
не поставляется совместно с платформой “Штурвал”. Вы можете выполнить установку оператора в кластер из консоли и настроить интеграцию между Vault и Kubernetes. Для настройки интеграции необходимо иметь подключенный сервер Vault.
Для удобства все действия по инструкции выполняются из консоли. Создание неймспейса и управление ресурсами неймспейса также доступно в графическом интерфейсе платформы “Штурвал”.
У HashiCorp Vault есть ограничения для пользователей из РФ, поэтому интеграция возможна при прямой установке чарта vault-secrets-operator
, если у вас открыт к нему доступ, или из зеркала.
Установка чарта
- Авторизуйтесь в кластере из консоли, используя kubeconfig кластера. Подробнее о способах получения kubeconfig на странице Действия в кластере.
- После успешной авторизации создайте в кластере неймспейс, например, с именем
vault-operator
, где будет установлен vault-secrets-operator.
Команда
kubectl create namespace vault-operator
Скриншот
- Загрузите репозиторий helm чарта
vault-secrets-operator
.
Команда
git clone https://github.com/hashicorp/vault-secrets-operator.git
Скриншот
- Установите чарт
vault-secrets-operator
в ранее созданный неймспейсvault-operator
.
Команда
# Переход в директорию чарта
cd vault-secrets-operator/chart
# Установка
helm install -n vault-operator vault-operator .
Скриншот
- Убедитесь, что оператор запущен и получите имя созданного при установке Service Account.
Команда
kubectl get pod -n vault-operator
kubectl get sa -n vault-operator
Скриншот
- Добавьте кластерную роль
system:auth-delegator
в Service Account, для этого создайте ClusterRoleBinding.
Команда
kubectl apply -f - <<EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: system:auth-delegator
subjects:
kind: ServiceAccount
name: name-service-account
namespace: vault-operator
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: system:auth-delegator
> EOF
Скриншот
- Создайте секрет с сертификатом центра сертификации (CA), которым подписан сертификат Vault. Укажите:
- имя Service Account, созданного при установке чарта;
- тип секрета
kubernetes.io/service-account-token
; - название неймспейса
vault-operator
, где установлен vault-secrets-operator.
Команда
kubectl apply -f - <<EOF
apiVersion: v1
kind: Secret
metadata:
name: name-vault-secret
namespace: vault-operator
annotations:
kubernetes.io/service-account.name: name-service-account
type: kubernetes.io/service-account-token
EOF
Скриншот
Настройка интеграции
По завершению установки в нейсмпейс оператора vault-secrets-operator необходимо на стороне сервера Vault настроить метод аутентификации, который позволит проходить аутентификацию с помощью токена Service Account Kubernetes.
- Для конфигурации метода аутентификации потребуется токен и сертификат центра сертификации (CA) кластера Kubernetes из секрета, созданного на шаге установки чарта.
Команда
# Получение токена JSON (JWT) ServiceAccount, под которым работает vault-secrets-operator
kubectl get secret -n vault-operator name-vault-secret -o jsonpath='{.data.token}' | base64 --decode
# Получение сертификата центра сертификации (CA) кластера Kubernetes
kubectl get secret -n vault-operator name-vault-secret -o jsonpath="{.data.ca\.crt}" | base64 --decode
Скриншот
- Перейдите на сервер Vault и сконфигурируйте новый метод аутентификации, например, с названием kubernetes. При настройке вам понадобятся токен и сертификат, полученные на 1 шаге данного раздела. В конфигурации указывайте имя Service Account, созданного при установке чарта.
- По окончании конфигурирования метода на сервере Vault вернитесь в консоль. В директории чарта
/vault-secrets-operator/chart
завершите настройку интеграции с Vault, создав два кастомных ресурса VaultConnection и VaultAuth.
Команда
# Создание кастомного ресурса VaultConnection.
# Укажите URL адреса сервера Vault в параметре address и имя секрета c сертификатом в spec
kubectl apply -f - <<EOF
apiVersion: secrets.hashicorp.com/v1beta1
kind: VaultConnection
metadata:
name: nameVaultConnection
namespace: vault-operator
spec:
address: https://address:5500
caCertSecretRef: name-vault-secret
skipTLSVerify: true
EOF
# Создание кастомного ресурса VaultAuth.
# Укажите данные согласно сконфигурированными данным в методе аутентификации на сервере Vault
kubectl apply -f - <<EOF
apiVersion: secrets.hashicorp.com/v1beta1
kind: VaultAuth
metadata:
name: nameVaultAuth
namespace: vault-operator
spec:
kubernetes:
role: name-vault-secret
serviceAccount: name-service-account
tokenExpirationSeconds: 600
method: kubernetes
mount: namepath
vaultConnectionRef: default
EOF
Скриншот
- Чтобы проверить интеграцию, вы можете создать кастомный ресурс Vaultstaticsecret с запросом на создание секрета Kubernates.
Пример Vaultstaticsecret
apiVersion: secrets.hashicorp.com/v1beta1
kind: VaultStaticSecret
metadata:
name: vault-static-secret
spec:
vaultAuthRef: nameVaultAuth
mount: namepath
# Тип хранилища секретов Vault
type: type-secret
# Путь до секрета в Vault
path: path-secret
refreshAfter: 10s
destination:
create: true
# Имя секрета, который будет создан в Kubernetes
name: name-secret-kubernates