Как запрашивать данные Vault с удаленной машины?
Для запроса данных из HashiCorp Vault с удаленной машины необходимо настроить доступ и обеспечить безопасную аутентификацию. Вот основные шаги для организации такого взаимодействия:
1. Настройка HashiCorp Vault для удаленного доступа
Чтобы предоставить удаленной машине доступ к Vault, убедитесь, что Vault настроен на прослушивание внешнего IP-адреса.
- Редактируйте конфигурацию Vault:
В конфигурационном файле Vault (например,
vault.hcl
) измените адрес в секцииlistener
. Укажите IP-адрес, доступный извне, и порт, который Vault будет слушать:1234567listener "tcp" {address = "0.0.0.0:8200" # Прослушивание на всех интерфейсахtls_disable = "false" # Включите TLS для безопасности (рекомендуется)tls_cert_file = "/path/to/vault.crt"tls_key_file = "/path/to/vault.key"} - Запустите или перезапустите Vault:
12vault server -config=/path/to/vault.hcl
- Откройте порт: Убедитесь, что порт 8200 (или другой, указанный в конфигурации) открыт в настройках брандмауэра или сети, чтобы удаленная машина могла подключаться.
2. Аутентификация с удаленной машины
HashiCorp Vault поддерживает несколько методов аутентификации: AppRole
, GitHub
, Userpass
, LDAP
, AWS
и другие. Для удаленного доступа часто используется метод AppRole
, так как он подходит для программного взаимодействия.
Настройка AppRole
- Включите метод AppRole:
12vault auth enable approle - Создайте роль и привяжите политику. Например, создадим роль для доступа к определенному секрету:
12vault write auth/approle/role/remote-role token_policies="read-secrets-policy" token_ttl=1h token_max_ttl=4h - Получите
role_id
иsecret_id
для удаленной аутентификации:
123vault read auth/approle/role/remote-role/role-idvault write -f auth/approle/role/remote-role/secret-id
3. Настройка удаленной машины для доступа к Vault
На удаленной машине установите Vault CLI
, если он еще не установлен. Скачайте его с официального сайта HashiCorp Vault и установите.
Запрос токена доступа с помощью AppRole
Для аутентификации и получения временного токена доступа используйте следующие команды на удаленной машине:
- Экспортируйте адрес Vault:
- Запросите токен с использованием
role_id
иsecret_id
:12export VAULT_TOKEN=$(curl -s --request POST --data '{"role_id": "'"${VAULT_ROLE_ID}"'", "secret_id": "'"${VAULT_SECRET_ID}"'"}' ${VAULT_ADDR}/v1/auth/approle/login | jq -r .auth.client_token)Для этого потребуется утилита
jq
для обработки JSON-ответов. Убедитесь, чтоVAULT_ROLE_ID
иVAULT_SECRET_ID
экспортированы или заданы непосредственно в скрипте. - Запросите секреты:
Например, если секрет находится по пути
secret/data/mysecret
(для KV v2):12curl -s --header "X-Vault-Token: ${VAULT_TOKEN}" ${VAULT_ADDR}/v1/secret/data/mysecret | jq -r .data.dataЭто выведет значение секрета в формате JSON.
-
Пример скрипта для автоматизации запроса секретов
Создайте скрипт, который будет автоматизировать процесс получения секретов с удаленной машины:
12345678910111213141516#!/bin/bash# Настройки Vaultexport VAULT_ADDR='https://<vault-server-ip>:8200'export VAULT_ROLE_ID='<your-role-id>'export VAULT_SECRET_ID='<your-secret-id>'# Запрос токенаVAULT_TOKEN=$(curl -s --request POST --data "{\"role_id\": \"${VAULT_ROLE_ID}\", \"secret_id\": \"${VAULT_SECRET_ID}\"}" ${VAULT_ADDR}/v1/auth/approle/login | jq -r .auth.client_token)# Запрос секретаSECRET_PATH="secret/data/mysecret"SECRET_VALUE=$(curl -s --header "X-Vault-Token: ${VAULT_TOKEN}" ${VAULT_ADDR}/v1/${SECRET_PATH} | jq -r .data.data.value)echo "Секретное значение: $SECRET_VALUE"Скрипт выполняет следующие действия:
- Аутентифицируется в Vault с использованием
role_id
иsecret_id
. - Получает временный токен
VAULT_TOKEN
. - Запрашивает секрет по указанному пути и выводит его значение.
5. Рекомендации по безопасности
- Используйте HTTPS: Убедитесь, что Vault настроен на использование HTTPS (TLS), особенно для удаленного доступа.
- Минимизируйте права: Создайте минимальные политики, которые дают доступ только к тем секретам, которые необходимы для удаленной машины.
- Используйте временные токены: Настройте
ttl
для токенов, чтобы они автоматически истекали через короткое время. - Защищайте
role_id
иsecret_id
: Храните их в безопасном месте, так как их компрометация может дать несанкционированный доступ к Vault.
Эти шаги помогут настроить безопасный удаленный доступ к Vault, предоставляя только нужные данные при необходимости.
- Аутентифицируется в Vault с использованием
Recommended Posts
Vault как настроить доступ извне?
27.02.2024
Ошибки установки Vault в Gitlab CI пайплайне
26.02.2024
Vault: web интерфейс
25.02.2024