Pendekatan yang disarankan untuk mengautentikasi aplikasi yang dihosting Azure ke sumber daya Azure lainnya adalah dengan menggunakan identitas terkelola . Pendekatan ini didukung untuk sebagian besar layanan Azure, termasuk aplikasi yang dihosting di Azure App Service, Azure Container Apps, dan Azure Virtual Machines. Temukan selengkapnya tentang berbagai teknik dan pendekatan autentikasi pada halaman gambaran umum autentikasi. Di bagian depan, Anda akan mempelajari:
- Konsep identitas terkelola yang penting
- Cara membuat identitas terkelola yang ditetapkan sistem untuk aplikasi Anda
- Cara menetapkan peran pada identitas terkelola yang ditetapkan oleh sistem
- Cara mengautentikasi menggunakan identitas terkelola yang ditetapkan sistem dari kode aplikasi Anda
Konsep identitas terkelola yang penting
Identitas terkelola memungkinkan aplikasi Anda terhubung dengan aman ke sumber daya Azure lainnya tanpa menggunakan kunci rahasia atau rahasia aplikasi lainnya. Secara internal, Azure melacak identitas dan sumber daya mana yang diizinkan untuk disambungkan. Azure menggunakan informasi ini untuk mendapatkan token Microsoft Entra secara otomatis untuk aplikasi agar dapat tersambung ke sumber daya Azure lainnya.
Ada dua jenis identitas terkelola yang perlu dipertimbangkan saat mengonfigurasi aplikasi yang dihosting:
-
Identitas terkelola yang ditetapkan oleh sistem diaktifkan langsung pada sumber daya Azure dan terkait dengan siklus hidup sumber daya tersebut. Saat sumber daya dihapus, Azure secara otomatis menghapus identitas untuk Anda. Identitas yang ditetapkan sistem memberikan pendekatan minimalis untuk menggunakan identitas terkelola.
-
Identitas terkelola yang ditetapkan pengguna dibuat sebagai sumber daya Azure mandiri dan menawarkan fleksibilitas dan kemampuan yang lebih besar. Mereka ideal untuk solusi yang melibatkan beberapa sumber daya Azure yang perlu berbagi identitas dan izin yang sama. Misalnya, jika beberapa komputer virtual perlu mengakses set sumber daya Azure yang sama, identitas terkelola yang ditetapkan pengguna menyediakan penggunaan kembali dan manajemen yang dioptimalkan.
Bagian di depan menjelaskan langkah-langkah untuk mengaktifkan dan menggunakan identitas terkelola yang ditetapkan sistem untuk aplikasi yang dihosting Azure. Jika Anda perlu menggunakan identitas terkelola yang ditetapkan pengguna, kunjungi artikel identitas terkelola yang ditetapkan pengguna untuk informasi selengkapnya.
Mengaktifkan identitas terkelola yang ditetapkan sistem pada sumber daya hosting Azure
Untuk mulai menggunakan identitas terkelola yang ditetapkan sistem dengan aplikasi Anda, aktifkan identitas di sumber daya Azure yang menghosting aplikasi Anda, seperti Azure App Service, Azure Container App, atau Azure Virtual Machine.
Anda dapat mengaktifkan identitas terkelola yang ditetapkan sistem untuk sumber daya Azure menggunakan portal Microsoft Azure atau Azure CLI.
Di portal Microsoft Azure, navigasikan ke sumber daya yang menghosting kode aplikasi Anda, seperti Azure App Service atau instans Aplikasi Kontainer Azure.
Dari halaman Gambaran Umum sumber daya, perluas Pengaturan dan pilih Identitas dari Navigasi.
Pada halaman Identitas, alihkan penggeser Status ke Di.
Pilih Simpan untuk menerapkan perubahan Anda.
Perintah Azure CLI dapat dijalankan di Azure Cloud Shell atau di stasiun kerja dengan Azure CLI yang diinstal.
Perintah Azure CLI yang digunakan untuk mengaktifkan identitas terkelola untuk sumber daya Azure memiliki format az <command-group> identity --resource-group <resource-group-name> --name <resource-name>
. Perintah khusus untuk layanan Azure populer ditunjukkan di bawah ini.
Azure App Service:
az webapp identity assign \
--resource-group <resource-group-name> \
--name <web-app-name>
Azure Virtual Machine:
az vm identity assign \
--resource-group <resource-group-name> \
--name <virtual-machine-name>
Outputnya menyerupai yang berikut ini:
{
"principalId": "99999999-9999-9999-9999-999999999999",
"tenantId": "33333333-3333-3333-3333-333333333333",
"type": "SystemAssigned",
"userAssignedIdentities": null
}
Nilai principalId
adalah ID unik dari identitas terkelola. Simpan salinan output ini, karena Anda akan memerlukan nilai-nilai ini di langkah berikutnya.
Menugaskan peran pada identitas terkelola
Selanjutnya, tentukan peran mana yang dibutuhkan aplikasi Anda dan tetapkan peran tersebut ke identitas terkelola. Anda dapat menetapkan peran ke identitas terkelola dalam cakupan berikut:
-
Resource: Peran yang ditetapkan hanya berlaku untuk sumber daya tertentu tersebut.
-
Grup sumber daya: Peran yang ditetapkan berlaku untuk semua sumber daya yang terkandung dalam grup sumber daya.
-
Langganan: Peran yang ditetapkan berlaku untuk semua sumber daya yang terkandung dalam langganan.
Contoh berikut menunjukkan cara menetapkan peran di cakupan grup sumber daya, karena banyak aplikasi mengelola semua sumber daya Azure terkait menggunakan satu grup sumber daya.
Akses ke halaman Gambaran Umum grup sumber daya yang berisi aplikasi dengan identitas terkelola yang ditetapkan sistem.
Pilih kontrol akses (IAM) di navigasi kiri.
Pada halaman Kontrol akses (IAM), pilih + Tambahkan di menu atas lalu pilih Tambahkan penetapan peran untuk menavigasi ke halaman Tambahkan penetapan peran.
Halaman Tambahkan penugasan peran menyajikan alur kerja bertahap dengan tab untuk menetapkan peran pada identitas. Pada tab Peran awal, gunakan kotak pencarian di bagian atas untuk menemukan peran yang ingin Anda tetapkan ke identitas.
Pilih peran dari hasil dan kemudian pilih Berikutnya untuk berpindah ke tab Anggota.
Untuk opsi Tetapkan akses ke, pilihlah Identitas yang dikelola.
Untuk opsi Anggota, pilih + Pilih anggota untuk membuka panel Pilih identitas terkelola.
Pada panel Pilih identitas terkelola, gunakan dropdown Langganan dan Identitas terkelola untuk memfilter hasil pencarian identitas Anda. Gunakan kotak pencarian Pilih untuk menemukan identitas sistem yang Anda aktifkan untuk sumber daya Azure yang menghosting aplikasi Anda.
Pilih identitas dan pilih Pilih di bagian bawah panel untuk melanjutkan.
Pilih Tinjau + tetapkan di bagian bawah halaman.
Pada tab akhir Tinjau + tetapkan , pilih Tinjau + tetapkan untuk menyelesaikan alur kerja.
Identitas terkelola diberi peran di Azure menggunakan perintah az role assignment create:
az role assignment create \
--assignee "{managedIdentityId}" \
--role "{roleName}" \
--scope "{scope}"
Untuk mendapatkan nama peran yang dapat ditugaskan kepada perwakilan layanan, gunakan perintah az role definition list.
az role definition list \
--query "sort_by([].{roleName:roleName, description:description}, &roleName)" \
--output table
Misalnya, untuk mengizinkan identitas terkelola dengan ID 99999999-9999-9999-9999-999999999999
membaca, menulis, dan menghapus akses ke kontainer blob Azure Storage dan data ke semua akun penyimpanan dalam msdocs-dotnet-sdk-auth-example grup sumber daya, tetapkan perwakilan layanan aplikasi ke peran Kontributor Data Blob Penyimpanan menggunakan perintah berikut:
az role assignment create \
--assignee 99999999-9999-9999-9999-999999999999 \
--role "Storage Blob Data Contributor" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/msdocs-dotnet-sdk-auth-example"
Untuk informasi tentang menetapkan izin di tingkat sumber daya atau langganan menggunakan Azure CLI, lihat artikel Menetapkan peran Azure menggunakan Azure CLI.
Mengautentikasi ke layanan Azure dari aplikasi Anda
Pustaka Azure Identity menyediakan berbagai kredensial —implementasi TokenCredential
disesuaikan untuk mendukung skenario yang berbeda dan alur autentikasi Microsoft Entra. Karena identitas terkelola tidak tersedia saat berjalan secara lokal, langkah-langkah di depan menunjukkan kredensial mana yang akan digunakan dalam skenario mana:
-
Lingkungan pengembangan lokal: Selama pengembangan lokal hanya, gunakan kelas yang disebut DefaultAzureCredential untuk rantai kredensial yang dipengaruhi dan telah dikonfigurasi sebelumnya.
DefaultAzureCredential
menemukan kredensial pengguna dari alat lokal atau IDE Anda, seperti Azure CLI atau Visual Studio. Ini juga memberikan fleksibilitas dan kenyamanan untuk percobaan ulang, waktu tunggu untuk respons, dan dukungan untuk beberapa opsi autentikasi. Kunjungi artikel Mengautentikasi ke layanan Azure pada pengembangan lokal untuk informasi lebih lanjut.
-
aplikasi yang dihosting Azure: Saat aplikasi Anda berjalan di Azure, gunakan ManagedIdentityCredential untuk menemukan identitas terkelola yang dikonfigurasi untuk aplikasi Anda dengan aman. Menentukan jenis kredensial yang tepat ini mencegah kredensial lain yang tersedia diambil secara tak terduga.
Tambahkan paket Azure.Identity. Dalam proyek ASP.NET Core, instal juga paket Microsoft.Extensions.Azure:
Di terminal pilihan Anda, navigasikan ke direktori proyek aplikasi dan jalankan perintah berikut:
dotnet add package Azure.Identity
dotnet add package Microsoft.Extensions.Azure
Klik kanan proyek Anda di jendela Penjelajah Solusi Visual Studio dan pilih Kelola Paket NuGet. Cari Azure.Identity, dan instal paket yang cocok. Ulangi proses ini untuk paket Microsoft.Extensions.Azure.
Layanan Azure diakses menggunakan kelas klien khusus dari berbagai pustaka klien Azure SDK. Kelas-kelas ini dan layanan kustom Anda sendiri harus didaftarkan untuk injeksi dependensi sehingga dapat digunakan di seluruh aplikasi Anda. Di Program.cs
, selesaikan langkah-langkah berikut untuk mengonfigurasi kelas klien untuk injeksi dependensi dan autentikasi berbasis token:
- Sertakan namespace
Azure.Identity
dan Microsoft.Extensions.Azure
melalui arahan using
.
- Daftarkan klien layanan Azure menggunakan metode ekstensi dengan awalan
Add
yang sesuai.
- Teruskan instans
TokenCredential
yang sesuai ke metode UseCredential
:
- Gunakan
DefaultAzureCredential
saat aplikasi Anda berjalan secara lokal.
- Gunakan
ManagedIdentityCredential
saat aplikasi Anda berjalan di Azure.
builder.Services.AddAzureClients(clientBuilder =>
{
clientBuilder.AddBlobServiceClient(
new Uri("https://<account-name>.blob.core.windows.net"));
TokenCredential credential = null;
if (builder.Environment.IsProduction())
{
// Managed identity token credential discovered when running in Azure environments
credential = new ManagedIdentityCredential();
}
else
{
// Running locally on dev machine - DO NOT use in production or outside of local dev
credential = new DefaultAzureCredential();
}
clientBuilder.UseCredential(credential);
});
Alternatif untuk metode UseCredential
adalah memberikan kredensial kepada klien layanan secara langsung:
TokenCredential credential = null;
if (builder.Environment.IsProduction() || builder.Environment.IsStaging())
{
// Managed identity token credential discovered when running in Azure environments
credential = new ManagedIdentityCredential();
}
else
{
// Running locally on dev machine - DO NOT use in production or outside of local dev
credential = new DefaultAzureCredential();
}
builder.Services.AddSingleton<BlobServiceClient>(_ =>
new BlobServiceClient(
new Uri("https://<account-name>.blob.core.windows.net"), credential));
Kode sebelumnya berperilaku berbeda tergantung pada lingkungan tempat menjalankannya.
- Di stasiun kerja pengembangan lokal Anda,
DefaultAzureCredential
mencari variabel lingkungan untuk prinsipal layanan aplikasi atau di alat pengembang yang terinstal secara lokal, seperti Visual Studio, untuk serangkaian kredensial pengembang.
- Saat disebarkan ke Azure,
ManagedIdentityCredential
menemukan konfigurasi identitas terkelola Anda untuk mengautentikasi ke layanan lain secara otomatis.