Yandex Cloud
Поиск
Связаться с экспертомПопробовать бесплатно
  • Кейсы
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
  • Marketplace
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Искусственный интеллект
    • Безопасность
    • Инструменты DevOps
    • Бессерверные вычисления
    • Управление ресурсами
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Калькулятор цен
    • Тарифы
    • Акции и free tier
  • Кейсы
  • Документация
  • Блог
Создавайте контент и получайте гранты!Готовы написать своё руководство? Участвуйте в контент-программе и получайте гранты на работу с облачными сервисами!
Подробнее о программе
Проект Яндекса
© 2026 ООО «Яндекс.Облако»
Yandex Identity and Access Management
    • Все руководства
    • Разграничение прав доступа для групп пользователей
    • Сервисный аккаунт с профилем OS Login для управления ВМ с помощью Ansible
      • GitHub
      • GitLab
      • Пользовательская инсталляция Kubernetes
      • Managed Service for Kubernetes
      • Настройка CI/CD между Cloud Functions и GitHub
    • Загрузка объектов в бакет Object Storage с помощью эфемерного ключа доступа
  • Безопасное использование Yandex Cloud
  • Управление доступом
  • Правила тарификации
  • Справочник ролей
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • История изменений
  • Обучающие курсы

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

  • Создайте репозиторий в GitHub
  • Подготовьте облако к работе
  • Необходимые платные ресурсы
  • Создайте федерацию сервисных аккаунтов
  • Создайте пользовательский секрет
  • Создайте сервисный аккаунт
  • Привяжите сервисный аккаунт к Федерации
  • Настройте сценарий GitHub Actions
  • Удалите созданные ресурсы
  • Полезные ссылки
  1. Практические руководства
  2. Интеграции федераций удостоверений сервисных аккаунтов
  3. GitHub

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

Статья создана
Yandex Cloud
Обновлена 18 июня 2026 г.
Открыть в Markdown
  • Создайте репозиторий в GitHub
  • Подготовьте облако к работе
    • Необходимые платные ресурсы
    • Создайте федерацию сервисных аккаунтов
    • Создайте пользовательский секрет
    • Создайте сервисный аккаунт
    • Привяжите сервисный аккаунт к Федерации
  • Настройте сценарий GitHub Actions
  • Удалите созданные ресурсы
  • Полезные ссылки

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

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

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

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

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

Создайте репозиторий в GitHubСоздайте репозиторий в GitHub

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

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

Зарегистрируйтесь в 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://token.actions.githubusercontent.com.
  6. В поле Допустимые значения Audience (aud) введите получателя токена https://github.com/<имя_пользователя_github>.
  7. В поле Адрес JWKS введите URL списка публичных ключей https://token.actions.githubusercontent.com/.well-known/jwks.
  8. В поле Имя введите имя федерации, например test-iam-federation.
  9. Нажмите кнопку Создать.

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

Консоль управления
  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. В поле Значение Subject (sub) укажите идентификатор внешнего аккаунта repo:<имя_пользователя_github>/<название_репозитория_github>:ref:refs/heads/main.
  7. Нажмите кнопку Привязать.

Настройте сценарий GitHub ActionsНастройте сценарий GitHub Actions

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

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

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

    name: CI
    
    permissions:
      id-token: write # Требуется для запроса JWT-токена
    
    # Controls when the workflow will run
    on:
      # Запускает выполнение сценария при пуш или пул-реквесте в ветке "main"
      push:
        branches: [ "main" ]
      pull_request:
        branches: [ "main" ]
    
      # Позволяет запустить сценарий вручную во вкладке Actions
      workflow_dispatch:
    
    jobs:
      job:
        runs-on: ubuntu-latest
        steps:
        - name: Install OIDC Client from Core Package
          run: npm install @actions/core @actions/http-client
        # Получить токен задания рабочего процесса
        - name: Get Id Token
          uses: actions/github-script@v7
          id: tokenid
          with:
            script: |
              const coredemo = require('@actions/core')
              let id_token = await coredemo.getIDToken()
              coredemo.setOutput('id_token', id_token)
        # Обменять токен задания рабочего процесса на IAM-токен сервисного аккаунта в Yandex Cloud
        - name: GetIAMToken
          run: |
            SA_ID="<идентификатор_сервисного_аккаунта>"
            IAMTOKEN=$(curl -sH "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=${{steps.tokenid.outputs.id_token}}&subject_token_type=urn:ietf:params:oauth:token-type:id_token" -X POST https://auth.yandex.cloud/oauth/token | jq -r '.access_token')
            echo "IAMToken=${IAMTOKEN}" >> $GITHUB_OUTPUT
          id: IAMtoken
        # Запросить значение секрета через API, используя IAM-токен в Yandex Cloud
        - name: GetLockboxPayload
          run: |
            SECRET_ID="<идентификатор_секрета>"
            SECRET_DATA=$(curl -sH "Authorization: Bearer ${{steps.IAMtoken.outputs.IAMTOKEN}}" https://payload.lockbox.api.cloud.yandex.net/lockbox/v1/secrets/$SECRET_ID/payload)
            echo "SECRET_DATA=${SECRET_DATA}" >> $GITHUB_OUTPUT
          id: getlockboxpayload
    

    Где:

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

    git add . && git commit -m "Added blank.yml" && git push
    

    После отправки кода в репозиторий начнется выполнение рабочего процесса. Результат выполнения сценария можно посмотреть в логе на вкладке Actions вашего репозитория:

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

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

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

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

Полезные ссылкиПолезные ссылки

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

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

Предыдущая
Сервисный аккаунт с профилем OS Login для управления ВМ с помощью Ansible
Следующая
GitLab
Создавайте контент и получайте гранты!Готовы написать своё руководство? Участвуйте в контент-программе и получайте гранты на работу с облачными сервисами!
Подробнее о программе
Проект Яндекса
© 2026 ООО «Яндекс.Облако»