Защита вызова REST для управления секретами хранилища - PullRequest
0 голосов
/ 19 сентября 2018

Пытался выяснить, как сделать это на некоторое время.По сути, Vault не имеет безопасной опции для своих вызовов REST.Я хочу сделать эти остальные вызовы зашифрованными как можно ближе к точкам a и b.Мои мысли были следующими:

  • Использовать туннель SSH
  • Использовать туннель TLS, такой как Stunnel

У меня есть Vault в контейнере Docker,так что это еще кое-что, чтобы упомянуть.Кто-нибудь сталкивался с такой ситуацией, и как вы с ней справились?

ОБНОВЛЕНИЕ: Итак, используя Python API (HVAC), я получаю следующую ошибку:

requests.exceptions.SSLError: HTTPSConnectionPool(host='0.0.0.0',
port=8200): Max retries exceeded with url: /v1/secret (Caused by
SSLError(SSLError("bad handshake: Error([('SSL routines', 'ssl3_get_record',
'wrong version number')],)",),))

Использованиеследующие команды:

import os
import hvac
client = hvac.Client(url='https://0.0.0.0:8200', token='my-token-here')

Ответы [ 2 ]

0 голосов
/ 26 июня 2019

Чтобы разработать Vault, работающий в контейнере, вам нужно создать файл конфигурации для Vault, который содержит что-то похожее на это (код Chef / Ruby):

config_content = %(
  "storage": {
     ...
  },
  "default_lease_ttl": "768h",
  "max_lease_ttl": "8766h",
  "listener": [
    {"tcp": {
      "address": "0.0.0.0:8200",
      "tls_disable": 0,
      "tls_cert_file": "/vault/certs/my-cert-combined.pem",
      "tls_key_file": "/vault/certs/my-cert.key"
    }}],
  "log_level": "info"
 )

Особенно часть слушателя.Сделайте свое внутреннее хранилище тем, что вы хотите использовать (не по умолчанию для Dev в памяти!).

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

Сохраните этот файл конфигурации в каталоге, который связан внутри контейнера с путем / хранилище / config.Я использую / var / vault / config на моем хосте.Например (больше Ruby / Chef):

docker_container 'vault' do
  container_name 'vault'
  tag 'latest'
  port '8200:8200'
  cap_add ['IPC_LOCK']
  restart_policy 'always'
  volumes ['/var/vault:/vault']
  command 'vault server -config /vault/config'
  action :run_if_missing
end

Эта команда говорит Vault искать в / vault / config, и она должна найти там ваш файл конфигурации с расширением .json.Обратите внимание, что важно иметь адрес слушателя конфигурационного файла-> tcp-> 0.0.0.0, а не 127.0.0.1, потому что Vault не будет правильно разрешать внешний доступ.

Затем Vault запустится с шифрованием TLS для всех транзакций.Определите VAULT_ADDR, чтобы иметь https://your -host.com: 8200 , и все - и все.

0 голосов
/ 20 сентября 2018

Vault имеет TLS, включенный по умолчанию , поэтому все ваши вызовы REST уже зашифрованы.Если у вас возникли проблемы с использованием https, обратитесь к документации по переменным окружения VAULT_CACERT и VAULT_CAPATH.

из документации хранилища.

VAULT_CACERT

Путь к файлу сертификата CA в кодировке PEM на локальном диске.Этот файл используется для проверки SSL-сертификата сервера Vault.Эта переменная среды имеет приоритет над VAULT_CAPATH.

VAULT_CAPATH Путь к каталогу файлов сертификатов CA в кодировке PEM на локальном диске.Эти сертификаты используются для проверки SSL-сертификата сервера Vault.

Вы можете использовать такие инструменты, как tcpdump или wireshark, чтобы убедиться, что ваши запросы действительно зашифрованы.

...