Files
Ubuntu_docs/HashiCorp_Vault_install.md
2025-03-03 07:35:47 +05:00

9.2 KiB
Raw Blame History

Установка HashiCorp Vault на Ubuntu

Vault — это инструмент от HashiCorp для безопасного хранения секретов и управления ими.

1. Установка Vault

Открываю нужный сервер

wsl

Похоже vault из Москвы недоступен:

ssh root@45.144.64.218 -p 2200

1.1. Добавление репозитория HashiCorp

  1. Установите необходимые пакеты:
   sudo apt update && sudo apt install -y gnupg software-properties-common curl
  1. Добавьте официальный GPG-ключ HashiCorp:
  curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
  1. Добавьте репозиторий HashiCorp в систему:
   sudo mcedit /etc/apt/sources.list.d/hashicorp.list

Заменяем на:

   deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com noble main

Где noble это кодовое имя Ubuntu 24.04

  1. Обновите списки пакетов:
   sudo apt update
  1. Установите Vault:
   sudo apt install -y vault
  1. Проверьте, что Vault установлен правильно:
   vault --version

Выдало: Vault v1.18.5 (2cb3755273dbd63f5b0f8ec50089b57ffd3fa330), built 2025-02-24T09:40:28Z

2. Запуск Vault

2.1. Запуск в Dev-режиме (только для тестирования)

If work stop it:

  sudo pkill vault

If need delete old data:

  sudo rm -rf ~/.vault-token ~/.vault/

For find where stored data read file:

  sudo mcedit /etc/vault/config.hcl

In config file find this path: /opt/vault/data

После удаления базы нужно инициализировать Vault заново:

  sudo vault operator init

Run in developer mode (in dev mode data stored in RAM):

  vault server -dev
WARNING! dev mode is enabled! In this mode, Vault runs entirely in-memory
and starts unsealed with a single unseal key. The root token is already
authenticated to the CLI, so you can immediately begin using Vault.

You may need to set the following environment variables:

    $ export VAULT_ADDR='http://127.0.0.1:8200'

The unseal key and root token are displayed below in case you want to
seal/unseal the Vault or re-authenticate.

Unseal Key: TMb6A3QI3wJ9kaEeTYo5wEviP23lugJ3Asek2la6V4s=
Root Token: hvs.GsWHRR7ne7gMTZhuPgZdh91w

Development mode should NOT be used in production installations!

Теперь Vault работает по адресу:

start http://127.0.0.1:8200

Останавливаю нажатием Ctrl + C

2.2. Настройка Vault в режиме сервера

  1. Создайте конфигурационный файл:
   sudo mkdir -p /etc/vault &&
   sudo mcedit /etc/vault/config.hcl
  1. Добавьте следующий конфиг:
storage "file" {
    path = "/opt/vault/data"
}

listener "tcp" {
    address     = "0.0.0.0:8200"
    tls_disable = 1
}

disable_mlock = true
ui = true
  1. Создайте папку для хранения данных:
  sudo mkdir -p /opt/vault/data &&
  sudo chown vault:vault /opt/vault/data
  1. Создайте systemd-сервис для Vault:
sudo tee /etc/systemd/system/vault.service > /dev/null <<EOF
[Unit]
Description=HashiCorp Vault
After=network-online.target
Requires=network-online.target

[Service]
User=vault
Group=vault
ExecStart=/usr/bin/vault server -config=/etc/vault/config.hcl
ExecReload=/bin/kill --signal HUP \$MAINPID
KillSignal=SIGTERM
Restart=on-failure
LimitMEMLOCK=infinity
ProtectSystem=full
CapabilityBoundingSet=CAP_IPC_LOCK CAP_SETGID CAP_SETUID CAP_SYSLOG CAP_CHOWN
NoNewPrivileges=yes

[Install]
WantedBy=multi-user.target
EOF

Проверяем всё ли записалось:

sudo mcedit /etc/systemd/system/vault.service
  1. Перезапустите systemd и включите Vault:
   sudo systemctl daemon-reload &&
   sudo systemctl enable vault &&
   sudo systemctl start vault
  1. Проверьте статус:
  sudo systemctl status vault

3. Инициализация и разлочка Vault

  1. Экспортируйте переменную окружения:
   export VAULT_ADDR='http://127.0.0.1:8200'
  1. Инициализируйте хранилище (сохраните ключи!):
  vault operator init

Выдало:

Unseal Key 1: lQlJsb9RI8rSzLrc5iPnx1qJkWZbbXIkrEgnQGe5R6uO
Unseal Key 2: 0qJJXRo570jlH/0Qs/wodXHNI2SF5VgL4jE04JawSPSB
Unseal Key 3: VuYkOkQ8qmwofDmjqsTRQoMqGAH3Jv+nqQylL7Uibbtp
Unseal Key 4: JJJ8Nqj00qzS9u5wNtTtExL/jWlJF9fgaBsiuaf0kFxC
Unseal Key 5: L6lZMp/l7s24EZJAFnWS4Py5jsWOuMioC41g5LhUJKWL

Initial Root Token: hvs.o07DY7tnSPcufxk60pjCXDzn

Vault initialized with 5 key shares and a key threshold of 3. Please securely
distribute the key shares printed above. When the Vault is re-sealed,
restarted, or stopped, you must supply at least 3 of these keys to unseal it
before it can start servicing requests.

Vault does not store the generated root key. Without at least 3 keys to
reconstruct the root key, Vault will remain permanently sealed!

It is possible to generate new unseal keys, provided you have a quorum of
existing unseal keys shares. See "vault operator rekey" for more information.
  1. Разблокируйте Vault, используя один из ключей (потом ещё 3 раза выполнить эту команду):
  vault operator unseal
  1. Авторизуйтесь с root-токеном:
  vault login hvs.o07DY7tnSPcufxk60pjCXDzn
  1. Создаём(включаем) новое хранилище ключ-значение
  vault secrets enable -path=org-ccalm kv-v2
  1. Writing to the kv storage (добавил префикс vault. чтобы значения самому подставлять в нужные места в spring)

Заменит(создаст) значение:

  vault kv put org-ccalm/jwt vault.server.ssl.key-store-password=MFNX344yh4

Добавит (обновит):

  vault kv patch org-ccalm/jwt vault.test=test2
  vault kv put org-ccalm/public vault.personal_data.key=7dd2Nek1
  1. Read data from the kv
  vault kv get org-ccalm/jwt

Должно вывести:

Key                            Value
---                            -----
server.ssl.key-store-password  M4yh4
  1. Включаем AppRole для доступа из приложения
  vault auth enable approle
  1. Добавляем политики потом создаём ключ для этой политикиполитики

Создаю файл политик загружаю его в вольт потом удаляю:

cd ~ &&
sudo tee jwt-policy.hcl > /dev/null <<EOF
path "org-ccalm/data/jwt" {
  capabilities = ["create", "read", "update", "delete", "list"]
}
path "org-ccalm/data/public" {
  capabilities = ["read", "list"]
}
EOF

Apply and delete configiration file:

  vault policy write jwt-policy ~/jwt-policy.hcl &&
  rm -f jwt-policy.hcl

Создаём AppRole (на 10 лет)

vault write auth/approle/role/org-ccalm-jwt \
    secret_id_ttl=0 \
    token_ttl=24h \
    token_max_ttl=87600h \
    policies=jwt-policy

Получаем role_id и secret_id

vault read auth/approle/role/org-ccalm-jwt/role-id

Выдало

Key        Value
---        -----
role_id    c0064fe2-8f0e-b317-7fe7-66f7405b45a1

На команду

vault write -f auth/approle/role/org-ccalm-jwt/secret-id

Выдало:

Key                   Value
---                   -----
secret_id             24f31c88-7185-0d93-9a51-e221c2925265
secret_id_accessor    22fa68e3-fc73-2008-0a34-3506630b6693
secret_id_num_uses    0
secret_id_ttl         0s

Сохрани role_id и secret_id, они понадобятся Spring Boot.

Хранить ключи лучьше в переменных окружения

export VAULT_ROLE_ID="your-role-id" &&
export VAULT_SECRET_ID="your-secret-id"

Проверяем не больше какого значения можно задать время жизни кокена:

vault read sys/mounts/auth/token/tune

По умолчанию max_lease_ttl равен 32 дня!

На год можно увеличить так:

  vault write sys/mounts/auth/token/tune max_lease_ttl=8760h

Create data access token with set politics:

  vault token create -policy=jwt-policy -ttl=0

Продлевать токен можно так:

  vault token renew <твой-токен>

Проверяем зранятся ли токены в хранилище а не в памяти

vault read sys/auth/token/tune

token_type = default-service, значит Vault не хранит токены

Включаем хранение токенов:

  vault write sys/auth/token/tune token_type=service

Теперь HashiCorp Vault установлен и готов к использованию! 🚀