Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом руководстве описывается создание модуля Runbook PowerShell в службе автоматизации Azure, использующего управляемое удостоверение для взаимодействия с ресурсами. Модули Runbook PowerShell используют Windows PowerShell. Управляемое удостоверение от Microsoft Entra ID позволяет runbook легко получать доступ к другим ресурсам, защищенным с помощью Microsoft Entra.
В этом руководстве описано следующее:
- Назначьте разрешения управляемым удостоверениям
- Создание модуля runbook в PowerShell
Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем приступить к работе.
Необходимые компоненты
Перед назначением разрешений управляемым удостоверениям убедитесь, что выполнены следующие предварительные требования:
- Учетная запись службы автоматизации Azure, которой назначено хотя бы одно управляемое удостоверение. Дополнительные сведения об этом см. в статье Использование управляемого удостоверения, назначаемого пользователем, для учетной записи службы автоматизации Azure.
- Модули Az
Az.Accounts
,Az.Automation
,Az.ManagedServiceIdentity
иAz.Compute
, импортированные в учетную запись службы автоматизации. Дополнительные сведения см. в разделе Импорт модулей Az. - Модуль Azure Az PowerShell, установленный на компьютере. Сведения об установке или обновлении см. в разделе Установка модуля Azure Az PowerShell.
Az.ManagedServiceIdentity
— это модуль предварительной версии, не входящий в состав модуля Az. Чтобы установить его, выполните командуInstall-Module -Name Az.ManagedServiceIdentity
. - виртуальной машины Azure. Это не должна быть рабочая виртуальная машина, так как для работы с этим руководством ее нужно остановить и запустить заново.
- Опыт работы с runbook службы автоматизации.
Назначьте разрешения управляемым удостоверениям
Назначьте разрешения управляемым удостоверениям, чтобы они могли запускать и останавливать виртуальную машину.
Чтобы назначить разрешения управляемым удостоверениям, выполните следующие действия.
Войдите в Azure в интерактивном режиме с помощью командлета Connect-AzAccount и следуйте инструкциям:
# Sign in to your Azure subscription $sub = Get-AzSubscription -ErrorAction SilentlyContinue if(-not ($sub)) { Connect-AzAccount } # If you have multiple subscriptions, set the one to use # Select-AzSubscription -SubscriptionId <SUBSCRIPTIONID>
Введите соответствующее значение для указанных ниже переменных, а затем выполните скрипт.
$resourceGroup = "resourceGroupName" # These values are used in this tutorial $automationAccount = "xAutomationAccount" $userAssignedManagedIdentity = "xUAMI"
Примените командлет PowerShell New-AzRoleAssignment, чтобы назначить роль управляемому удостоверению, назначаемому системой.
$role1 = "DevTest Labs User" $SAMI = (Get-AzAutomationAccount -ResourceGroupName $resourceGroup -Name $automationAccount).Identity.PrincipalId New-AzRoleAssignment ` -ObjectId $SAMI ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName $role1
Для назначаемого пользователем управляемого удостоверения требуется то же назначение ролей.
$UAMI = (Get-AzUserAssignedIdentity -ResourceGroupName $resourceGroup -Name $userAssignedManagedIdentity).PrincipalId New-AzRoleAssignment ` -ObjectId $UAMI ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName $role1
Для выполнения командлетов
Get-AzUserAssignedIdentity
иGet-AzAutomationAccount
, которые используются в этом руководстве, управляемое удостоверение, назначаемое системой, должно иметь дополнительные разрешения.$role2 = "Reader" New-AzRoleAssignment ` -ObjectId $SAMI ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName $role2
Создание модуля Runbook PowerShell
Создайте runbook с возможностью выполнения любым из наших управляемых удостоверений. Модуль Runbook запустит остановленную виртуальную машину или остановит запущенную виртуальную машину.
Чтобы создать модуль Runbook PowerShell, выполните следующие действия.
Войдите на портал Azure перейдите к учетной записи службы автоматизации.
На странице "Обзор" выберите "Использовать опыт работы со средой выполнения", если вы еще не находитесь в новом интерфейсе.
В разделе Автоматизация процессов щелкните Модули Runbook.
Выберите "Создать модуль Runbook" и выполните указанные ниже действия.
- Присвойте новому модулю runbook имя
miTesting
. - В раскрывающемся меню Тип runbook выберите PowerShell.
- В раскрывающемся списке среды выполнениявыберите существующую среду выполнения или создайте новую с помощью Среды выполнения PowerShell и версии 7.4.
- Введите соответствующее описание.
- Присвойте новому модулю runbook имя
Выберите Создать, чтобы создать план действий.
В редакторе runbook вставьте следующий код:
Param( [string]$ResourceGroup, [string]$VMName, [string]$Method, [string]$UAMI ) $automationAccount = "xAutomationAccount" # Ensures you do not inherit an AzContext in your runbook $null = Disable-AzContextAutosave -Scope Process # Connect using a Managed Service Identity try { $AzureConnection = (Connect-AzAccount -Identity).context } catch { Write-Output "There is no system-assigned user identity. Aborting." exit } # set and store context $AzureContext = Set-AzContext -SubscriptionName $AzureConnection.Subscription -DefaultProfile $AzureConnection if ($Method -eq "SA") { Write-Output "Using system-assigned managed identity" } elseif ($Method -eq "UA") { Write-Output "Using user-assigned managed identity" # Connects using the Managed Service Identity of the named user-assigned managed identity $identity = Get-AzUserAssignedIdentity -ResourceGroupName $ResourceGroup -Name $UAMI -DefaultProfile $AzureContext # validates assignment only, not perms $AzAutomationAccount = Get-AzAutomationAccount -ResourceGroupName $ResourceGroup -Name $automationAccount -DefaultProfile $AzureContext if ($AzAutomationAccount.Identity.UserAssignedIdentities.Values.PrincipalId.Contains($identity.PrincipalId)) { $AzureConnection = (Connect-AzAccount -Identity -AccountId $identity.ClientId).context # set and store context $AzureContext = Set-AzContext -SubscriptionName $AzureConnection.Subscription -DefaultProfile $AzureConnection } else { Write-Output "Invalid or unassigned user-assigned managed identity" exit } } else { Write-Output "Invalid method. Choose UA or SA." exit } # Get current state of VM $status = (Get-AzVM -ResourceGroupName $ResourceGroup -Name $VMName -Status -DefaultProfile $AzureContext).Statuses[1].Code Write-Output "`r`n Beginning VM status: $status `r`n" # Start or stop VM based on current state if ($status -eq "Powerstate/deallocated") { Start-AzVM -Name $VMName -ResourceGroupName $ResourceGroup -DefaultProfile $AzureContext } elseif ($status -eq "Powerstate/running") { Stop-AzVM -Name $VMName -ResourceGroupName $ResourceGroup -DefaultProfile $AzureContext -Force } # Get new state of VM $status = (Get-AzVM -ResourceGroupName $ResourceGroup -Name $VMName -Status -DefaultProfile $AzureContext).Statuses[1].Code Write-Output "`r`n Ending VM status: $status `r`n `r`n" Write-Output "Account ID of current context: " $AzureContext.Account.Id
В редакторе измените значение для переменной
$automationAccount
в строке 8, если необходимо.Щелкните Сохранить и Тестовая область.
Заполните параметры
RESOURCEGROUP
иVMNAME
соответствующими значениями. ВведитеSA
для параметраMETHOD
иxUAMI
для параметраUAMI
. Runbook попытается изменить состояние работы указанной виртуальной машины, используя управляемое удостоверение, назначаемое системой.Выберите Пуск. После завершения работы runbook возвращает примерно такие выходные данные:
Beginning VM status: PowerState/deallocated OperationId : 5b707401-f415-4268-9b43-be1f73ddc54b Status : Succeeded StartTime : 8/3/2021 10:52:09 PM EndTime : 8/3/2021 10:52:50 PM Error : Name : Ending VM status: PowerState/running Account ID of current context: MSI@50342
Для параметра
METHOD
укажите новое значениеUA
.Выберите Пуск. Runbook попытается изменить состояние работы указанной виртуальной машины, используя управляемое удостоверение, назначаемое пользователем. После завершения работы runbook возвращает примерно такие выходные данные:
Using user-assigned managed identity Beginning VM status: PowerState/running OperationId : 679fcadf-d0b9-406a-9282-66bc211a9fbf Status : Succeeded StartTime : 8/3/2021 11:06:03 PM EndTime : 8/3/2021 11:06:49 PM Error : Name : Ending VM status: PowerState/deallocated Account ID of current context: 9034f5d3-c46d-44d4-afd6-c78aeab837ea
Очистка ресурсов
Чтобы удалить все ресурсы, которые больше не нужны, выполните следующий модуль Runbook:
#Remove runbook
Remove-AzAutomationRunbook `
-ResourceGroupName $resourceGroup `
-AutomationAccountName $automationAccount `
-Name "miTesting" `
-Force
# Remove role assignments
Remove-AzRoleAssignment `
-ObjectId $UAMI `
-ResourceGroupName $resourceGroup `
-RoleDefinitionName $role1
Remove-AzRoleAssignment `
-ObjectId $SAMI `
-ResourceGroupName $resourceGroup `
-RoleDefinitionName $role2
Remove-AzRoleAssignment `
-ObjectId $SAMI `
-ResourceGroupName $resourceGroup `
-RoleDefinitionName $role1
Следующие шаги
В этом руководстве вы создали модуль Runbook PowerShell в служба автоматизации Azure, который использовал управляемое удостоверение, а не учетную запись запуска от имени для взаимодействия с ресурсами. Дополнительные сведения о runbook рабочих процессов PowerShell см. в следующей статье: