Установка и настройка Hashicorp Vault сервера на Ubuntu / CentOS / Debian |

Установка и настройка Hashicorp Vault сервера на Ubuntu / CentOS / Debian

Мануал

Вопросы:

  • Как установить Vault Server на Ubuntu 18.04 / Debian 9 ?,
  • Как установить Vault Server на CentOS 7 ?,
  • Как установить Hashicorp Vault на Fedora ?.

Hashicorp Vault – это бесплатный инструмент с открытым исходным кодом, предназначенный для безопасного хранения и доступа к секретам.

Секретом может быть пароль, ключ API, сертификат и многое другое.

Задача Vault Server – предоставить единый интерфейс для любого хранимого секрета, одновременно обеспечивая строгий контроль доступа и запись подробного журнала аудита.

Vault имеет веб-интерфейс пользователя, который вы можете использовать для взаимодействия с Vault.

Из пользовательского интерфейса вы можете легко создавать, обновлять, считывать и удалять секреты, аутентифицировать, распечатывать и многое другое.

Особенности Vault

Ниже приведены основные характеристики Vault.

  • Безопасное секретное хранилище: по умолчанию Vault шифрует секреты перед записью их в постоянное хранилище.
  • Поддержка динамических секретов: Vault может генерировать секреты по требованию и отзывать их после истечения срока аренды.
  • Лизинг и обновление: все секреты в Vault связаны с арендой. Секрет автоматически аннулируется в конце срока аренды. Обновление возможно через встроенные API обновления.
  • Отзыв секретов: Vault может отозвать не только отдельные секреты, но и дерево секретов, например, все секреты, прочитанные конкретным пользователем, или все секреты определенного типа.

Установите Vault в Ubuntu / Debian / CentOS / Fedora

Vault написан на Go, и бинарные пакеты доступны для основных дистрибутивов Unix и Linux.

Предварительно скомпилированные двоичные файлы Vault доступны по адресу https://releases.hashicorp.com/vault/.

VAULT_VERSION="1.0.3"
curl -sO https://releases.hashicorp.com/vault/${VAULT_VERSION}/vault_${VAULT_VERSION}_linux_amd64.zip

Извлеките загруженный архив.

unzip vault_${VAULT_VERSION}_linux_amd64.zip
sudo mv vault /usr/local/bin/

Проверка версии должна совпадать с загруженной.

$ vault --version
Vault v1.0.3 ('85909e3373aa743c34a6a0ab59131f61fd9e8e43')

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

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

Настройка службы Vault systemd

После установки Vault давайте настроим службу systemd для управления службой.

Начните с создания уникального непривилегированного системного пользователя для запуска Vault.

Создайте каталоги данных Vault.

sudo mkdir /etc/vault
sudo mkdir -p /var/lib/vault/data

Затем создайте пользователя с именем vault.

sudo useradd --system --home /etc/vault --shell /bin/false vault
sudo chown -R vault:vault /etc/vault /var/lib/vault/

Создайте файл службы Vault в /etc/systemd/system/vault.service.

cat <<EOF | sudo tee /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/config.hcl

[Service]
User=vault
Group=vault
ProtectSystem=full
ProtectHome=read-only
PrivateTmp=yes
PrivateDevices=yes
SecureBits=keep-caps
AmbientCapabilities=CAP_IPC_LOCK
NoNewPrivileges=yes
ExecStart=/usr/local/bin/vault server -config=/etc/vault/config.hcl
ExecReload=/bin/kill --signal HUP 
KillMode=process
KillSignal=SIGINT
Restart=on-failure
RestartSec=5
TimeoutStopSec=30
StartLimitBurst=3
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
EOF

Создайте конфиг Vault /etc/vault/config.hcl

touch /etc/vault/config.hcl

Добавьте основные параметры конфигурации Vault в файл /etc/vault/config.hcl.

cat <<EOF | sudo tee /etc/vault/config.hcl
disable_cache = true
disable_mlock = true
ui = true
listener "tcp" {
   address          = "0.0.0.0:8200"
   tls_disable      = 1
}
storage "file" {
   path  = "/var/lib/vault/data"
 }
api_addr         = "http://0.0.0.0:8200"
max_lease_ttl         = "10h"
default_lease_ttl    = "10h"
cluster_name         = "vault"
raw_storage_endpoint     = true
disable_sealwrap     = true
disable_printable_check = true
EOF

Вы также можете использовать Consul Storage, но сначала вам нужно установить Consul.

Конфигурация для бэкэнда Consul выглядит примерно так:

storage "consul" {
  address = "127.0.0.1:8500"
  path    = "vault"
}

Запустите и включите службу vault для запуска при загрузке системы.

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

Проверьте статус сервиса, он должен показывать running.

$ systemctl status vault
 ● vault.service - "HashiCorp Vault - A tool for managing secrets"
    Loaded: loaded (/etc/systemd/system/vault.service; enabled; vendor preset: enabled)
    Active: active (running) since Mon 2019-03-04 10:17:19 CET; 4s ago
      Docs: https://www.vaultproject.io/docs/
  Main PID: 12727 (vault)
     Tasks: 7 (limit: 2299)
    CGroup: /system.slice/vault.service
            └─12727 /usr/local/bin/vault server -config=/etc/vault/vault.hcl
 Mar 04 10:17:19 vault.local vault[12727]:              Api Address: http://0.0.0.0:8200
 Mar 04 10:17:19 vault.local vault[12727]:                      Cgo: disabled
 Mar 04 10:17:19 vault.local vault[12727]:          Cluster Address: https://0.0.0.0:8201
 Mar 04 10:17:19 vault.local vault[12727]:               Listener 1: tcp (addr: "0.0.0.0:8200", cluster address: "0.0.0.0:8201", max_request_duration: "
 Mar 04 10:17:19 vault.local vault[12727]:                Log Level: info
 Mar 04 10:17:19 vault.local vault[12727]:                    Mlock: supported: true, enabled: false
 Mar 04 10:17:19 vault.local vault[12727]:                  Storage: file
 Mar 04 10:17:19 vault.local vault[12727]:                  Version: Vault v1.0.3
 Mar 04 10:17:19 vault.local vault[12727]:              Version Sha: 85909e3373aa743c34a6a0ab59131f61fd9e8e43
 Mar 04 10:17:19 vault.local vault[12727]: ==> Vault server started! Log data will stream in below:

Инициализировать сервер vault

Экспортируйте переменную среды VAULT_ADDR перед инициализацией сервера Vault.

export VAULT_ADDR=http://127.0.0.1:8200
echo "export VAULT_ADDR=http://127.0.0.1:8200" >> ~/.bashrc

Замените 127.0.0.1 на IP-адрес сервера vault

Начните инициализацию с параметрами по умолчанию, выполнив команду ниже:

sudo rm -rf  /var/lib/vault/data/*
vault operator init > /etc/vault/init.file

Доступ к пользовательскому интерфейсу Vault по http://serverip:8200/ui

Вставьте ваши “Unseal Keys” по одному в хранилище Unseal.

Вы можете получить ключи на /etc/vault/init.file.

$ cat /etc/vault/init.file
 Unseal Key 1: bNxZRU3azPZtzXjeS0pfGHLoif3Scs64fFk9j/FFtUN7
 Unseal Key 2: kChe6UJ5+BnkU6UjSzalvjIuh01dLX8v/OMabz+uPtly
 Unseal Key 3: MIRYhY1zQXZyod05tWtbgAnc14qBXM7hPHrqyEVQ7tCi
 Unseal Key 4: KBVhzztVDUJRqNi2LDYfRFHThQe/iDbNdEaOFkAztMDN
 Unseal Key 5: GJplvpcPVu6IQeJ3lqa5xvPfXTDA3ftgcZJT6xhrAUUL
 Initial Root Token: s.RcW0LuNIyCoTLWxrDPtUDkCw
 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 master key. Without at least 3 key to
 reconstruct the master 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.

Как только вы «откроете» Vault, используйте Initial Root Token, чтобы войти в Vault.

Вы должны увидеть веб-панель Vault на следующей странице.

Вы также можете просмотреть статус Vault из CLI.

$ vault status
 Key             Value
 ---             -----
 Seal Type       shamir
 Initialized     true
 Sealed          false
 Total Shares    5
 Threshold       3
 Version         1.0.3
 Cluster Name    vault
 Cluster ID      92ed9909-8088-a797-d5be-768d8c09ce27
 HA Enabled      false

Протестируйте конечную точку HTTP API, используя curl, чтобы проверить состояние инициализации.

$ curl http://127.0.0.1:8200/v1/sys/init
{"initialized":true}

Настройка ролей и политик Vault

Экспортируйте свой корневой токен Vault:

export VAULT_TOKEN="s.RcW0LuNIyCoTLWxrDPtUDkCw"

Замените «s.BOKlKvEAxyn5OS0LvfhzvBur» на ваш первоначальный корневой токен, хранящийся в файле /etc/vault/init.file.

Затем включите подходящий метод проверки подлинности, который позволяет компьютерам или приложениям проходить проверку подлинности с помощью ролей, определенных в Vault.

$ vault auth enable approle
Success! Enabled approle auth method at: approle/

Та же команда может использоваться для других методов аутентификации, например,

# vault auth enable kubernetes
Success! Enabled kubernetes auth method at: kubernetes/

# vault auth enable userpass
Success! Enabled userpass auth method at: userpass/

# vault auth enable ldap
 Success! Enabled ldap auth method at: ldap/

Перечислите все методы аутентификации, используя команду:

$ vault auth list
 Path           Type          Accessor                    Description
 ----           ----          --------                    -----------
 approle/       approle       auth_approle_a113b1e0       n/a
 kubernetes/    kubernetes    auth_kubernetes_e324b8e2    n/a
 ldap/          ldap          auth_ldap_d2f6edde          n/a
 token/         token         auth_token_1aa8b643         token based credentials
 userpass/      userpass      auth_userpass_6178aae8      n/a

Другие методы аутентификации также могут быть включены из веб-интерфейса.

Политиками ACL можно управлять в разделе «Policies» веб-консоли.

Напишите и получите секреты

Теперь, когда мы установили и настроили наш сервер хранилища, давайте напишем и получим секреты в хранилище.

Мы используем Vault KV, чтобы писать секреты.

Получить секретный путь движка:

$ vault secrets list
 Path          Type         Accessor              Description
 ----          ----         --------              -----------
 cubbyhole/    cubbyhole    cubbyhole_4cf73c3d    per-token private secret storage
 identity/     identity     identity_248343db     identity store
 secret/       kv           kv_30258a59           key/value secret storage
 sys/          system       system_cbeaa203       system endpoints used for control, policy and debugging

Напишите секрет вашего движка kv.

$ vault kv put secret/databases/db1 username=DBAdmin
Success! Data written to: secret/databases/db1
$ vault kv put secret/databases/db1 password=StrongPassword
Success! Data written to: secret/databases/db1

Вы даже можете использовать однострочную команду для записи нескольких данных.

$ vault kv put secret/databases/db1 username=DBAdmin password=StrongPassword
Success! Data written to: secret/databases/db1

Чтобы получить секрет, используйте команду vault get.

$ vault kv get secret/databases/db1
 ====== Data ======
 Key         Value
 ---         -----
 password    StrongPassword
 username    DBAdmin

Получить данные в формате JSON:

$ vault kv get -format=json secret/databases/db1
 {
   "request_id": "f99170b5-ac38-84ce-8668-1f280b0981c1",
   "lease_id": "",
   "lease_duration": 36000,
   "renewable": false,
   "data": {
     "password": "StrongPassword",
     "username": "DBAdmin"
   },
   "warnings": null
 }

Чтобы напечатать только значение данного поля, используйте:

$ vault kv get -field=username  secret/databases/db1
DBAdmin

Чтобы удалить секрет, используйте:

$ vault kv delete   secret/databases/db1
Success! Data deleted (if it existed) at: secret/databases/db1
$ vault kv get   secret/databases/db1
No value found at secret/databases/db1

 

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий