Упражнение — авторизация уполномоченного сервиса для развертываний
В предыдущем упражнении вы создали учетную запись службы для конвейера развертывания веб-сайта и проверили возможность входа с использованием ключа. Теперь вы готовы предоставить служебному принципалу доступ к вашей среде Azure. В этом упражнении вы создадите назначение ролей для субъекта-службы, а затем развернете Bicep-файл с помощью субъекта-службы.
Во время процесса вы выполните следующие действия.
- Войдите в систему в качестве собственной учетной записи пользователя.
- Создайте группу ресурсов для веб-сайта вашей компании.
- Создайте назначение ролей, чтобы разрешить служебному принципалу развертывать ресурсы в группе ресурсов.
- Войдите в качестве учетной записи службы и разверните файл Bicep, который создает веб-ресурсы вашей компании.
- Проверьте развертывание.
- Очистка группы ресурсов и субъекта-службы.
Войдите с помощью своей учетной записи пользователя
В предыдущем упражнении вы вошли с помощью учетной записи службы, а затем вышли из нее. Чтобы выполнить следующие шаги, описанные в этом упражнении, необходимо снова войти в систему под своей учетной записью пользователя.
В терминале Azure Cloud Shell (bash) Visual Studio Code войдите в Azure, выполнив следующую команду:
az login
В открывшемся браузере войдите в учетную запись Azure.
В терминале Azure Cloud Shell (PowerShell) Visual Studio Code войдите в Azure, выполнив следующую команду:
Connect-AzAccount
В открывшемся браузере войдите в учетную запись Azure.
Создание группы ресурсов
Теперь вы создадите группу ресурсов для хранения ресурсов веб-сайта игрушечной компании.
Выполните следующую команду Azure CLI в терминале Visual Studio Code, чтобы создать группу ресурсов:
az group create --name ToyWebsite --location eastus
Просмотрите выходные данные JSON из предыдущей команды. Он содержит свойство с именем
id
, которое является идентификатором группы ресурсов. Скопируйте его в безопасное место. Вы будете использовать его в ближайшее время.
Выполните следующую команду Azure PowerShell в терминале Visual Studio Code, чтобы создать группу ресурсов:
New-AzResourceGroup -Name ToyWebsite -Location eastus
Просмотрите выходные данные предыдущей команды. Он содержит свойство с именем
ResourceId
, которое является идентификатором группы ресурсов. Скопируйте его в безопасное место. Вы будете использовать его в ближайшее время.
Создание назначения роли
Для конвейера развертывания веб-сайта вы решите создать назначение роли со следующими сведениями:
- Назначаемый: субъект-служба, созданный в предыдущем упражнении.
- роль: встроенная роль участника.
- Охват: группа ресурсов, созданная на предыдущем шаге.
Выполните следующую команду Azure CLI в терминале Visual Studio Code, чтобы создать назначение роли. Замените заполнители значениями, скопированными ранее.
az role assignment create \
--assignee APPLICATION_ID \
--role Contributor \
--scope RESOURCE_GROUP_ID \
--description "The deployment pipeline for the company's website needs to be able to create resources within the resource group."
Выполните следующую команду Azure CLI в терминале Visual Studio Code, чтобы создать назначение роли. Замените заполнители значениями, скопированными ранее.
New-AzRoleAssignment `
-ApplicationId APPLICATION_ID `
-RoleDefinitionName Contributor `
-Scope RESOURCE_GROUP_ID `
-Description "The deployment pipeline for the company's website needs to be able to create resources within the resource group."
Создайте файл Bicep
Вы ранее создали файл Bicep, который развертывает ресурсы веб-сайта. Вы можете сохранить этот файл, чтобы протестировать его с помощью учётной записи службы.
Создайте файл с именем main.bicep.
Добавьте следующее содержимое в файл main.bicep. Вы развернете шаблон в ближайшее время.
@description('The Azure region into which the resources should be deployed.') param location string = resourceGroup().location @description('The name of the App Service app.') param appServiceAppName string = 'toywebsite${uniqueString(resourceGroup().id)}' @description('The name of the App Service plan SKU.') param appServicePlanSkuName string = 'F1' var appServicePlanName = 'toy-website-plan' var applicationInsightsInstanceName = 'toy-website-insights' resource appServicePlan 'Microsoft.Web/serverFarms@2020-06-01' = { name: appServicePlanName location: location sku: { name: appServicePlanSkuName } } resource applicationInsightsInstance 'Microsoft.Insights/components@2018-05-01-preview' = { name: applicationInsightsInstanceName location: location kind: 'web' properties: { Application_Type: 'web' } } resource appServiceApp 'Microsoft.Web/sites@2020-06-01' = { name: appServiceAppName location: location properties: { serverFarmId: appServicePlan.id httpsOnly: true siteConfig: { appSettings: [ { name: 'APPINSIGHTS_INSTRUMENTATIONKEY' value: applicationInsightsInstance.properties.InstrumentationKey } { name: 'APPLICATIONINSIGHTS_CONNECTION_STRING' value: applicationInsightsInstance.properties.ConnectionString } ] } } }
Сохраните изменения в файле. Вы можете выбрать файл>сохранить как или выбрать CTRL+S в Windows ("+S" в macOS). Не забудьте помнить, где вы сохранили файл. Например, может потребоваться создать папку для скриптов , чтобы в нее сохранить файлы.
Развертывание Bicep-файла с помощью учетной записи службы
В настоящее время у вас нет конвейера развертывания, поэтому вы имитируете, что делает конвейер для развертывания Bicep-файла.
Выполните следующую команду Azure CLI в терминале Visual Studio Code, чтобы войти с помощью учетных данных субъекта-службы. Замените заполнители значениями, скопированными в предыдущем упражнении.
az login --service-principal \ --username APPLICATION_ID \ --password SERVICE_PRINCIPAL_KEY \ --tenant TENANT_ID
Разверните файл Bicep, выполнив следующую команду Azure CLI:
az deployment group create \ --resource-group ToyWebsite \ --template-file main.bicep
Развертывание может занять минуту или два, а затем вы увидите успешное развертывание.
Выполните следующую команду Azure PowerShell в терминале Visual Studio Code для того, чтобы безопасно запросить учетные данные основной учетной записи службы. Используйте идентификатор приложения субъекта-службы и ключ из предыдущего упражнения для имени пользователя и пароля соответственно.
$credential = Get-Credential
Выполните следующую команду Azure PowerShell в терминале Visual Studio Code, чтобы войти, используя учетные данные служебного принципала. Замените заполнитель
TENANT_ID
значением, скопированным ранее.Connect-AzAccount -ServicePrincipal ` -Credential $credential ` -Tenant TENANT_ID
Разверните файл Bicep, выполнив следующую команду Azure PowerShell:
New-AzResourceGroupDeployment -ResourceGroupName ToyWebsite -TemplateFile main.bicep
Развертывание может занять минуту или два, а затем вы увидите успешное развертывание.
Проверка развертывания
Используйте портал Azure для проверки развернутых ресурсов и проверки результатов развертывания.
Перейдите на портал Azure.
На левой панели выберите группы ресурсов.
Выберите ToyWebsite.
Выберите развертывания для просмотра успешного развертывания.
Вы также можете увидеть развертывание с именем развертывание правила оповещений о сбоях и аномалиях. Application Insights автоматически создает это развертывание.
Выберите основное развертывания, чтобы узнать, какие ресурсы были развернуты, а затем разверните сведения о развертывании.
В этом случае перечислены план службы приложений, приложение и экземпляр Application Insights.
Обратите внимание, что в этом развертывании нет ничего необычного. Несмотря на то, что субъект-служба инициировал его, он так же, как и любое другое развертывание Bicep.
Очистите группу ресурсов и служебного субъекта
Вы успешно создали служебный принципал и назначение роли, и вы развернули ресурсы веб-сайта с помощью файла Bicep. Теперь можно удалить созданные ресурсы.
Выйдите из учетной записи служебного принципала с помощью следующей команды:
az logout
Войдите в Azure с помощью собственной учетной записи пользователя, выполнив следующую команду:
az login
В открывшемся браузере войдите в учетную запись Azure.
Выполните следующую команду Azure CLI, чтобы удалить группу ресурсов, ее содержимое и назначение роли:
az group delete --name ToyWebsite
При появлении запроса на подтверждение введите
y
.Выполните следующую команду, чтобы удалить субъект-службу. Замените заполнитель
APPLICATION_ID
идентификатором приложения, скопированным в предыдущем упражнении:az ad sp delete --id APPLICATION_ID
Выйдите из учетной записи служебного принципала с помощью следующей команды:
Logout-AzAccount
Войдите в Azure с помощью собственной учетной записи пользователя, выполнив следующую команду:
Connect-AzAccount
В открывшемся браузере войдите в учетную запись Azure.
Выполните следующую команду Azure PowerShell, чтобы удалить группу ресурсов, ее содержимое и назначение роли:
Remove-AzResourceGroup -Name ToyWebsite
При появлении запроса на подтверждение введите
y
.Выполните следующую команду, чтобы удалить субъект-службу. Замените заполнитель
APPLICATION_ID
идентификатором приложения, скопированным в предыдущем упражнении:Remove-AzADServicePrincipal -ApplicationId APPLICATION_ID
При появлении запроса на подтверждение введите
y
.