# установка helm
$ sudo snap install helm --classic
$ helm version
# добавляем репозиторий hashicorp
$ helm repo add hashicorp https://helm.releases.hashicorp.com
$ helm repo update
# установка vault
$ helm install vault hashicorp/vault --set "server.dev.enabled=true"
# создаем сервис аккаунт
$ kubectl create sa vault-app-sa
$ kubectl create sa vault-app-sa
# заходим внутрь пода
$ kubectl exec -it vault-0 -- /bin/sh
# активируем стандартную аутентификацию через кластер
$ vault auth enable kubernetes
# проверка
$ vault auth list | grep kubernetes
kubernetes/ kubernetes auth_kubernetes_106940fa n/a n/a
# проверяем, что в переменных окружения есть адрес apiserver
$ echo $KUBERNETES_PORT_443_TCP_ADDR
10.96.0.1
# указываем адрес apiserver, который будет использоваться при аутентификации
$ vault write auth/kubernetes/config kubernetes_host="https://$KUBERNETES_PORT_443_TCP_ADDR:443"
# проверка
$ vault read auth/kubernetes/config | grep host
kubernetes_host https://10.96.0.1:443
# создаем политику
$ vault policy write app-policy - <<EOF
> path "secret/data/myapp/*" {
> capabilities = ["read", "list"]
> }
> path "secret/metadata/myapp/*" {
> capabilities = ["list"]
> }
> EOF
Success! Uploaded policy: app-policy
# проверяем, что политика есть
$ vault policy list | grep app-policy
app-policy
# смотрим на содержимое этой политики
$ vault policy read app-policy
path "secret/data/myapp/*" {
capabilities = ["read", "list"]
}
path "secret/metadata/myapp/*" {
capabilities = ["list"]
}
# создаем роль
$ vault write auth/kubernetes/role/myapp-role \
> bound_service_account_names=vault-app-sa \
> bound_service_account_namespaces=default \
> policies=app-policy \
> ttl=1h
# смотрим на содержимое роли
$ vault read auth/kubernetes/role/myapp-role
Key Value
--- -----
alias_metadata map[]
alias_name_source serviceaccount_uid
bound_service_account_names [vault-app-sa]
bound_service_account_namespace_selector n/a
bound_service_account_namespaces [default]
policies [app-policy]
token_bound_cidrs []
token_explicit_max_ttl 0s
token_max_ttl 0s
token_no_default_policy false
token_num_uses 0
token_period 0s
token_policies [app-policy]
token_ttl 1h
token_type default
ttl 1h
# активируем движок секретов
$ vault secrets enable -path=secret kv-v2
# создание секрета 1
$ vault kv put secret/myapp/database \
> host="postgres.example.com" \
> port="5432" \
> username="appuser" \
> password="securepassword123" \
> dbname="myapp"
# создание секрета 2
$ vault kv put secret/myapp/api \
> api_key="abc123xyz789" \
> api_url="https://api.myapp.com/v1" \
> timeout="30s"
# проверка наличия секретов
$ vault kv list secret/myapp/
Keys
----
api
database
# посмотреть значение секрета
$ vault kv get secret/myapp/database
======= Secret Path =======
secret/data/myapp/database
======= Metadata =======
Key Value
--- -----
created_time 2026-09-04T08:56:37.306782639Z
custom_metadata <nil>
deletion_time n/a
destroyed false
version 1
====== Data ======
Key Value
--- -----
dbname myapp
host postgres.example.com
password securepassword123
port 5432
username appuser
No comments:
Post a Comment