➡️ Зачем это нужно?
— Хранить секреты в специализированных системах (Vault, AWS Secrets Manager)
— Автоматически обновлять секреты в Kubernetes при изменении во внешнем хранилище
— Избегать хранения чувствительных данных в Git и ConfigMaps
— Реализовать принцип zero-trust для секретов
➡️ Ключевые принципы
— SecretStore: CRD для конфигурации провайдера (Vault, AWS и т.д.). Указывает аутентификацию и параметры подключения.
— ExternalSecret: CRD, который ссылается на SecretStore и описывает, какие внешние секреты синхронизировать в K8s Secret.
— Синхронизация: Оператор периодически проверяет внешний источник и обновляет Secret в кластере.
➡️ Практический пример:
интеграция с HashiCorp Vault
📍 Создание SecretStore для Vault:
apiVersion: external-secrets.io/v1beta1
kind: SecretStore
metadata:
name: vault-secret-store
namespace: dev
spec:
provider:
vault:
server: "https://vault.example.ru"
path: "secret/project"
version: "v2"
auth:
kubernetes:
mountPath: "kubernetes"
role: "external-secrets-operator"
serviceAccountRef:
name: external-secrets-operator
📍 Создание ExternalSecret:
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
name: app-secrets
namespace: dev
spec:
refreshInterval: "5m"
secretStoreRef:
name: vault-secret-store
kind: SecretStore
target:
name: application-secrets
dataFrom:
- extract:
key: dev/app/config
➡️ Что происходит после применения:
📍ESO подключается к Vault используя настроенный SecretStore
📍Читает секреты по указанному пути (dev/app/config)
📍Создаёт или обновляет Kubernetes Secret application-secrets в namespace dev
📍Автоматически обновляет secret каждые 5 минут
Поддерживаемые провайдеры:
— HashiCorp Vault
— AWS Secrets Manager
— GCP Secret Manager
— Azure Key Vault
— Kubernetes (другой кластер)
— GitLab CI/CD Variables
— 1Password, LastPass и другие
External Secrets Operator превращает управление секретами из рутинной операционной задачи в декларативный и безопасный процесс.
#заметкиИнженера
