HashiCorp Vault — инструмент с открытым исходным кодом, который обеспечивает безопасное хранение и шифрование конфиденциальных данных, а также доступ к данным на основе идентификации с помощью настраиваемых политик.
Установка HashiCorp Vault состоит из следующих этапов:
- Загрузка Helm-чарта и конфигурационного файла Vault.
- Заполнение конфигурационного файла Vault.
- Установка Vault с помощью Helm в Kubernetes-кластер.
- Настройка Vault.
Шаг 1: Загрузка Helm-чарта и конфигурационного файла Vault
Для установки через интернет получите конфигурационный файл values-vault.yaml
, выполнив команду:
helm repo add elma365 https://charts.elma365.tech
helm repo update
helm show values elma365/vault > values-vault.yaml
Получение конфигурационного файла для установки в закрытом контуре без доступа в интернет
helm repo add elma365 https://charts.elma365.tech Подробнее об этом читайте в статье «Загрузка образов ELMA365».
tar -xf vault-X.Y.Z.tgz |
Шаг 2: Заполнение конфигурационного файла Vault
Заполните конфигурационный файл values-vault.yaml
для установки сервиса Vault.
// Настройки vault
vault:
global:
// если не определено, используется StorageClass по умолчанию
storageClass: ""
...
Для подключения к приватному registry нужно:
// Настройки vault Где:
|
Шаг 3: Установка Vault с помощью Helm в Kubernetes-кластер
Выполните установку сервиса Vault в отдельный namespace
, например, в vault. Namespace
будет создан во время установки, если не был создан ранее.
Для установки через интернет выполните команду:
helm upgrade --install vault elma365/vault -f values-vault.yaml -n vault --create-namespace
Для офлайн-установки без доступа в интернет перейдите в каталог с загруженным сервисом и выполните команду:
helm upgrade --install vault ./vault -f values-vault.yaml -n vault --create-namespace
Шаг 4: Настройка Vault
- Проверьте, что
vault-server-0
в статусеRunning
:
kubectl get pods -n vault
2. Инициализируйте Vault:
kubectl exec -ti vault-server-0 -n vault -- vault operator init
3. После инициализации получите список ключей (Unseal Key X:
) и корневой токен (Initial Root Token
). Используйте три ключа, чтобы распечатать сервис Vault:
kubectl exec vault-server-0 -n vault -- vault operator unseal <Unseal Key 1>
kubectl exec vault-server-0 -n vault -- vault operator unseal <Unseal Key 2>
kubectl exec vault-server-0 -n vault -- vault operator unseal <Unseal Key 3>
Начало внимание
В случае перезагрузки сервиса Vault его снова нужно будет распечатать с помощью ключей.
Конец внимание
4. После инициализации и распечатки сервиса подключитесь к vault-server-0
и авторизуйтесь в Vault, используя корневой ключ (Initial Root Token
):
kubectl exec -ti vault-server-0 -n vault -- /bin/sh
vault login
5. Проверьте состояние сервиса:
vault status
6. Включите механизм секретов kv-v2
по пути secret
:
vault secrets enable -path=secret kv-v2
7. Создайте секрет по пути secret/elma365/db
. В качестве секрета укажите актуальные строки подключения (сonnection strings
) для соединения с БД и параметры для соединения с S3-хранилищем файлов по аналогии с values-elma365.yaml: PSQL_URL
, RO_POSTGRES_URL
, MONGO_URL
, VAHTER_MONGO_URL
, REDIS_URL
, AMQP_URL
, S3_BACKEND_ADDRESS
, S3_REGION
, S3_KEY
, S3_SECRET
, S3_BUCKET
, S3_SSL_ENABLED
, S3_UPLOAD_METHOD
, S3_DUMP_URL
, S3_VIRTUAL_HOSTED_STYLE_ENABLED
.
Если параметр не используется, например RO_POSTGRES_URL
или S3_DUMP_URL
, создайте его с пустым значением:
vault kv put secret/elma365/db \
PSQL_URL="postgresql://postgres:pgpassword@postgres.default.svc.cluster.local:5432/elma365?sslmode=disable" \
RO_POSTGRES_URL="" \
MONGO_URL="mongodb://elma365:mongopassword@mongo.default.svc.cluster.local:27017/elma365?ssl=false&replicaSet=rs0&readPreference=secondaryPreferred" \
VAHTER_MONGO_URL="mongodb://elma365:mongopassword@mongo.default.svc.cluster.local:27017/elma365?ssl=false&replicaSet=rs0&readPreference=secondaryPreferred" \
REDIS_URL="redis://redis.default.svc.cluster.local:6379/0" \
AMQP_URL="amqp://elma365:rmqpassword@rabbitmq.default.svc.cluster.local:5672/elma365" \
S3_BACKEND_ADDRESS="example.ru" \
S3_REGION="us-east-1" \
S3_KEY="PZSF73JG72Ksd955JKU1HIA" \
S3_SECRET="aFDkj28Jbs2JKbnvJH678MNwiz88zKjsuNBHHs" \
S3_BUCKET="s3elma365" \
S3_SSL_ENABLED="false" \
S3_UPLOAD_METHOD="PUT" \
S3_DUMP_URL="" \
S3_VIRTUAL_HOSTED_STYLE_ENABLED="false"
8. Убедитесь, что секрет создан по пути secret/elma365/db
:
vault kv get secret/elma365/db
9. Включите метод аутентификации Kubernetes:
vault auth enable kubernetes
10. Настройте метод аутентификации Kubernetes для использования расположения API Kubernetes:
vault write auth/kubernetes/config \
kubernetes_host="https://$KUBERNETES_PORT_443_TCP_ADDR:443"
11. Создайте политику на чтение секретов по адресу secret/data/elma365/db
:
vault policy write read-secret-elma365 - <<EOF
path "secret/data/elma365/db" {
capabilities = ["read"]
}
EOF
12. Создайте роль с именем read-secret-elma365, которая свяжет политику read-secret-elma365 с сервисным аккаунтом vault-auth в namespace
, где установлена ELMA365, например elma365. Сервис-аккаунт создаётся следующей командой:
vault write auth/kubernetes/role/read-secret-elma365 \
bound_service_account_names=vault-auth \
bound_service_account_namespaces=elma365 \
policies=read-secret-elma365 \
ttl=24h
13. Выйдите из Vault:
exit
14. Создайте сервисный аккаунт vault-auth в namespace
, где установлена ELMA365, например elma365:
kubectl create serviceaccount vault-auth -n elma365
Синхронизировать секреты в Kubernetes-кластере, используя HashiCorp Vault, можно с помощью External Secrets Operator. Подробнее читайте в статье «Установка External Secrets Operator».
Удалить Vault с помощью Helm в Kubernetes-кластере
Чтобы удалить сервис Vault в namespace
vault, выполните команду:
helm uninstall vault -n vault