Защищать, хранить и строго контролировать доступ к защищенным ключам, паролям, сертификатам, ключам шифрования для защиты конфиденциальных данных с помощью пользовательского интерфейса, CLI или HTTP API.
Пример создания политики на чтение всего пути devtest:
path "devtest/*" {
capabilities = ["read"]
}
vault policy write devtest policy_devtest.hcl
Пример создания токена для политик devtest и devprod:
vault token create -period=24h -no-default-policy -display-name=dev -policy=devtest -policy=devprod
Создать токен:
curl --header "X-Vault-Token: ..." --request POST --data '{"display_name":"devread", "no_default_policy": true, "policies":["devprod", "devtest"], "period":"768h"}' http://vault.domain.com:8201/v1/auth/token/create
Посмотреть информацию о текущем токене (указан в –header):
curl --header "X-Vault-Token: ..." http://vault.domain.com:8201/v1/auth/token/lookup-self
Отозвать текущий токен (указан в –header):
curl --header "X-Vault-Token: ..." --request POST http://vault.domain.com:8201/v1/auth/token/revoke-self
Посмотреть текущую конфигурацию LDAP:
curl -H "X-Vault-Token:s...." http://vault.domain.com:8200/v1/auth/ldap/config | jq
Посмотреть текущий список пользователей LDAP:
curl -H "X-Vault-Token:s...." --request LIST http://vault.domain.com:8200/v1/auth/ldap/users | jq
Посмотреть пользователя l.login:
curl -H "X-Vault-Token:s...." http://vault.domain.com:8200/v1/auth/ldap/users/l.login | jq
Обновить/задать политики («dev,ис») пользователю l.login:
curl -H "X-Vault-Token:s...." --request POST --data '{"policies":"dev,ИС"}' http://vault.domain.com:8200/v1/auth/ldap/users/l.login
Посмотреть текущую конфигурацию JWT:
curl -H "X-Vault-Token: s...." http://vault.domain.com:8200/v1/auth/jwt/config
Создать роль project_id_12 для giltab:
curl -H "X-Vault-Token: s...." --request POST --data '{"role_type": "jwt", "policies": ["devtest"], "token_no_default_policy":"true", "token_explicit_max_ttl": 60, "user_claim": "user_login", "bound_claims": {"project_id": "12", "ref": "master", "ref_type": "branch"} }' http://vault.domain.com:8200/v1/auth/jwt/role/project_id_12
Посмотреть список ролей:
curl --header "X-Vault-Token: s...." --request LIST http://vault.domain.com:8200/v1/auth/jwt/role
Удалить роль project_id_12:
curl --header "X-Vault-Token: s...." --request DELETE http://vault.domain.com:8200/v1/auth/jwt/role/project_id_12
Получить данные хранилища devtest/foms-service:
vault kv get devtest/foms-service
curl -H "X-Vault-Token:s.J94M0e7wL5pbFj6QuWPppyxi" http://vault.domain.com:8200/v1/devtest/data/foms-service
Пример запуска в режиме сервера, в /data/docker/vault/vault_config находится конфигурационный файл local.hcl:
listener "tcp" {
address = "0.0.0.0:8200"
tls_disable = 1
}
storage "file" {
path = "/vault/file"
}
api_addr = "http://vault.domain.com:8200"
ui = true
max_lease_ttl: "10h
default_lease_ttl: "10h"
docker run -d -p8200:8200 --cap-add=IPC_LOCK \ -v /data/docker/vault/vault_config:/vault/config \ -v /data/docker/vault/vault_file:/vault/file \ -v /data/docker/vault/vault_logs:/vault/logs \ -e VAULT_ADDR=http://127.0.0.1:8200 --name vault vault server
При первом запуске инициализируем хранилище:
docker exec vault vault operator init > /data/docker/vault/init.file
Распаковать/Unseal
docker exec vault vault operator unseal "`awk -F": " '/Unseal Key 1/ { print $2 }' /data/docker/vault/init.file`" docker exec vault vault operator unseal "`awk -F": " '/Unseal Key 2/ { print $2 }' /data/docker/vault/init.file`" docker exec vault vault operator unseal "`awk -F": " '/Unseal Key 3/ { print $2 }' /data/docker/vault/init.file`"
Запустить в swarm и инициализировать:
docker stack deploy --compose-file docker-compose.yaml vault CONTAINER=$(docker ps -q -f name=vault_vault) docker exec $CONTAINER vault operator init | tee init.raft.file for key in {1..3}; do docker exec $CONTAINER vault operator unseal "$(awk -F": " "/Unseal Key ${key}/ { print \$2 }" init.raft.file)"; done
Подключить к кластеру ноду:
docker stack deploy --compose-file docker-compose.yaml vault CONTAINER=$(docker ps -q -f name=vault_vault) docker exec $CONTAINER vault operator raft join http://vault1.domain.com:8200 for key in {1..3}; do docker exec $CONTAINER vault operator unseal "$(awk -F": " "/Unseal Key ${key}/ { print \$2 }" init.raft.file)"; done