Menetapkan akses identitas terkelola ke peran aplikasi
Identitas terkelola untuk sumber daya Azure menyediakan layanan Azure dengan identitas di ID Microsoft Entra. Identitas terkelola bekerja tanpa membutuhkan info masuk dalam kode Anda. Layanan Azure menggunakan identitas ini untuk mengautentikasi ke layanan yang mendukung autentikasi Microsoft Entra. Peran aplikasi menyediakan bentuk kontrol akses berbasis peran dan memungkinkan layanan untuk mengimplementasikan aturan otorisasi.
Catatan
Token yang diterima aplikasi Anda di-cache oleh infrastruktur yang mendasar. Ini berarti bahwa setiap perubahan pada peran identitas terkelola dapat memakan waktu yang signifikan untuk diproses. Untuk informasi selengkapnya, lihat Batasan penggunaan identitas terkelola untuk otorisasi.
Dalam artikel ini, Anda akan mempelajari cara menetapkan identitas terkelola ke peran aplikasi yang diekspos oleh aplikasi lain menggunakan Microsoft Graph PowerShell SDK.
Prasyarat
- Jika Anda tidak terbiasa dengan identitas terkelola untuk sumber daya Azure, lihat Gambaran umum identitas terkelola untuk sumber daya Azure.
- Tinjau perbedaan antara identitas terkelola yang ditetapkan sistem dan ditetapkan pengguna.
- Jika Anda belum memiliki akun Azure, daftar untuk mendapatkan akun gratis sebelum melanjutkan.
Menetapkan akses identitas terkelola ke peran aplikasi aplikasi lain menggunakan PowerShell
Untuk menjalankan contoh skrip, Anda memiliki dua opsi:
- Gunakan Azure Cloud Shell, yang dapat Anda buka menggunakan tombol Coba di sudut kanan atas blok kode.
- Jalankan skrip secara lokal dengan menginstal versi terbaru Microsoft Graph PowerShell SDK.
Aktifkan identitas terkelola pada sumber daya Azure, seperti komputer virtual Azure.
Temukan ID objek dari perwakilan layanan identitas terkelola.
Untuk identitas terkelola yang ditetapkan sistem, Anda dapat menemukan ID objek di portal Microsoft Azure di halaman Identitas sumber daya. Anda juga dapat menggunakan skrip PowerShell berikut untuk menemukan ID objek. Anda memerlukan ID sumber daya yang Anda buat di langkah 1, yang tersedia di portal Microsoft Azure di halaman Properti sumber daya.
$resourceIdWithManagedIdentity = '/subscriptions/{my subscription ID}/resourceGroups/{my resource group name}/providers/Microsoft.Compute/virtualMachines/{my virtual machine name}' (Get-AzResource -ResourceId $resourceIdWithManagedIdentity).Identity.PrincipalId
Untuk identitas terkelola yang ditetapkan pengguna, Anda dapat menemukan ID objek identitas terkelola di portal Microsoft Azure di halaman Gambaran Umum sumber daya. Anda juga dapat menggunakan skrip PowerShell berikut untuk menemukan ID objek. Anda memerlukan ID sumber daya identitas terkelola yang ditetapkan pengguna.
$userManagedIdentityResourceId = '/subscriptions/{my subscription ID}/resourceGroups/{my resource group name}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{my managed identity name}' (Get-AzResource -ResourceId $userManagedIdentityResourceId).Properties.PrincipalId
Buat pendaftaran aplikasi baru untuk mewakili layanan yang Anda inginkan untuk dikirimi identitas terkelola.
- Jika API atau layanan yang mengekspos pemberian peran aplikasi ke identitas terkelola sudah memiliki perwakilan layanan di penyewa Microsoft Entra Anda, lewati langkah ini. Misalnya, jika Anda ingin memberikan akses identitas terkelola ke Microsoft Graph API.
Temukan ID objek dari perwakilan layanan aplikasi layanan. Anda dapat menemukan ini menggunakan portal Microsoft Azure.
- Misalnya, buka ID Microsoft Entra dan buka halaman Aplikasi perusahaan. Kemudian temukan aplikasi dan cari ID Objek.
- Anda juga dapat menemukan ID objek kepala perwakilan layanan dengan nama tampilannya menggunakan skrip PowerShell berikut:
$serverServicePrincipalObjectId = (Get-MgServicePrincipal -Filter "DisplayName eq '$applicationName'").Id
Catatan
Nama tampilan untuk aplikasi tidak unik, jadi Anda harus memverifikasi bahwa Anda mendapatkan perwakilan layanan aplikasi yang benar.
Tambahkan peran aplikasi ke aplikasi yang Anda buat di langkah sebelumnya. Anda kemudian dapat membuat peran menggunakan portal Azure atau dengan menggunakan Microsoft Graph.
- Misalnya, Anda dapat menambahkan peran aplikasi dengan menjalankan kueri berikut di penjelajah Graph:
PATCH /applications/{id}/ { "appRoles": [ { "allowedMemberTypes": [ "User", "Application" ], "description": "Read reports", "id": "1e250995-3081-451e-866c-0f6efef9c638", "displayName": "Report reader", "isEnabled": true, "value": "report.read" } ] }
Tetapkan peran aplikasi ke identitas terkelola. Anda memerlukan informasi berikut untuk menetapkan peran aplikasi:
managedIdentityObjectId
: ID objek dari perwakilan layanan identitas terkelola, yang Anda temukan di langkah sebelumnya.serverServicePrincipalObjectId
: ID objek dari perwakilan layanan aplikasi server, yang Anda temukan di langkah 4.appRoleId
: ID dari peran aplikasi yang diekspos oleh aplikasi server, yang Anda buat di langkah 5 - dalam contoh, ID peran aplikasinya adalah00000000-0000-0000-0000-000000000000
.
- Jalankan perintah PowerShell berikut untuk menambahkan penetapan peran:
New-MgServicePrincipalAppRoleAssignment ` -ServicePrincipalId $serverServicePrincipalObjectId ` -PrincipalId $managedIdentityObjectId ` -ResourceId $serverServicePrincipalObjectId ` -AppRoleId $appRoleId
Contoh lengkap skrip
Contoh skrip ini menunjukkan kepada Anda cara menetapkan identitas terkelola aplikasi web Azure ke peran aplikasi.
# Install the module.
# Install-Module Microsoft.Graph -Scope CurrentUser
# Your tenant ID (in the Azure portal, under Azure Active Directory > Overview).
$tenantID = '<tenant-id>'
# The name of your web app, which has a managed identity that should be assigned to the server app's app role.
$webAppName = '<web-app-name>'
$resourceGroupName = '<resource-group-name-containing-web-app>'
# The name of the server app that exposes the app role.
$serverApplicationName = '<server-application-name>' # For example, MyApi
# The name of the app role that the managed identity should be assigned to.
$appRoleName = '<app-role-name>' # For example, MyApi.Read.All
# Look up the web app's managed identity's object ID.
$managedIdentityObjectId = (Get-AzWebApp -ResourceGroupName $resourceGroupName -Name $webAppName).identity.principalid
Connect-MgGraph -TenantId $tenantId -Scopes 'Application.Read.All','Application.ReadWrite.All','AppRoleAssignment.ReadWrite.All','Directory.AccessAsUser.All','Directory.Read.All','Directory.ReadWrite.All'
# Look up the details about the server app's service principal and app role.
$serverServicePrincipal = (Get-MgServicePrincipal -Filter "DisplayName eq '$serverApplicationName'")
$serverServicePrincipalObjectId = $serverServicePrincipal.Id
$appRoleId = ($serverServicePrincipal.AppRoles | Where-Object {$_.Value -eq $appRoleName }).Id
# Assign the managed identity access to the app role.
New-MgServicePrincipalAppRoleAssignment `
-ServicePrincipalId $serverServicePrincipalObjectId `
-PrincipalId $managedIdentityObjectId `
-ResourceId $serverServicePrincipalObjectId `
-AppRoleId $appRoleId
Menetapkan akses identitas terkelola ke peran aplikasi aplikasi lain menggunakan CLI
Gunakan lingkungan Bash di Azure Cloud Shell. Untuk informasi selengkapnya, lihat Mulai Cepat untuk Bash di Azure Cloud Shell.
Jika Anda lebih suka menjalankan perintah referensi CLI secara lokal, instal Azure CLI. Jika Anda menjalankan Windows atau macOS, pertimbangkan untuk menjalankan Azure CLI dalam kontainer Docker. Untuk informasi lebih lanjut, lihat Cara menjalankan Azure CLI di kontainer Docker.
Jika Anda menggunakan instalasi lokal, masuk ke Azure CLI dengan menggunakan perintah login az. Untuk menyelesaikan proses autentikasi, ikuti langkah-langkah yang ditampilkan di terminal Anda. Untuk opsi masuk lainnya, lihat Masuk dengan Azure CLI.
Saat Anda diminta, instal ekstensi Azure CLI pada penggunaan pertama. Untuk informasi selengkapnya tentang ekstensi, lihat Menggunakan ekstensi dengan Azure CLI.
Jalankan versi az untuk menemukan versi dan pustaka dependen yang diinstal. Untuk meningkatkan ke versi terbaru, jalankan peningkatan az.
Aktifkan identitas terkelola pada sumber daya Azure, seperti komputer virtual Azure.
Temukan ID objek dari perwakilan layanan identitas terkelola.
- Untuk identitas terkelola yang ditetapkan sistem, Anda dapat menemukan ID objek di portal Microsoft Azure di halaman Identitas sumber daya.
- Anda juga dapat menggunakan skrip berikut untuk menemukan ID objek. Anda akan memerlukan ID sumber daya sumber daya yang Anda buat di langkah sebelumnya, yang tersedia di portal Azure di halaman Properti sumber daya.
resourceIdWithManagedIdentity="/subscriptions/{my subscription ID}/resourceGroups/{my resource group name}/providers/Microsoft.Compute/virtualMachines/{my virtual machine name}" oidForMI=$(az resource show --ids $resourceIdWithManagedIdentity --query "identity.principalId" -o tsv | tr -d '[:space:]') echo "object id for managed identity is: $oidForMI"
- Untuk identitas terkelola yang ditetapkan pengguna, Anda dapat menemukan ID objek identitas terkelola di portal Microsoft Azure di halaman Gambaran Umum sumber daya. Anda juga dapat menggunakan skrip berikut untuk menemukan ID objek. Anda memerlukan ID sumber daya identitas terkelola yang ditetapkan pengguna.
userManagedIdentityResourceId="/subscriptions/{my subscription ID}/resourceGroups/{my resource group name}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{my managed identity name}" oidForMI=$(az resource show --id $userManagedIdentityResourceId --query "properties.principalId" -o tsv | tr -d '[:space:]') echo "object id for managed identity is: $oidForMI"
Buat pendaftaran aplikasi baru untuk mewakili layanan tempat identitas terkelola Anda mengirim permintaan.
- Jika API atau layanan yang mengekspos pemberian peran aplikasi ke identitas terkelola sudah memiliki perwakilan layanan di penyewa Microsoft Entra Anda, lewati langkah ini.
Temukan ID objek dari perwakilan layanan aplikasi layanan. Anda dapat menemukan ini menggunakan portal Microsoft Azure.
- Buka ID Microsoft Entra dan buka halaman Aplikasi perusahaan, lalu temukan aplikasi dan cari ID Objek.
- Anda juga dapat menemukan ID objek perwakilan layanan dengan nama tampilannya menggunakan skrip berikut:
appName="{name for your application}" serverSPOID=$(az ad sp list --filter "displayName eq '$appName'" --query '[0].id' -o tsv | tr -d '[:space:]') echo "object id for server service principal is: $serverSPOID"
Catatan
Nama tampilan untuk aplikasi tidak unik, jadi Anda harus memverifikasi bahwa Anda mendapatkan perwakilan layanan aplikasi yang benar.
Atau Anda dapat menemukan ID Objek dengan ID Aplikasi unik untuk pendaftaran aplikasi Anda:
appID="{application id for your application}" serverSPOID=$(az ad sp list --filter "appId eq '$appID'" --query '[0].id' -o tsv | tr -d '[:space:]') echo "object id for server service principal is: $serverSPOID"
Tambahkan peran aplikasi ke aplikasi yang Anda buat di langkah sebelumnya. Anda dapat membuat peran menggunakan portal Microsoft Azure atau menggunakan Microsoft Graph. Misalnya, Anda dapat menambahkan peran aplikasi seperti ini:
{ "allowedMemberTypes": [ "Application" ], "displayName": "Read data from MyApi", "id": "0566419e-bb95-4d9d-a4f8-ed9a0f147fa6", "isEnabled": true, "description": "Allow the application to read data as itself.", "value": "MyApi.Read.All" }
Tetapkan peran aplikasi ke identitas terkelola. Anda memerlukan informasi berikut untuk menetapkan peran aplikasi:
managedIdentityObjectId
: ID objek dari perwakilan layanan identitas terkelola, yang Anda temukan di langkah 2.serverServicePrincipalObjectId
: ID objek dari perwakilan layanan aplikasi server, yang Anda temukan di langkah 4.appRoleId
: ID dari peran aplikasi yang diekspos oleh aplikasi server, yang Anda buat di langkah 5 - dalam contoh, ID peran aplikasinya adalah00000000-0000-0000-0000-000000000000
.
Jalankan skrip berikut untuk menambahkan penetapan peran. Fungsionalitas ini tidak secara langsung diekspos pada Azure CLI dan bahwa perintah REST digunakan di sini sebagai gantinya:
roleguid="00000000-0000-0000-0000-000000000000" az rest -m POST -u https://graph.microsoft.com/v1.0/servicePrincipals/$oidForMI/appRoleAssignments -b "{\"principalId\": \"$oidForMI\", \"resourceId\": \"$serverSPOID\",\"appRoleId\": \"$roleguid\"}"
Langkah berikutnya
- Identitas terkelola untuk ringkasan sumber daya Azure
- Untuk mengaktifkan identitas terkelola pada Azure VM, lihat Mengonfigurasi identitas terkelola untuk sumber daya Azure di Azure VM.