Обзор
OpenID Connect (OIDC) позволяет вашим GitHub Actions рабочим процессам получать доступ к ресурсам в Azure без необходимости хранить учетные данные Azure как долгоживущие GitHub секреты.
В этом руководстве представлен обзор того, как настроить Azure так, чтобы он доверял GitHubOIDC Azure's как федеративной идентичности, а также приведен пример рабочего процесса azure/login действия, использующего токены для аутентификации в Azure и доступа к ресурсам.
Необходимые компоненты
-
Основные понятия о том, как GitHub использует OpenID Connect (OIDC) и его архитектуру и преимущества, см. в разделе OpenID Connect.
-
Прежде чем продолжить, необходимо спланировать стратегию безопасности, чтобы обеспечить выдачу маркеров доступа только предсказуемым способом. Чтобы управлять тем, как поставщик облачных служб выдает маркеры доступа, необходимо определить по крайней мере одно условие, запретив недоверенным репозиториям запрашивать маркеры доступа к облачным ресурсам. Дополнительные сведения см. в разделе OpenID Connect.
Добавление федеративных учетных данных в Azure
GitHubOIDC-провайдер работает с федерацией идентификации рабочих нагрузок Azure. Общие сведения см. в документации Майкрософт по [федерации](https://docs.microsoft.com/en-us/azure/active-directory/develop/workload-identity-federation) удостоверений рабочей нагрузки.
Чтобы настроить OIDC-идентификатора в Azure, вам потребуется выполнить следующую конфигурацию. Для получения инструкций по внесению этих изменений обратитесь к the Azure documentation.
В следующей процедуре вы создадите приложение для Microsoft Entra ID (ранее известное как Azure AD).
- Создайте приложение идентификатора записи и субъект-службу.
- Добавьте федеративные учетные данные для приложения Entra ID.
- Создайте GitHub секреты для хранения конфигурации Azure.
Дополнительное руководство по настройке поставщика удостоверений:
- Для защиты безопасности убедитесь, что вы рассмотрели OpenID Connect. Пример см. в разделе OpenID Connect.
audienceДля параметраapi://AzureADTokenExchangeрекомендуется использовать рекомендуемое значение, но здесь можно также указать другие значения.
Обновление вашего GitHub Actions рабочего процесса
Чтобы обновить рабочие процессы для OIDC, необходимо внести два изменения в YAML:
- Добавьте параметры разрешений для маркера.
- Используйте действие
azure/loginдля обмена токена OIDC (JWT) на облачный токен доступа.
Примечание.
Если среды используются в рабочих процессах или политиках OIDC, рекомендуется добавить правила защиты в среду для дополнительной безопасности. Например, можно настроить правила развертывания в среде, чтобы ограничить, какие ветви и теги могут развертываться в среде или получить доступ к секретам среды. Дополнительные сведения см. в разделе Управление средами для развертывания.
Добавление параметров разрешений
Для выполнения задания или рабочего процесса требуется permissions параметр, позволяющий id-token: write поставщику OIDC GitHubсоздать веб-токен JSON для каждого запуска.
Примечание.
Параметр id-token: write в разрешениях рабочего процесса не дает рабочему процессу разрешение на изменение или запись в ресурсы. Вместо этого он позволяет рабочему процессу запрашивать (получить) и использовать (задать) маркер OIDC для действия или шага. Затем этот маркер используется для проверки подлинности с помощью внешних служб с помощью кратковременного маркера доступа.
Подробные сведения о необходимых разрешениях, примерах конфигурации и расширенных сценариях см. в разделе Справочник по OpenID Connect.
Запрос маркера доступа
Действие azure/login получает JWT от GitHub провайдера OIDC, а затем запрашивает токен доступа у Azure. Для получения дополнительной информации смотрите документацию azure/login.
В следующем примере используется обмен токена идентификатора OIDC с Azure для получения токена доступа, который затем можно использовать для доступа к облачным ресурсам.
# Этот рабочий процесс использует действия, которые не сертифицированы GitHub.
# Они предоставляются сторонним поставщиком, и на них распространяются
# отдельные условия обслуживания, политика конфиденциальности и поддержка
# документации.
name: Run Azure Login with OIDC
on: [push]
permissions:
id-token: write
contents: read
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: 'Az CLI login'
uses: azure/login@8c334a195cbb38e46038007b304988d888bf676a
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
- name: 'Run az commands'
run: |
az account show
az group list
# Этот рабочий процесс использует действия, которые не сертифицированы GitHub.
# Они предоставляются сторонним поставщиком, и на них распространяются
# отдельные условия обслуживания, политика конфиденциальности и поддержка
# документации.
name: Run Azure Login with OIDC
on: [push]
permissions:
id-token: write
contents: read
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: 'Az CLI login'
uses: azure/login@8c334a195cbb38e46038007b304988d888bf676a
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
- name: 'Run az commands'
run: |
az account show
az group list