Site icon IT Draft

Установка HashiCorp Vault в Centos 8

Установка HashiCorp Vault в Centos 8

HashiCorp Vault

HashiСorp Vault — это инструмент с открытым исходным кодом, предназначенный для безопасного хранения секретов и конфиденциальных данных в динамических облачных средах. Он обеспечивает надежное шифрование данных, доступ на основе идентификации с помощью настраиваемых политик

Рассмотрим вариант установки программного обеспечения HashiCorp Vault с файловым типом хранения данных (секретов).

Подготовка

Добавляем hostname и ip в файл /etc/hosts

$ sudo nano /etc/hosts
[…]
192.168.11.200    vault.example.com

Обновляем ОС, ставим необходимый софт

$ sudo dnf -y update
$ sudo dnf -y install unzip nano

Установка Vault

Переходим в каталог /tmp

Selectel — ведущий провайдер облачной инфраструктуры и услуг дата-центров

Компания занимает лидирующие позиции на рынке на рынке выделенных серверов и приватных облаков, и входит в топ-3 крупнейших операторов дата-центров в России.


$ cd /tmp

Скачиваем финальную версию vault, распаковываем ее

$ curl -L https://releases.hashicorp.com/vault/1.6.0/vault_1.6.0_linux_amd64.zip -o /tmp/vault_1.6.0_linux_amd64.zip
$ unzip vault_1.6.0_linux_amd64.zip

Меняем владельца и переносим файл

$ sudo chown root:root vault
$ sudo mv vault /usr/local/bin/

Проверяем версию

$ vault --version
Vault v1.6.0 (7ce0bd9691998e0443bc77e98b1e2a4ab1e965d4)

Включаем авто заполнение команд

$ vault -autocomplete-install
$ complete -C /usr/local/bin/vault vault

Настройка Vault

Создаем системные каталоги для Vault

$ sudo mkdir -p /etc/vault.d /var/lib/vault/data

/var/lib/vault/data – если тип хранилища файловый.
Позже рассмотрим подключение типа хранилища на СУБД PostgreSQL

Создаем системного пользователя vault

$ sudo useradd --system --home /etc/vault.d --shell /bin/false vault
$ sudo chown -R vault:vault /etc/vault.d /var/lib/vault/
$ sudo chmod 755 /etc/vault.d /var/lib/vault

Создаем Systemd Unit

$ sudo nano /etc/systemd/system/vault.service
[Unit]
Description="HashiCorp Vault - A tool for managing secrets"
Documentation=https://www.vaultproject.io/docs/
Requires=network-online.target
After=network-online.target
ConditionFileNotEmpty=/etc/vault.d/vault.hcl
StartLimitIntervalSec=60
StartLimitBurst=3

[Service]
User=vault
Group=vault
ProtectSystem=full
ProtectHome=read-only
PrivateTmp=yes
PrivateDevices=yes
SecureBits=keep-caps
AmbientCapabilities=CAP_IPC_LOCK
Capabilities=CAP_IPC_LOCK+ep
CapabilityBoundingSet=CAP_SYSLOG CAP_IPC_LOCK
NoNewPrivileges=yes
ExecStart=/usr/local/bin/vault server -config=/etc/vault.d/vault.hcl
ExecReload=/bin/kill --signal HUP $MAINPID
KillMode=process
KillSignal=SIGINT
Restart=on-failure
RestartSec=5
TimeoutStopSec=30
StartLimitInterval=60
StartLimitIntervalSec=60
StartLimitBurst=3
LimitNOFILE=65536
LimitMEMLOCK=infinity

[Install]
WantedBy=multi-user.target

Создаем конфигурационный файл для Vault

$ sudo nano /etc/vault.d/vault.hcl
disable_cache = true
disable_mlock = true
ui = true

listener "tcp" {
    tls_disable      = 1
#   address          = "0.0.0.0:8200"
    address          = "vault.example.com:8200"
}

# отключаем ssl
# listener "tcp" {
#    tls_disable = 0
#    address     = "vault.example.com:8200"
#    tls_cert_file = "/etc/ssl/cert/vault.example.com.crt"
#    tls_key_file = "/etc/ssl/private/vault.example.com.key"
# }

storage "file" {
   path  = "/var/lib/vault/data"
}

# api_addr         = "http://0.0.0.0:8200"
api_addr         = "http://vault.example.com:8200"
max_lease_ttl         = "10h"
default_lease_ttl    = "10h"
cluster_name         = "vault"
raw_storage_endpoint     = true
disable_sealwrap     = true
disable_printable_check = true

Настройка SeLinux

Добавляем порт Vault в исключения

$ cd /tmp
$ sudo grep vault /var/log/audit/audit.log | grep denied | audit2allow -m vaultlocalconf > vaultlocalconf.te
$ sudo grep vault /var/log/audit/audit.log | grep denied | audit2allow -M vaultlocalconf

    ******************** IMPORTANT ***********************
    To make this policy package active,

    execute: semodule -i vaultlocalconf.pp

$ sudo semodule -i vaultlocalconf.pp

Добавляем сервис в автозагрузку и запускаем его

$ sudo systemctl daemon-reload
$ sudo systemctl enable --now vault

Проверяем статус

$ systemctl status vault

Настройка Firewall

Открываем порт 8200/tcp

$ sudo firewall-cmd --zone=public --add-port=8200/tcp --permanent
$ sudo firewall-cmd --reload

Инициализация Vault Server

Добавляем переменные, что б в дальнейшем не вводить ее каждый раз в -address=http://vault.example.com:8200

$ export PATH=$PATH:/usr/local/bin
$ echo "export PATH=$PATH:/usr/local/bin" >> ~/.bashrc
$ export VAULT_ADDR=http://vault.example.com:8200
$ echo "export VAULT_ADDR=http://vault.example.com:8200" >> ~/.bashrc

Инициализируем сервис с сохранением ключей в файл /etc/vault.d/init.file (не безопастно)

$ vault operator init -n 5 -t 3 | sudo tee /etc/vault.d/init.file
Unseal Key 1: +DTPnUxqmspBKng0wVHeHc59pXnZJGKxMsSuX+CrQ91E
Unseal Key 2: h8ogFxApCpwRqfK4Fz0frtFM64t2ldFAZLJhvapJBqnl
Unseal Key 3: MTbJX9HVN0A1dOd7hH+L1wcEus9M2C0gK9nrqsoXCtYz
Unseal Key 4: H4B2mlx+1uRg70uySY/KGQ86hsjlrCiSVD4gyoO6tj5V
Unseal Key 5: 3QKfJ/c4v65eEej5K9OvQseo3sETRhN2DZVRXkg5d8Wh
Initial Root Token: s.2xxinhG13tTgpHrxb8EyAgL5
 […]

где
-n (-key-share) – Количество общих ключей, на которые нужно разделить сгенерированный главный ключ. Это количество «ключей распечатки», которое нужно сгенерировать.
-t (-key-threshold) – Количество общих ключей, необходимых для восстановления главного ключа. Это должно быть меньше или равно -key-share

Проверяем статус

$ vault status
Key                Value
---                -----
Seal Type          shamir
Initialized        true
Sealed             true <--- vault запечатан, надо расечатывать (вводить 3 разных Unseal Key)
Total Shares       5 <--- всего ключей
Threshold          3 <--- ключей, для распечатывания
Unseal Progress    0/3
Unseal Nonce       n/a
Version            1.6.0
Storage Type       file <--- тип хранилища файловое
HA Enabled         false

Распечатываем хранилище, иначе не получится авторизоваться

$ vault operator unseal
Unseal Key (will be hidden):
$ vault operator unseal
Unseal Key (will be hidden):
$ vault operator unseal
Unseal Key (will be hidden):

Смотрим статус

$ vault status
Key             Value
---             -----
Seal Type       shamir
Initialized     true
Sealed          false <--- Распечатано
Total Shares    5
Threshold       3
Version         1.6.0
Storage Type    file
Cluster Name    vault
Cluster ID      d5ec1a04-2988-d1fa-eb16-2bbf6f47d3f2
HA Enabled      false

Авторизируемся

$ vault login
Token (will be hidden): s.2xxinhG13tTgpHrxb8EyAgL5

Распечатывать хранилище и авторизоваться можно так же через web-интерфейс

http://vault.example.com:8200

Если надо удалить базу (файловую)

$ sudo systemctl stop vault
$ sudo rm -rf  /var/lib/vault/data/*
$ sudo systemctl start vault

Exit mobile version