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

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

  • Подготовьте облако к работе
  • Создайте федерацию сервисных аккаунтов
  • Создайте привязку
  • Обменяйте JWT-токен на IAM-токен сервисного аккаунта
  • См. также
  1. Пошаговые инструкции
  2. Федерации сервисных аккаунтов
  3. Настройка федерации сервисных аккаунтов

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

Статья создана
Yandex Cloud
Улучшена
Обновлена 21 апреля 2025 г.
  • Подготовьте облако к работе
  • Создайте федерацию сервисных аккаунтов
  • Создайте привязку
  • Обменяйте JWT-токен на IAM-токен сервисного аккаунта
  • См. также

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

Чтобы настроить аутентификацию в API Yandex Cloud через федерацию сервисных аккаунтов:

  1. Подготовьте облако к работе.
  2. Создайте федерацию сервисных аккаунтов.
  3. Создайте привязку.
  4. Обменяйте JWT-токен внешнего субъекта на IAM-токен сервисного аккаунта.

Примеры настройки аутентификации для отдельных OIDC-провайдеров приведены в практических руководствах:

  • GitHub.
  • GitLab.

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

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

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

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

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

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

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

Примечание

Чтобы создать федерацию сервисных аккаунтов, пользователю необходима роль iam.workloadIdentityFederations.editor или выше на каталог.

Консоль управления
CLI
Terraform
API
  1. В консоли управления выберите каталог, в котором вы хотите создать федерацию сервисных аккаунтов.
  2. В списке сервисов выберите Identity and Access Management.
  3. На панели слева выберите Федерации сервисных аккаунтов.
  4. Нажмите Создать федерацию и в открывшейся форме:
    1. В поле Значение Issuer (iss) введите URL OIDC-провайдера.

      Чтобы узнать это значение, обратитесь к документации или в службу технической поддержки используемого OIDC-провайдера.

    2. В поле Допустимые значения Audience (aud) введите ресурс, для которого будет предназначен получаемый токен.

      Чтобы узнать это значение, обратитесь к документации или в службу технической поддержки используемого OIDC-провайдера.

      Вы можете задать одновременно несколько ресурсов-получателей IAM-токена.

    3. В поле Адрес JWKS введите URL, по которому можно получить актуальный открытый ключ, выпущенный OIDC-провайдером и используемый для проверки подписи JWT.

      Чтобы узнать это значение, обратитесь к документации или в службу технической поддержки используемого OIDC-провайдера.

    4. В поле Имя введите имя создаваемой федерации, например sample-iam-federation.

    5. Нажмите кнопку Создать.

Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.

По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.

  1. Посмотрите описание команды создания федерации сервисных аккаунтов:

    yc iam workload-identity oidc federation create --help
    
  2. Создайте федерацию сервисных аккаунтов в каталоге по умолчанию:

    yc iam workload-identity oidc federation create \
      --name <имя_федерации> \
      --issuer "<URL_OIDC-провайдера>" \
      --audiences "<ресурс_1>","<ресурс_2>",...,"<ресурс_n>" \
      --jwks-url "<адрес_JWKS>"
    

    Где:

    • --name — имя создаваемой федерации. Например: sample-iam-federation. Требования к имени:

      • длина — от 2 до 63 символов;
      • может содержать строчные буквы латинского алфавита, цифры и дефисы;
      • первый символ — буква, последний — не дефис.
    • --issuer — URL OIDC-провайдера.

      Чтобы узнать это значение, обратитесь к документации или в службу технической поддержки используемого OIDC-провайдера.

    • --audiences — ресурсы, для которых будет предназначен получаемый токен. Вы можете через запятую задать одновременно несколько ресурсов-получателей IAM-токена.

      Чтобы узнать это значение, обратитесь к документации или в службу технической поддержки используемого OIDC-провайдера.

    • --jwks-url — URL, по которому можно получить актуальный открытый ключ, выпущенный OIDC-провайдером и используемый для проверки подписи JWT.

      Чтобы узнать это значение, обратитесь к документации или в службу технической поддержки используемого OIDC-провайдера.

    Результат:

    id: aje2c4qv19lf********
    name: sample-iam-federation
    folder_id: b1gfq9pe6rd2********
    enabled: true
    audiences:
      - https://gitlab.example.ru
      - https://gitlab.example.com
    issuer: https://gitlab.com
    jwks_url: https://gitlab.com/oauth/discovery/keys
    created_at: "2024-12-28T16:04:31.530652473Z"
    

    Сохраните значение идентификатора созданной федерации сервисных аккаунтов, оно понадобится при создании привязки.

    Подробнее о команде yc iam workload-identity oidc federation create см. в справочнике CLI.

Terraform позволяет быстро создать облачную инфраструктуру в Yandex Cloud и управлять ею с помощью файлов конфигураций. В файлах конфигураций хранится описание инфраструктуры на языке HCL (HashiCorp Configuration Language). При изменении файлов конфигураций Terraform автоматически определяет, какая часть вашей конфигурации уже развернута, что следует добавить или удалить.

Terraform распространяется под лицензией Business Source License, а провайдер Yandex Cloud для Terraform — под лицензией MPL-2.0.

Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform или в зеркале.

Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.

  1. Опишите в конфигурационном файле Terraform параметры федерации, которую необходимо создать:

    resource "yandex_iam_workload_identity_oidc_federation" "wlif" {
      name        = "<имя_федерации>"
      folder_id   = "<идентификатор_каталога>"
      audiences   = ["<ресурс_1>","<ресурс_2>",...,"<ресурс_n>"]
      issuer      = "<URL_OIDC-провайдера>"
      jwks_url    = "<адрес_JWKS>"
    }
    

    Где:

    • name — имя создаваемой федерации. Например: sample-iam-federation. Требования к имени:

      • длина — от 2 до 63 символов;
      • может содержать строчные буквы латинского алфавита, цифры и дефисы;
      • первый символ — буква, последний — не дефис.
    • folder_id — идентификатор каталога, в котором создается федерация сервисных аккаунтов.

    • audiences — ресурсы, для которых будет предназначен получаемый токен. Вы можете через запятую задать одновременно несколько ресурсов-получателей IAM-токена.

      Чтобы узнать это значение, обратитесь к документации или в службу технической поддержки используемого OIDC-провайдера.

    • issuer — URL OIDC-провайдера.

      Чтобы узнать это значение, обратитесь к документации или в службу технической поддержки используемого OIDC-провайдера.

    • jwks_url — URL, по которому можно получить актуальный открытый ключ, выпущенный OIDC-провайдером и используемый для проверки подписи JWT.

      Чтобы узнать это значение, обратитесь к документации или в службу технической поддержки используемого OIDC-провайдера.

    Более подробную информацию о параметрах ресурса yandex_iam_workload_identity_oidc_federation в Terraform, см. в документации провайдера.

  2. Создайте ресурсы:

    1. В терминале перейдите в папку, где вы отредактировали конфигурационный файл.

    2. Проверьте корректность конфигурационного файла с помощью команды:

      terraform validate
      

      Если конфигурация является корректной, появится сообщение:

      Success! The configuration is valid.
      
    3. Выполните команду:

      terraform plan
      

      В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.

    4. Примените изменения конфигурации:

      terraform apply
      
    5. Подтвердите изменения: введите в терминале слово yes и нажмите Enter.

    Terraform создаст федерацию сервисных аккаунтов. Убедиться в создании федерации можно в консоли управления или с помощью команды CLI:

    yc iam workload-identity oidc federation list
    

Чтобы создать федерацию сервисных аккаунтов, воспользуйтесь методом REST API create для ресурса Federation или вызовом gRPC API FederationService/Create.

Создайте привязкуСоздайте привязку

Привязка — это связь, настроенная между федерацией сервисных аккаунтов, одним сервисным аккаунтом Yandex Cloud и одним внешним субъектом. Привязки необходимы для идентификации внешних субъектов в Yandex Identity and Access Management.

Примечание

Чтобы создать привязку, пользователю необходимы:

  • роль iam.serviceAccounts.federatedCredentialEditor или выше, выданная на сервисный аккаунт, который будет использоваться в привязке.
  • роль iam.workloadIdentityFederations.user или выше на каталог, в котором находится федерация сервисных аккаунтов.
Консоль управления
CLI
Terraform
API
  1. В консоли управления выберите каталог, в котором находится сервисный аккаунт

    При необходимости создайте новый сервисный аккаунт.

  2. В списке сервисов выберите Identity and Access Management.

  3. В списке выберите нужный сервисный аккаунт.

  4. Перейдите на вкладку Федерации сервисных аккаунтов.

  5. Нажмите кнопку Привязать к федерации.

  6. В поле Федерация сервисных аккаунтов выберите ранее созданную федерацию.

  7. В поле Значение Subject (sub) укажите идентификатор внешнего субъекта.

    Чтобы узнать это значение, обратитесь к документации или в службу технической поддержки используемого OIDC-провайдера.

  8. Нажмите кнопку Привязать.

  1. Посмотрите описание команды создания привязки:

    yc iam workload-identity federated-credential create --help
    
  2. Создайте привязку, указав идентификатор нужного сервисного аккаунта:

    yc iam workload-identity federated-credential create \
      --service-account-id <идентификатор_сервисного_аккаунта> \
      --federation-id <идентификатор_федерации> \
      --external-subject-id "<идентификатор_внешнего_субъекта>"
    

    Где:

    • --service-account-id — идентификатор сервисного аккаунта Yandex Cloud.

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

    • --federation-id — идентификатор федерации сервисных аккаунтов, полученный на предыдущем шаге.

    • --external-subject-id — идентификатор внешнего субъекта.

      Чтобы узнать это значение, обратитесь к документации или в службу технической поддержки используемого OIDC-провайдера.

    Результат:

    id: aje401v1sup8********
    service_account_id: ajek7v5j65cg********
    federation_id: aje2c4qv19lf********
    external_subject_id: project_path:root/test-iam-wlif:ref_type:branch:ref:master
    created_at: "2024-12-28T16:33:47.057632267Z"
    

    Подробнее о команде yc iam workload-identity federated-credential create см. в справочнике CLI.

  1. Опишите в конфигурационном файле Terraform параметры привязки, которую необходимо создать:

    resource "yandex_iam_workload_identity_federated_credential" "fc" {
      service_account_id  = "<идентификатор_сервисного_аккаунта>"
      federation_id       = "<идентификатор_федерации>"
      external_subject_id = "<идентификатор_внешнего_субъекта>"
    }
    

    Где:

    • service_account_id — идентификатор сервисного аккаунта Yandex Cloud.

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

    • federation_id — идентификатор федерации сервисных аккаунтов.

    • external_subject_id — идентификатор внешнего субъекта.

      Чтобы узнать это значение, обратитесь к документации или в службу технической поддержки используемого OIDC-провайдера.

    Более подробную информацию о параметрах ресурса yandex_iam_workload_identity_federated_credential в Terraform, см. в документации провайдера.

  2. Создайте ресурсы:

    1. В терминале перейдите в папку, где вы отредактировали конфигурационный файл.

    2. Проверьте корректность конфигурационного файла с помощью команды:

      terraform validate
      

      Если конфигурация является корректной, появится сообщение:

      Success! The configuration is valid.
      
    3. Выполните команду:

      terraform plan
      

      В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.

    4. Примените изменения конфигурации:

      terraform apply
      
    5. Подтвердите изменения: введите в терминале слово yes и нажмите Enter.

    Terraform создаст указанную привязку. Убедиться в создании привязки для сервисного аккаунта можно в консоли управления или с помощью команды CLI:

    yc iam workload-identity federated-credential list \
      --service-account-id <идентификатор_сервисного_аккаунта>
    

Чтобы создать привязку, воспользуйтесь методом REST API create для ресурса FederatedCredential или вызовом gRPC API FederatedCredentialService/Create.

Обменяйте JWT-токен на IAM-токен сервисного аккаунтаОбменяйте JWT-токен на IAM-токен сервисного аккаунта

Отправьте запрос к сервису обмена токенов Yandex Cloud:

POST https://auth.yandex.cloud/oauth/token HTTP/1.1
     Content-Type: application/x-www-form-urlencoded

     grant_type=urn:ietf:params:oauth:grant-type:token-exchange&
     requested_token_type=urn:ietf:params:oauth:token-type:access_token&
     audience=<идентификатор_сервисного_аккаунта>&
     subject_token=<JWT-токен>&
     subject_token_type=urn:ietf:params:oauth:token-type:id_token

Где:

  • grant_type — тип запроса, имеет фиксированное значение urn:ietf:params:oauth:grant-type:token-exchange.
  • requested_token_type — тип запрашиваемого токена, имеет фиксированное значение urn:ietf:params:oauth:token-type:access_token.
  • audience — идентификатор сервисного аккаунта Yandex Cloud.
  • subject_token — JWT-токен внешнего субъекта.
  • subject_token_type — тип токена внешнего субъекта, имеет фиксированное значение urn:ietf:params:oauth:token-type:id_token.

Результат:

HTTP/1.1 200 OK
Content-Type: application/json

{
    "access_token": "t1.9euelZqZlJyXlJGNno6JlIzGmsyUzO3rnpWazY6elMidm8-Nk8iPlZyZkJLl8_d_IUBE-e8AIgRS_d3z9z9QPUT57wAiBFL9zef1656Vmo2RyZqOm5KSj82KkZHNi5WL7_zN5_XrnpWaj46TnZvNksmNks2dj43MmJPv-MXrnpWajZHJmo6bkpKPzYqRkc2LlYu9656Vmp2PyJqYnprLk8aRxpqXzZbPteuGnNGWnpLRkI********************",
    "token_type": "Bearer",
    "expires_in": 43200
}

Где значение поля access_token — запрашиваемый IAM-токен сервисного аккаунта, который вы можете использовать для аутентификации при выполнении действий в API Yandex Cloud.

См. такжеСм. также

  • Федерации сервисных аккаунтов.
  • Получение значения секрета Yandex Lockbox на стороне GitHub.
  • Получение значения секрета Yandex Lockbox на стороне GitLab.

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

Предыдущая
Включение и выключение сервисов
Следующая
Все руководства
Проект Яндекса
© 2025 ООО «Яндекс.Облако»