Как настроить получение секретов Vault из Gitlab?
Для настройки автоматического получения секретов из HashiCorp Vault в GitLab CI/CD, необходимо настроить GitLab для взаимодействия с Vault. Эта интеграция позволяет вашим CI/CD пайплайнам безопасно получать секреты и использовать их в процессах сборки и развертывания.
Вот пошаговое руководство по настройке:
1. Настройка доступа к Vault
Для начала убедитесь, что в HashiCorp Vault настроены политики и роли, которые позволяют GitLab CI получать доступ к нужным секретам.
Создание политики в Vault
Создайте политику, которая позволит доступ только к определенным секретам. Например, создадим политику, которая позволяет GitLab CI получать секреты по пути secret/data/gitlab/*
.
Создайте файл политики, например gitlab-policy.hcl
:
1 2 3 4 |
path "secret/data/gitlab/*" { capabilities = ["read"] } |
Загрузите политику в Vault:
1 2 |
vault policy write gitlab-policy gitlab-policy.hcl |
Создание роли AppRole для GitLab
Теперь создадим AppRole для GitLab, которая позволит GitLab аутентифицироваться в Vault и получать токены доступа.
- Включите AppRole аутентификацию (если она еще не включена):
12vault auth enable approle - Создайте роль с привязанной политикой:
12vault write auth/approle/role/gitlab-role token_policies="gitlab-policy" token_ttl=1h token_max_ttl=4h - Получите
role_id
иsecret_id
, необходимые для аутентификации:
123vault read auth/approle/role/gitlab-role/role-idvault write -f auth/approle/role/gitlab-role/secret-idrole_id
иsecret_id
), они потребуются для настройки в GitLab CI/CD.
2. Настройка переменных в GitLab
Для интеграции GitLab с Vault используйте role_id
и secret_id
в переменных CI/CD. Настройка этих переменных доступна в разделе настроек проекта GitLab (Settings > CI / CD > Variables
).
- Добавьте следующие переменные GitLab:
- VAULT_ADDR — URL-адрес вашего HashiCorp Vault, например
https://vault.example.com
- VAULT_ROLE_ID —
role_id
, полученный на предыдущем шаге - VAULT_SECRET_ID —
secret_id
, полученный на предыдущем шаге - VAULT_PATH — путь к секретам, например
secret/data/gitlab/mysecret
- VAULT_ADDR — URL-адрес вашего HashiCorp Vault, например
- Отметьте эти переменные как protected (если они будут использоваться только для защищенных веток) и masked (для скрытия их значений в логах).
3. Создание GitLab CI/CD конфигурации
Настройте ваш .gitlab-ci.yml
файл, чтобы использовать HashiCorp Vault для получения секретов. Пример пайплайна, который использует VAULT_ADDR
, VAULT_ROLE_ID
, и VAULT_SECRET_ID
для аутентификации и получения секрета:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
stages: - deploy before_script: # Установите Vault CLI, если он не установлен в контейнере - apt-get update && apt-get install -y vault jq deploy: stage: deploy script: - echo "Получение токена от Vault" - export 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) # Получение секрета из Vault - echo "Получение секрета из Vault" - | export MY_SECRET=$(curl -s --header "X-Vault-Token: ${VAULT_TOKEN}" ${VAULT_ADDR}/v1/${VAULT_PATH} | jq -r .data.value) # Используйте секреты в дальнейших шагах - echo "\"Секрет успешно получен:\" ${MY_SECRET}" |
Пояснение по конфигурации:
- Получение токена Vault: Используем запрос
curl
сrole_id
иsecret_id
, чтобы получить токен аутентификации (VAULT_TOKEN
) для дальнейших запросов. - Запрос к секрету: С помощью
VAULT_TOKEN
выполняем запрос для чтения секрета по путиVAULT_PATH
. - Использование секретов: Секрет сохраняется в переменной
MY_SECRET
, которую можно использовать в последующих шагах пайплайна.
Дополнительные рекомендации:
- Ограничьте доступ: Политики Vault и роли должны предоставлять доступ только к тем секретам, которые действительно нужны GitLab CI.
- Безопасность переменных: Убедитесь, что
role_id
иsecret_id
заданы как защищенные и скрытые переменные в GitLab. - Тестирование: Перед запуском в продакшн-окружении протестируйте пайплайн с минимальными привилегиями.
С этой настройкой GitLab сможет безопасно получать секреты из Vault, что позволяет лучше управлять конфиденциальными данными для деплоя.
Recommended Posts
Vault как настроить доступ извне?
27.02.2024
Ошибки установки Vault в Gitlab CI пайплайне
26.02.2024
Vault: web интерфейс
25.02.2024