Menggunakan identitas terkelola yang ditetapkan pengguna untuk akun Azure Automation
Artikel ini menunjukkan cara menambahkan identitas terkelola yang ditetapkan pengguna untuk akun Azure Automation dan cara menggunakannya untuk mengakses sumber daya lainnya. Untuk informasi selengkapnya tentang cara kerja identitas terkelola dengan Azure Automation, lihat Identitas terkelola.
Catatan
Tidak dimungkinkan untuk menggunakan Identitas Terkelola yang Ditetapkan Pengguna pada Hybrid Runbook Worker ketika Identitas Terkelola (baik Sistem atau Pengguna yang ditetapkan) telah dibuat untuk Akun Automation. Jika Identitas Terkelola belum ditetapkan ke Akun Automation, maka dimungkinkan untuk menggunakan Sistem VM atau Identitas Terkelola yang Ditetapkan Pengguna pada Hybrid Runbook Worker yang merupakan Azure VM dengan identitas terkelola yang ditetapkan.
Jika Anda tidak memiliki langganan Azure, buat akun gratis sebelum Anda memulai.
Prasyarat
Akun Azure Automation. Untuk mendapatkan petunjuk, lihat Membuat akun Azure Automation.
Identitas terkelola yang ditetapkan pengguna dan sumber daya Azure target yang dikelola runbook Anda menggunakan identitas tersebut dapat berada di langganan Azure yang berbeda.
Versi terbaru modul Akun Azure. Saat ini adalah 2.2.8. (Lihat Az.Accounts untuk detail tentang versi ini.)
Sumber daya Azure yang ingin Anda akses dari runbook Otomatisasi Anda. Sumber daya ini harus memiliki peran yang ditentukan untuk identitas terkelola yang ditetapkan pengguna, yang membantu buku petunjuk Automasi mengautentikasi akses ke sumber daya. Untuk menambahkan peran, Anda harus menjadi pemilik sumber daya di penyewa Microsoft Entra yang sesuai.
Untuk menetapkan peran Azure, Anda harus memiliki
Microsoft.Authorization/roleAssignments/write
izin, seperti Administrator Akses Pengguna atau Pemilik.
Tambahkan identitas terkelola yang ditetapkan pengguna untuk akun Azure Automation
Anda dapat menambahkan identitas terkelola yang ditetapkan pengguna untuk akun Azure Automation menggunakan portal Microsoft Azure, PowerShell, Azure REST API, atau template 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-nilai di bawah ini dan kemudian jalankan"
$subscriptionID = "subscriptionID"
$resourceGroup = "resourceGroupName"
$automationAccount = "automationAccountName"
$userAssignedOne = "userAssignedIdentityOne"
$userAssignedTwo = "userAssignedIdentityTwo"
Tambahkan 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.
Pilih tab Ditetapkan pengguna, lalu pilih Tambahkan.
Pilih identitas terkelola yang ditetapkan pengguna yang ada, lalu pilih Tambahkan. Anda kemudian akan dikembalikan ke tab Ditetapkan pengguna.
Tambahkan menggunakan PowerShell
Gunakan cmdlet PowerShell Set-AzAutomationAccount untuk menambahkan identitas terkelola yang ditetapkan pengguna. Anda harus terlebih dahulu mempertimbangkan apakah ada identitas terkelola yang ditetapkan sistem yang ada. Contoh di bawah ini menambahkan dua identitas terkelola yang ditetapkan pengguna yang ada ke akun Automasi yang ada, dan akan menonaktifkan identitas terkelola yang ditetapkan sistem jika ada.
$output = Set-AzAutomationAccount `
-ResourceGroupName $resourceGroup `
-Name $automationAccount `
-AssignUserIdentity "/subscriptions/$subscriptionID/resourcegroups/$resourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$userAssignedOne", `
"/subscriptions/$subscriptionID/resourcegroups/$resourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$userAssignedTwo"
$output
Untuk mempertahankan identitas terkelola yang ditetapkan sistem yang ada, gunakan yang berikut ini:
$output = Set-AzAutomationAccount `
-ResourceGroupName $resourceGroup `
-Name $automationAccount `
-AssignUserIdentity "/subscriptions/$subscriptionID/resourcegroups/$resourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$userAssignedOne", `
"/subscriptions/$subscriptionID/resourcegroups/$resourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$userAssignedTwo" `
-AssignSystemIdentity
$output
Output akan terlihat mirip dengan contoh berikut:
Untuk output tambahan, jalankan: $output.identity | ConvertTo-Json
.
Tambahkan menggunakan REST API
Sintaks dan langkah-langkah contoh tersedia di bawah ini.
Sintaks
Sintaks isi contoh di bawah ini mengaktifkan identitas terkelola yang ditetapkan sistem jika belum diaktifkan dan menetapkan dua identitas terkelola yang ditetapkan pengguna yang ada ke akun Automasi yang ada.
PATCH
{
"identity": {
"type": "SystemAssigned, UserAssigned",
"userAssignedIdentities": {
"/subscriptions/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0/resourceGroups/resource-group-name/providers/Microsoft.ManagedIdentity/userAssignedIdentities/firstIdentity": {},
"/subscriptions/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0/resourceGroups/resource-group-name/providers/Microsoft.ManagedIdentity/userAssignedIdentities/secondIdentity": {}
}
}
}
Sintaks API nya adalah sebagai berikut:
https://management.azure.com/subscriptions/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0/resourceGroups/resource-group-name/providers/Microsoft.Automation/automationAccounts/automation-account-name?api-version=2020-01-13-preview
Contoh
Lakukan langkah berikut.
Revisi sintaks isi di atas menjadi file bernama
body_ua.json
. Simpan file di mesin lokal Anda atau di akun penyimpanan Azure.Revisi nilai variabel di bawah ini dan kemudian jalankan.
$file = "path\body_ua.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:
{ "type": "SystemAssigned, UserAssigned", "principalId": "ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0", "tenantId": "ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0", "userAssignedIdentities": { "/subscriptions/ContosoID/resourcegroups/ContosoLab/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ContosoUAMI1": { "PrincipalId": "ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0", "ClientId": "00001111-aaaa-2222-bbbb-3333cccc4444" }, "/subscriptions/ContosoID/resourcegroups/ContosoLab/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ContosoUAMI2": { "PrincipalId": "ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0", "ClientId": "00001111-aaaa-2222-bbbb-3333cccc4444" } } }
Tambahkan menggunakan template ARM
Sintaks dan langkah-langkah contoh tersedia di bawah ini.
Sintaks templat
Contoh sintaks template di bawah ini mengaktifkan identitas terkelola yang ditetapkan sistem jika belum diaktifkan dan menetapkan dua identitas terkelola yang ditetapkan pengguna yang ada ke akun Automasi yang ada.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"automationAccountName": {
"defaultValue": "YourAutomationAccount",
"type": "String",
"metadata": {
"description": "Automation account name"
}
},
"userAssignedOne": {
"defaultValue": "userAssignedOne",
"type": "String",
"metadata": {
"description": "User-assigned managed identity"
}
},
"userAssignedTwo": {
"defaultValue": "userAssignedTwo",
"type": "String",
"metadata": {
"description": "User-assigned managed identity"
}
}
},
"resources": [
{
"type": "Microsoft.Automation/automationAccounts",
"apiVersion": "2020-01-13-preview",
"name": "[parameters('automationAccountName')]",
"location": "[resourceGroup().location]",
"identity": {
"type": "SystemAssigned, UserAssigned",
"userAssignedIdentities": {
"[resourceID('Microsoft.ManagedIdentity/userAssignedIdentities/',parameters('userAssignedOne'))]": {},
"[resourceID('Microsoft.ManagedIdentity/userAssignedIdentities/',parameters('userAssignedTwo'))]": {}
}
},
"properties": {
"sku": {
"name": "Basic"
},
"encryption": {
"keySource": "Microsoft.Automation",
"identity": {}
}
}
}
]
}
Contoh
Lakukan langkah berikut.
Salin dan tempel kerangka tersebut ke dalam berkas bernama
template_ua.json
. Simpan file di mesin lokal Anda atau di akun penyimpanan Azure.Revisi nilai variabel di bawah ini dan kemudian jalankan.
$templateFile = "path\template_ua.json"
Gunakan cmdlet PowerShell New-AzResourceGroupDeployment untuk menyebarkan template.
New-AzResourceGroupDeployment ` -Name "UserAssignedDeployment" ` -ResourceGroupName $resourceGroup ` -TemplateFile $templateFile ` -automationAccountName $automationAccount ` -userAssignedOne $userAssignedOne ` -userAssignedTwo $userAssignedTwo
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 pengguna
Akun otomatisasi dapat menggunakan identitas terkelola yang ditetapkan pengguna untuk mengambil token untuk mengakses sumber daya lain yang dilindungi oleh Microsoft Entra ID, 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 dapat menggunakan identitas terkelola yang ditetapkan pengguna untuk autentikasi, siapkan akses untuk identitas tersebut di sumber daya Azure tempat Anda berencana menggunakan identitas tersebut. 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 Azure Automation hanya diperlukan untuk memulai atau menghentikan Azure VM, maka izin yang ditetapkan ke akun Run As atau identitas terkelola hanya untuk memulai atau menghentikan mesin virtual. Demikian pula, jika runbook dibaca dari penyimpanan gumpalan, maka tetapkan izin baca saja.
Contoh ini menggunakan Azure PowerShell untuk memperlihatkan cara menetapkan peran Kontributor dalam langganan ke sumber daya Azure target. Peran Kontributor digunakan sebagai contoh dan mungkin atau mungkin tidak diperlukan dalam kasus Anda. Atau, Anda juga dapat menetapkan peran ke sumber daya Azure target di portal Azure.
New-AzRoleAssignment `
-ObjectId <automation-Identity-object-id> `
-Scope "/subscriptions/<subscription-id>" `
-RoleDefinitionName "Contributor"
Memverifikasi penetapan peran ke identitas yang dikelola pengguna
Untuk memverifikasi peran pada identitas terkelola yang ditetapkan pengguna dari akun Automation, ikuti langkah berikut ini:
Masuk ke portal Azure.
Buka akun Automasi Anda.
Pada Pengaturan Akun, pilih Identitas, Pengguna yang ditetapkan.
Klik Nama identitas yang ditetapkan pengguna.
Jika peran sudah ditetapkan pada 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 saat, identitas terkelola akan diberi peran di cakupan yang dipilih.
Autentikasi akses dengan identitas terkelola yang ditetapkan pengguna
Setelah Anda mengaktifkan identitas terkelola yang ditetapkan pengguna untuk akun Automasi Anda dan memberikan akses identitas ke sumber daya target, Anda dapat menentukan identitas itu di runbook terhadap sumber daya yang mendukung identitas terkelola. Untuk dukungan identitas, gunakan Connect-AzAccount Az cmdlet.
# Ensures you do not inherit an AzContext in your runbook
Disable-AzContextAutosave -Scope Process
# Connect to Azure with user-assigned managed identity
$AzureContext = (Connect-AzAccount -Identity -AccountId <user-assigned-identity-ClientId>).context
# set and store context
$AzureContext = Set-AzContext -SubscriptionName $AzureContext.Subscription -DefaultProfile $AzureContext
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 Pos harus
application/x-www-form-urlencoded
.
Dapatkan token Akses untuk identitas terkelola yang ditetapkan pengguna menggunakan HTTP Get
$resource= "?resource=https://management.azure.com/"
$client_id="&client_id=<ClientId of USI>"
$url = $env:IDENTITY_ENDPOINT + $resource + $client_id
$Headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$Headers.Add("Metadata", "True")
$headers.Add("X-IDENTITY-HEADER", $env:IDENTITY_HEADER)
$accessToken = Invoke-RestMethod -Uri $url -Method 'GET' -Headers $Headers
Write-Output $accessToken.access_token
Dapatkan token Akses untuk identitas terkelola yang ditetapkan pengguna menggunakan HTTP Post
$url = $env:IDENTITY_ENDPOINT
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Metadata", "True")
$headers.Add("X-IDENTITY-HEADER", $env:IDENTITY_HEADER)
$body = @{'resource'='https://management.azure.com/'
'client_id'='<ClientId of USI>'}
$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 pengguna di Azure PowerShell
Write-Output "Connecting to azure via Connect-AzAccount -Identity -AccountId <ClientId of USI>"
Connect-AzAccount -Identity -AccountId <ClientId of USI>
Write-Output "Successfully connected with Automation account's Managed Identity"
Write-Output "Trying to fetch value from key vault using User Assigned Managed identity. 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 pengguna di Python Runbook
#!/usr/bin/env python3
import os
import requests
resource = "?resource=https://management.azure.com/"
client_id = "&client_id=<ClientId of USI>"
endPoint = os.getenv('IDENTITY_ENDPOINT')+ resource +client_id
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)
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.