This commit is contained in:
2025-03-03 07:35:47 +05:00
parent c060952ee2
commit d101c40b19
2 changed files with 212 additions and 24 deletions

View File

@ -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
```

View File

@ -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 установлен и готов к использованию! 🚀