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:

  1. Masuk ke portal Azure.

  2. Di portal Microsoft Azure, buka akun Automation Anda.

  3. Pada Pengaturan Akun, harap pilih Identitas.

  4. Atur opsi Sistem yang ditetapkan ke Aktif dan tekan Simpan. Bila diminta untuk mengonfirmasi, pilih Ya.

    Enabling system-assigned identity in Azure portal.

    Akun Automation Anda sekarang dapat menggunakan identitas yang ditetapkan sistem, yang terdaftar dengan ID Microsoft Entra dan diwakili oleh ID objek.

    Managed identity object ID.

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:

Output from set-azautomationaccount command.

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.

  1. Salin dan tempel sintaks bodi ke dalam file bernama body_sa.json. Simpan file di mesin lokal Anda atau di akun penyimpanan Azure.

  2. Perbarui nilai variabel di bawah ini lalu jalankan.

    $file = "path\body_sa.json"
    
  3. 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.

  1. Revisi sintaks templat di atas untuk menggunakan akun Azure Automation Anda dan simpan ke file bernama template_sa.json.

  2. Perbarui nilai variabel di bawah ini lalu jalankan.

    $templateFile = "path\template_sa.json"
    
  3. 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:

  1. Masuk ke portal Azure.

  2. Buka akun Automasi Anda.

  3. Pada Pengaturan Akun, harap pilih Identitas.

    Assigning role in system-assigned identity in Azure portal.

  4. 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.

    View role-assignments that you have permission in Azure portal.

  5. Untuk mengubah langganan, klik daftar drop-down Langganan dan pilih langganan yang sesuai.

  6. Klik Tambahkan penetapan peran (Pratinjau)

  7. 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.

  8. Di daftar drop-down Peran, pilih peran sebagai Kontributor Komputer Virtual.

  9. Klik Simpan.

    Add a role assignment in Azure portal.

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.

  1. Aktifkan ditetapkan sistem, ditetapkan pengguna, atau kedua jenis identitas terkelola.

  2. Berikan hak istimewa pada identitas terkelola yang sama dengan sumber daya Azure yang cocok dengan akun Run As yang ditetapkan.

  3. Perbarui runbook Anda untuk mengautentikasi menggunakan identitas terkelola.

  4. 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 menggunakan Add-AzureRMAccount cmdlet dengan Connect-AzureRMAccount –Identity.
    • Jika Anda menggunakan modul Az, perbarui ke versi terbaru dengan mengikuti langkah-langkah dalam artikel Memperbarui modul Azure PowerShell.

Langkah berikutnya