Вопросы:
- Как установить 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