Как пользоваться секретами в Gitlab
Использование секретов в GitLab — это способ безопасно управлять конфиденциальной информацией, такой как пароли, токены доступа и другие данные, которые не должны храниться в явном виде в репозиториях. В GitLab секреты обычно хранятся в виде переменных CI/CD и могут использоваться в конвейерах (pipelines) для автоматизации.
Вот пошаговое руководство, как работать с секретами в GitLab.
1. Использование переменных CI/CD для хранения секретов
GitLab предоставляет возможность хранить переменные CI/CD на уровне проекта или группы. Эти переменные могут использоваться в конвейерах и хранятся в зашифрованном виде.
Как добавить секретные переменные CI/CD:
- Откройте ваш проект на GitLab.
- Перейдите в раздел Settings > CI/CD.
- Найдите секцию Variables и нажмите на кнопку Add variable.
- Введите ключ переменной (например,
SECRET_KEY
) и её значение (например,mysecretvalue
). - Настройте флажки:
- Protected: Переменная будет доступна только в защищённых ветках или тегах (обычно это мастер и релизные ветки).
- Masked: Переменная будет скрыта из логов в конвейерах (если её используют).
- Environment scope: Можно задать, для какого окружения эта переменная будет доступна (например, для production, staging).
- Нажмите Add variable.
2. Использование секретов в .gitlab-ci.yml
После того как вы добавили секретные переменные, вы можете использовать их в ваших пайплайнах.
Пример .gitlab-ci.yml
:
1 2 3 4 5 6 7 8 |
stages: - deploy deploy: stage: deploy script: - echo "Deploying with secret key: $SECRET_KEY" |
GitLab автоматически подставит значение переменной SECRET_KEY
, и оно будет доступно во время выполнения пайплайна. Важно отметить, что если переменная была отмечена как masked, она не будет отображена в логах, даже если вы вызовете echo
.
3. Типы переменных CI/CD
GitLab поддерживает несколько типов переменных:
- File variables: Эти переменные содержат данные в виде файла, который можно использовать в скриптах. Это полезно для сертификатов, приватных ключей и других данных, которые требуется читать как файл.
Пример использования переменной как файл:
- Добавьте переменную с именем, например,
SSH_PRIVATE_KEY
и значением вашего приватного ключа. - В
.gitlab-ci.yml
используйте переменную как файл:
1234567891011stages:- deploydeploy:stage: deployscript:- mkdir -p ~/.ssh- echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa- chmod 600 ~/.ssh/id_rsa- ssh -i ~/.ssh/id_rsa user@server "deploy_command"
4. Использование секретов с GitLab Runner и Docker
Если ваш GitLab Runner настроен на использование Docker-контейнеров, переменные CI/CD могут быть переданы в контейнер в качестве переменных окружения.
Пример использования секретов в Docker:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
image: docker:latest services: - docker:dind stages: - build build: stage: build script: - echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin - docker build -t myimage . - docker push myimage |
5. Поддержка Vault в GitLab (HashiCorp Vault)
GitLab поддерживает интеграцию с HashiCorp Vault, что позволяет хранить секреты в Vault и передавать их в конвейеры.
Как настроить интеграцию с Vault:
- Настройте и запустите Vault сервер.
- Настройте переменные окружения, которые будут использоваться для аутентификации в Vault.
- Включите интеграцию с Vault в Settings > CI/CD > Vault.
- Используйте секреты из Vault в пайплайнах, например:
1234567891011stages:- deploydeploy:stage: deployvariables:VAULT_ADDR: "https://vault.example.com"VAULT_TOKEN: "s.aKJ12345..."script:- vault kv get secret/myapp
6. GitLab Secrets для Kubernetes (GitLab-managed clusters)
Если вы используете GitLab-managed Kubernetes cluster, вы можете хранить секреты Kubernetes и использовать их в конвейерах GitLab.
- Kubernetes Secrets: В Kubernetes можно создавать объекты Secret, которые содержат конфиденциальные данные (например, токены, сертификаты). Эти секреты могут быть использованы для управления приложениями, которые развёртываются в кластере через GitLab CI/CD.
Пример создания секретов в Kubernetes:
1 2 |
kubectl create secret generic my-secret --from-literal=password=mysecretpassword |
7. Советы по безопасности
- Используйте защищённые ветки для переменных, которые могут содержать конфиденциальные данные. Включите флаг Protected, чтобы эти переменные не были доступны в небезопасных ветках.
- Ограничьте доступ к переменным с помощью masked и protected флагов.
- Используйте роли и права доступа для управления доступом к настройкам CI/CD и переменным.
- Не храните секреты в репозиториях (например, в файлах
.gitlab-ci.yml
). Используйте только переменные окружения или секретные сервисы.
Заключение
GitLab предоставляет множество инструментов для работы с секретами, позволяя безопасно хранить и использовать конфиденциальную информацию в конвейерах CI/CD. Основные подходы — это использование переменных CI/CD, интеграция с HashiCorp Vault или Kubernetes Secrets. Правильное использование этих инструментов позволяет минимизировать риски утечек данных и поддерживать безопасность приложения.
Recommended Posts
Vault как настроить доступ извне?
27.02.2024
Ошибки установки Vault в Gitlab CI пайплайне
26.02.2024