Menyambungkan dari aplikasi Anda ke sumber daya tanpa menangani info masuk

Sumber daya Azure dengan dukungan identitas terkelola selalu menyediakan opsi untuk menentukan identitas terkelola untuk tersambung ke sumber daya Azure yang mendukung autentikasi Microsoft Entra. Dukungan identitas terkelola membuatnya tidak perlu bagi pengembang untuk mengelola kredensial dalam kode. Identitas terkelola adalah opsi autentikasi yang direkomendasikan saat bekerja dengan sumber daya Azure yang mendukungnya. Baca gambaran umum dari identitas terkelola.

Halaman ini menunjukkan cara mengonfigurasi App Service sehingga dapat tersambung ke Azure Key Vault, Azure Storage, dan Microsoft SQL Server. Prinsip yang sama dapat digunakan untuk sumber daya Azure apa pun yang mendukung identitas terkelola dan yang akan terhubung ke sumber daya yang mendukung autentikasi Microsoft Entra.

Sampel kode menggunakan pustaka klien Azure Identity, yang merupakan metode yang direkomendasikan karena secara otomatis menangani banyak langkah untuk Anda, termasuk memperoleh token akses yang digunakan dalam koneksi.

Sumber daya apa yang dapat disambungkan dengan identitas terkelola?

Identitas terkelola dapat tersambung ke sumber daya apa pun yang mendukung autentikasi Microsoft Entra. Secara umum, tidak ada dukungan khusus yang diperlukan untuk sumber daya untuk memungkinkan identitas terkelola terhubung ke sana.

Beberapa sumber daya tidak mendukung autentikasi Microsoft Entra, atau pustaka klien mereka tidak mendukung autentikasi dengan token. Terus baca untuk melihat panduan kami tentang cara menggunakan identitas Terkelola untuk mengakses kredensial dengan aman tanpa perlu menyimpannya dalam kode atau konfigurasi aplikasi Anda.

Membuat identitas terkelola

Ada dua jenis identitas terkelola: ditetapkan sistem dan ditetapkan pengguna. Identitas yang ditetapkan sistem langsung ditautkan ke satu sumber daya Azure. Saat sumber daya Azure dihapus, begitu juga identitasnya. Identitas terkelola yang ditetapkan pengguna dapat dikaitkan dengan beberapa sumber daya Azure, dan siklus hidupnya tidak bergantung pada sumber daya tersebut.

Artikel ini akan menjelaskan cara membuat dan mengonfigurasi identitas terkelola yang ditetapkan pengguna, yang direkomendasikan untuk sebagian besar skenario. Jika sumber daya sumber yang Anda gunakan tidak mendukung identitas terkelola yang ditetapkan pengguna, maka Anda harus merujuk ke dokumentasi penyedia sumber daya tersebut untuk mempelajari cara mengonfigurasinya agar memiliki identitas terkelola yang ditetapkan sistem.

Membuat identitas terkelola yang ditetapkan pengguna

Catatan

Anda akan memerlukan peran seperti "Kontributor Identitas Terkelola" untuk membuat identitas terkelola baru yang ditetapkan pengguna.

  1. Cari "Identitas Terkelola" dari bilah pencarian di bagian atas Portal dan pilih hasil yang cocok.

Screenshot of searching for managed identities in the portal.

  1. Pilih tombol "Buat".

Screenshot showing a managed identity create button in the portal.

  1. Pilih Grup langganan dan Sumber Daya, dan masukkan nama untuk Identitas terkelola.

Screenshot showing a managed identity create screen in the portal.

  1. Pilih "Tinjau + buat" untuk menjalankan pengujian validasi, lalu pilih tombol "Buat".

  2. Ketika identitas telah dibuat, layar konfirmasi akan muncul.

Screenshot showing a managed identity confirmation screen after creation in the portal.

Anda sekarang memiliki identitas yang dapat dikaitkan dengan sumber daya sumber Azure. Baca selengkapnya tentang mengelola identitas terkelola yang ditetapkan pengguna..

Mengonfigurasi sumber daya sumber Anda untuk menggunakan identitas terkelola yang ditetapkan pengguna

Ikuti langkah-langkah ini untuk mengonfigurasi sumber daya Azure Anda agar memiliki identitas terkelola melalui Portal. Lihat dokumentasi untuk jenis sumber daya tertentu untuk mempelajari cara mengonfigurasi identitas sumber daya menggunakan Antarmuka Baris Perintah, PowerShell, atau templat ARM.

Catatan

Anda memerlukan izin "Tulis" untuk mengonfigurasi sumber daya Azure agar memiliki identitas yang ditetapkan sistem. Anda akan memerlukan peran seperti "Operator Identitas Terkelola" untuk mengaitkan identitas yang ditetapkan pengguna dengan sumber daya Azure.

  1. Temukan sumber daya menggunakan bilah pencarian di bagian atas Portal

Screenshot showing a resource being searched for in the portal.

  1. Pilih tautan Identitas di navigasi

Screenshot showing the link to the identity screen for a resource in the portal.

  1. Pilih tab "Ditetapkan pengguna"

  2. Pilih tombol "Tambahkan"

Screenshot showing a user-assigned identity screen in the portal.

  1. Pilih identitas yang ditetapkan pengguna yang Anda buat sebelumnya dan pilih "Tambahkan"

Screenshot showing a user-assigned identity being selected in the portal.

  1. Identitas akan dikaitkan dengan sumber daya, dan daftar akan diperbarui.

Screenshot showing a user-assigned identity has been associated with the Azure resource in the portal.

Sumber daya sumber Anda sekarang memiliki identitas yang ditetapkan pengguna yang dapat digunakan untuk menyambungkan ke sumber daya target.

Menambahkan izin ke identitas

Catatan

Anda akan memerlukan peran seperti "Administrator Akses Pengguna" atau "Pemilik" untuk sumber daya target guna menambahkan penetapan Peran. Pastikan Anda memberikan hak istimewa paling sedikit yang diperlukan agar aplikasi dapat berjalan.

Sekarang App Service Anda memiliki identitas terkelola, Anda harus memberikan identitas izin yang benar. Saat menggunakan identitas ini untuk berinteraksi dengan Azure Storage, Anda akan menggunakan sistem Azure Role Based Access Control (RBAC).

  1. Temukan sumber daya yang ingin Anda sambungkan menggunakan bilah pencarian di bagian atas Portal
  2. Pilih tautan "Access Control (IAM)" di navigasi sebelah kiri.

Screenshot showing a resource summary screen in the portal.

  1. Pilih tombol "Tambahkan" di dekat bagian atas layar dan pilih "Tambahkan penetapan peran".

Screenshot showing the add role assignment navigation in the portal.

  1. Daftar Peran akan ditampilkan. Anda dapat melihat izin tertentu yang dimiliki peran dengan memilih tautan "Lihat". Pilih peran yang ingin Anda berikan ke identitas dan pilih tombol "Berikutnya".

Screenshot showing a role being selected in the portal.

  1. Anda akan diminta untuk memilih kepada siapa peran tersebut harus diberikan. Pilih opsi "Identitas terkelola" lalu tautan "Tambahkan anggota".

Screenshot showing the identity type being selected in the portal.

  1. Panel konteks akan muncul di sebelah kanan tempat Anda bisa mencari berdasarkan jenis identitas terkelola. Pilih "Identitas terkelola yang ditetapkan pengguna" dari opsi "Identitas terkelola".

Screenshot showing managed identity being selected in the portal.

  1. Pilih identitas yang Anda buat sebelumnya dan tombol "Pilih". Panel konteks akan ditutup, dan identitas akan ditambahkan ke daftar.

Screenshot showing an identity being added to a resource in the portal.

  1. Pilih tombol "Tinjau + tetapkan" untuk melihat ringkasan penetapan peran, lalu sekali lagi untuk mengonfirmasi.
  2. Pilih opsi "Penetapan peran", dan daftar penetapan peran untuk sumber daya akan ditampilkan.

Screenshot showing the role assignment has been added in the portal.

Identitas terkelola Anda sekarang memiliki izin yang benar untuk mengakses sumber daya target Azure. Baca selengkapnya tentang Kontrol Akses Berbasis Peran Azure.

Menggunakan identitas terkelola dalam kode Anda

App Service Anda sekarang memiliki identitas terkelola dengan izin. Anda dapat menggunakan identitas terkelola dalam kode Anda untuk berinteraksi dengan sumber daya target, alih-alih menyimpan kredensial dalam kode Anda.

Metode yang disarankan adalah menggunakan pustaka Azure Identity untuk bahasa pemrograman pilihan Anda. Bahasa yang didukung termasuk .NET, Java, JavaScript, Python, Go, dan C++. Pustaka memperoleh token akses untuk Anda, sehingga mudah untuk terhubung ke sumber daya target.

Menggunakan pustaka Azure Identity di lingkungan pengembangan Anda

Kecuali untuk pustaka C++, pustaka Azure Identity mendukung jenis DefaultAzureCredential. DefaultAzureCredential secara otomatis mencoba mengautentikasi melalui beberapa mekanisme, termasuk variabel lingkungan atau masuk interaktif. Jenis info masuk dapat digunakan di lingkungan pengembangan Anda menggunakan kredensial Anda sendiri. Ini juga dapat digunakan di lingkungan Azure produksi Anda menggunakan identitas terkelola. Tidak ada perubahan kode yang diperlukan saat Anda menyebarkan aplikasi Anda.

Jika Anda menggunakan identitas terkelola yang ditetapkan pengguna, Anda juga harus secara eksplisit menentukan identitas terkelola yang ditetapkan pengguna yang ingin Anda autentikasi dengan meneruskan ID klien identitas sebagai parameter. Anda dapat mengambil ID klien dengan menelusuri identitas di Portal.

Screenshot showing the client ID for the managed identity in the portal.

Baca selengkapnya tentang pustaka Azure Identity di bawah ini:

Mengakses Blob di Azure Storage

using Azure.Identity;
using Azure.Storage.Blobs;

// code omitted for brevity

// Specify the Client ID if using user-assigned managed identities
var clientID = Environment.GetEnvironmentVariable("Managed_Identity_Client_ID");
var credentialOptions = new DefaultAzureCredentialOptions
{
    ManagedIdentityClientId = clientID
};
var credential = new DefaultAzureCredential(credentialOptions);                        

var blobServiceClient1 = new BlobServiceClient(new Uri("<URI of Storage account>"), credential);
BlobContainerClient containerClient1 = blobServiceClient1.GetBlobContainerClient("<name of blob>");
BlobClient blobClient1 = containerClient1.GetBlobClient("<name of file>");

if (blobClient1.Exists())
{
    var downloadedBlob = blobClient1.Download();
    string blobContents = downloadedBlob.Value.Content.ToString();                
}

Mengakses rahasia yang disimpan di Azure Key Vault

using Azure.Identity;
using Azure.Security.KeyVault.Secrets;
using Azure.Core;

// code omitted for brevity

// Specify the Client ID if using user-assigned managed identities
var clientID = Environment.GetEnvironmentVariable("Managed_Identity_Client_ID");
var credentialOptions = new DefaultAzureCredentialOptions
{
    ManagedIdentityClientId = clientID
};
var credential = new DefaultAzureCredential(credentialOptions);        

var client = new SecretClient(
    new Uri("https://<your-unique-key-vault-name>.vault.azure.net/"),
    credential);
    
KeyVaultSecret secret = client.GetSecret("<my secret>");
string secretValue = secret.Value;

Mengakses Azure SQL Database

using Azure.Identity;
using Microsoft.Data.SqlClient;

// code omitted for brevity

// Specify the Client ID if using user-assigned managed identities
var clientID = Environment.GetEnvironmentVariable("Managed_Identity_Client_ID");
var credentialOptions = new DefaultAzureCredentialOptions
{
    ManagedIdentityClientId = clientID
};

AccessToken accessToken = await new DefaultAzureCredential(credentialOptions).GetTokenAsync(
    new TokenRequestContext(new string[] { "https://database.windows.net//.default" }));                        

using var connection = new SqlConnection("Server=<DB Server>; Database=<DB Name>;")
{
    AccessToken = accessToken.Token
};
var cmd = new SqlCommand("select top 1 ColumnName from TableName", connection);
await connection.OpenAsync();
SqlDataReader dr = cmd.ExecuteReader();
while(dr.Read())
{
    Console.WriteLine(dr.GetValue(0).ToString());
}
dr.Close();	

Koneksi ke sumber daya yang tidak mendukung ID Microsoft Entra atau autentikasi berbasis token di pustaka

Beberapa sumber daya Azure belum mendukung autentikasi Microsoft Entra, atau pustaka klien mereka tidak mendukung autentikasi dengan token. Biasanya sumber daya ini adalah teknologi sumber terbuka yang mengharapkan nama pengguna dan kata sandi atau kunci akses dalam string koneksi.

Untuk menghindari penyimpanan kredensial dalam kode atau konfigurasi aplikasi, Anda dapat menyimpan kredensial sebagai rahasia di Azure Key Vault. Dengan menggunakan contoh yang ditampilkan di atas, Anda dapat mengambil rahasia dari Azure KeyVault menggunakan identitas terkelola, dan meneruskan kredensial ke dalam string koneksi Anda. Pendekatan ini berarti bahwa tidak ada kredensial yang perlu ditangani langsung di kode atau lingkungan Anda.

Panduan jika Anda menangani token secara langsung

Dalam beberapa skenario, Anda mungkin ingin memperoleh token untuk identitas terkelola secara manual alih-alih menggunakan metode bawaan untuk terhubung ke sumber daya target. Skenario ini tidak mencakup pustaka klien untuk bahasa pemrograman yang Anda gunakan atau sumber daya target yang Anda sambungkan, atau menyambungkan ke sumber daya yang tidak berjalan di Azure. Saat memperoleh token secara manual, kami memberikan panduan berikut:

Cache token yang Anda peroleh

Untuk performa dan keandalan, sebaiknya aplikasi Anda menyimpan token dalam memori lokal, atau dienkripsi jika Anda ingin menyimpannya ke disk. Karena token identitas terkelola berlaku selama 24 jam, tidak ada manfaat dalam meminta token baru secara teratur, karena yang di-cache akan dikembalikan dari titik akhir penerbitan token. Jika Anda melebihi batas permintaan, Anda akan dibatasi tarifnya dan menerima kesalahan HTTP 429.

Ketika Anda memperoleh token, Anda dapat mengatur cache token Anda kedaluwarsa 5 menit sebelum expires_on (atau properti yang setara) yang akan dikembalikan saat token dibuat.

Inspeksi token

Aplikasi Anda tidak boleh mengandalkan konten token. Konten token hanya ditujukan untuk audiens (sumber daya target) yang sedang diakses, bukan klien yang meminta token. Konten token dapat berubah atau dienkripsi di masa mendatang.

Jangan mengekspos atau memindahkan token

Token harus diperlakukan seperti kredensial. Jangan mengeksposnya kepada pengguna atau layanan lain; misalnya, solusi pengelogan/pemantauan. Mereka tidak boleh dipindahkan dari sumber daya sumber yang menggunakannya, selain untuk mengautentikasi terhadap sumber daya target.

Langkah berikutnya