Skip to main content

Эта версия GitHub Enterprise Server была прекращена 2024-07-09. Исправления выпускаться не будут даже при критических проблемах безопасности. Для повышения производительности, повышения безопасности и новых функций выполните обновление до последней версии GitHub Enterprise Server. Чтобы получить справку по обновлению, обратитесь в службу поддержки GitHub Enterprise.

Настройка OpenID Connect в Azure

Использование OpenID Connect в рабочих процессах для проверки подлинности в Azure.

Примечание. В GitHub Enterprise Server в настоящее время не поддерживаются средства выполнения тестов, размещенные в GitHub. Дополнительные сведения о планируемой поддержке в будущем см. в GitHub public roadmap.

Обзор

OpenID Connect (OIDC) позволяет рабочим процессам GitHub Actions получать доступ к ресурсам в Azure без необходимости хранить учетные данные Azure в виде долговечных секретов GitHub.

В этом руководстве представлен обзор настройки Azure для доверия OIDC GitHub в качестве федеративного идентификатора, а также есть пример рабочего процесса для действия azure/login, использующего токены для аутентификации в Azure и доступа к ресурсам.

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

  • Основные понятия о том, как GitHub использует OpenID Connect (OIDC) и его архитектуру и преимущества, см. в разделе "Сведения об усилении защиты с помощью OpenID Connect".

  • Прежде чем продолжить, необходимо спланировать стратегию безопасности, чтобы обеспечить выдачу маркеров доступа только предсказуемым способом. Чтобы управлять тем, как поставщик облачных служб выдает маркеры доступа, необходимо определить по крайней мере одно условие, запретив недоверенным репозиториям запрашивать маркеры доступа к облачным ресурсам. Дополнительные сведения см. в разделе Сведения об усилении защиты с помощью OpenID Connect.

  • Необходимо убедиться, что следующие конечные точки OIDC доступны поставщиком облачных служб:

    • https://HOSTNAME/_services/token/.well-known/openid-configuration
    • https://HOSTNAME/_services/token/.well-known/jwks

    Примечание. Идентификатор Microsoft Entra (ранее известный как Azure AD) не имеет фиксированных диапазонов IP-адресов, определенных для этих конечных точек.

  • Убедитесь, что значение утверждения издателя, включенного в веб-токен JSON (JWT), имеет общедоступный url-адрес для routable. Дополнительные сведения см. в разделе Сведения об усилении защиты с помощью OpenID Connect.

Добавление федеративных учетных данных в Azure

Поставщик OIDC GitHub работает с федерацией идентификаторов рабочей нагрузки Azure. Обзор см. в документации Майкрософт в разделе Федерация идентификаторов рабочей нагрузки.

Чтобы настроить поставщик удостоверений OIDC в Azure, необходимо выполнить следующую конфигурацию. Инструкции по внесению этих изменений см. в документации Azure.

  1. Создайте приложение идентификатора записи и субъект-службу.
  2. Добавьте федеративные учетные данные для приложения Entra ID.
  3. Создайте секреты GitHub для хранения конфигурации Azure.

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

Обновление рабочего процесса GitHub Actions

Чтобы обновить рабочие процессы для OIDC, необходимо внести два изменения в YAML:

  1. Добавьте параметры разрешений для маркера.
  2. Используйте действие azure/login для обмена маркера OIDC (JWT) на маркер доступа к облаку.

Примечание. Если среды используются в рабочих процессах или политиках OIDC, рекомендуется добавить правила защиты в среду для дополнительной безопасности. Например, можно настроить правила развертывания в среде, чтобы ограничить, какие ветви и теги могут развертываться в среде или получить доступ к секретам среды. Дополнительные сведения см. в разделе Использование сред для развертывания.

Добавление параметров разрешений

 Для выполнения задания или рабочего процесса требуется параметр permissions с id-token: write. Вы не сможете запросить маркер идентификатора JWT OIDC, если permissions для параметра id-token задано read или none.

Этот параметр id-token: write позволяет запрашивать JWT у поставщика OIDC GitHub, применяя один из следующих способов:

  • использование переменных среды в средстве выполнения (ACTIONS_ID_TOKEN_REQUEST_URL и ACTIONS_ID_TOKEN_REQUEST_TOKEN);
  • использование getIDToken() из набора средств Actions.

Если необходимо получить токен OIDC для рабочего процесса, разрешение можно установить на уровне рабочего процесса. Например:

YAML
permissions:
  id-token: write # This is required for requesting the JWT
  contents: read  # This is required for actions/checkout

Если необходимо получить токен OIDC только для одного задания, такое разрешение можно установить в этом задании. Например:

YAML
permissions:
  id-token: write # This is required for requesting the JWT

Запрос маркера доступа

Действие azure/login получает JWT от поставщика OIDC GitHub, а затем запрашивает маркер доступа из Azure. Дополнительные сведения см. в документации по azure/login.

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

YAML
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@v1
        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

Дополнительные материалы