Mengaktifkan identitas terkelola yang ditetapkan sistem untuk akun Azure Automation
Topik ini memperlihatkan kepada Anda cara membuat identitas terkelola untuk akun Azure Automation dan cara menggunakannya untuk mengakses sumber daya lain. Untuk informasi selengkapnya tentang cara kerja identitas terkelola dengan Azure Automation, lihat Identitas terkelola.
Jika Anda tidak memiliki langganan Azure, buat akun gratis sebelum Anda memulai.
Prasyarat
Akun Azure Automation. Untuk mendapatkan petunjuk, lihat Membuat akun Azure Automation.
Versi terbaru dari modul Az PowerShell Az.Accounts, Az.Resources, Az.Automation, Az.KeyVault.
Sumber daya Azure yang ingin Anda akses dari runbook Otomatisasi Anda. Sumber daya ini perlu memiliki peran yang ditentukan untuk identitas terkelola, yang membantu runbook Otomatisasi mengautentikasi akses ke sumber daya. Untuk menambahkan peran, Anda harus menjadi pemilik sumber daya di penyewa Microsoft Entra yang sesuai.
Jika Anda ingin menjalankan pekerjaan hibrid menggunakan identitas terkelola, perbarui Hybrid Runbook Worker berbasis agen ke versi terbaru. Tidak ada persyaratan versi minimum untuk Hybrid Runbook Worker berbasis ekstensi, dan semua versi akan berfungsi. Versi minimum yang diperlukan untuk Hybrid Worker berbasis agen adalah:
- Windows Hybrid Runbook Worker: versi 7.3.1125.0
- Linux Hybrid Runbook Worker: versi 1.7.4.0
Untuk memeriksa versi:
- Windows Hybrid Runbook Worker: Buka jalur penginstalan -
C:\ProgramFiles\Microsoft Monitoring Agent\Agent\AzureAutomation\.
dan folder Azure Automation berisi sub-folder dengan nomor versi sebagai nama sub-folder. - Linux Hybrid Runbook Worker: Buka jalur -
vi/opt/microsoft/omsconfig/modules/nxOMSAutomationWorker/VERSION.
dan FILE VERSION memiliki nomor versi Hybrid Worker.
Untuk menetapkan peran Azure, Anda harus memiliki
Microsoft.Authorization/roleAssignments/write
izin seperti Administrator Akses Pengguna atau Pemilik.
Mengaktifkan identitas terkelola yang ditetapkan sistem untuk akun Azure Automation
Setelah diaktifkan, properti berikut akan ditetapkan ke identitas terkelola yang ditetapkan sistem.
Properti (JSON) | Nilai | Deskripsi |
---|---|---|
principalid | <principal-ID> | Pengidentifikasi Unik Global (GUID) dari objek perwakilan layanan untuk identitas terkelola yang ditetapkan sistem yang mewakili akun Automation Anda di penyewa Microsoft Entra. GUID ini terkadang muncul sebagai "ID objek" atau objectID. |
tenantid | <Azure-AD-tenant-ID> | Pengidentifikasi Unik Global (GUID) yang mewakili penyewa Microsoft Entra tempat akun Automation sekarang menjadi anggota. Di dalam penyewa Microsoft Entra, perwakilan layanan memiliki nama yang sama dengan akun Automation. |
Anda dapat mengaktifkan identitas terkelola yang ditetapkan sistem untuk akun Azure Automation menggunakan portal Microsoft Azure, PowerShell, API Azure REST, atau templat ARM. Untuk contoh yang melibatkan PowerShell, pertama-tama masuk ke Azure secara interaktif menggunakan cmdlet Connect-AzAccount dan ikuti instruksi.
# 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>"
Kemudian inisialisasi satu set variabel yang akan digunakan di seluruh contoh. Revisi nilai di bawah ini dan kemudian jalankan.
$subscriptionID = "subscriptionID"
$resourceGroup = "resourceGroupName"
$automationAccount = "automationAccountName"
Penting
Identitas tingkat akun Azure Automation yang baru mengambil alir semua identitas yang ditetapkan sistem tingkat mesin virtual sebelumnya yang dijelaskan dalam Menggunakan autentikasi runbook dengan identitas terkelola. Jika Anda menjalankan pekerjaan hibrid di Azure VM yang menggunakan identitas yang ditetapkan sistem VM untuk mengakses sumber daya runbook, maka identitas akun Otomatisasi akan digunakan untuk pekerjaan hibrid. Ini berarti eksekusi pekerjaan yang ada mungkin terpengaruh jika Anda telah menggunakan fitur Kunci yang Dikelola Pelanggan (CMK) dari akun Otomatisasi Anda.
Jika Anda ingin terus menggunakan identitas terkelola VM, Anda tidak boleh mengaktifkan identitas tingkat akun Otomatisasi. Jika sudah mengaktifkannya, Anda dapat menonaktifkan identitas terkelola yang ditetapkan sistem akun Azure Automation. Lihat Menonaktifkan identitas terkelola akun Azure Automation Anda.
Mengaktifkan menggunakan portal Microsoft Azure
Lakukan langkah-langkah berikut:
Masuk ke portal Azure.
Di portal Microsoft Azure, buka akun Automation Anda.
Pada Pengaturan Akun, harap pilih Identitas.
Atur opsi Sistem yang ditetapkan ke Aktif dan tekan Simpan. Bila diminta untuk mengonfirmasi, pilih Ya.
Akun Automation Anda sekarang dapat menggunakan identitas yang ditetapkan sistem, yang terdaftar dengan ID Microsoft Entra dan diwakili oleh ID objek.
Aktifkan menggunakan PowerShell
Gunakan cmdlet PowerShell Set-AzAutomationAccount untuk mengaktifkan identitas terkelola yang ditetapkan sistem.
$output = Set-AzAutomationAccount `
-ResourceGroupName $resourceGroup `
-Name $automationAccount `
-AssignSystemIdentity
$output
Output akan terlihat mirip dengan contoh berikut:
Untuk output tambahan, ubah contoh untuk menentukan: $output.identity | ConvertTo-Json
.
Aktifkan menggunakan REST API
Sintaks dan langkah-langkah contoh tersedia di bawah ini.
Sintaks
Sintaks bodi di bawah ini memungkinkan identitas terkelola yang ditetapkan sistem ke akun Azure Automation yang ada menggunakan metode HTTP PATCH. Namun, sintaks ini akan menghapus identitas terkelola yang ditetapkan pengguna yang ada yang terkait dengan akun Azure Automation.
{
"identity": {
"type": "SystemAssigned"
}
}
Jika ada beberapa identitas yang ditetapkan pengguna yang didefinisikan, untuk mempertahankannya dan hanya menghapus identitas yang ditetapkan sistem, Anda perlu menentukan setiap identitas yang ditetapkan pengguna menggunakan daftar yang dibatasi koma. Contoh di bawah ini menggunakan metode HTTP PATCH.
{
"identity" : {
"type": "SystemAssigned, UserAssigned",
"userAssignedIdentities": {
"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/resourceGroupName/providers/Microsoft.ManagedIdentity/userAssignedIdentities/cmkID": {},
"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/resourceGroupName/providers/Microsoft.ManagedIdentity/userAssignedIdentities/cmkID2": {}
}
}
}
Sintaks API nya adalah sebagai berikut:
PATCH https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/resource-group-name/providers/Microsoft.Automation/automationAccounts/automation-account-name?api-version=2020-01-13-preview
Contoh
Lakukan langkah berikut.
Salin dan tempel sintaks bodi ke dalam file bernama
body_sa.json
. Simpan file di mesin lokal Anda atau di akun penyimpanan Azure.Perbarui nilai variabel di bawah ini lalu jalankan.
$file = "path\body_sa.json"
Contoh ini menggunakan cmdlet PowerShell Invoke-RestMethod untuk mengirim permintaan PATCH ke akun Automation Anda.
# build URI $URI = "https://management.azure.com/subscriptions/$subscriptionID/resourceGroups/$resourceGroup/providers/Microsoft.Automation/automationAccounts/$automationAccount`?api-version=2020-01-13-preview" # build body $body = Get-Content $file # obtain access token $azContext = Get-AzContext $azProfile = [Microsoft.Azure.Commands.Common.Authentication.Abstractions.AzureRmProfileProvider]::Instance.Profile $profileClient = New-Object -TypeName Microsoft.Azure.Commands.ResourceManager.Common.RMProfileClient -ArgumentList ($azProfile) $token = $profileClient.AcquireAccessToken($azContext.Subscription.TenantId) $authHeader = @{ 'Content-Type'='application/json' 'Authorization'='Bearer ' + $token.AccessToken } # Invoke the REST API $response = Invoke-RestMethod -Uri $URI -Method PATCH -Headers $authHeader -Body $body # Review output $response.identity | ConvertTo-Json
Output akan terlihat mirip dengan contoh berikut:
{ "PrincipalId": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", "TenantId": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb", "Type": 0, "UserAssignedIdentities": null }
Mengaktifkan menggunakan templat ARM
Sintaks dan langkah-langkah contoh tersedia di bawah ini.
Sintaks templat
Sintaks templat sampel di bawah ini mengaktifkan identitas terkelola yang ditetapkan sistem ke akun Azure Automation yang ada. Namun, sintaks ini akan menghapus identitas terkelola yang ditetapkan pengguna yang ada yang terkait dengan akun Azure Automation.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Automation/automationAccounts",
"apiVersion": "2020-01-13-preview",
"name": "yourAutomationAccount",
"location": "[resourceGroup().location]",
"identity": {
"type": "SystemAssigned"
},
"properties": {
"sku": {
"name": "Basic"
}
}
}
]
}
Contoh
Lakukan langkah berikut.
Revisi sintaks templat di atas untuk menggunakan akun Azure Automation Anda dan simpan ke file bernama
template_sa.json
.Perbarui nilai variabel di bawah ini lalu jalankan.
$templateFile = "path\template_sa.json"
Gunakan cmdlet PowerShell New-AzResourceGroupDeployment untuk menyebarkan template.
New-AzResourceGroupDeployment ` -Name "SystemAssignedDeployment" ` -ResourceGroupName $resourceGroup ` -TemplateFile $templateFile
Perintah tidak akan menghasilkan output; namun, Anda dapat menggunakan kode di bawah ini untuk memverifikasi:
(Get-AzAutomationAccount ` -ResourceGroupName $resourceGroup ` -Name $automationAccount).Identity | ConvertTo-Json
Outputnya akan terlihat mirip dengan output yang ditunjukkan untuk contoh REST API, di atas.
Menetapkan peran ke identitas terkelola yang ditetapkan sistem
Akun Automation dapat menggunakan identitas terkelola yang ditetapkan sistem untuk mendapatkan token guna mengakses sumber daya lain yang dilindungi oleh ID Microsoft Entra, seperti Azure Key Vault. Token ini tidak mewakili pengguna aplikasi tertentu. Sebaliknya, mereka mewakili aplikasi yang mengakses sumber daya. Dalam hal ini, misalnya, token mewakili akun Otomatisasi.
Sebelum Anda bisa menggunakan identitas terkelola yang ditetapkan sistem untuk autentikasi, siapkan akses untuk identitas tersebut di sumber daya Azure tempat Anda berencana menggunakan identitas. Untuk menyelesaikan tugas ini, tetapkan peran yang sesuai untuk identitas tersebut pada sumber daya Azure target.
Ikuti prinsip hak istimewa paling rendah dan dengan hati-hati tetapkan izin yang hanya diperlukan untuk menjalankan runbook Anda. Misalnya, jika akun Otomasi hanya diperlukan untuk memulai atau menghentikan mesin virtual Azure, maka izin yang ditetapkan ke akun Run As atau identitas terkelola hanya perlu untuk memulai atau menghentikan mesin virtual. Demikian pula, jika runbook sedang membaca dari penyimpanan blob, maka tetapkan izin baca-saja.
Contoh berikut menggunakan Azure PowerShell untuk memperlihatkan cara menetapkan peran Kontributor dalam langganan ke sumber daya Azure target. Peran Kontributor digunakan sebagai contoh, dan mungkin diperlukan dalam kasus Anda atau tidak.
New-AzRoleAssignment `
-ObjectId <automation-Identity-object-id> `
-Scope "/subscriptions/<subscription-id>" `
-RoleDefinitionName "Contributor"
Memverifikasi penetapan peran ke identitas yang dikelola sistem
Untuk memverifikasi peran ke identitas terkelola yang ditetapkan sistem dari akun Automation, harap ikuti langkah berikut ini:
Masuk ke portal Azure.
Buka akun Automasi Anda.
Pada Pengaturan Akun, harap pilih Identitas.
Di Izin, klik Penetapan peran Azure.
Jika peran telah ditetapkan ke identitas terkelola yang ditetapkan sistem yang dipilih, Anda akan melihat daftar penetapan peran. Daftar ini mencakup semua penetapan peran yang Anda dapat baca.
Untuk mengubah langganan, klik daftar drop-down Langganan dan pilih langganan yang sesuai.
Klik Tambahkan penetapan peran (Pratinjau)
Di daftar drop-down, pilih kumpulan sumber daya yang diterapkan penetapan peran - Langganan, Grup sumber daya, Peran, dan Cakupan.
Jika Anda tidak memiliki penetapan peran, Anda dapat melihat izin tulis untuk cakupan yang dipilih sebagai pesan sebaris.Di daftar drop-down Peran, pilih peran sebagai Kontributor Komputer Virtual.
Klik Simpan.
Setelah beberapa menit, identitas terkelola diberi peran pada cakupan yang dipilih.
Mengautentikasi akses dengan identitas terkelola yang ditetapkan sistem
Setelah mengaktifkan identitas terkelola untuk akun Otomatisasi Anda dan memberikan akses identitas ke sumber daya target, Anda dapat menentukan identitas tersebut dalam runbook terhadap sumber daya yang mendukung identitas terkelola. Untuk dukungan identitas, gunakan cmdlet Connect-AzAccount
Az cmdlet. Lihat Connect-AzAccount di referensi PowerShell.
# Ensures you do not inherit an AzContext in your runbook
Disable-AzContextAutosave -Scope Process
# Connect to Azure with system-assigned managed identity
$AzureContext = (Connect-AzAccount -Identity).context
# Set and store context
$AzureContext = Set-AzContext -SubscriptionName $AzureContext.Subscription -DefaultProfile $AzureContext
Catatan
Jika organisasi Anda masih menggunakan cmdlet AzureRM yang tidak digunakan lagi, Anda bisa menggunakan Connect-AzureRMAccount -Identity
.
Hasilkan token akses tanpa menggunakan cmdlet Azure
Untuk Titik Akhir HTTP, pastikan hal berikut ini.
- Header metadata harus ada dan harus disetel ke "true".
- Sumber daya harus diteruskan bersama dengan permintaan, sebagai parameter kueri untuk permintaan GET dan sebagai data formulir untuk permintaan POST.
- Atur nilai variabel lingkungan IDENTITY_HEADER ke X-IDENTITY-HEADER.
- Jenis Konten untuk permintaan Post harus berupa 'application/x-www-form-urlencoded'.
Dapatkan Token akses untuk identitas terkelola yang ditetapkan sistem menggunakan HTTP Get
$resource= "?resource=https://management.azure.com/"
$url = $env:IDENTITY_ENDPOINT + $resource
$Headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$Headers.Add("X-IDENTITY-HEADER", $env:IDENTITY_HEADER)
$Headers.Add("Metadata", "True")
$accessToken = Invoke-RestMethod -Uri $url -Method 'GET' -Headers $Headers
Write-Output $accessToken.access_token
Dapatkan Token akses untuk identitas yang ditetapkan sistem menggunakan HTTP Post
$url = $env:IDENTITY_ENDPOINT
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("X-IDENTITY-HEADER", $env:IDENTITY_HEADER)
$headers.Add("Metadata", "True")
$body = @{resource='https://management.azure.com/' }
$accessToken = Invoke-RestMethod $url -Method 'POST' -Headers $headers -ContentType 'application/x-www-form-urlencoded' -Body $body
Write-Output $accessToken.access_token
Menggunakan identitas terkelola yang ditetapkan sistem untuk mengakses Azure Key Vault di Azure PowerShell
Untuk informasi selengkapnya, lihat Get-AzKeyVaultSecret.
Write-Output "Connecting to azure via Connect-AzAccount -Identity"
Connect-AzAccount -Identity
Write-Output "Successfully connected with Automation account's Managed Identity"
Write-Output "Trying to fetch value from key vault using MI. Make sure you have given correct access to Managed Identity"
$secret = Get-AzKeyVaultSecret -VaultName '<KVname>' -Name '<KeyName>'
$ssPtr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secret.SecretValue)
try {
$secretValueText = [System.Runtime.InteropServices.Marshal]::PtrToStringBSTR($ssPtr)
Write-Output $secretValueText
} finally {
[System.Runtime.InteropServices.Marshal]::ZeroFreeBSTR($ssPtr)
}
Menggunakan identitas terkelola yang ditetapkan sistem dalam Python Runbook
#!/usr/bin/env python3
import os
import requests
# printing environment variables
endPoint = os.getenv('IDENTITY_ENDPOINT')+"?resource=https://management.azure.com/"
identityHeader = os.getenv('IDENTITY_HEADER')
payload={}
headers = {
'X-IDENTITY-HEADER': identityHeader,
'Metadata': 'True'
}
response = requests.request("GET", endPoint, headers=headers, data=payload)
print(response.text)
Menggunakan identitas terkelola yang ditetapkan sistem untuk mengakses SQL Database
Untuk detail tentang penyediaan akses ke database Azure SQL, lihat Memprovisikan admin Microsoft Entra (SQL Database).
$queryParameter = "?resource=https://database.windows.net/"
$url = $env:IDENTITY_ENDPOINT + $queryParameter
$Headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$Headers.Add("X-IDENTITY-HEADER", $env:IDENTITY_HEADER)
$Headers.Add("Metadata", "True")
$content =[System.Text.Encoding]::Default.GetString((Invoke-WebRequest -UseBasicParsing -Uri $url -Method 'GET' -Headers $Headers).RawContentStream.ToArray()) | ConvertFrom-Json
$Token = $content.access_token
echo "The managed identities for Azure resources access token is $Token"
$SQLServerName = "<ServerName>" # Azure SQL logical server name
$DatabaseName = "<DBname>" # Azure SQL database name
Write-Host "Create SQL connection string"
$conn = New-Object System.Data.SqlClient.SQLConnection
$conn.ConnectionString = "Data Source=$SQLServerName.database.windows.net;Initial Catalog=$DatabaseName;Connect Timeout=30"
$conn.AccessToken = $Token
Write-host "Connect to database and execute SQL script"
$conn.Open()
$ddlstmt = "CREATE TABLE Person( PersonId INT IDENTITY PRIMARY KEY, FirstName NVARCHAR(128) NOT NULL)"
Write-host " "
Write-host "SQL DDL command"
$ddlstmt
$command = New-Object -TypeName System.Data.SqlClient.SqlCommand($ddlstmt, $conn)
Write-host "results"
$command.ExecuteNonQuery()
$conn.Close()
Bermigrasi dari akun Run As yang ada ke identitas terkelola
Azure Automation menyediakan autentikasi untuk mengelola sumber daya Azure Resource Manager atau sumber daya yang disebarkan pada model penyebaran klasik dengan akun Run As. Untuk beralih dari akun Run As ke identitas terkelola untuk autentikasi runbook Anda, ikuti langkah-langkah di bawah ini.
Aktifkan ditetapkan sistem, ditetapkan pengguna, atau kedua jenis identitas terkelola.
Berikan hak istimewa pada identitas terkelola yang sama dengan sumber daya Azure yang cocok dengan akun Run As yang ditetapkan.
Perbarui runbook Anda untuk mengautentikasi menggunakan identitas terkelola.
Ubah Runbooks untuk menggunakan identitas terkelola. Untuk dukungan identitas, gunakan cmdlet
Connect-AzAccount
Az cmdlet. Lihat Connect-AzAccount di referensi PowerShell.- Jika Anda menggunakan modul AzureRM, Perbarui
AzureRM.Profile
ke versi terbaru dan ganti menggunakanAdd-AzureRMAccount
cmdlet denganConnect-AzureRMAccount –Identity
. - Jika Anda menggunakan modul Az, perbarui ke versi terbaru dengan mengikuti langkah-langkah dalam artikel Memperbarui modul Azure PowerShell.
- Jika Anda menggunakan modul AzureRM, Perbarui
Langkah berikutnya
Jika runbook Anda tidak berhasil diselesaikan, tinjau Memecahkan masalah identitas terkelola Azure Automation.
Jika Anda perlu menonaktifkan identitas terkelola, lihat Menonaktifkan identitas terkelola akun Azure Automation Anda.
Untuk gambaran umum keamanan akun Azure Automation, lihat Gambaran umum autentikasi akun otomatisasi.