Где хранить логины и пароли для CI/CD

«Где хранить логины и пароли для CI/CD» — вопрос из категории CI/CD, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Секреты для CI/CD (токены доступа, ключи развертывания, пароли к артефактам) никогда не должны храниться в коде репозитория. В моей практике используется иерархия:

  1. Встроенные секреты CI/CD-системы — первый и обязательный рубеж.

    • В GitLab CI/CD — это Protected Variables или File Variables.
    • В GitHub Actions — Secrets в настройках репозитория или организации.
    • В Jenkins — Credentials Binding Plugin с использованием Credentials ID.
      # Пример GitLab CI
      deploy_to_prod:
      script:
      - echo $DEPLOY_TOKEN | docker login -u $CI_REGISTRY_USER --password-stdin $CI_REGISTRY
  2. Внешние системы управления секретами (Secrets-as-a-Service) — для сложных сценариев и compliance.

    • HashiCorp Vault — подключаю через CI-плагин или CLI для динамического получения временных учетных данных.
    • Cloud-native решения: AWS Secrets Manager, Azure Key Vault. Использую их, когда инфраструктура завязана на конкретном облаке.

Мой подход: Все долгоживущие мастер-ключи (например, для доступа к Vault) хранятся в настройках CI/CD как секреты. Внутри пайплайна с их помощью получаю временные, узконаправленные учетные данные (например, STS-токен AWS) для выполнения конкретной задачи. Это минимизирует риски.