Öğretici: Yönetilen kimlik kullanarak Otomasyon PowerShell runbook'ı oluşturma
Bu öğretici, kaynaklarla etkileşim kurmak için Farklı Çalıştır hesabı Azure Otomasyonu yönetilen kimlik kullanan bir PowerShell runbook'ları oluşturma konusunda size yol sağlar. PowerShell runbook'ları, Windows PowerShell. Azure Active Directory (Azure AD) tarafından yönetilen kimlik, runbook' un diğer Azure AD korumalı kaynaklara kolayca erişmesi için izin verir.
Bu öğreticide şunların nasıl yapıldığını öğreneceksiniz:
- Yönetilen kimliklere izin atama
- PowerShell runbook’u oluşturma
Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.
Önkoşullar
- Kullanıcı Azure Otomasyonu yönetilen kimliği olan bir hesap. Daha fazla bilgi için bkz. Bir hesap için kullanıcı tarafından atanan yönetilen Azure Otomasyonu kullanma.
- Az modülleri:
Az.Accounts, , ve Otomasyon hesabınaAz.AutomationAz.ManagedServiceIdentityAz.Computeaktarılır. Daha fazla bilgi için bkz. Az modüllerini içeri aktarma. - Makinenize yüklenmiş Azure Az PowerShell modülü. Yüklemek veya yükseltmek için bkz. Azure Az PowerShell modülünü yükleme.
Az.ManagedServiceIdentitybir önizleme modülüdür ve Az modülünün bir parçası olarak yüklenmez. Yüklemek içinInstall-Module -Name Az.ManagedServiceIdentityçalıştırın. - Bir Azure sanal makinesi. Bu makineyi durdurarak başlatan bir üretim VM'i olmaması gerekir.
- Otomasyon runbook'ları hakkında genel bilgi.
Yönetilen kimliklere izin atama
Yönetilen kimliklere izinleri ataarak sanal makineyi durdurmalarına ve başlatmalarına izin verin.
Bağlan-AzAccount cmdlet'ini kullanarak Azure'da etkileşimli olarak oturum açın ve yönergeleri izleyin.
# 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>Aşağıdaki değişkenler için uygun bir değer girin ve ardından betiği yürütün.
$resourceGroup = "resourceGroupName" # These values are used in this tutorial $automationAccount = "xAutomationAccount" $userAssignedManagedIdentity = "xUAMI"Sistem tarafından atanan yönetilen kimliğe rol atamak için New-AzRoleAssignment PowerShell cmdlet'ini kullanın.
$role1 = "DevTest Labs User" $SAMI = (Get-AzAutomationAccount -ResourceGroupName $resourceGroup -Name $automationAccount).Identity.PrincipalId New-AzRoleAssignment ` -ObjectId $SAMI ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName $role1Kullanıcı tarafından atanan yönetilen kimlik için aynı rol ataması gereklidir
$UAMI = (Get-AzUserAssignedIdentity -ResourceGroupName $resourceGroup -Name $userAssignedManagedIdentity).PrincipalId New-AzRoleAssignment ` -ObjectId $UAMI ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName $role1Bu öğreticide kullanılan cmdlet'leri yürütmek için sistem tarafından atanan yönetilen
Get-AzUserAssignedIdentityGet-AzAutomationAccountkimlik için ek izinler gerekir.$role2 = "Reader" New-AzRoleAssignment ` -ObjectId $SAMI ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName $role2
PowerShell runbook’u oluşturma
Yönetilen kimlikle yürütmeye izin verecek bir runbook oluşturun. Runbook durdurulmuş bir VM'yi veya çalışan bir VM'yi durdurur.
Azure portal'daoturum açın ve Otomasyon hesabınıza gidin.
İşlem Otomasyonu altında Runbook'lar'ı seçin.
Runbook oluştur'a seçin.
- Runbook'a adını
miTestinggirin. - Runbook türü açılan listesinden PowerShell'i seçin.
- Çalışma zamanı sürümü açılan listesinden 7.1 (önizleme) veya 5.1'i seçin.
- Uygun bir Açıklama girin.
- Runbook'a adını
Runbook oluşturmak için Oluştur’a tıklayın.
Runbook düzenleyicisinde aşağıdaki kodu yapıştırın:
Param( [string]$resourceGroup, [string]$VMName, [string]$method, [string]$UAMI ) $automationAccount = "xAutomationAccount" # Ensures you do not inherit an AzContext in your runbook Disable-AzContextAutosave -Scope Process | Out-Null # Connect using a Managed Service Identity try { $AzureContext = (Connect-AzAccount -Identity).context } catch{ Write-Output "There is no system-assigned user identity. Aborting."; exit } # set and store context $AzureContext = Set-AzContext -SubscriptionName $AzureContext.Subscription ` -DefaultProfile $AzureContext 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 if ((Get-AzAutomationAccount -ResourceGroupName $resourceGroup ` -Name $automationAccount ` -DefaultProfile $AzureContext).Identity.UserAssignedIdentities.Values.PrincipalId.Contains($identity.PrincipalId)) { $AzureContext = (Connect-AzAccount -Identity -AccountId $identity.ClientId).context # set and store context $AzureContext = Set-AzContext -SubscriptionName $AzureContext.Subscription -DefaultProfile $AzureContext } 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.IdDüzenleyicide, 8. satırda değişkenin değerini gereken
$automationAccountşekilde düzeltin.Kaydet'i ve ardından Test bölmesi'ni seçin.
ve parametrelerini uygun
RESOURCEGROUPVMNAMEdeğerlerle doldurmak. parametresiSAve parametresi içinMETHODxUAMIUAMIgirin. Runbook, sistem tarafından atanan yönetilen kimliği kullanarak VM'nizin güç durumunu değiştirmeye çalışır.Başlat'ı seçin. Runbook tamamlandıktan sonra çıkış aşağıdakine benzer şekilde görünüyor olur:
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@50342parametresinin değerini
METHODolarakUAdeğiştirme.Başlat'ı seçin. Runbook, adlandırılmış kullanıcı tarafından atanan yönetilen kimliği kullanarak VM'nizin güç durumunu değiştirmeye çalışır. Runbook tamamlandıktan sonra çıkış aşağıdakine benzer şekilde görünüyor olur:
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
Kaynakları Temizleme
Artık gerekli olan kaynakları kaldırmak için aşağıdaki runbook'ları çalıştırın.
#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
Sonraki adımlar
Bu öğreticide, Azure Otomasyonu etkileşim kurmak için Farklı Çalıştır hesabı yerineyönetilenkimlik kullanarak bir PowerShell runbook'ları oluşturdunız. PowerShell İş Akışı runbook'larını görmek için bkz: