Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Практические руководства
    • Все руководства
    • Разграничение прав доступа для групп пользователей
    • Создание L7-балансировщика с профилем безопасности Smart Web Security через Ingress-контроллер Application Load Balancer
    • Централизованная публикация в интернете и защита приложений от DDoS
    • Передача логов с виртуальной машины в Cloud Logging
    • Запись логов балансировщика в PostgreSQL
    • Безопасное хранение паролей для GitLab CI в виде секретов Yandex Lockbox
    • Сервисный аккаунт с профилем OS Login для управления ВМ с помощью Ansible
    • Передача логов с Container Optimized Image в Cloud Logging
    • Добавление HTML-страницы для работы SmartCaptcha
    • Создание L7-балансировщика с профилем безопасности
    • Настройка алертов в Monitoring
    • Загрузка аудитных логов в MaxPatrol SIEM
    • Загрузка аудитных логов в SIEM Splunk
    • Загрузка аудитных логов в SIEM ArcSight
    • Шифрование для бакета Object Storage на стороне сервера
    • Шифрование секретов в HashiCorp Terraform
    • Управление ключами KMS с HashiCorp Terraform
    • Auto Unseal в HashiCorp Vault

В этой статье:

  • Необходимые платные ресурсы
  • Подготовьте инфраструктуру
  • Настройте сценарий CI
  • Проверьте результат
  • Устраните потенциальные уязвимости
  • Удалите созданные ресурсы
  1. Безопасность
  2. Безопасное хранение паролей для GitLab CI в виде секретов Yandex Lockbox

Безопасное хранение паролей для GitLab CI в виде секретов Yandex Lockbox

Статья создана
Yandex Cloud
Обновлена 14 марта 2025 г.
  • Необходимые платные ресурсы
  • Подготовьте инфраструктуру
  • Настройте сценарий CI
  • Проверьте результат
  • Устраните потенциальные уязвимости
  • Удалите созданные ресурсы

Вы можете безопасно хранить пароли в виде секретов Yandex Lockbox и использовать их в своих сценариях CI в Yandex Managed Service for GitLab. Так вы можете защитить и скрыть пароли в CI-скриптах от пользователей GitLab, в том числе администраторов.

Интеграция с Yandex Lockbox устроена следующим образом. Вы подготавливаете секрет Yandex Lockbox и переменную окружения GitLab, которая ссылается на этот секрет. Также вы устанавливаете GitLab Runner на виртуальную машину и привязываете к ней сервисный аккаунт. После этого вы создаете указанный ниже CI-скрипт. Он содержит специальную команду, которая запрашивает IAM-токен сервисного аккаунта. С помощью полученного IAM-токена и переменной окружения скрипт извлекает пароль из секрета. В результате пароль используется в CI-скрипте, но хранится во внешнем хранилище.

Чтобы инстанс Managed Service for GitLab мог обращаться к секретам Yandex Lockbox:

  1. Подготовьте инфраструктуру.
  2. Настройте сценарий CI.
  3. Проверьте результат.
  4. Устраните потенциальные уязвимости.

Если созданные ресурсы вам больше не нужны, удалите их.

Необходимые платные ресурсыНеобходимые платные ресурсы

В стоимость поддержки инфраструктуры входит:

  • Плата за диски и постоянно запущенные ВМ (см. тарифы Yandex Compute Cloud).
  • Плата за хранение секрета и запросы к нему (см. тарифы Yandex Lockbox).
  • Плата за использование публичного IP-адреса (см. тарифы Yandex Virtual Private Cloud).

Подготовьте инфраструктуруПодготовьте инфраструктуру

  1. Создайте и активируйте инстанс Managed Service for GitLab.

  2. Создайте проект GitLab.

  3. Создайте секрет Yandex Lockbox с названием MY_SECRET.

  4. Создайте сервисный аккаунт с ролью lockbox.payloadViewer.

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

  5. Создайте переменную окружения GitLab для проекта. Укажите в ней следующие настройки:

    • Key — MY_SECRET.

    • Value — идентификатор созданного секрета Yandex Lockbox.

    • Mask variable — включено.

      Чтобы защитить пароли от кражи злоумышленниками, замаскируйте переменную. Так только пользователи с ролями Maintainer или Owner в проекте GitLab смогут увидеть значение переменной — идентификатор секрета Yandex Lockbox. Если злоумышленник подключится к виртуальной машине с GitLab Runner, без идентификатора секрета он не сможет узнать пароль из этого секрета.

  6. Установите GitLab Runner на отдельной виртуальной машине Yandex Compute Cloud. При создании ВМ укажите созданный ранее сервисный аккаунт.

    В настройках GitLab Runner укажите, что он доступен только для защищенных веток и конкретных проектов (опции Protected и Lock to current projects). Если не указать эти настройки, CI-скрипты с паролями можно будет запустить в проектах, которые не отслеживают сотрудники информационной безопасности. В результате пароли могут быть скомпрометированы.

    Как настроить GitLab Runner
    1. Откройте проект GitLab в браузере.

    2. В меню слева перейдите в раздел Settings → CI/CD.

    3. В разделе Runners нажмите кнопку Expand.

    4. В строке с нужным GitLab Runner нажмите кнопку и включите следующие опции:

      • Protected — GitLab Runner будет работать только с защищенными ветками;
      • Lock to current projects — GitLab Runner будет работать только с текущими проектами.
    5. Нажмите кнопку Save changes.

    Подробнее о настройках GitLab Runner см. в документации GitLab.

Настройте сценарий CIНастройте сценарий CI

  1. Создайте ветку для сценария CI. Включите для нее защиту на уровне проекта.

  2. Переключитесь локально на созданную ветку.

  3. В корне репозитория создайте файл .gitlab-ci.yml и вставьте в него CI-скрипт, который выводит значение секрета Yandex Lockbox:

    stages:
      - build
    build:
      stage: build
      script:
        - >
          export IAM_TOKEN_JSON=`curl --silent --header "Metadata-Flavor: Google" http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/token`
        - export TOKEN=`echo $IAM_TOKEN_JSON | jq -rMc '.access_token'`
        - >
          curl --silent -header "Authorization: Bearer $TOKEN" https://payload.lockbox.api.cloud.yandex.net/lockbox/v1/secrets/$SECRET_ID/payload
        - >
          export SECRET_JSON=`curl --silent --header "Authorization: Bearer $TOKEN" https://payload.lockbox.api.cloud.yandex.net/lockbox/v1/secrets/$SECRET_ID/payload`
        - export VALUE_OF_MY_SECRET=`echo $SECRET_JSON | jq -rMc '.entries[] | select(.key | contains("MY_SECRET")) | .textValue'`
        - echo $VALUE_OF_MY_SECRET
    
  4. Создайте коммит и отправьте его в удаленный репозиторий origin:

    git add . && git commit -m "Added .gitlab-ci.yml" && git push
    

После этого запустится сборка, которая запишет значение секрета Yandex Lockbox в переменную окружения VALUE_OF_MY_SECRET.

Проверьте результатПроверьте результат

  1. В меню слева в GitLab перейдите в раздел Build → Pipelines.
  2. Убедитесь, что сборка принимает статус Passed. Он означает, что сборка прошла успешно.

Устраните потенциальные уязвимостиУстраните потенциальные уязвимости

  1. Включите и настройте правила ревью кода в ветке для сценария CI.

    Так злоумышленники не смогут получить значение переменной с помощью таких команд, как env, printenv или echo. Сотрудники информационной безопасности смогут отслеживать изменения в ветке.

  2. Настройте группу безопасности для ВМ с GitLab Runner. Запретите в ней входящий трафик, который разрешает подключения к ВМ извне.

    Если злоумышленник подключился к ВМ с GitLab Runner и знает идентификатор секрета Yandex Lockbox, он может получить доступ к секрету.

Удалите созданные ресурсыУдалите созданные ресурсы

Некоторые ресурсы платные. Удалите ресурсы, которые вы больше не будете использовать, чтобы не платить за них:

  • инстанс GitLab;
  • секрет Yandex Lockbox;
  • ВМ с GitLab Runner;
  • сервисный аккаунт.

Была ли статья полезна?

Предыдущая
Запись логов балансировщика в PostgreSQL
Следующая
Обзор
Проект Яндекса
© 2025 ООО «Яндекс.Облако»