Применение GitHub Actions для подключения к Azure
Узнайте, как выполнять вход в Azure через Azure PowerShell или Azure CLI для взаимодействия с ресурсами Azure.
Чтобы использовать Azure PowerShell или Azure CLI в рабочем процессе GitHub Actions, вам нужно выполнить действие входа в Azure.
Действие входа в Azure поддерживает два разных способа аутентификации в Azure:
- субъект-служба с секретами;
- OpenID Подключение (OIDC) с субъектом-службой 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 и субъект-службу, а затем назначить роль в подписке приложению, чтобы рабочий процесс получил доступ к вашей подписке.
Если у вас нет существующего приложения, зарегистрируйте новое приложение Microsoft Entra и субъект-службу, которое может получить доступ к ресурсам. В рамках этого процесса необходимо сделать следующее:
- Регистрация приложения с помощью идентификатора Microsoft Entra и создание субъекта-службы
- Назначение роли для приложения
Откройте раздел Регистрация приложений на портале Azure и найдите свое приложение. Скопируйте значения из полей Идентификатор приложения (клиента) и Идентификатор каталога (арендатора) для использования в рабочем процессе GitHub Actions.
Откройте раздел Подписки на портале Azure и найдите свою подписку. Скопируйте значение из поля Идентификатор подписки.
Добавление федеративных учетных данных
Федеративные учетные данные можно добавить на портале Azure или с помощью REST API Microsoft Graph.
- Выберите Регистрация приложений на портале Azure и откройте приложение, которое хотите настроить.
- В приложении выберите Сертификаты и секреты.
- На вкладке Федеративные учетные данные выберите Добавить учетные данные.
- Выберите сценарий учетных данных GitHub Actions, развертывающие ресурсы Azure. Создайте свои учетные данные, введя нужные сведения.
Поле | Описание: | Пример |
---|---|---|
Организация | Имя организации GitHub или имя пользователя GitHub. | contoso |
Репозиторий | Имя репозитория GitHub. | contoso-app |
Тип объекта | Фильтр, используемый для определения области запросов OIDC в рабочих процессах GitHub. Это поле используется для создания утверждения subject . |
Environment , , Branch Pull request Tag |
Имя GitHub | Имя среды, ветви или тега. | main |
Имя. | Идентификатор федеративных учетных данных. | contoso-deploy |
Более подробный обзор см. в статье Настройка приложения для доверия репозиторию GitHub.
Создавайте секреты GitHub
Вам необходимо указать идентификатор клиента, идентификатор арендатора и идентификатор подписки приложения, чтобы выполнить действие входа. Эти значения могут быть указаны непосредственно в рабочем процессе или храниться в секретах GitHub с указанием ссылок на них в рабочем процессе. Сохранение значений в виде секретов GitHub является более безопасным вариантом.
Откройте репозиторий GitHub и перейдите в раздел Параметры.
Выберите "Секреты безопасности>" и "Действия переменных>".
Создайте секреты для
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 Идентификатор подписки Сохраните каждый секрет, выбрав Добавить секрет.
Настройка входа в 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.
.
Использование действия входа в Azure с секретом субъекта-службы
Чтобы использовать вход в Azure с субъектом-службой, сначала нужно добавить субъект-службу Azure в качестве секрета в репозиторий GitHub.
Создание субъекта-службы
В этом примере вы создадите секрет с именем AZURE_CREDENTIALS
, который можно применить для аутентификации в Azure.
Откройте Azure Cloud Shell на портале Azure или Azure CLI локально.
Примечание.
Если вы используете Azure Stack Hub, вам потребуется задать для конечной точки управления SQL атрибут
not supported
.az cloud update -n {environmentName} --endpoint-sql-management https://notsupported
Создайте субъект-службу для приложения на портале 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
с предупреждением об нерекомендуемом.Скопируйте объект JSON для субъекта-службы.
{ "clientId": "<GUID>", "clientSecret": "<GUID>", "subscriptionId": "<GUID>", "tenantId": "<GUID>", (...) }
Добавление субъекта-службы в качестве секрета GitHub
В GitHub перейдите в репозиторий.
Перейдите к Параметры в меню навигации.
Выберите "Секреты безопасности>" и "Действия переменных>".
Нажмите Создать секрет репозитория.
Вставьте все выходные данные JSON, полученные из команды Azure CLI, в поле значения секрета. Присвойте секрету имя
AZURE_CREDENTIALS
.Выберите Добавить секрет.
Использование действия входа в 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 и других служб.