Настройка приложения для доверия внешнему поставщику удостоверений

В этой статье описывается управление учетными данными федеративного удостоверения в приложении в идентификаторе Microsoft Entra. Учетные данные федеративного удостоверения создают доверительные отношения между приложением и внешним поставщиком удостоверений (IdP).

Затем вы можете можно настроить внешнюю программную рабочую нагрузку для обмена токена внешнего IdP на маркер доступа платформы удостоверений Майкрософт. Внешняя рабочая нагрузка может получить доступ к защищенным ресурсам Microsoft Entra без необходимости управлять секретами (в поддерживаемых сценариях). Дополнительные сведения о рабочем процессе обмена маркерами см. в статье о федерации удостоверений рабочей нагрузки.

В этой статье вы узнаете, как создавать, перечислять и удалять федеративные учетные данные удостоверения в приложении в идентификаторе Microsoft Entra.

Важные рекомендации и ограничения

Чтобы создать, обновить или удалить федеративные учетные данные удостоверения, учетная запись, выполняющая действие, должна иметь роль приложения Администратор istrator, разработчика приложений, облачного приложения Администратор istrator или роли владельца приложения. Разрешение microsoft.directory/applications/credentials/update требуется для обновления учетных данных федеративного удостоверения.

В приложение или управляемое удостоверение, назначаемое пользователем, можно добавить не более 20 федеративных удостоверений.

При настройке федеративных учетных данных удостоверения необходимо указать несколько важных элементов:

  • issuer (издатель) и subject (субъект) — это ключевые элементы, необходимые для настройки отношения доверия. Сочетание значений issuer и subject должно быть уникальным в приложении. Когда внешняя программная рабочая нагрузка предлагает платформе удостоверений Майкрософт обменять внешний токен на маркер доступа, значения issuer (издатель) и subject (субъект) учетных данных федеративного удостоверения проверяются на соответствие утверждениям issuer и subject во внешнем токене. Если проверка пройдена, платформа удостоверений Майкрософт выдает внешней программной рабочей нагрузке маркер доступа.

  • issuer — это URL-адрес внешнего поставщика удостоверений, который должен соответствовать утверждению issuer внешнего токена, для которого выполняется обмен. Обязательно. Если утверждение issuer содержит начальные или конечные пробелы в значении, обмен токенами блокируется. Поле ограничено 600 символами.

  • subject — это идентификатор внешней программной рабочей нагрузки, который должен соответствовать утверждению sub (subject) внешнего токена, для которого выполняется обмен. У значения subject нет определенного формата, так как каждый IdP использует собственный формат: иногда это идентификатор GUID, иногда — идентификатор с разделителем-двоеточием, иногда — произвольная строка. Поле ограничено 600 символами.

    Важно!

    Значение Субъект должно совпадать с конфигурацией рабочего процесса GitHub. В противном случае платформа удостоверений Майкрософт просматривает входящий внешний токен и отклоняет обмен для маркера доступа. Сбой обмена не будет сопровождаться ошибкой.

    Важно!

    Если случайно указать в параметре subject неправильные сведения о внешней рабочей нагрузке, учетные данные федеративного удостоверения будут успешно созданы без всяких ошибок. Ошибка не проявится до тех пор, пока не произойдет сбой при обмене маркерами.

  • В списке audiences (аудитории) перечислены аудитории, которые могут содержаться во внешнем токене. Обязательно. Необходимо добавить одно значение аудитории, которое имеет ограничение в 600 символов. Рекомендуемое значение — "api://AzureADTokenExchange". Оно говорит, что платформа удостоверений Майкрософт должна приниматься в утверждении aud во входящем токене.

  • name — это уникальный идентификатор учетных данных федеративного удостоверения. Обязательно. Это поле имеет ограничение в 3–120 символов и должно быть понятным ПО URL-адресу. Поддерживаются буквенно-цифровые символы, дефисы или символы подчеркивания, первый символ должен быть буквенно-цифровым.  Это неизменяемо после создания.

  • description — это предоставленное пользователем описание учетных данных федеративного удостоверения. Необязательно. Описание не проверяется или проверка идентификатором Microsoft Entra. Поле ограничено 600 символами.

Символы Wild карта не поддерживаются в значении свойства учетных данных федеративного удостоверения.

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

Необходимые компоненты

Создайте регистрацию приложения в идентификаторе Microsoft Entra. Предоставьте приложению доступ к ресурсам Azure, предназначенным для вашей внешней программной рабочей нагрузки.

Найдите идентификатор объекта приложения (не идентификатор приложения (клиента)), который будет использоваться на следующих этапах. Идентификатор объекта приложения можно найти в Центре администрирования Microsoft Entra. Перейдите в список регистраций приложений и выберите регистрацию приложения. В разделе Обзор->Основные компоненты найдите Идентификатор объекта.

Получите информацию о subject и issuer для вашего внешнего поставщика удостоверений и рабочей нагрузки программного обеспечения, которая вам потребуется на следующих шагах.

Настройка учетных данных федеративного удостоверения в приложении

GitHub Actions

Чтобы добавить федеративное удостоверение для действий GitHub, выполните следующие действия:

  1. Найдите регистрацию приложения в интерфейсе регистрации приложений Центра администрирования Microsoft Entra. Выберите сертификаты и секреты в области навигации слева, перейдите на вкладку "Федеративные учетные данные " и нажмите кнопку "Добавить учетные данные".

  2. В раскрывающемся списке Сценарий федеративных учетных данных выберите GitHub Actions: развертывание ресурсов Azure.

  3. Укажите организацию и репозиторий для рабочего процесса GitHub Actions.

  4. В поле Тип сущности выберите Среда, Ветвь, Запрос на вытягиваниеили Тег и укажите значение. Эти значения должны точно соответствовать конфигурации, настроенной в рабочем процессе GitHub. Сопоставление шаблонов не поддерживается для ветвей и тегов. Укажите среду, если рабочий процесс при отправке выполняется со многими ветвями или тегами. Дополнительные сведения см. в этих примерах.

  5. Добавьте Имя для федеративных учетных данных.

  6. Поля Издатель, Аудитории и Идентификатора субъекта автоматически заполняются на основе введенных значений.

  7. Выберите "Добавить ", чтобы настроить федеративные учетные данные.

    Screenshot of the Add a credential window, showing sample values.

Используйте следующие значения из регистрации приложения Microsoft Entra для рабочего процесса GitHub:

  • AZURE_CLIENT_IDИдентификатор приложения (клиента)

  • AZURE_TENANT_IDИдентификатор каталога (клиента)

    На следующем снимках экрана показано, как скопировать идентификатор приложения и идентификатор клиента.

    Screenshot that demonstrates how to copy the application ID and tenant ID from Microsoft Entra admin center.

  • AZURE_SUBSCRIPTION_ID идентификатор подписки. Чтобы получить идентификатор подписки, откройте подписки в портал Azure и найдите подписку. Затем скопируйте идентификатор подписки.

Примеры для типов сущностей

Пример ветви

Для рабочего процесса, который запускается при событиях отправки обновлений и запроса на вытягивание в главной ветви:

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

присвойте параметру Entity type (Тип сущности) значение Branch (Ветвь), а параметру GitHub branch name (Имя ветви GitHub) — значение "main".

Пример для среды

Для заданий, привязанных к среде с именем production:

on:
  push:
    branches:
      - main

jobs:
  deployment:
    runs-on: ubuntu-latest
    environment: production
    steps:
      - name: deploy
        # ...deployment-specific steps

присвойте параметру Entity type (Тип сущности) значение Environment (Среда), а параметру GitHub environment name (Имя ветви GitHub) — значение "production".

Пример для тега

Если для рабочего процесса, запускаемого при отправке обновлений, указан тег с именем v2:

on:
  push:
    # Sequence of patterns matched against refs/heads
    branches:
      - main
      - 'mona/octocat'
      - 'releases/**'
    # Sequence of patterns matched against refs/tags
    tags:
      - v2
      - v1.*

присвойте параметру Entity type (Тип сущности) значение Tag (Тег), а параметру GitHub environment name (Имя ветви GitHub) — значение "v2".

Пример для запроса на вытягивание

Для рабочего процесса, запускаемого при событии запроса на вытягивание, присвойте параметру Тип сущности значение Запрос на вытягивание.

Kubernetes

Найдите регистрацию приложения в интерфейсе регистрации приложений Центра администрирования Microsoft Entra. Выберите сертификаты и секреты в области навигации слева, перейдите на вкладку "Федеративные учетные данные " и нажмите кнопку "Добавить учетные данные".

В раскрывающемся меню выберите сценарий Kubernetes с доступом к ресурсам Azure.

Заполните поля URL-адрес издателя кластера, Пространство имен, Имя учетной записи службы и Имя.

  • URL-адрес издателя кластера — это URL-адрес издателя OIDC для управляемого кластера или URL-адрес издателя OIDC для кластера с самостоятельным управлением.
  • Имя учетной записи службы — это имя учетной записи службы Kubernetes, которая обеспечивает удостоверение для процессов, работающих в pod.
  • Пространство имен — это пространство имен учетной записи службы.
  • Name — это имя федеративных учетных данных, которое нельзя изменить позже.

Другие поставщики удостоверений

Найдите регистрацию приложения в интерфейсе регистрации приложений Центра администрирования Microsoft Entra. Выберите сертификаты и секреты в области навигации слева, перейдите на вкладку "Федеративные учетные данные " и нажмите кнопку "Добавить учетные данные".

Выберите сценарий Другой издатель в раскрывающемся меню.

Заполните следующие поля (используя рабочую нагрузку ПО, выполняемую в Google Cloud, в качестве примера):

  • Name — это имя федеративных учетных данных, которое нельзя изменить позже.
  • Subject identifier — значение должно соответствовать утверждению sub в маркере, выданном внешним поставщиком удостоверений. В этом примере с использованием Google Cloud subject — это уникальный идентификатор учетной записи службы, которую вы планируете использовать.
  • Issuer — значение должно соответствовать утверждению iss в маркере, выданном внешним поставщиком удостоверений. URL-адрес, соответствующий спецификации обнаружения OIDC. Идентификатор Microsoft Entra использует этот URL-адрес издателя для получения ключей, необходимых для проверки маркера. В случае Google Cloud issuer является "https://accounts.google.com".

Вывод списка учетных данных федеративного удостоверения в приложении

Найдите регистрацию приложения в интерфейсе регистрации приложений Центра администрирования Microsoft Entra. Выберите сертификаты и секреты в области навигации слева и перейдите на вкладку "Федеративные учетные данные". Перечислены федеративные учетные данные, настроенные в приложении.

Удаление учетных данных федеративного удостоверения из приложения

Найдите регистрацию приложения в интерфейсе регистрации приложений Центра администрирования Microsoft Entra. Выберите сертификаты и секреты в области навигации слева и перейдите на вкладку "Федеративные учетные данные". Перечислены федеративные учетные данные, настроенные в приложении.

Чтобы удалить учетные данные федеративного удостоверения, щелкните значок Удалить для учетных данных.

Необходимые компоненты

  • Используйте среду Bash в Azure Cloud Shell. Дополнительные сведения см . в кратком руководстве по Bash в Azure Cloud Shell.

  • Если вы предпочитаете выполнять справочные команды CLI локально, установите Azure CLI. Если вы работаете в Windows или macOS, Azure CLI можно запустить в контейнере Docker. Дополнительные сведения см. в статье Как запустить Azure CLI в контейнере Docker.

    • Если вы используете локальную установку, выполните вход в Azure CLI с помощью команды az login. Чтобы выполнить аутентификацию, следуйте инструкциям в окне терминала. Сведения о других возможностях, доступных при входе, см. в статье Вход с помощью Azure CLI.

    • Установите расширение Azure CLI при первом использовании, когда появится соответствующий запрос. Дополнительные сведения о расширениях см. в статье Использование расширений с Azure CLI.

    • Выполните команду az version, чтобы узнать установленную версию и зависимые библиотеки. Чтобы обновиться до последней версии, выполните команду az upgrade.

  • Создайте регистрацию приложения в идентификаторе Microsoft Entra. Предоставьте приложению доступ к ресурсам Azure, предназначенным для вашей внешней программной рабочей нагрузки.
  • Найдите идентификатор объекта, идентификатор приложения (клиента) или URI идентификатора приложения, которые вам понадобятся на следующих шагах. Эти значения можно найти в Центре администрирования Microsoft Entra. Перейдите к списку зарегистрированных приложений и выберите регистрацию приложения. В разделе Обзор->Essentials получите идентификатор объекта, идентификатор приложения (клиента) или значение URI идентификатора приложения, которое потребуется для следующих шагов.
  • Получите информацию о subject и issuer для вашего внешнего поставщика удостоверений и рабочей нагрузки программного обеспечения, которая вам потребуется на следующих шагах.

Настройка учетных данных федеративного удостоверения в приложении

Выполните команду az ad app federated-credential create, чтобы создать учетные данные федеративного удостоверения в своем приложении.

Параметр id задает URI идентификатора, идентификатор приложения или идентификатор объекта приложения. Параметр parameters задает параметры в формате JSON для создания учетных данных федеративного удостоверения.

Пример GitHub Actions

Параметр name указывает имя ваших учетных данных федеративного удостоверения.

Параметр issuer определяет путь к поставщику GitHub OIDC: https://token.actions.githubusercontent.com/. Этот издатель станет доверенным для приложения Azure.

Параметр subject определяет организацию, репозиторий и среду GitHub для рабочего процесса GitHub Actions. Когда рабочий процесс GitHub Actions предлагает платформе удостоверений Майкрософт обменять маркер GitHub на маркер доступа, значения в учетных данных федеративного удостоверения проверяются по указанному маркеру GitHub. Прежде чем Azure предоставит маркер доступа, запрос должен соответствовать указанным здесь условиям.

  • Для заданий, привязанных к среде: repo:< Organization/Repository >:environment:< Name >
  • Если задания не привязаны к среде, включите путь ссылки для ветви или тега с учетом пути, используемого для запуска рабочего процесса: repo:< Organization/Repository >:ref:< ref path>. Например, repo:n-username/ node_express:ref:refs/heads/my-branch или repo:n-username/ node_express:ref:refs/tags/my-tag.
  • Для рабочих процессов, запускаемых событием запроса на вытягивание: repo:< Organization/Repository >:pull-request.
az ad app federated-credential create --id f6475511-fd81-4965-a00e-41e7792b7b9c --parameters credential.json
("credential.json" contains the following content)
{
    "name": "Testing",
    "issuer": "https://token.actions.githubusercontent.com",
    "subject": "repo:octo-org/octo-repo:environment:Production",
    "description": "Testing",
    "audiences": [
        "api://AzureADTokenExchange"
    ]
}

Пример для Kubernetes

issuer — это URL-адрес издателя вашей учетной записи службы (URL-адрес издателя OIDC для управляемого кластера или URL-адрес издателя OIDC для кластера с самостоятельным управлением).

subject — это имя субъекта в маркерах, выданных учетной записи службы. Kubernetes использует следующий формат для имен субъектов: system:serviceaccount:<SERVICE_ACCOUNT_NAMESPACE>:<SERVICE_ACCOUNT_NAME>.

name — это имя федеративных учетных данных, которое нельзя изменить позже.

В списке audiences (аудитории) перечислены аудитории, которые могут содержаться во внешнем токене. Это поле является обязательным. Рекомендуемое значение — "api://AzureADTokenExchange".

az ad app federated-credential create --id f6475511-fd81-4965-a00e-41e7792b7b9c --parameters credential.json
("credential.json" contains the following content)
{
    "name": "Kubernetes-federated-credential",
    "issuer": "https://aksoicwesteurope.blob.core.windows.net/9d80a3e1-2a87-46ea-ab16-e629589c541c/",
    "subject": "system:serviceaccount:erp8asle:pod-identity-sa",
    "description": "Kubernetes service account federated credential",
    "audiences": [
        "api://AzureADTokenExchange"
    ]
}

Другие примеры поставщиков удостоверений

Вы можете настроить учетные данные федеративного удостоверения в приложении и создать доверительные отношения с другими внешними поставщиками удостоверений. В следующем примере в качестве примера используется программная рабочая нагрузка, запущенная в Google Cloud:

name — это имя федеративных учетных данных, которое нельзя изменить позже.

id — идентификатор объекта, идентификатор приложения (клиента) или URI идентификатора приложения.

subject — значение должно соответствовать утверждению sub в маркере, выданном внешним поставщиком удостоверений. В этом примере с использованием Google Cloud subject — это уникальный идентификатор учетной записи службы, которую вы планируете использовать.

issuer — значение должно соответствовать утверждению iss в маркере, выданном внешним поставщиком удостоверений. URL-адрес, соответствующий спецификации обнаружения OIDC. Идентификатор Microsoft Entra использует этот URL-адрес издателя для получения ключей, необходимых для проверки маркера. В случае Google Cloud issuer является "https://accounts.google.com".

audiences — список аудиторий, которые могут отображаться во внешнем токене. Это поле является обязательным. Рекомендуемое значение — "api://AzureADTokenExchange".

az ad app federated-credential create --id f6475511-fd81-4965-a00e-41e7792b7b9c --parameters credential.json
("credential.json" contains the following content)
{
    "name": "GcpFederation",
    "issuer": "https://accounts.google.com",
    "subject": "112633961854638529490",
    "description": "Test GCP federation",
    "audiences": [
        "api://AzureADTokenExchange"
    ]
}

Вывод списка учетных данных федеративного удостоверения в приложении

Выполните команду az ad app federated-credential list, чтобы получить список учетных данных федеративного удостоверения в вашем приложении.

Параметр id указывает идентификатор URI, идентификатор приложения или идентификатор объекта приложения.

az ad app federated-credential list --id f6475511-fd81-4965-a00e-41e7792b7b9c

Получение учетных данных федеративного удостоверения в приложении

Выполните команду az ad app federated-credential show, чтобы получить учетные данные федеративного удостоверения для вашего приложения.

Параметр id указывает идентификатор URI, идентификатор приложения или идентификатор объекта приложения.

federated-credential-id указывает идентификатор или имя учетных данных федеративного удостоверения.

az ad app federated-credential show --id f6475511-fd81-4965-a00e-41e7792b7b9c --federated-credential-id c79f8feb-a9db-4090-85f9-90d820caa0eb

Удаление учетных данных федеративного удостоверения из приложения

Выполните команду az ad app federated-credential delete, чтобы удалить учетные данные федеративного удостоверения из вашего приложения.

Параметр id указывает идентификатор URI, идентификатор приложения или идентификатор объекта приложения.

federated-credential-id указывает идентификатор или имя учетных данных федеративного удостоверения.

az ad app federated-credential delete --id f6475511-fd81-4965-a00e-41e7792b7b9c --federated-credential-id c79f8feb-a9db-4090-85f9-90d820caa0eb

Необходимые компоненты

  • Чтобы запустить примеры скриптов, у вас есть два варианта:
    • Используйте службу Azure Cloud Shell, которую можно открыть с помощью кнопки Попробовать в правом верхнем углу блоков кода.
    • выполните скрипты локально с помощью Azure PowerShell, как описано в следующем разделе.
  • Создайте регистрацию приложения в идентификаторе Microsoft Entra. Предоставьте приложению доступ к ресурсам Azure, предназначенным для вашей внешней программной рабочей нагрузки.
  • Найдите идентификатор объекта приложения (не идентификатор приложения (клиента)), который будет использоваться на следующих этапах. Идентификатор объекта приложения можно найти в Центре администрирования Microsoft Entra. Перейдите к списку зарегистрированных приложений и выберите регистрацию приложения. В разделе Обзор->Основные компоненты найдите Идентификатор объекта.
  • Получите информацию о subject и issuer для вашего внешнего поставщика удостоверений и рабочей нагрузки программного обеспечения, которая вам потребуется на следующих шагах.

Настройка Azure PowerShell в локальной среде

Чтобы использовать для этой статьи локальную среду Azure PowerShell вместо Cloud Shell:

  1. Установите последнюю версию Azure PowerShell, если это еще не сделано.

  2. войдите в Azure.

    Connect-AzAccount
    
  3. Установите PowerShellGet последней версии.

    Install-Module -Name PowerShellGet -AllowPrerelease
    

    Возможно, после выполнения этой команды для перехода к следующему шагу потребуется выйти (Exit) из текущего сеанса PowerShell.

  4. Установите предварительную версию модуля Az.Resources, чтобы выполнять операции с учетными данными федеративного удостоверения, описанные в этой статье.

    Install-Module -Name Az.Resources -AllowPrerelease
    

Настройка учетных данных федеративного удостоверения в приложении

Запустите командлет New-AzADAppFederatedCredential, чтобы создать учетные данные федеративного удостоверения в приложении.

Пример GitHub Actions

  • ApplicationObjectId: идентификатор объекта приложения (а не идентификатор приложения (клиента), который вы ранее зарегистрировали в идентификаторе Microsoft Entra.
  • Issuer определяет GitHub как внешнего издателя токена.
  • Subject определяет организацию GitHub, репозиторий и среду для вашего рабочего процесса GitHub Actions. Когда рабочий процесс GitHub Actions предлагает платформе удостоверений Майкрософт обменять маркер GitHub на маркер доступа, значения в учетных данных федеративного удостоверения проверяются по указанному маркеру GitHub.
    • Для заданий, привязанных к среде: repo:< Organization/Repository >:environment:< Name >
    • Если задания не привязаны к среде, включите путь ссылки для ветви или тега с учетом пути, используемого для запуска рабочего процесса: repo:< Organization/Repository >:ref:< ref path>. Например, repo:n-username/ node_express:ref:refs/heads/my-branch или repo:n-username/ node_express:ref:refs/tags/my-tag.
    • Для рабочих процессов, запускаемых событием запроса на вытягивание: repo:< Organization/Repository >:pull-request.
  • Name — это имя федеративных учетных данных, которое нельзя изменить позже.
  • Audience содержит список аудиторий, которые могут отображаться во внешнем токене. Это поле является обязательным. Рекомендуемое значение — "api://AzureADTokenExchange".
New-AzADAppFederatedCredential -ApplicationObjectId $appObjectId -Audience api://AzureADTokenExchange -Issuer 'https://token.actions.githubusercontent.com/' -Name 'GitHub-Actions-Test' -Subject 'repo:octo-org/octo-repo:environment:Production'

Пример для Kubernetes

  • ApplicationObjectId: идентификатор объекта приложения (а не идентификатор приложения (клиента), который вы ранее зарегистрировали в идентификаторе Microsoft Entra.
  • Issuer — это ваш URL-адрес издателя учетной записи службы (URL-адрес издателя OIDC для управляемого кластера или URL-адрес издателя OIDC для кластера с самостоятельным управлением).
  • Subject — это имя субъекта в токенах, выпущенных для учетной записи службы. Kubernetes использует следующий формат для имен субъектов: system:serviceaccount:<SERVICE_ACCOUNT_NAMESPACE>:<SERVICE_ACCOUNT_NAME>.
  • Name — это имя федеративных учетных данных, которое нельзя изменить позже.
  • Audience содержит список аудиторий, которые могут отображаться в утверждении aud внешнего токена.
New-AzADAppFederatedCredential -ApplicationObjectId $appObjectId -Audience api://AzureADTokenExchange -Issuer 'https://aksoicwesteurope.blob.core.windows.net/9d80a3e1-2a87-46ea-ab16-e629589c541c/' -Name 'Kubernetes-federated-credential' -Subject 'system:serviceaccount:erp8asle:pod-identity-sa'

Другие примеры поставщиков удостоверений

Укажите следующие параметры (используя рабочую нагрузку ПО, выполняемую в Google Cloud, в качестве примера):

  • ObjectID: идентификатор объекта приложения (а не идентификатор приложения (клиента), который вы ранее зарегистрировали в идентификаторе Microsoft Entra.
  • Name — это имя федеративных учетных данных, которое нельзя изменить позже.
  • Subject — значение должно соответствовать утверждению sub в маркере, выданном внешним поставщиком удостоверений. В этом примере с использованием Google Cloud subject — это уникальный идентификатор учетной записи службы, которую вы планируете использовать.
  • Issuer — значение должно соответствовать утверждению iss в маркере, выданном внешним поставщиком удостоверений. URL-адрес, соответствующий спецификации обнаружения OIDC. Идентификатор Microsoft Entra использует этот URL-адрес издателя для получения ключей, необходимых для проверки маркера. В случае Google Cloud issuer является "https://accounts.google.com".
  • Audiences — значение должно соответствовать утверждению aud во внешнем маркере. По соображениям безопасности следует выбрать значение, уникальное для маркеров, предназначенных для идентификатора Microsoft Entra. Рекомендуемое значение — "api://AzureADTokenExchange".
New-AzADAppFederatedCredential -ApplicationObjectId $appObjectId -Audience api://AzureADTokenExchange -Issuer 'https://accounts.google.com' -Name 'GcpFederation' -Subject '112633961854638529490'

Вывод списка учетных данных федеративного удостоверения в приложении

Запустите командлет Get-AzADAppFederatedCredential, чтобы получить список учетных данных федеративного удостоверения для приложения.

Get-AzADApplication -ObjectId $app | Get-AzADAppFederatedCredential

Получение учетных данных федеративного удостоверения в приложении

Запустите командлет Get-AzADAppFederatedCredential, чтобы получить учетные данные федеративного удостоверения по идентификатору из приложения.

Get-AzADAppFederatedCredential -ApplicationObjectId $appObjectId -FederatedCredentialId $credentialId

Удаление учетных данных федеративного удостоверения из приложения

Запустите командлет Remove-AzADAppFederatedCredential, чтобы удалить учетные данные федеративного удостоверения из приложения.

Remove-AzADAppFederatedCredential -ApplicationObjectId $appObjectId -FederatedCredentialId $credentialId

Необходимые компоненты

Создайте регистрацию приложения в идентификаторе Microsoft Entra. Предоставьте приложению доступ к ресурсам Azure, предназначенным для вашей внешней программной рабочей нагрузки.

Найдите идентификатор объекта приложения (не идентификатор приложения (клиента)), который будет использоваться на следующих этапах. Идентификатор объекта приложения можно найти в Центре администрирования Microsoft Entra. Перейдите к списку зарегистрированных приложений и выберите регистрацию приложения. В разделе Обзор->Основные компоненты найдите Идентификатор объекта.

Получите информацию о subject и issuer для вашего внешнего поставщика удостоверений и рабочей нагрузки программного обеспечения, которая вам потребуется на следующих шагах.

Конечная точка Microsoft Graph (https://graph.microsoft.com) предоставляет REST API для создания, обновления и удаления federatedIdentityCredentials в приложениях. Запустите Azure Cloud Shell и войдите в клиент, чтобы выполнить команды Microsoft Graph из AZ CLI.

Настройка учетных данных федеративного удостоверения в приложении

GitHub Actions

Запустите следующий метод, чтобы создать учетные данные федеративного удостоверения в своем приложении (указанного идентификатором объекта приложения). Параметр issuer определяет GitHub как поставщика внешних токенов. Параметр subject определяет организацию, репозиторий и среду GitHub для рабочего процесса GitHub Actions. Когда рабочий процесс GitHub Actions предлагает платформе удостоверений Майкрософт обменять маркер GitHub на маркер доступа, значения в учетных данных федеративного удостоверения проверяются по указанному маркеру GitHub.

az rest --method POST --uri 'https://graph.microsoft.com/applications/f6475511-fd81-4965-a00e-41e7792b7b9c/federatedIdentityCredentials' --body '{"name":"Testing","issuer":"https://token.actions.githubusercontent.com","subject":"repo:octo-org/octo-repo:environment:Production","description":"Testing","audiences":["api://AzureADTokenExchange"]}'

В результате будет получен ответ:

{
  "@odata.context": "https://graph.microsoft.com/$metadata#applications('f6475511-fd81-4965-a00e-41e7792b7b9c')/federatedIdentityCredentials/$entity",
  "audiences": [
    "api://AzureADTokenExchange"
  ],
  "description": "Testing",
  "id": "1aa3e6a7-464c-4cd2-88d3-90db98132755",
  "issuer": "https://token.actions.githubusercontent.com",
  "name": "Testing",
  "subject": "repo:octo-org/octo-repo:environment:Production"
}

Имя: имя приложения Azure.

Издатель: путь к поставщику GitHub OIDC: https://token.actions.githubusercontent.com. Этот издатель станет доверенным для приложения Azure.

Субъект: прежде чем Azure предоставит маркер доступа, запрос должен соответствовать заданным условиям.

  • Для заданий, привязанных к среде: repo:< Organization/Repository >:environment:< Name >
  • Если задания не привязаны к среде, включите путь ссылки для ветви или тега с учетом пути, используемого для запуска рабочего процесса: repo:< Organization/Repository >:ref:< ref path>. Например, repo:n-username/ node_express:ref:refs/heads/my-branch или repo:n-username/ node_express:ref:refs/tags/my-tag.
  • Для рабочих процессов, запускаемых событием запроса на вытягивание: repo:< Organization/Repository >:pull-request.

В списке audiences (аудитории) перечислены аудитории, которые могут содержаться во внешнем токене. Это поле является обязательным. Рекомендуемое значение — "api://AzureADTokenExchange".

Пример для Kubernetes

Запустите следующий метод, чтобы настроить учетные данные федеративного удостоверения в приложении и создать доверительные отношения с учетной записью службы Kubernetes. Укажите следующие параметры:

  • issuer — это URL-адрес издателя вашей учетной записи службы (URL-адрес издателя OIDC для управляемого кластера или URL-адрес издателя OIDC для кластера с самостоятельным управлением).
  • subject — это имя субъекта в маркерах, выданных учетной записи службы. Kubernetes использует следующий формат для имен субъектов: system:serviceaccount:<SERVICE_ACCOUNT_NAMESPACE>:<SERVICE_ACCOUNT_NAME>.
  • name — это имя федеративных учетных данных, которое нельзя изменить позже.
  • В списке audiences (аудитории) перечислены аудитории, которые могут содержаться во внешнем токене. Это поле является обязательным. Рекомендуемое значение — "api://AzureADTokenExchange".
az rest --method POST --uri 'https://graph.microsoft.com/applications/f6475511-fd81-4965-a00e-41e7792b7b9c/federatedIdentityCredentials' --body '{"name":"Kubernetes-federated-credential","issuer":"https://aksoicwesteurope.blob.core.windows.net/9d80a3e1-2a87-46ea-ab16-e629589c541c/","subject":"system:serviceaccount:erp8asle:pod-identity-sa","description":"Kubernetes service account federated credential","audiences":["api://AzureADTokenExchange"]}'

В результате будет получен ответ:

{
  "@odata.context": "https://graph.microsoft.com/$metadata#applications('f6475511-fd81-4965-a00e-41e7792b7b9c')/federatedIdentityCredentials/$entity",
  "audiences": [
    "api://AzureADTokenExchange"
  ],
  "description": "Kubernetes service account federated credential",
  "id": "51ecf9c3-35fc-4519-a28a-8c27c6178bca",
  "issuer": "https://aksoicwesteurope.blob.core.windows.net/9d80a3e1-2a87-46ea-ab16-e629589c541c/",
  "name": "Kubernetes-federated-credential",
  "subject": "system:serviceaccount:erp8asle:pod-identity-sa"
}

Другие примеры поставщиков удостоверений

Запустите следующий метод, чтобы настроить учетные данные федеративного удостоверения в приложении и создать доверительные отношения с внешним поставщиком удостоверений. Укажите следующие параметры (используя рабочую нагрузку ПО, выполняемую в Google Cloud, в качестве примера):

  • name — это имя федеративных учетных данных, которое нельзя изменить позже.
  • ObjectID: идентификатор объекта приложения (а не идентификатор приложения (клиента), который вы ранее зарегистрировали в идентификаторе Microsoft Entra.
  • subject — значение должно соответствовать утверждению sub в маркере, выданном внешним поставщиком удостоверений. В этом примере с использованием Google Cloud subject — это уникальный идентификатор учетной записи службы, которую вы планируете использовать.
  • issuer — значение должно соответствовать утверждению iss в маркере, выданном внешним поставщиком удостоверений. URL-адрес, соответствующий спецификации обнаружения OIDC. Идентификатор Microsoft Entra использует этот URL-адрес издателя для получения ключей, необходимых для проверки маркера. В случае Google Cloud issuer является "https://accounts.google.com".
  • В списке audiences (аудитории) перечислены аудитории, которые могут содержаться во внешнем токене. Это поле является обязательным. Рекомендуемое значение — "api://AzureADTokenExchange".
az rest --method POST --uri 'https://graph.microsoft.com/applications/<ObjectID>/federatedIdentityCredentials' --body '{"name":"GcpFederation","issuer":"https://accounts.google.com","subject":"112633961854638529490","description":"Testing","audiences":["api://AzureADTokenExchange"]}'

В результате будет получен ответ:

{
  "@odata.context": "https://graph.microsoft.com/$metadata#applications('f6475511-fd81-4965-a00e-41e7792b7b9c')/federatedIdentityCredentials/$entity",
  "audiences": [
    "api://AzureADTokenExchange"
  ],
  "description": "Testing",
  "id": "51ecf9c3-35fc-4519-a28a-8c27c6178bca",
  "issuer": "https://accounts.google.com"",
  "name": "GcpFederation",
  "subject": "112633961854638529490"
}

Вывод списка учетных данных федеративного удостоверения в приложении

Запустите следующий метод, чтобы вывести список учетных данных федеративного удостоверения для приложения (указанного идентификатором объекта приложения):

az rest -m GET -u 'https://graph.microsoft.com/applications/f6475511-fd81-4965-a00e-41e7792b7b9c/federatedIdentityCredentials'

Вы получите ответ следующего типа:

{
  "@odata.context": "https://graph.microsoft.com/$metadata#applications('f6475511-fd81-4965-a00e-41e7792b7b9c')/federatedIdentityCredentials",
  "value": [
    {
      "audiences": [
        "api://AzureADTokenExchange"
      ],
      "description": "Testing",
      "id": "1aa3e6a7-464c-4cd2-88d3-90db98132755",
      "issuer": "https://token.actions.githubusercontent.com/",
      "name": "Testing",
      "subject": "repo:octo-org/octo-repo:environment:Production"
    }
  ]
}

Получение учетных данных федеративного удостоверения в приложении

Запустите следующий метод, чтобы получить учетные данные федеративного удостоверения для приложения (заданного идентификатором объекта приложения):

az rest -m GET -u 'https://graph.microsoft.com/applications/f6475511-fd81-4965-a00e-41e7792b7b9c//federatedIdentityCredentials/1aa3e6a7-464c-4cd2-88d3-90db98132755'

Вы получите ответ следующего типа:

{
  "@odata.context": "https://graph.microsoft.com/$metadata#applications('f6475511-fd81-4965-a00e-41e7792b7b9c')/federatedIdentityCredentials",
  "value": {
      "@odata.context": "https://graph.microsoft.com/$metadata#applications('f6475511-fd81-4965-a00e-41e7792b7b9c')/federatedIdentityCredentials/$entity",
      "@odata.id": "https://graph.microsoft.com/v2/3d1e2be9-a10a-4a0c-8380-7ce190f98ed9/directoryObjects/$/Microsoft.DirectoryServices.Application('f6475511-fd81-4965-a00e-41e7792b7b9c')/federatedIdentityCredentials('f6475511-fd81-4965-a00e-41e7792b7b9c')/f6475511-fd81-4965-a00e-41e7792b7b9c",
    "audiences": [
        "api://AzureADTokenExchange"
      ],
      "description": "Testing",
      "id": "1aa3e6a7-464c-4cd2-88d3-90db98132755",
      "issuer": "https://token.actions.githubusercontent.com/",
      "name": "Testing",
      "subject": "repo:octo-org/octo-repo:environment:Production"
    }
}

Удаление учетных данных федеративного удостоверения из приложения

Запустите следующий метод, чтобы удалить учетные данные федеративного удостоверения из приложения (указанного идентификатором объекта приложения):

az rest -m DELETE  -u 'https://graph.microsoft.com/applications/f6475511-fd81-4965-a00e-41e7792b7b9c/federatedIdentityCredentials/1aa3e6a7-464c-4cd2-88d3-90db98132755'

Следующие шаги

  • Сведения об использовании федерации удостоверений рабочей нагрузки для Kubernetes см. в Идентификация рабочей нагрузки Microsoft Entra проекта Kubernetes открытый код.
  • Дополнительные сведения о том, как использовать федерацию удостоверений рабочих нагрузок для GitHub Actions, см. в статье Настройка рабочего процесса GitHub Actions для получения маркера доступа.
  • Ознакомьтесь с документацией по GitHub Actions, в которой содержатся подробные сведения о настройке рабочего процесса GitHub Actions, чтобы получить маркер доступа от поставщика удостоверений Майкрософт и обеспечить доступ к ресурсам Azure.
  • Дополнительные сведения см. в статье о том, как идентификатор Microsoft Entra использует предоставление учетных данных клиента OAuth 2.0 и утверждение клиента, выданное другим поставщиком удостоверений для получения маркера.
  • Дополнительные сведения о формате JWT, созданных внешними поставщиками удостоверений, см. в статье о формате утверждения.