Управление конфиденциальной информацией с помощью Vault

Vault - это инструмент управления секретами; который централизованно управляет и распространяет конфиденциальную информацию. Сейф разработан с учетом передовых практик; пароли надежно хранятся и транспортируются. Сейф работает, предоставляя API, доступный для службы, работающей как клиент. Сервер хранилища через API предоставляет внутренние серверные компоненты sys, secret и auth.

Бегущее хранилище

Запуск хранилища с внутренним хранилищем in-mem отлично подходит для тестирования. Однако для HA рекомендуется использовать consul; серверная часть mysql не является HA; если экземпляр хранилища утерян; даже если несколько из них существовали, ведущее хранилище не может быть легко обнаружено, если только не произойдет перенастройка с новым IP-адресом хранилища. Это медленнее и более подвержено ошибкам. Хранилище с несколькими экземплярами mysql не является HA; он будет подключаться к разным базам данных и не будет делиться друг с другом каким-либо состоянием кластера, что превосходит цель.

Хранилище в режиме HA с консулом

Vault поддерживает множество серверных компонентов; но все они не обеспечивают высокую доступность; consul и zookeeper поддерживают высокую доступность. Настоятельно рекомендуется использовать консул для достижения высокой доступности. Consul - это серверная часть хранилища, которая сплетничает, используя протокол крепостных. С этим протоколом; каждый член кластера отправляет широковещательное сообщение другим членам; уведомление и обновление состояния остальной частью кластера. Это обеспечивает высокую доступность и относительно высокую согласованность в случае сетевого раздела. Чтобы запустить хранилище в режиме высокой доступности с помощью consul - это легко настроить и управлять с помощью ansible.

Обнаружение службы на основе DNS

Когда служба хранилища запускается, она регистрируется в consul; идентифицируя себя уникальным именем. Эти службы доступны через RESTful API или DNS; с помощью такого инструмента, как DNSmasq / BIND, имена этих служб можно легко отобразить на хосте. Рекомендуется запускать хранилище со списком консулов, которые будут обнаружены через DNS, например, образец конфигурации DNSmasq и etc / resolv.conf для добавления консула в качестве DNS-сервера для пространство имен консула.

DNSmasq разрешается с помощью consul, который предоставляет служебную информацию через DNS.

Получение секретов с использованием аутентификации сертификата; зачем это нужно? Это гарантирует, что клиент, делающий запрос, является легитимным клиентом и находится среди хостов, которым разрешено делать запрос. Могут использоваться правила брандмауэра; в этом случае спуфинг IP представляет собой риск, с которым необходимо бороться. Vault поддерживает другие серверные части аутентификации, такие как token, appid или user & pass. Сертификаты клиентов съели самую надежную IMO; поскольку они могут быть отозваны динамически.

Управление хранилищем

Хранилище - это секретное хранилище, и для предотвращения утечек оно должно быть запечатано через API. Когда IDS обнаруживает, что происходит вторжение, хранилище должно быть запечатано (IDS может активировать печать). Хранилище бывает сложно вскрыть; ему необходимо распечатывать всякий раз, когда инициируется перезапуск службы или компьютера. Это также можно было сделать через API; ключи распечатки могут быть от трех до такого количества ключей, которое необходимо организации. Трех должно быть достаточно; поскольку эти ключи будут храниться у группы администраторов.

Развертывание хранилища

Остерегайтесь высокой доступности, используйте доступное хранилище данных высокой доступности. Обнаружение службы через DNS и отравление кеша. Вы не хотите запускать хранилище в режиме, отличном от HA, и чтобы ваши службы не запускались белым, пытаясь извлечь секреты / обновлять конфигурацию. Это могло вызвать массовый сбой; особенно если секреты периодически вытаскиваются.

Аудит

Аудит бэкэндов, таких как файлы, может быть очень эффективным; при правильном употреблении. Они просты, их можно использовать и анализировать.

API

Vault API полон и с ним легко работать. Этот API позволяет службе автоматизировать и контролировать такие важные вопросы, как распечатывание / запечатывания Сейфа и отставка лидера.

Образец клиентского запроса

В этом примере запроса мы представляем сертификат и ключевой файл; ответ - одноразовый токен . Этот OTT используется для отправки запроса к секретной серверной части хранилища; сертификат позволяет нам сгенерировать токен, привязанный к политике, к которой приложению разрешен доступ.

# Using Python for this example, should be similar in other languages
import requests
import json

from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

cert_file_path = "/etc/cert/proj.crt"
key_file_path = "/etc/cert/proj.key"

cert = (cert_file_path, key_file_path)

r = requests.post('https://active.vault.consul:8200/v1/auth/cert/login', cert=cert, verify=False)
json_response = r.json()

if r.status_code == 200:
    token = json_response.get('auth',{})
    client_token = token.get('client_token', None)

    headers = {"X-Vault-Token": "{}".format(client_token)}
    r = requests.get('https://active.vault.consul:8200/v1/secret/proj', verify=False, headers=headers)
    json_response = r.json()
    print json.dumps(json_response)

использованная литература

Консул [1] https://www.consul.io/docs/index.html

Убежище [2] https://www.vaultproject.io/docs/