Что такое Vault?
Vault — это инструмент от HashiCorp для безопасного хранения, управления и контроля доступа к секретам, таким как:
- логины и пароли
- токены API
- сертификаты
- ключи шифрования
- временные учётные данные для облаков или баз данных
Vault позволяет:
- выдавать временные токены доступа к системам
- централизовать управление всеми секретами
- автоматически ротацировать пароли и ключи
- использовать гибкую систему policy и RBAC
Vault особенно хорош в микросервисной и Kubernetes-инфраструктуре:
- поды могут безопасно запрашивать секреты (через Vault Agent или API)
- доступ к секретам выдается строго по policy и ролям
- интеграция с Kubernetes, AWS, GCP и другими провайдерами
Почему Vault лучше, чем .env файлы или Kubernetes Secrets
- K8s Secrets не шифруются по умолчанию (только Base64)
- Они не имеют политики жизни (TTL, revoke)
- Vault поддерживает централизованное логирование, аудит и контроль
- Vault умеет ротацию секретов и dynamic credentials
Общая задача
- Установить Vault в Kubernetes-кластере
- Работать без Web UI
- Всё только через CLI/API
- Учёт прокси, портов, NodePort, firewall
Пререквизиты
- Kubernetes кластер работает (kubeadm, без Ingress)
- helm >= 3.0
- kubectl конфиг настроен
- Vault CLI (ручная установка, т.к. Homebrew его больше не ставит)
Vault CLI (macOS arm):
curl -LO https://releases.hashicorp.com/vault/1.19.1/vault_1.19.1_darwin_arm64.zip
unzip vault_1.19.1_darwin_arm64.zip
chmod +x vault
sudo mv vault /usr/local/bin/
Конфиг vault-values.yaml
global:
enabled: true
tlsDisable: true
server:
ha:
enabled: false
standalone:
enabled: true
dataStorage:
enabled: true
size: 2Gi
ui:
enabled: false
service:
type: ClusterIP
extraEnvironmentVars:
VAULT_LOG_LEVEL: debug
VAULT_UI: "false"
readinessProbe:
enabled: false
livenessProbe:
enabled: false
Helm install (с прокси)
Если HashiCorp блокирует страну, нужен прокси:
export https_proxy=http://127.0.0.1:7890
export http_proxy=http://127.0.0.1:7890
export all_proxy=socks5://127.0.0.1:7890
Добавить repo
helm repo add hashicorp https://helm.releases.hashicorp.com
helm repo update
Установка Vault:
helm install vault hashicorp/vault \
--namespace vault --create-namespace \
-f vault-values.yaml
Важно: PVC и Pending
По умолчанию Vault создаёт PersistentVolumeClaim.
Варианты решения:
- Отключить
dataStorage.enabled: false
(тогда Vault работает в RAM) - Установить
local-path-provisioner
:
kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/master/deploy/local-path-storage.yaml
kubectl patch storageclass local-path -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
Инициализация Vault
kubectl -n vault exec -ti vault-0 -- /bin/sh
vault operator init
Сохрани Unseal Keys (3+)
Сохрани Root Token
Unseal:
vault operator unseal <key1>
vault operator unseal <key2>
vault operator unseal <key3>
CLI-доступ
Через port-forward (если нужно локально):
kubectl -n vault port-forward svc/vault 8200:8200
export VAULT_ADDR=http://127.0.0.1:8200
Через NodePort (если временно нужен доступ снаружи):
- Узнай IP ноды Vault:
kubectl -n vault get pod -o wide
- Убедись, что на этой ноде порт слушает:
ss -tuln | grep 32000
Если нет — kube-proxy не пробросил, pod находится на другой ноде.
Web UI: запрещен
- UI отключен во имя безопасности
- Vault доступен только из подов
- Все операции через CLI/API
Готово для:
vault secrets enable kv-v2
vault kv put secret/myapp/config username=admin password=hunter2
vault auth enable kubernetes
- и дальше по политикам, ролям, JWT и ServiceAccount
Заключение
Это реалистичный, CLI-ориентированный старт Vault-сетапа. Без веб-гламура, но зато контролируемо, безопасно и в стиле SRE. Используйте его как фундамент для построения production-инфраструктуры с безопасным управлением секретами.