Упражнение. Создание удостоверения рабочей нагрузки

Завершено

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

  • Создайте группу ресурсов для веб-сайта.
  • Создайте Идентификация рабочей нагрузки Microsoft Entra и предоставьте ему доступ к группе ресурсов.
  • Создайте секреты GitHub, которые потребуются рабочему процессу для использования удостоверения рабочей нагрузки.

В этом упражнении требуется разрешение на создание приложений в каталоге Microsoft Entra. Если вы не можете получить это разрешение для своей текущей учетной записи Azure, то можно использовать бесплатную пробную версию и создать новую подписку Azure и клиента.

Внимание

Последнее упражнение в этом модуле содержит важные действия по очистке. Следуйте инструкциям по очистке, даже если этот модуль не завершен.

Вход в Azure

Для работы с удостоверениями рабочей нагрузки в Azure войдите в свою учетную запись Azure из терминала Visual Studio Code. Убедитесь, что средства Azure CLI установлены.

  1. В меню Терминал выберите Новый терминал. Окно терминала обычно открывается в нижней половине экрана.

    Оболочка по умолчанию обычно pwsh, как показано в правой части окна терминала.

    Снимок экрана: окно терминала Visual Studio Code, в котором pwsh отображается как параметр оболочки.

  2. Выберите раскрывающийся список "Профиль запуска" и выберите Azure Cloud Shell (Bash).

    Снимок экрана: окно терминала Visual Studio Code. Отображается раскрывающийся список оболочки терминала и пункт меню Azure Cloud Shell (Bash).

    Откроется новая оболочка.

Вход в Azure с помощью Azure CLI

  1. В терминале Visual Studio Code выполните указанную ниже команду, чтобы войти в Azure.

    az login
    
  2. В открывшемся браузере войдите в свою учетную запись Azure.

Чтобы развернуть этот шаблон в Azure, войдите в свою учетную запись Azure из терминала Visual Studio Code. Убедитесь, что вы установили Azure PowerShell, и войдите в ту же учетную запись, с которой была активирована песочница.

  1. В меню Терминал выберите Новый терминал. Окно терминала обычно открывается в нижней половине экрана.

    Оболочка по умолчанию обычно pwsh, как показано в правой части окна терминала.

    Снимок экрана: окно терминала Visual Studio Code, в котором pwsh отображается как параметр оболочки.

  2. Выберите раскрывающийся список "Профиль запуска", а затем выберите Azure Cloud Shell (PowerShell).

    Снимок экрана: окно терминала Visual Studio Code. Отображается раскрывающийся список оболочки терминала и пункт меню Azure Cloud Shell (PowerShell).

    Откроется новая оболочка.

Вход в Azure с помощью Azure PowerShell

  1. В терминале Visual Studio Code выполните указанную ниже команду, чтобы войти в Azure.

    Connect-AzAccount
    
  2. В открывшемся браузере войдите в свою учетную запись Azure.

Создание удостоверения рабочей нагрузки

Совет

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

Чтобы создать удостоверение рабочей нагрузки, команды Azure CLI используются jq для анализа данных из выходных данных JSON. Если вы еще не jq установили, можно использовать Bash в Azure Cloud Shell для создания удостоверения рабочей нагрузки, группы ресурсов и назначения ролей и подготовки секретов GitHub.

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

    githubOrganizationName='mygithubuser'
    githubRepositoryName='toy-website-workflow'
    
  2. Выполните следующий код, который создает удостоверение рабочей нагрузки и связывает его с репозиторием GitHub:

    applicationRegistrationDetails=$(az ad app create --display-name 'toy-website-workflow')
    applicationRegistrationObjectId=$(echo $applicationRegistrationDetails | jq -r '.id')
    applicationRegistrationAppId=$(echo $applicationRegistrationDetails | jq -r '.appId')
    
    az ad app federated-credential create \
       --id $applicationRegistrationObjectId \
       --parameters "{\"name\":\"toy-website-workflow\",\"issuer\":\"https://token.actions.githubusercontent.com\",\"subject\":\"repo:${githubOrganizationName}/${githubRepositoryName}:ref:refs/heads/main\",\"audiences\":[\"api://AzureADTokenExchange\"]}"
    
  1. Выполните следующий код, чтобы определить переменные для имени пользователя GitHub и имени репозитория. Не забудьте заменить mygithubuser именем пользователя GitHub, которое вы записали ранее в предыдущем упражнении.

    $githubOrganizationName = 'mygithubuser'
    $githubRepositoryName = 'toy-website-workflow'
    
  2. Выполните следующий код, который создает удостоверение рабочей нагрузки и связывает его с репозиторием GitHub:

    $applicationRegistration = New-AzADApplication -DisplayName 'toy-website-workflow'
    
    New-AzADAppFederatedCredential `
       -Name 'toy-website-workflow' `
       -ApplicationObjectId $applicationRegistration.Id `
       -Issuer 'https://token.actions.githubusercontent.com' `
       -Audience 'api://AzureADTokenExchange' `
       -Subject "repo:$($githubOrganizationName)/$($githubRepositoryName):ref:refs/heads/main"
    

Создание группы ресурсов в Azure и предоставление доступа к удостоверению рабочей нагрузки

Чтобы создать группу ресурсов и предоставить удостоверению рабочей нагрузки доступ к этой группе, выполните следующую команду Azure CLI в терминале Visual Studio Code:

resourceGroupResourceId=$(az group create --name ToyWebsite --location westus3 --query id --output tsv)

az ad sp create --id $applicationRegistrationObjectId
az role assignment create \
   --assignee $applicationRegistrationAppId \
   --role Contributor \
   --scope $resourceGroupResourceId

Чтобы создать группу ресурсов и предоставить удостоверению рабочей нагрузки доступ к этой группе, выполните следующую команду Azure PowerShell в терминале Visual Studio Code:

$resourceGroup = New-AzResourceGroup -Name ToyWebsite -Location westus3

New-AzADServicePrincipal -AppId $applicationRegistration.AppId
New-AzRoleAssignment `
   -ApplicationId $($applicationRegistration.AppId) `
   -RoleDefinitionName Contributor `
   -Scope $resourceGroup.ResourceId

Подготовка секретов GitHub

Выполните следующий код, чтобы отобразить значения, которые необходимо создать в виде секретов GitHub:

echo "AZURE_CLIENT_ID: $applicationRegistrationAppId"
echo "AZURE_TENANT_ID: $(az account show --query tenantId --output tsv)"
echo "AZURE_SUBSCRIPTION_ID: $(az account show --query id --output tsv)"
$azureContext = Get-AzContext
Write-Host "AZURE_CLIENT_ID: $($applicationRegistration.AppId)"
Write-Host "AZURE_TENANT_ID: $($azureContext.Tenant.Id)"
Write-Host "AZURE_SUBSCRIPTION_ID: $($azureContext.Subscription.Id)"

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

Итак, вы создали группу ресурсов и удостоверение рабочей нагрузки. Затем создайте секреты в GitHub Actions, чтобы рабочий процесс мог использовать удостоверение рабочей нагрузки для входа.

  1. В браузере перейдите к своему репозиторию GitHub.

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

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

    Снимок экрана с интерфейсом GitHub, где показана страница

  4. Присвойте секрету имя AZURE_CLIENT_ID.

  5. В поле Значение вставьте GUID из первой строки выходных данных терминала. Не включайте в значение AZURE_CLIENT_ID, двоеточие или пробелы.

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

    Снимок экрана с интерфейсом GitHub, где показана страница

  7. Повторите процесс, чтобы создать секреты для AZURE_TENANT_ID и AZURE_SUBSCRIPTION_ID, копируя значения из соответствующих полей в выходных данных терминала.

  8. Убедитесь, что в списке секретов теперь отображаются все три секрета.

    Снимок экрана: интерфейс GitHub со списком секретов.