チュートリアル: マネージド ID を使用して Automation PowerShell Runbook を作成する
このチュートリアルでは、Azure Automation で PowerShell Runbook を作成し、リソースの操作に実行アカウントではなく、マネージド ID を使用する方法を説明します。 PowerShell Runbook は、Windows PowerShell に基づきます。 Microsoft Entra ID のマネージド ID により、Runbook は、Microsoft Entra で保護された他のリソースに簡単にアクセスすることができます。
このチュートリアルでは、次の作業を行う方法について説明します。
- マネージド ID にアクセス許可を割り当てる
- PowerShell Runbook を作成する
Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。
前提条件
- 少なくとも 1 つのユーザー割り当てマネージド ID を持つ Azure Automation アカウント。 詳細については、「Azure Automation アカウントのユーザー割り当てマネージド ID を使用する」を参照してください。
- Az モジュール:
Az.Accounts
、Az.Automation
、Az.ManagedServiceIdentity
、およびAz.Compute
が Automation アカウントにインポートされている。 詳細については、「Az モジュールをインポートする」を参照してください。 - Azure Az PowerShell モジュールがマシンにインストールされている。 インストールまたはアップグレードするには、Azure Az PowerShell モジュールをインストールする方法に関するページを参照してください。
Az.ManagedServiceIdentity
はプレビュー モジュールであり、Az モジュールの一部としてインストールされません。 インストールするには、Install-Module -Name Az.ManagedServiceIdentity
を実行します。 - Azure 仮想マシン。 マシンを停止して起動するので、運用 VM は使用しないでください。
- Automation Runbook に関する一般的な理解。
マネージド ID にアクセス許可を割り当てる
マネージド ID に、仮想マシンの停止と起動を許可するアクセス許可を割り当てます。
Connect-AzAccount コマンドレットを使用して、Azure に対話的にサインインし、指示に従います。
# 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 を使用して、システム割り当てマネージド ID にロールを割り当てます。
$role1 = "DevTest Labs User" $SAMI = (Get-AzAutomationAccount -ResourceGroupName $resourceGroup -Name $automationAccount).Identity.PrincipalId New-AzRoleAssignment ` -ObjectId $SAMI ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName $role1
ユーザー割り当てマネージド ID にも同じロールの割り当てが必要です
$UAMI = (Get-AzUserAssignedIdentity -ResourceGroupName $resourceGroup -Name $userAssignedManagedIdentity).PrincipalId New-AzRoleAssignment ` -ObjectId $UAMI ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName $role1
このチュートリアルで使用するコマンドレット
Get-AzUserAssignedIdentity
とGet-AzAutomationAccount
を実行するには、システム割り当てマネージド ID に追加のアクセス許可が必要です。$role2 = "Reader" New-AzRoleAssignment ` -ObjectId $SAMI ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName $role2
初めての PowerShell Runbook
どちらのマネージド ID でも実行可能な Runbook を作成します。 この Runbook は、停止した VM を起動したり、実行中の VM を停止したりします。
Azure portal にサインインし、お使いの Automation アカウントに移動します。
[プロセス オートメーション] の [Runbook] を選択します。
[Runbook の作成] を選択します。
- Runbook に
miTesting
という名前を付けます。 - [Runbook の種類] ドロップダウンから、[PowerShell] を選択します。
- [ランタイム バージョン] ドロップダウンから、[7.1] (プレビュー) または [5.1] を選択します。
- 該当する [説明] を入力します。
- Runbook に
[作成] をクリックして、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
エディターの 8 行目で、必要に応じて
$automationAccount
変数の値を変更します。[保存] 、 [テスト] ペインの順に選択します。
パラメーター
RESOURCEGROUP
とVMNAME
に適切な値を設定します。METHOD
パラメーターにSA
を、UAMI
パラメーターにxUAMI
を入力します。 この Runbook は、システム割り当てマネージド ID を使用して VM の電源状態の変更を試行します。[スタート] を選択します。 この 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 は、ユーザー割り当てマネージド ID を使用して VM の電源状態の変更を試行します。 この 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
次の手順
このチュートリアルでは、Azure Automation で PowerShell Runbook を作成し、リソースの操作に実行アカウントではなく、マネージド ID を使用しました。 PowerShell ワークフロー Runbook については、以下を参照してください。