Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu öğretici, Azure Otomasyonu'nda kaynaklarla etkileşim kurmak için yönetilen kimlik kullanan bir PowerShell runbook'u oluşturma konusunda size yol gösterir. PowerShell runbook'ları Windows PowerShell'i temel alır. Microsoft Entra ID'den yönetilen kimlik, runbook'unuzun diğer Microsoft Entra korumalı kaynaklara kolayca erişmesini sağlar.
Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:
- Yönetilen kimliklere izinler atama
- PowerShell runbook’u oluşturma
Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.
Önkoşullar
Yönetilen kimliklere izin atamadan önce şu önkoşulları karşıladığınızdan emin olun:
- En az bir kullanıcı tarafından atanan yönetilen kimliğe sahip bir Azure Otomasyonu hesabı. Daha fazla bilgi için bkz. Azure Otomasyonu hesabı için kullanıcı tarafından atanan yönetilen kimliği kullanma.
- Az modülleri:
Az.Accounts,Az.Automation,Az.ManagedServiceIdentityveAz.ComputeOtomasyon hesabına aktarılır. Daha fazla bilgi için bkz. Az modüllerini içe aktarma. -
Makinenizde yüklü Olan 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çin komutunu çalıştırınInstall-Module -Name Az.ManagedServiceIdentity. - Azure sanal makinesi. Bu makineyi durdurup başlattığınızdan, bu bir üretim VM'si olmamalıdır.
- Otomasyon runbook'ları hakkında genel bir bilgi.
Yönetilen kimliklere izinler atama
Sanal makineyi durdurmalarına ve başlatmalarına izin vermek için yönetilen kimliklere izinler atayın.
Yönetilen kimliklere izin atamak için şu adımları izleyin:
Connect-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 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ı atamalı yönetilen kimlik için aynı rol ataması gerekir.
$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 kimlik için ek izinler
Get-AzUserAssignedIdentityGet-AzAutomationAccountgerekir.$role2 = "Reader" New-AzRoleAssignment ` -ObjectId $SAMI ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName $role2
PowerShell runbook’u oluşturma
Yönetilen kimliklerden herhangi biri tarafından yürütülmesine izin verecek bir runbook oluşturun. Runbook durdurulmuş bir VM'yi başlatır veya çalışan bir VM'yi durdurur.
PowerShell runbook'u oluşturmak için şu adımları izleyin:
Genel Bakış sayfasında, yeni deneyimde yoksa Çalışma Zamanı Ortamı deneyimini deneyin'i seçin.
İşlem Otomasyonu altında Runbook'lar'ı seçin.
Runbook oluştur seçeneğini seçin ve aşağıdakileri yapın:
- Runbook'u
miTestingolarak adlandırın. - Runbook türü açılan listesinden PowerShell'i seçin.
- Çalışma Zamanı Ortamı açılan listesinden var olan çalışma zamanı ortamını seçin veya Çalışma Zamanı PowerShell ve sürüm 7.4 ile çalıştırmak için yeni oluştur seçeneğini seçin.
- Uygun bir Açıklama girin.
- Runbook'u
Runbook'u oluşturmak için Oluştur'u seçin.
Runbook düzenleyicisine 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 $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.IdDüzenleyicide, 8. satırda değişkenin değerini gerektiği gibi düzeltin
$automationAccount.Kaydet'i ve ardından Test bölmesini seçin.
ve parametrelerini
RESOURCEGROUPVMNAMEuygun değerlerle doldurun. parametresi veSAMETHODparametresi içinxUAMIgirinUAMI. 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 çıktı aşağıdakine benzer görünmelidir:
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
METHODdeğerini olarakUAdeğiştirin.Başlat'ı seçin. Runbook, kullanıcı tarafından atanan adlandırılmış yönetilen kimliği kullanarak VM'nizin güç durumunu değiştirmeye çalışır. Runbook tamamlandıktan sonra çıktı aşağıdakine benzer görünmelidir:
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 olmayan kaynakları kaldırmak için aşağıdaki runbook'u ç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 kaynaklarla etkileşime geçmek için Farklı Çalıştır hesabı yerine yönetilen kimlik kullanan bir PowerShell runbook'u oluşturdunuz. PowerShell İş Akışı runbook'larına göz atın: