Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex Identity and Access Management
    • Все руководства
    • Разграничение прав доступа для групп пользователей
    • Сервисный аккаунт с профилем OS Login для управления ВМ с помощью Ansible
      • GitHub
      • GitLab
      • Kubernetes
  • Безопасное использование Yandex Cloud
  • Управление доступом
  • Правила тарификации
  • Справочник ролей
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • История изменений
  • Обучающие курсы

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

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

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

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

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

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

Настройте сценарий 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
Проект Яндекса
© 2025 ООО «Яндекс.Облако»