Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex Lockbox
  • Начало работы
    • Все руководства
    • Синхронизация с секретами Managed Service for Kubernetes
    • Хранение подключений и переменных Apache Airflow™ в Yandex Lockbox
    • Построение пайплайна CI/CD в GitLab с использованием serverless-продуктов
    • Безопасное хранение паролей для GitLab CI в виде секретов Yandex Lockbox
    • Загрузка данных из Яндекс Директ в витрину Yandex Managed Service for ClickHouse® с использованием Yandex Cloud Functions, Yandex Object Storage и Yandex Data Transfer
    • Развертывание отказоустойчивой архитектуры с прерываемыми ВМ
    • Создание интерактивного serverless-приложения с использованием WebSocket
    • Автоматическое копирование объектов из одного бакета Object Storage в другой
    • Безопасная передача пароля в скрипт инициализации
  • Квоты и лимиты
  • Управление доступом
  • Правила тарификации
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • История изменений
  • Вопросы и ответы

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

  • Необходимые платные ресурсы
  • Подготовьте инфраструктуру
  • Настройте сценарий 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;
  • сервисный аккаунт.

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

Предыдущая
Построение пайплайна CI/CD в GitLab с использованием serverless-продуктов
Следующая
Обзор
Проект Яндекса
© 2025 ООО «Яндекс.Облако»