Применение GitHub Actions для подключения к Azure

Узнайте, как выполнять вход в Azure через Azure PowerShell или Azure CLI для взаимодействия с ресурсами Azure.

Чтобы использовать Azure PowerShell или Azure CLI в рабочем процессе GitHub Actions, вам нужно выполнить действие входа в Azure.

Действие входа в Azure поддерживает два разных способа аутентификации в Azure:

По умолчанию журнал действий входа в систему с помощью Azure CLI и настройка среды выполнения действий GitHub Actions для Azure CLI. Вы можете использовать Azure PowerShell со свойством enable-AzPSSession действия входа в Azure. Это настраивает среду запуска GitHub Actions с помощью модуля Azure PowerShell.

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

Использование действия входа Azure с OpenID Connect

Чтобы настроить вход в Azure с помощью OpenID Connect и использовать его в рабочем процессе GitHub Actions, вам потребуется следующее:

  • Приложение Microsoft Entra с субъектом-службой, которому назначена соответствующая роль для вашей подписки.
  • Приложение Microsoft Entra, настроенное с федеративными учетными данными для доверия маркеров, выданных GitHub Actions в репозитории GitHub. Это можно настроить в портал Azure или с помощью REST API Microsoft Graph.
  • Рабочий процесс GitHub Actions, который запрашивает маркеры проблем GitHub в рабочий процесс и использует действие входа Azure.

Создание приложения и субъекта-службы Microsoft Entra

Вам потребуется создать приложение Microsoft Entra и субъект-службу, а затем назначить роль в подписке приложению, чтобы рабочий процесс получил доступ к вашей подписке.

  1. Если у вас нет существующего приложения, зарегистрируйте новое приложение Microsoft Entra и субъект-службу, которое может получить доступ к ресурсам. В рамках этого процесса необходимо сделать следующее:

    • Регистрация приложения с помощью идентификатора Microsoft Entra и создание субъекта-службы
    • Назначение роли для приложения
  2. Откройте раздел Регистрация приложений на портале Azure и найдите свое приложение. Скопируйте значения из полей Идентификатор приложения (клиента) и Идентификатор каталога (арендатора) для использования в рабочем процессе GitHub Actions.

  3. Откройте раздел Подписки на портале Azure и найдите свою подписку. Скопируйте значение из поля Идентификатор подписки.

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

Федеративные учетные данные можно добавить на портале Azure или с помощью REST API Microsoft Graph.

  1. Выберите Регистрация приложений на портале Azure и откройте приложение, которое хотите настроить.
  2. В приложении выберите Сертификаты и секреты.
    Select Certificates & secrets.
  3. На вкладке Федеративные учетные данные выберите Добавить учетные данные. Add the federated credential
  4. Выберите сценарий учетных данных GitHub Actions, развертывающие ресурсы Azure. Создайте свои учетные данные, введя нужные сведения.
Поле Описание: Пример
Организация Имя организации GitHub или имя пользователя GitHub. contoso
Репозиторий Имя репозитория GitHub. contoso-app
Тип объекта Фильтр, используемый для определения области запросов OIDC в рабочих процессах GitHub. Это поле используется для создания утверждения subject. Environment, , BranchPull requestTag
Имя GitHub Имя среды, ветви или тега. main
Имя. Идентификатор федеративных учетных данных. contoso-deploy

Более подробный обзор см. в статье Настройка приложения для доверия репозиторию GitHub.

Создавайте секреты GitHub

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

  1. Откройте репозиторий GitHub и перейдите в раздел Параметры.

    Select Settings in the navigation

  2. Выберите "Секреты безопасности>" и "Действия переменных>".

    Choose to add a secret

  3. Создайте секреты для AZURE_CLIENT_ID, AZURE_TENANT_ID и AZURE_SUBSCRIPTION_ID. Используйте эти значения из приложения Azure Active Directory для секретов GitHub:

    Секрет Github Приложение Azure Active Directory
    AZURE_CLIENT_ID Идентификатор приложения (клиент)
    AZURE_TENANT_ID Идентификатор каталога (клиента)
    AZURE_SUBSCRIPTION_ID Идентификатор подписки
  4. Сохраните каждый секрет, выбрав Добавить секрет.

Настройка входа в Azure с помощью аутентификации OpenID Connect

Рабочий процесс GitHub Actions использует OpenID Connect для аутентификации в Azure. Дополнительные сведения об этом взаимодействии см. в документации по GitHub Actions.

В этом примере вы будете использовать OpenID Подключение Azure CLI для проверки подлинности в Azure с помощью действия входа Azure. В примере используются секреты GitHub для значений client-id, tenant-id и subscription-id. Эти значения также можно передать непосредственно в действие входа.

Действие входа Azure включает необязательный audience входной параметр, используемый по умолчанию api://AzureADTokenExchange. Этот параметр можно обновить для пользовательских значений аудитории.

Этот рабочий процесс проходит проверку подлинности с помощью OpenID Подключение и использует Azure CLI для получения сведений о подключенной подписке и группе ресурсов списка.

name: Run Azure Login with OpenID Connect
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 Azure CLI commands'
      run: |
          az account show
          az group list
          pwd 

Проверка успешного входа в Azure с помощью OpenID

Откройте действие Az CLI login и убедитесь, что оно выполнено успешно. Отобразится сообщение Login successful. Если вход был неуспешным, вы увидите сообщение Az CLI Login failed..

GitHub Actions Azure Login successful.

Использование действия входа в Azure с секретом субъекта-службы

Чтобы использовать вход в Azure с субъектом-службой, сначала нужно добавить субъект-службу Azure в качестве секрета в репозиторий GitHub.

Создание субъекта-службы

В этом примере вы создадите секрет с именем AZURE_CREDENTIALS, который можно применить для аутентификации в Azure.

  1. Откройте Azure Cloud Shell на портале Azure или Azure CLI локально.

    Примечание.

    Если вы используете Azure Stack Hub, вам потребуется задать для конечной точки управления SQL атрибут not supported. az cloud update -n {environmentName} --endpoint-sql-management https://notsupported

  2. Создайте субъект-службу для приложения на портале Azure. Субъект-служба должен быть назначен соответствующей ролью.

        az ad sp create-for-rbac --name "myApp" --role contributor \
                                    --scopes /subscriptions/{subscription-id}/resourceGroups/{resource-group} \
                                    --json-auth
    

    --json-auth Параметр выводит словарь результатов, принятый действием входа, доступным в версиях >Azure CLI = 2.51.0. Версии до этого использования --sdk-auth с предупреждением об нерекомендуемом.

  3. Скопируйте объект JSON для субъекта-службы.

    {
        "clientId": "<GUID>",
        "clientSecret": "<GUID>",
        "subscriptionId": "<GUID>",
        "tenantId": "<GUID>",
        (...)
    }
    

Добавление субъекта-службы в качестве секрета GitHub

  1. В GitHub перейдите в репозиторий.

  2. Перейдите к Параметры в меню навигации.

  3. Выберите "Секреты безопасности>" и "Действия переменных>".

    Screenshot of select Actions menu item.

  4. Нажмите Создать секрет репозитория.

  5. Вставьте все выходные данные JSON, полученные из команды Azure CLI, в поле значения секрета. Присвойте секрету имя AZURE_CREDENTIALS.

  6. Выберите Добавить секрет.

Использование действия входа в Azure

Примените секрет субъекта-службы вместе с действием входа в Azure для аутентификации в Azure.

В этом рабочем процессе вы выполните аутентификацию с помощью действия входа в Azure с применением сохраненных в secrets.AZURE_CREDENTIALS сведений о субъекте-службе. Затем вы выполните действие Azure CLI. Дополнительные сведения о ссылках на секреты GitHub в файле рабочего процесса см. в статье об использовании зашифрованных секретов в рабочем процессе на портале GitHub Docs.

Получив работающее действие входа в Azure, вы сможете использовать действия Azure PowerShell или Azure CLI. Вы также сможете использовать другие действия Azure, например развертывание веб-приложения Azure и функции Azure.

on: [push]

name: AzureLoginSample

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Log in with Azure
        uses: azure/login@v1
        with:
          creds: '${{ secrets.AZURE_CREDENTIALS }}'

Использование действия Azure PowerShell

В этом примере показано, как выполнить вход с помощью действия входа в Azure, а затем извлечь группу ресурсов с помощью действия Azure PowerShell.

on: [push]

name: AzureLoginSample

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Log in with Azure
        uses: azure/login@v1
        with:
          creds: '${{ secrets.AZURE_CREDENTIALS }}'
          enable-AzPSSession: true
      - name: Azure PowerShell Action
        uses: Azure/powershell@v1
        with:
          inlineScript: Get-AzResourceGroup -Name "< YOUR RESOURCE GROUP >"
          azPSVersion: "latest"

Использование действия Azure CLI

В этом примере вы войдете в систему с помощью действия входа в Azure, а затем извлечете группу ресурсов с помощью действия Azure CLI.

on: [push]

name: AzureLoginSample

jobs:
build-and-deploy:
  runs-on: ubuntu-latest
  steps:

    - name: Log in with Azure
      uses: azure/login@v1
      with:
          creds: ${{ secrets.AZURE_CREDENTIALS }}

    - name: Azure CLI script
      uses: azure/CLI@v1
      with:
          azcliversion: 2.0.72
          inlineScript: |
            az account show
            az storage -h

Подключение к облакам Azure для государственных организаций и Azure Stack Hub

Чтобы войти в одно из облаков Azure для государственных организаций, задайте для необязательного параметра среды имена поддерживаемых облаков AzureUSGovernment или AzureChinaCloud. Если этот параметр не указан, он принимает значение по умолчанию AzureCloud и подключается к общедоступному облаку Azure.

   - name: Login to Azure US Gov Cloud with CLI
     uses: azure/login@v1
        with:
          creds: ${{ secrets.AZURE_US_GOV_CREDENTIALS }}
          environment: 'AzureUSGovernment'
          enable-AzPSSession: false
   - name: Login to Azure US Gov Cloud with Az Powershell
      uses: azure/login@v1
        with:
          creds: ${{ secrets.AZURE_US_GOV_CREDENTIALS }}
          environment: 'AzureUSGovernment'
          enable-AzPSSession: true

Подключение к другим службам Azure

В следующих статьях содержатся сведения о подключении к GitHub из Azure и других служб.

Microsoft Entra ID

Power BI

Соединители

Azure Databricks