Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Безопасность в Yandex Cloud
  • Ключевые принципы безопасности
  • Разделение ответственности за обеспечение безопасности
  • Соответствие требованиям
  • Меры безопасности на стороне Yandex Cloud
  • Средства защиты, доступные пользователям облачных сервисов
    • Все руководства
      • Какой способ шифрования выбрать?
      • Шифрование данных с помощью CLI и API Yandex Cloud
      • Шифрование данных с помощью SDK Yandex Cloud
      • Шифрование данных с помощью AWS Encryption SDK
      • Шифрование данных с помощью Google Tink
      • Управление ключами Key Management Service с Terraform
      • Шифрование секретов в Terraform
      • Auto Unseal в HashiCorp Vault
      • Безопасная передача пароля в скрипт инициализации
      • Безопасное хранение паролей для GitLab CI в виде секретов Yandex Lockbox
      • Получение значения секрета Yandex Lockbox на стороне GitHub
      • Получение значения секрета Yandex Lockbox на стороне GitLab
  • Политика поддержки пользователей при проведении проверки уязвимостей
  • Бюллетени безопасности
  • Диапазоны публичных IP-адресов

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

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

Получение значения секрета Yandex Lockbox на стороне GitLab

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

Федерации сервисных аккаунтов (Workload Identity Federation) позволяют настроить связь между внешними системами и Yandex Cloud по протоколу OpenID Connect (OIDC). За счет этого внешние системы могут выполнять действия с ресурсами Yandex Cloud от имени сервисных аккаунтов без использования авторизованных ключей. Это более безопасный способ, минимизирующий риск утечки учетных данных и возможность несанкционированного доступа.

В этом руководстве для примера показано, как получить значение секрета Yandex Lockbox со стороны GitLab от имени сервисного аккаунта в Yandex Cloud. Аналогично можно выполнить любое действие через Yandex Cloud CLI, API или Terraform.

Чтобы получить значение секрета Yandex Lockbox от имени аккаунта на GitLab:

  1. Создайте проект GitLab.
  2. Подготовьте облако к работе.
  3. Настройте сценарий GitLab CI/CD.

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

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

Создайте новый проект GitLab или используйте существующий, в котором у вас есть права на просмотр и выполнение GitLab CI/CD пайплайнов.

Подготовьте облако к работеПодготовьте облако к работе

Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:

  1. Перейдите в консоль управления, затем войдите в Yandex Cloud или зарегистрируйтесь.
  2. На странице Yandex Cloud Billing убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе ACTIVE или TRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.

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

Подробнее об облаках и каталогах.

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

В стоимость поддержки инфраструктуры входит плата за хранение секрета и запросы к нему (см. тарифы Yandex Lockbox).

Создайте федерацию сервисных аккаунтовСоздайте федерацию сервисных аккаунтов

Консоль управления
  1. В консоли управления выберите каталог, в котором вы хотите создать федерацию сервисных аккаунтов.
  2. В списке сервисов выберите Identity and Access Management.
  3. На панели слева выберите Федерации сервисных аккаунтов.
  4. Нажмите Создать федерацию.
  5. В поле Значение Issuer (iss) введите URL OIDC-провайдера https://gitlab.com.
  6. В поле Допустимые значения Audience (aud) введите получателя токена https://gitlab.com/<название_группы>/<название_проекта_gitlab>.
  7. В поле Адрес JWKS введите URL списка публичных ключей https://gitlab.com/oauth/discovery/keys.
  8. В поле Имя введите имя федерации, например test-iam-federation.
  9. Нажмите кнопку Создать.

Примечание

Если вы используете пользовательскую инсталляцию GitLab, замените https://gitlab.com на адрес вашей инсталляции во всех упоминаемых значениях.

Создайте пользовательский секретСоздайте пользовательский секрет

Консоль управления
  1. В консоли управления выберите каталог, в котором будет создан секрет.
  2. В списке сервисов выберите Lockbox.
  3. Нажмите кнопку Создать секрет.
  4. В поле Имя введите имя секрета MY_SECRET.
  5. Выберите Тип секрета Пользовательский.
  6. В поле Ключ введите неконфиденциальный идентификатор, например secret.
  7. В поле Значение введите конфиденциальные данные для хранения.
  8. Нажмите кнопку Создать.

Создайте сервисный аккаунтСоздайте сервисный аккаунт

  1. Создайте сервисный аккаунт:

    Консоль управления
    1. В консоли управления выберите каталог, в котором хотите создать сервисный аккаунт.
    2. В списке сервисов выберите Identity and Access Management.
    3. Нажмите кнопку Создать сервисный аккаунт.
    4. Введите имя сервисного аккаунта, например sa-lockbox.
    5. Нажмите кнопку Создать.
  2. Назначьте сервисному аккаунту роль lockbox.payloadViewer на каталог:

    Консоль управления
    1. На стартовой странице консоли управления выберите каталог.
    2. Перейдите на вкладку Права доступа.
    3. Найдите аккаунт sa-lockbox в списке и нажмите значок .
    4. Нажмите кнопку Изменить роли.
    5. В открывшемся диалоге нажмите кнопку Добавить роль и выберите роль lockbox.payloadViewer.

Привяжите сервисный аккаунт к федерацииПривяжите сервисный аккаунт к федерации

Консоль управления
  1. В консоли управления выберите каталог, в котором был создан сервисный аккаунт.
  2. В списке сервисов выберите Identity and Access Management.
  3. В списке выберите сервисный аккаунт sa-lockbox.
  4. Перейдите на вкладку Федерации сервисных аккаунтов.
  5. Нажмите кнопку Привязать к федерации.
  6. В поле Федерация сервисных аккаунтов выберите ранее созданную федерацию.
  7. В поле Значение Subject (sub) укажите идентификатор внешнего аккаунта project_path:<название_группы>/<название_проекта_gitlab>:ref_type:branch:ref:<название_ветки_репозитория>.
  8. Нажмите кнопку Привязать.

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

  1. Склонируйте ваш репозиторий, если это еще не сделано:

    git clone <URL_репозитория>
    
  2. В локальной копии вашего репозитория создайте файл .gitlab-ci.yml в корневой директории.

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

    stages:
    - check_token
    
    check_token:
      stage: check_token
      image: 
        name: ubuntu
      id_tokens:
        GITLAB_OIDC_TOKEN:
          aud: https://gitlab.com/<название_группы>/<название_проекта_gitlab>
      script:
       - apt update && apt install curl jq -y
       # Обменять токен задания рабочего процесса на IAM-токен сервисного аккаунта в Yandex Cloud
       - SA_ID="<идентификатор_сервисного_аккаунта>"      
       - >-
        IAM_TOKEN="$(curl -s
        -H "Content-Type: application/x-www-form-urlencoded" 
        -d "grant_type=urn:ietf:params:oauth:grant-type:token-exchange&requested_token_type=urn:ietf:params:oauth:token-type:access_token&audience=${SA_ID}&subject_token=${GITLAB_OIDC_TOKEN}&subject_token_type=urn:ietf:params:oauth:token-type:id_token" 
        -X POST https://auth.yandex.cloud/oauth/token | jq -r '.access_token')"
       # Запросить значение секрета через API, используя IAM-токен в Yandex Cloud
       - SECRET_ID="<идентификатор_секрета>"
       - >-
        SECRET_DATA=$(curl -sH "Authorization: Bearer ${IAM_TOKEN}" https://payload.lockbox.api.cloud.yandex.net/lockbox/v1/secrets/$SECRET_ID/payload)
       - echo ${SECRET_DATA}
      tags:
        - app-test
    

    Где:

    • aud — получатель токена, указанный при создании федерации сервисных аккаунтов;
    • SA_ID — идентификатор сервисного аккаунта;
    • SECRET_ID — идентификатор пользовательского секрета.
  4. Сохраните файл и отправьте изменения в удаленный репозиторий:

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

    После отправки кода в репозиторий начнется выполнение рабочего процесса.

  5. В меню слева в GitLab перейдите в раздел Build → Pipelines.

  6. Убедитесь, что сборка принимает статус Passed. Он означает, что сборка прошла успешно.

  7. В меню слева в GitLab перейдите в раздел Build → Jobs.

  8. Нажмите на последнее выполненное задание, чтобы посмотреть результат выполнения сценария в логе:

    { "entries": [ { "key": "secret", "textValue": "67cH2£?pO********" } ], "versionId": "e6q8isknpcp7********" }
    

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

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

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

Смотрите такжеСмотрите также

  • Безопасное хранение паролей для GitLab CI в виде секретов Yandex Lockbox;
  • Получение значения секрета Yandex Lockbox на стороне GitHub.

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

Предыдущая
Получение значения секрета Yandex Lockbox на стороне GitHub
Следующая
Поиск событий Yandex Cloud в Query
Проект Яндекса
© 2025 ООО «Яндекс.Облако»