+vault
This commit is contained in:
@ -45,6 +45,16 @@ sections: # An array of sections
|
||||
- title: Uptime-kuma
|
||||
icon: https://raw.githubusercontent.com/louislam/uptime-kuma/b45dc6787db6530e8dda1388a37e8a80683da5a8/public/icon.svg
|
||||
url: http://192.168.200.84:3001
|
||||
- title: Gotify
|
||||
icon: https://192.168.200.84:8080/static/defaultapp.png
|
||||
url: https://192.168.200.84:8080
|
||||
- title: portainer.io
|
||||
icon: https://icon.icepanel.io/Technology/svg/Portainer.svg
|
||||
url: https://192.168.200.84:9443
|
||||
- title: Prometheus
|
||||
icon: https://static-00.iconduck.com/assets.00/prometheus-icon-511x512-1vmxbcxr.png
|
||||
url: http://192.168.200.84:9090
|
||||
|
||||
EOF
|
||||
```
|
||||
|
||||
|
||||
@ -8,7 +8,10 @@ Vault — это инструмент от HashiCorp для безопасног
|
||||
```sh
|
||||
wsl
|
||||
```
|
||||
|
||||
Похоже vault из Москвы недоступен:
|
||||
```sh
|
||||
ssh root@45.144.64.218 -p 2200
|
||||
```
|
||||
|
||||
### 1.1. Добавление репозитория HashiCorp
|
||||
|
||||
@ -29,8 +32,9 @@ wsl
|
||||
|
||||
Заменяем на:
|
||||
```text
|
||||
deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main
|
||||
deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com noble main
|
||||
```
|
||||
Где noble это кодовое имя Ubuntu 24.04
|
||||
|
||||
|
||||
4. Обновите списки пакетов:
|
||||
@ -39,7 +43,7 @@ wsl
|
||||
```
|
||||
|
||||
5. Установите Vault:
|
||||
```ыр
|
||||
```sh
|
||||
sudo apt install -y vault
|
||||
```
|
||||
|
||||
@ -47,17 +51,61 @@ wsl
|
||||
```sh
|
||||
vault --version
|
||||
```
|
||||
Выдало: Vault v1.18.5 (2cb3755273dbd63f5b0f8ec50089b57ffd3fa330), built 2025-02-24T09:40:28Z
|
||||
|
||||
|
||||
## 2. Запуск Vault
|
||||
|
||||
### 2.1. Запуск в Dev-режиме (только для тестирования)
|
||||
|
||||
If work stop it:
|
||||
```sh
|
||||
sudo pkill vault
|
||||
```
|
||||
If need delete old data:
|
||||
```sh
|
||||
sudo rm -rf ~/.vault-token ~/.vault/
|
||||
```
|
||||
For find where stored data read file:
|
||||
```sh
|
||||
sudo mcedit /etc/vault/config.hcl
|
||||
```
|
||||
In config file find this path: /opt/vault/data
|
||||
|
||||
После удаления базы нужно инициализировать Vault заново:
|
||||
```sh
|
||||
sudo vault operator init
|
||||
```
|
||||
|
||||
Run in developer mode (in dev mode data stored in RAM):
|
||||
```sh
|
||||
vault server -dev
|
||||
```
|
||||
|
||||
- По умолчанию Vault запустится на `http://127.0.0.1:8200/`
|
||||
- В терминале появится root-токен, который нужно сохранить.
|
||||
```text
|
||||
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 работает по адресу:
|
||||
```sh
|
||||
start http://127.0.0.1:8200
|
||||
```
|
||||
Останавливаю нажатием Ctrl + C
|
||||
|
||||
|
||||
### 2.2. Настройка Vault в режиме сервера
|
||||
|
||||
@ -90,11 +138,7 @@ ui = true
|
||||
|
||||
4. Создайте systemd-сервис для Vault:
|
||||
```sh
|
||||
sudo mcedit /etc/systemd/system/vault.service
|
||||
```
|
||||
|
||||
5. Вставьте следующее содержимое:
|
||||
```ini
|
||||
sudo tee /etc/systemd/system/vault.service > /dev/null <<EOF
|
||||
[Unit]
|
||||
Description=HashiCorp Vault
|
||||
After=network-online.target
|
||||
@ -104,7 +148,7 @@ Requires=network-online.target
|
||||
User=vault
|
||||
Group=vault
|
||||
ExecStart=/usr/bin/vault server -config=/etc/vault/config.hcl
|
||||
ExecReload=/bin/kill --signal HUP $MAINPID
|
||||
ExecReload=/bin/kill --signal HUP \$MAINPID
|
||||
KillSignal=SIGTERM
|
||||
Restart=on-failure
|
||||
LimitMEMLOCK=infinity
|
||||
@ -114,9 +158,14 @@ NoNewPrivileges=yes
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
```
|
||||
Проверяем всё ли записалось:
|
||||
```sh
|
||||
sudo mcedit /etc/systemd/system/vault.service
|
||||
```
|
||||
|
||||
6. Перезапустите systemd и включите Vault:
|
||||
5. Перезапустите systemd и включите Vault:
|
||||
```sh
|
||||
sudo systemctl daemon-reload &&
|
||||
sudo systemctl enable vault &&
|
||||
@ -144,13 +193,13 @@ WantedBy=multi-user.target
|
||||
|
||||
Выдало:
|
||||
```text
|
||||
Unseal Key 1: dOVID4QUfFtSHF+dvdB8iwVrWidJ7BXavH15oA+m5a0Q
|
||||
Unseal Key 2: eoEhrDr6W1zZhBc30TX0tDAhfc6zo73poOw4cq7KmFRZ
|
||||
Unseal Key 3: N1XxH08BZEf3Sl9w+qMm36eirXjhh8EKTW7MyXoO475b
|
||||
Unseal Key 4: QboxCTXGqC2yJQRg7qcjQvoJBElT9A4o4x+mUr9/j5ti
|
||||
Unseal Key 5: lhRJsXwg9QIgs7J02DMOtCBmOOuZUJBSazT+oggo7Rhh
|
||||
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.5nuYVp8rWJwFgQ7f16XNoDC7
|
||||
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,
|
||||
@ -164,18 +213,147 @@ 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.
|
||||
```
|
||||
|
||||
3. Разблокируйте Vault, используя один из ключей (потом ещё 3 раза):
|
||||
3. Разблокируйте Vault, используя один из ключей (потом ещё 3 раза выполнить эту команду):
|
||||
```sh
|
||||
vault operator unseal
|
||||
```
|
||||
|
||||
4. Повторите `vault operator unseal` три раза с разными ключами.
|
||||
|
||||
5. Авторизуйтесь с root-токеном:
|
||||
4. Авторизуйтесь с root-токеном:
|
||||
```sh
|
||||
vault login hvs.5nuYVp8rWJwFgQ7f16XNoDC7
|
||||
vault login hvs.o07DY7tnSPcufxk60pjCXDzn
|
||||
```
|
||||
|
||||
---
|
||||
5. Создаём(включаем) новое хранилище ключ-значение
|
||||
```sh
|
||||
vault secrets enable -path=org-ccalm kv-v2
|
||||
```
|
||||
|
||||
5. Writing to the kv storage (добавил префикс vault. чтобы значения самому подставлять в нужные места в spring)
|
||||
|
||||
Заменит(создаст) значение:
|
||||
```sh
|
||||
vault kv put org-ccalm/jwt vault.server.ssl.key-store-password=MFNX344yh4
|
||||
```
|
||||
Добавит (обновит):
|
||||
```sh
|
||||
vault kv patch org-ccalm/jwt vault.test=test2
|
||||
```
|
||||
```sh
|
||||
vault kv put org-ccalm/public vault.personal_data.key=7dd2Nek1
|
||||
```
|
||||
|
||||
6. Read data from the kv
|
||||
```sh
|
||||
vault kv get org-ccalm/jwt
|
||||
```
|
||||
|
||||
Должно вывести:
|
||||
```text
|
||||
Key Value
|
||||
--- -----
|
||||
server.ssl.key-store-password M4yh4
|
||||
```
|
||||
|
||||
6. Включаем AppRole для доступа из приложения
|
||||
```sh
|
||||
vault auth enable approle
|
||||
```
|
||||
|
||||
7. Добавляем политики потом создаём ключ для этой политикиполитики
|
||||
|
||||
Создаю файл политик загружаю его в вольт потом удаляю:
|
||||
```sh
|
||||
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:
|
||||
```sh
|
||||
vault policy write jwt-policy ~/jwt-policy.hcl &&
|
||||
rm -f jwt-policy.hcl
|
||||
```
|
||||
|
||||
Создаём AppRole (на 10 лет)
|
||||
```sh
|
||||
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
|
||||
```sh
|
||||
vault read auth/approle/role/org-ccalm-jwt/role-id
|
||||
```
|
||||
Выдало
|
||||
```text
|
||||
Key Value
|
||||
--- -----
|
||||
role_id c0064fe2-8f0e-b317-7fe7-66f7405b45a1
|
||||
```
|
||||
На команду
|
||||
```sh
|
||||
vault write -f auth/approle/role/org-ccalm-jwt/secret-id
|
||||
```
|
||||
Выдало:
|
||||
```text
|
||||
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.
|
||||
|
||||
Хранить ключи лучьше в переменных окружения
|
||||
```sh
|
||||
export VAULT_ROLE_ID="your-role-id" &&
|
||||
export VAULT_SECRET_ID="your-secret-id"
|
||||
```
|
||||
|
||||
|
||||
Проверяем не больше какого значения можно задать время жизни кокена:
|
||||
```sh
|
||||
vault read sys/mounts/auth/token/tune
|
||||
```
|
||||
По умолчанию max_lease_ttl равен 32 дня!
|
||||
|
||||
На год можно увеличить так:
|
||||
```sh
|
||||
vault write sys/mounts/auth/token/tune max_lease_ttl=8760h
|
||||
```
|
||||
|
||||
Create data access token with set politics:
|
||||
```sh
|
||||
vault token create -policy=jwt-policy -ttl=0
|
||||
```
|
||||
|
||||
Продлевать токен можно так:
|
||||
```sh
|
||||
vault token renew <твой-токен>
|
||||
```
|
||||
|
||||
Проверяем зранятся ли токены в хранилище а не в памяти
|
||||
```sh
|
||||
vault read sys/auth/token/tune
|
||||
```
|
||||
token_type = default-service, значит Vault не хранит токены
|
||||
|
||||
Включаем хранение токенов:
|
||||
```sh
|
||||
vault write sys/auth/token/tune token_type=service
|
||||
```
|
||||
|
||||
|
||||
|
||||
---
|
||||
Теперь HashiCorp Vault установлен и готов к использованию! 🚀
|
||||
|
||||
|
||||
Reference in New Issue
Block a user