HashiCorp Vault — Від початківця до майстра

Історія успіху DIY від команди, яка впровадила HashiCorp Vault для керування секретами Kubernetes

Вступ

Це вигадана історія про команду, яка була розгромлена після аудиту безпеки через зберігання облікових даних бази даних у відкритому вигляді для свого веб-додатку.

Дізнайтеся, як вони пройшли шлях з нуля до використання динамічного, масштабованого та безпечного робочого процесу за допомогою HashiCorp Vault за 5 кроків.

У цьому блозі ми охопимо наступні теми:

  • Налаштування автентифікації Vault AppRole
  • Налаштування та використання External Secrets Manager
  • Налаштування автентифікації Vault для Kubernetes
  • Налаштування та використання Vault Secrets Operator
  • Налаштування та використання Vault Agent Injector
  • Налаштування механізму секретів Vault для бази даних Postgres

Додаток

Перш за все, давайте поговоримо про додаток, який буде використовуватися в цьому блозі. Сам додаток досить простий, з ~100 рядків коду. Це веб-додаток, який бере кілька змінних середовища (DB_HOST, DB_PORT, DB_USER, DB_PASSWORD і DB_NAME) і підключається до бази даних Postgres. Потім він відображає облікові дані та статус підключення на веб-сервері, що працює на порту 9090.

Додаток контейнеризований (falcosuessgott/vault-from-zero-to-hero), що означає, що його буде розгорнуто як Deployment в кластері Kubernetes. Після того як demo-app буде розгорнуто та працюватиме з наданими обліковими даними Postgres, веб-сервер відповість коротким повідомленням про статус і поверне 200 (OK) або 500 (помилка):

> curl localhost:9090  
DB: 127.0.0.1:5432  
User: postgres  
Password: P@ssw0rd  
Ping: success

Цей demo-app буде використовуватися протягом цього блогу для демонстрації того, як облікові дані бази даних були отримані та надані додатку.

Як працює цей блог

Ви можете виконати всі кроки, зазначені тут, самостійно. Я опишу, як налаштувати всі компоненти та виконати налаштування локально за допомогою docker та kind.

Скорочено

Якщо ви занадто лінивий, щоб слідувати інструкціям, просто перегляньте E2E пайплайни GitHub Action, які виконують всі кроки, зазначені в цьому блозі (перейдіть до кроку deploy).

Попередні вимоги

Щоб слідувати інструкціям, вам потрібно мати встановлені наступні інструменти:

  • docker
  • kubectl
  • kind
  • vault
  • helm
  • curl
  • jq

Репозиторій

Усі необхідні скрипти та конфігурації доступні в цьому репозиторії. Ви можете просто клонувати його:

> git clone https://github.com/clear-route/hashicorp-vault-from-zero-to-hero.git  
> cd hashicorp-vault-from-zero-to-hero

Makefile містить всі необхідні команди для запуску кожної частини для вашої зручності.

Kubernetes

Нам потрібен локальний кластер Kubernetes. Для цього блогу я буду використовувати kind, але ви можете використовувати будь-який дистрибутив Kubernetes, який вам зручний та доступний. Якщо ви використовуєте kind, ви можете використати наступний скрипт для створення кластера kind:

# scripts/setup-kind.sh  

# Запускаємо кластер Kubernetes за допомого  
 --config manifests/kind-config.yml

Після налаштування команда kubectl get ns повинна пройти успішно:

> kubectl get ns  
NAME STATUS AGE  
default Active 30s  
kube-node-lease Active 30s  
kube-public Active 30s  
kube-system Active 30s  
local-path-storage Active 25s

Postgres

Нам також потрібна база даних Postgres. Ось команда, яка запускає локальну базу даних postgres:

# scripts/setup-postgres.sh  

# Запускаємо контейнер з postgres  
docker run -d --rm \  
 --name postgres \  
 -p 5432:5432 \  
 -e POSTGRES_USER=postgres \  
 -e POSTGRES_PASSWORD=P@ssw0rd \  
 -e POSTGRES_DB=vault \  
 postgres

Vault

Нарешті, нам потрібен екземпляр Vault.
Я буду використовувати контейнер Vault на базі docker, з попередньо заданим токеном Vault для простоти:

# scripts/setup-vault.sh  

# Запускаємо контейнер Vault  
docker run -d --rm \  
 --add-host host.docker.internal:host-gateway \  
 --cap-add=IPC_LOCK \  
 --name vault \  
 -p 8200:  
 -e VAULT_DEV_LISTEN_ADDRESS=0.0.0.0:8200 \  
 hashicorp/vault

Після того як ви налаштуєте змінні середовища для Vault:

export VAULT_ADDR="http://127.0.0.1:8200"  
export VAULT_TOKEN="root"

команда vault status повинна повернути здоровий екземпляр Vault:

> vault status  
Key Value  
--- -----  
Seal Type shamir  
Initialized true  
Sealed false  
Total Shares 1  
Threshold 1  
Version 1.18.3  
Build Date 2024-12-16T14:00:53Z  
Storage Type inmem  
Cluster Name vault-cluster-0107973c  
Cluster ID e39a93ab-6eda-1223-4894-0f7a6c867776  
HA Enabled false

Очищення

Якщо ви досягли тупика, ви завжди можете скинути своє локальне середовище:

# scripts/cleanup.sh  

# Видалити кластер kind  
kind delete cluster --name vault-from-zero-to-hero  

# Зупинити та видалити docker-образи  
docker stop vault postgres  
docker rm vault postgres

Поточний стан: Жорстко задані статичні облікові дані у відкритому вигляді

Гаразд, ми готові до роботи. Поточний стан для нашої вигаданої команди та їхнього управління секретами не міг бути гіршим, і я серйозно — Ніколи не робіть цього — навіть не в розробці.

Команда просто передавала облікові дані бази даних у свій додаток, вказуючи необхідні змінні середовища в маніфесті Deployment:

# manifests/demo-app-hardcoded.yaml  
apiVersion: apps/v1  
kind: Deployment  
metadata:  
 name: demo-app  
 labels:  
 app: demo-app  
spec:  
 replicas: 1  
 selector:  
 matchLabels:  
 app: demo-app  
 template:  
 metadata:  
 labels:  
 app: demo-app  
 spec:  
 containers:  
 - name: vault-from-zero-to-hero  
 image: falcosuessgott/vault-from-zero-to-hero  
 ports:  
 - containerPort: 9090  
 env:  
 - name: DB_HOST  
 value: "172.17.0.1"  
 - name: DB_PORT  
 value: "5432"  
 - name: DB_USER  
 value: postgres  
 # Це погано - не робіть так!  
 - name: DB_PASSWORD  
 value: P@ssw0rd  
 - name: DB_NAME  
 value: vault

Незважаючи на всі питання безпеки, — додаток demo-app працює як очікується. Після розгортання ми можемо побачити, що з’єднання з базою даних було успішно встановлено, використовуючи надані облікові дані:

> kubectl apply -f manifests/demo-app-hardcoded.yaml  
> kubectl exec $(kubectl get po -l app=demo-app -o jsonpath='{.items[*].metadata.name}') -- curl --fail-with-body -s localhost:9090  
DB: 172.17.0.1:5432  
User: postgres  
Password: P@ssw0rd  
Ping: success

Як і можна було очікувати, під час аудиту команда безпеки знайшла жорстко задані облікові дані в їхньому репозиторії Git і помітила цей додаток. Ось де починається наша історія про впровадження HashiCorp Vault.

Частина 02: Статичні облікові дані від HashiCorp та External Secrets Manager — [⭐]

Після аудиту команді більше не дозволялося жорстко задавати облікові дані бази даних у відкритих маніфестах Kubernetes. Їм потрібно було знайти рішення для керування секретами. На щастя, інфраструктурна команда вже підтримувала кластер HashiCorp Vault для внутрішнього використання.

Команда провела дослідження щодо Vault і дізналася, що вони можуть зберігати облікові дані бази даних у механізмі секретів KVv2 Vault.
Після отримання доступу до Vault один з учасників команди вніс облікові дані в уже існуючий механізм Kvv2 секретів:

# записуємо секрети у Vault  
> vault kv put secret/database/postgres username=postgres password=P@ssw0rd  
======== Шлях до секрету ========  
secret/data/database/postgres  

======= Метадані =======  
Ключ Значення  
--- -----  
created_time 2025-01-05T22:49:52.814816755Z  
custom_metadata   
deletion_time n/a  
destroyed false  
version 1  

# список секретів  
> vkv export -p secret --show-values  
secret/ [desc=key/value секретне сховище] [type=kv2]  
└── database  
 └── postgres [v=1]  
 ├── password=P@ssw0rd  
 └── username=postgres

Тепер все, що їм залишалося зробити — це помістити секрет Vault KVv2 у Kubernetes секрет, так? Після додаткових досліджень команда додатку дізналася про External Secrets Manager (ESM) — оператора Kubernetes, який синхронізує Kubernetes Secrets з різних постачальників, таких як HashiCorp Vault.

Налаштування External Secrets Manager

Встановлення було досить простим.
Вони просто мали використати helm chart для встановлення оператора:

# scripts/setup-esm.sh  

# додаємо репозиторій ESM helm chart  
helm repo add external-secrets https://charts.external-secrets.io  

# отримуємо чарт  
helm repo update  

# встановлюємо ESM helm chart  
helm install external-secrets \  
 external-secrets/external-secrets \  
 -n external-secrets \  
 --create-namespace \  
 --set installCRDs=true  

# чекаємо, поки ESM контейнери стануть готовими  
kubectl wait \  
 --for=condition  
 --timeout=180s \  
 -n external-secrets

Потім, згідно з документацією, був потрібен CRD типу SecretStore, що вказує на з'єднання з Vault і шлях до механізму секретів KVv2:

# manifests/esm-secret-store-token.yml  
apiVersion: external-secrets.io/v1beta1  
kind: SecretStore  
metadata:  
 name: vault-backend  
spec:  
 provider:  
 vault:  
 server: http://172.17.0.1:8200  
 path: secret  
 version: v2  
 auth:  
 tokenSecretRef:  
 name: vault-token  
 key: token  
---  
apiVersion: v1  
kind: Secret  
metadata:  
 name: vault-token  
data:  
 token: cm9vdA== # "root"

Нарешті, був потрібен ExternalSecret CRD, який посилається на SecretStore і вказує, що секрет Kvv2 має бути синхронізований з Kubernetes секретом:

# manifests/esm-external-secret.yml  
apiVersion: external-secrets.io/v1beta1  
kind: ExternalSecret  
metadata:  
 name: postgres-creds  
spec:  
 refreshInterval: "1h"  
 secretStoreRef:  
 name: vault-backend  
 kind: SecretStore  
 target:  
 name: postgres-creds  
 data:  
 - secretKey: username  
 remoteRef:  
 key: database/postgres  
 property: username  
 - secretKey: password  
 remoteRef:  
 key: database/postgres  
 property: password

Після застосування маніфестів, вони побачили, що дійсно Kubernetes Secret під назвою postgres-creds був заповнений обліковими даними бази даних з Vault:

> kubectl get secret postgres-creds -o json | jq '.data | map_values(@base64d)'  
{  
 "password": "P@ssw0rd",  
 "username": "postgres"  
}

Виглядає чудово! Тепер усе, що залишалося зробити — це посилатися на секрет postgres-creds в маніфесті розгортання додатку за допомогою envFrom:

# manifests/demo-app-k8s-secret.yaml  
apiVersion: apps/v1  
kind: Deployment  
metadata:  
 name: demo-app  
 labels:  
 app: demo-app  
spec:  
 replicas: 1  
 selector:  
 matchLabels:  
 app: demo-app  
 template:  
 metadata:  
 labels:  
 app: demo-app  
 spec:  
 containers:  
 - name: vault-from-zero-to-hero  
 image: falcosuessgott/vault-from-zero-to-hero  
 ports:  
 - containerPort: 9090  
 env:  
 - name: DB_HOST  
 value: "172.17.0.1"  
 - name: DB_PORT  
 value: "5432"  
 - name: DB_USER  
 valueFrom:  
 secretKeyRef:  
 name: postgres-creds  
 key: username  
 - name: DB_PASSWORD  
 valueFrom:  
 secretKeyRef:  
 name: postgres-creds  
 key: password  
 - name: DB_NAME  
 value: vault

І ... Voilà, demo-app запущено і він успішно підключається до бази даних postgres за допомогою облікових даних, збережених у Vault:

> kubectl apply -f manifests/demo-app-k8s-secret.yaml  
> kubectl exec $(kubectl get po -l app=demo-app -o jsonpath='{.items[*].metadata.name}') -- curl --fail-with-body -s localhost:9090  
DB: 172.17.0.1:5432  
User: postgres  
Password: P@ssw0rd  
Ping: success

Команда була задоволена, вони прийняли Vault як рішення для управління секретами і більше не потрібно було хардкодити облікові дані бази даних в маніфесті demo-app. Усі питання, виявлені під час аудиту, були вирішені, і тепер команда могла зосередитись на розробці нових функцій...
правда?

Частина 03: Статичні облікові дані з HashiCorp Vault за допомогою Approle аутентифікації та External Secrets Manager — [⭐⭐]

Ну, не зовсім, після подальшої консультації з командою безпеки, було виявлено, що тепер вони більше не хардкодять облікові дані postgres, але тепер у них є base64 закодований Vault токен у SecretStore CRD, і, що ще гірше, цей токен має доступ до набагато більшої кількості секретів, ніж це необхідно... Команда додатка ще не закінчила. Вони разом з командою інфраструктури розробили більш безпечний робочий процес аутентифікації для Vault і вирішили використати метод аутентифікації Approle.

Налаштування аутентифікації Vault за допомогою Approle

Approle — це метод аутентифікації, який дозволяє машинам або додаткам аутентифікуватися в Vault за допомогою role-id та secret-id. Команда Vault надала їм облікові дані Approle, пов'язані з політикою postgres, яка після аутентифікації дозволяє лише читати з шляху database/postgres, де зберігаються облікові дані postgres:

# scripts/setup-vault-approle-auth.sh  

# увімкнути аутентифікацію Approle  
vault auth enable approle  

# створити політику для облікових даних бази даних  
vault policy write approle - < kubectl apply -f manifests/demo-app-k8s-secret.yaml  
> kubectl exec $(kubectl get po -l app=demo-app -o jsonpath='{.items[*].metadata.name}') -- curl --fail-with-body -s localhost:9090  
DB: 172.17.0.1:5432  
User: postgres  
Password: P@ssw0rd  
Ping: success

Команда знову звернулась за відгуками до команди безпеки, думаючи, що вони вирішили всі залишкові проблеми з хардкоденим токеном. Хоча команда безпеки була задоволена тим, що тепер вони використовують метод аутентифікації, який надає токен Vault з доступом лише для читання до шляху database/postgres, вони все ще мали занепокоєння з приводу хардкодених облікових даних Approle у vault-approle Kubernetes секреті.

Частина 04: Статичні облікові дані з HashiCorp Vault за допомогою Kubernetes аутентифікації та External Secrets Manager — [⭐⭐⭐]

Команді додатка потрібно було знайти інше рішення... Команда інфраструктури повідомила їм про метод аутентифікації Kubernetes для Vault, який, по суті, використовує Kubernetes токен служби для аутентифікації в Vault. Таким чином, їм більше не потрібно буде хардкодити жодних облікових даних:

pic

Налаштування аутентифікації Vault за допомогою Kubernetes

Команда додатка створила vault-auth Kubernetes Service Account з дозволами переглядати інші облікові записи служби за допомогою ролі system:auth-delegator.
Цей обліковий запис служби використовуватиметься Vault для перевірки та валідації токенів інших облікових записів служби:

# manifests/vault-crb.yml  
apiVersion: v1  
kind: ServiceAccount  
metadata:  
 name: vault-auth  
automountServiceAccountToken: true  
---  
apiVersion: v1  
kind: Secret  
metadata:  
 name: vault-auth-token  
 annotations:  
 kubernetes.io/service-account.name: vault-auth  
type: kubernetes.io/service-account-token  
---  
apiVersion: rbac.authorization.k8s.io/v1  
kind: ClusterRoleBinding  
metadata:  
 name: role-tokenreview-binding  
 namespace: default  
roleRef:  
 apiGroup: rbac.authorization.k8s.io  
 kind: ClusterRole  
 name: system:auth-delegator  
subjects:  
- kind: ServiceAccount  
 name: vault-auth  
 namespace: default

Метод аутентифікації Kubernetes було швидко налаштовано для Kubernetes кластера команди додатка. Вони також налаштували роль аутентифікації Kubernetes esm, яка прив'язана до політики postgres:

# scripts/setup-vault-k8s-auth.sh  

# увімкнути метод аутентифікації kubernetes  
vault auth enable kubernetes  

# створити політику  
vault policy write postgres - < kubectl apply -f manifests/demo-app-k8s-secret.yaml  
> kubectl exec $(kubectl get po -l app=demo-app -o jsonpath='{.items[*].metadata.name}') -- curl --fail-with-body -s localhost:9090  
DB: 172.17.0.1:5432  
User: postgres  
Password: P@ssw0rd  
Ping: success

Це було чудово! Вони не лише отримали облікові дані postgres з Vault, а й змогли аутентифікуватися абсолютно динамічно в Vault, використовуючи облікові записи служби Kubernetes.

Тепер їм більше не потрібно було хардкодити жодних статичних облікових даних у жодних маніфестах!

Частина 05: Динамічні облікові дані для бази даних за допомогою Vault Secrets Operator — [⭐⭐⭐⭐]

Команда додатка була захоплена. Вони побачили переваги впровадження HashiCorp Vault і як це не тільки покращило безпеку, але й час, який витрачається на безпечне розгортання додатків, більше не турбуючись про секрети. Вони захотіли ще більше покращити робочий процес і дізналися про движок секретів Database.
і вирішили, що якщо вони вже аутентифіковані в Vault, чому б не використовувати динамічні облікові дані для бази даних postgres?

Налаштування движка секретів Vault для бази даних

Движок секретів database може автоматично генерувати та відкликати облікові дані для різних баз даних, таких як postgres:

pic

Інфраструктурна команда увімкнула движок секретів та налаштувала базу даних команди додатка в Vault (demo-app-db) і надала їм роль для postgres:

# scripts/setup-vault-db.sh  

# увімкнути движок секретів для бази даних  
vault secrets enable database  

# створити базу даних  
vault write database/config/demo-app-db \  
 plugin_name="postgresql-database-plugin" \  
 allowed_roles="postgres" \  
 connection_url="postgresql://{{username}}:{{password}}@host.docker.internal:5432/vault" \  
 username="postgres" \  
 password="P@ssw0rd"  

# створити роль  
vault write database/roles/postgres \  

 creation_statements="CREATE ROLE \"{{name}}\" WITH LOGIN PASSWORD '{{password}}' VALID UNTIL '{{expiration}}'; \  
 GRANT SELECT ON ALL TABLES IN SCHEMA public TO \"{{name}}\";" \  
 default_ttl="1h" \  
 max_ttl="24h"

Вони перевірили підключення та змогли генерувати короткострокові облікові дані для postgres за допомогою Vault:

> vault read database/creds/postgres  
Key Value  
--- -----  
lease_id database/creds/postgres/74nOvKCmV6BNUjy5iWE22u4Z  
lease_duration 1h  
lease_renewable true  
password 89ZYmtT2qgS-OG7Avi2T  
username v-token-postgres-Zv02fNPCyfXg5gzM3Jzb-1736064877

Налаштування Vault Secrets Operator

Але була одна проблема… External Secrets Manager не працює з динамічними секретами, а лише з KV секретами... На щастя, команда дізналася про Vault Secrets Operator (VSO) — рідний оператор Vault, наданий HashiCorp:

pic

Вони встановили VSO за допомогою Helm:

# scripts/setup-vso.sh  

# встановити Helm чарт для VSO  
helm repo add hashicorp https://helm.releases.hashicorp.com  

# отримати чарт  
helm repo update  

# встановити чарт для VSO  
helm install \  
 --version 0.9.1 \  
 --create-namespace \  
 --namespace vso \  
 vso hashicorp/vault-secrets-operator  

# почекати, поки поди VSO стануть готовими  
kubectl wait \  
 --  
 -l app.kubernetes.io/instance=vso \  
 --timeout=180s \  
 -n vso  

# створити політику  
vault policy write vso - <

metadata:  
 name: demo-app  
 labels:  
 app: demo-app  
spec:  
 replicas: 1  
 selector:  
 matchLabels:  
 app: demo-app  
 template:  
 metadata:  
 labels:  
 app: demo-app  
 spec:  
 containers:  
 - name: vault-from-zero-to-hero  
 image: falcosuessgott/vault-from-zero-to-hero  
 ports:  
 - containerPort: 9090  
 env:  
 - name: DB_HOST  
 value: "172.17.0.1"  
 - name: DB_PORT  
 value: "5432"  
 - name: DB_NAME  
 value: vault  
 - name: DB_USER  
 valueFrom:  
 secretKeyRef:  
 name: dynamic-db-postgres-creds  
 key: username  
 - name: DB_PASSWORD  
 valueFrom:  
 secretKeyRef:  
 name: dynamic-db-postgres-creds  
 key: password

Після застосування, вони перевірили demo-app і побачили, що дійсно тепер облікові дані postgres були динамічно створені за допомогою Vault!:

> kubectl apply -f manifests/demo-app-vso.yaml  
> kubectl exec $(kubectl get po -l app=demo-app -o jsonpath='{.items[*].metadata.name}') -c vault-from-zero-to-hero -- curl --fail-with-body -s localhost:9090  
DB: 172.17.0.1:5432  
User: v-kubernet-postgres-ZGy2wmYeBoVJh1YVwHv2-1736122493 # користувач, створений Vault  
Password: nmeS60Lr-ygUo7mJvjOE # пароль, створений Vault  
Ping: success

Дуже круто! Тепер для аутентифікації в Vault не потрібні жодні зашиті облікові дані, і для demo-app було надано короткострокові динамічні облікові дані для postgres.

Частина 06: Введення динамічних облікових даних бази даних під час виконання за допомогою Vault Agent Injector — [⭐⭐⭐⭐⭐]

Але на цьому етапі команда додатків запитала себе, чи нам взагалі потрібні Kubernetes секрети на цьому етапі? Якщо Vault генерує секрети, чому б не передавати їх безпосередньо в розгортання demo-app? Замість того, щоб посилатися на Kubernetes секрет?

Це можна зробити за допомогою Vault Agent Injector (VAI).

Розумний робочий процес, який, коли в Pod є визначені певні анотації, впроваджує Sidecar контейнер за допомогою Mutating Webhooks (мутуючих веб-хуків).

Цей контейнер (це контейнер Vault в режимі агента) потім автентифікується в Vault і записує секрети на диск, де контейнер додатку може їх використовувати:

pic

Налаштування Vault Agent Injector

Vault Agent Injector було швидко встановлено за допомогою helm:

# scripts/setup-vai.sh  

# інсталюємо Helm чарт VSO  
helm repo add hashicorp https://helm.releases.hashicorp.com  

# завантажуємо чарти  
helm repo update  

# інсталю  
 --create-namespace \  
 --namespace vai \  
 --set="global.tlsDisable=true" \  
 --set="global.externalVaultAddr=http://172.17.0.1:8200" \  
 --set="injector.enabled=true" \  
 --set="server.enabled=false"  

# чекаємо, поки поди VAI не будуть готові  
kubectl wait \  
 --for=condition=ready pod \  
 -l app.kubernetes.io/instance=vai \  
 --timeout=180s \  
 -n vai  

# створюємо політику  
vault policy write vai - < kubectl apply -f manifests/demo-app-vai.yaml  
> kubectl exec $(kubectl get po -l app=demo-app -o jsonpath='{.items[*].metadata.name}') -c vault-from-zero-to-hero -- curl --fail-with-body -s localhost:9090  
DB: 172.17.0.1:5432  
User: v-kubernet-postgres-ZGy2wmYeBoVJh1YVwHv2-1736122493  
Password: nmeS60Lr-ygUo7mJvjOE  
Ping: success

Тепер вони могли масштабувати деплоймент до 5 реплік, щоб показати, що тепер кожен pod запитує свої власні облікові дані бази даних з Vault:

> kubectl scale deployment demo-app --replicas=5  
> for pod in $(kubectl get po -l app=demo-app -o jsonpath='{.items[*].metadata.name}');\  
 do echo $pod && kubectl exec $pod -c vault-from-zero-to-hero -- curl --fail-with-body -s localhost:9090;\  
 done  
demo-app-57d64bdd8f-57h5v  
DB: 172.17.0.1:5432  
User: v-kubernet-postgres-ZGy2wmYeBoVJh1YVwHv2-1736122493  
Password: nmeS60Lr-ygUo7mJvjOE  
Ping: success  
demo-app-57d64bdd8f-j9w7g  
DB: 172.17.0.1:5432  
User: v-kubernet-postgres-MdFkJHz8XIYNHOKLkcPZ-1736122358  
Password: 2AiPB8sOa-ZQD526bkbV  
Ping: success  
demo-app-57d64bdd8f-l46q6  
DB: 172.17.0.1:5432  
User: v-kubernet-postgres-0DBZTF7gMVusunpRRMBH-1736122545

Password: KMtoFRoqxfsP-oKtK3yt  
Ping: success  
demo-app-57d64bdd8f-t225n  
DB: 172.17.0.1:5432  
User: v-kubernet-postgres-JdvETwIW8NOpUaV2RJay-1736122493  
Password: BCsYBuNYieO-bL2xIdxp  
Ping: success  
demo-app-57d64bdd8f-v87fl  
DB: 172.17.0.1:5432  
User: v-kubernet-postgres-E7PVaLuXZBBqGPW5I1QR-1736122545  
Password: UHHPbsCF6jLzd-bC3V55  
Ping: success

Куди йти далі

Навіщо зупинятись на цьому етапі? Хороша новина для Vault полягає в тому, що як тільки механізм автентифікації налаштовано, можливості безмежні.

Тепер команда могла б також впровадити PKI (Public Key Infrastructure) секрети від Vault, щоб автоматично генерувати TLS сертифікати для своїх додатків, або ж використати Vault Transit engine для шифрування даних перед записом їх до бази даних.

Підсумок

І на цьому все! Це кінець нашої маленької вигаданої історії команди, яка почала без жодного рішення для управління секретами та змогла мігрувати до потужного, динамічного та безпечного робочого процесу за допомогою HashiCorp Vault.

Сподіваюся, вам сподобалась ця подорож і ви дізнались щось нове. До зустрічі незабаром 🙂

Перекладено з: HashiCorp Vault — From Zero to Hero

Leave a Reply

Your email address will not be published. Required fields are marked *