Tutorial: Menggunakan identitas terkelola untuk menyambungkan Key Vault ke aplikasi web Azure di .NET

Azure Key Vault menyediakan cara untuk menyimpan kredensial dan rahasia lainnya dengan peningkatan keamanan. Tetapi kode Anda perlu mengautentikasi dengan Key Vault untuk mengambil data tersebut. Identitas terkelola untuk sumber daya Azure menyelesaikan masalah ini dengan memberikan layanan Azure identitas yang dikelola secara otomatis di Microsoft Entra ID. Kode Anda menggunakan identitas ini untuk mengautentikasi ke layanan apa pun yang mendukung autentikasi Microsoft Entra, termasuk Key Vault, tanpa menyematkan kredensial dalam kode.

Dalam tutorial ini, Anda membuat dan menyebarkan aplikasi web Azure untuk Azure App Service, lalu menggunakan identitas terkelola untuk mengautentikasi aplikasi ke brankas kunci dengan menggunakan pustaka klien rahasia Azure Key Vault untuk .NET dan Azure CLI. Prinsip yang sama berlaku jika Anda menggunakan bahasa lain, Azure PowerShell, atau portal Azure.

Untuk informasi selengkapnya tentang aplikasi dan penyebaran web App Service, lihat:

Prasyarat

Untuk menyelesaikan tutorial ini, Anda memerlukan:

Jika Anda sudah memiliki aplikasi web yang sudah diterapkan di Azure App Service, langsung ke mengonfigurasi aplikasi web agar terhubung ke Key Vault dan memodifikasi aplikasi untuk mengakses Key Vault Anda.

Membuat aplikasi .NET Core

Dalam langkah ini, siapkan proyek .NET lokal.

Di jendela terminal, buat direktori bernama akvwebapp dan beralih ke direktori tersebut:

mkdir akvwebapp
cd akvwebapp

Buat aplikasi web .NET dengan menggunakan perintah web baru dotnet:

dotnet new web

Jalankan aplikasi secara lokal untuk melihat tampilannya sebelum Anda menyebarkannya ke Azure:

dotnet run

Di browser web, buka aplikasi di http://localhost:5000. Anda akan melihat pesan "Halo Dunia!" dari aplikasi sampel.

Untuk informasi selengkapnya tentang membuat aplikasi web, lihat Membuat aplikasi web ASP.NET Core di Azure App Service.

Menyebarkan aplikasi ke Azure

Dalam langkah ini, sebarkan aplikasi .NET ke Azure App Service dengan menggunakan penyebaran zip. Zip deploy adalah mekanisme deployment berbasis paket yang disarankan untuk App Service. Untuk pengiriman berkelanjutan dari kontrol sumber, gunakan GitHub Actions atau Azure DevOps Pipelines sebagai gantinya.

Membuat grup sumber daya

Buat grup sumber daya untuk berisi brankas kunci dan aplikasi web dengan menggunakan az group create:

az group create --name "<resource-group>" --location "EastUS"

Membuat paket App Service

Buat App Service plan menggunakan az appservice plan create. Contoh berikut membuat paket bernama myAppServicePlan pada tier gratis (FREE):

az appservice plan create --name myAppServicePlan --resource-group <resource-group> --sku FREE

Membuat aplikasi web

Buat aplikasi web Azure dalam paket myAppServicePlan.

Penting

Seperti brankas kunci, aplikasi web Azure harus memiliki nama yang unik secara global. Ganti <webapp-name> dengan nama aplikasi web Anda.

az webapp create --resource-group "<resource-group>" --plan "myAppServicePlan" --name "<webapp-name>"

Buka aplikasi baru untuk mengonfirmasi bahwa aplikasi sedang berjalan:

https://<webapp-name>.azurewebsites.net

Anda melihat halaman default untuk aplikasi web Azure baru.

Terapkan aplikasi lokal Anda dengan ZIP Deploy

Dari direktori proyek akvwebapp, bangun proyek dan buat file zip deployment:

dotnet publish -c Release -o ./publish
cd publish
zip -r ../akvwebapp.zip .
cd ..

Tip

Pada Windows tanpa zip, gunakan PowerShell: Compress-Archive -Path .\publish\* -DestinationPath .\akvwebapp.zip.

Sebarkan zip ke aplikasi web Anda dengan menggunakan az webapp deploy:

az webapp deploy --resource-group "<resource-group>" --name "<webapp-name>" --src-path ./akvwebapp.zip --type zip

Segarkan aplikasi yang telah diterapkan di peramban web Anda:

https://<webapp-name>.azurewebsites.net

Anda melihat pesan "Halo Dunia!" yang sama dengan yang Anda lihat di http://localhost:5000.

Mengonfigurasi aplikasi web untuk menyambungkan ke Key Vault

Di bagian ini, Anda mengonfigurasi aplikasi web agar dapat mengakses Key Vault dan memperbarui kode aplikasi untuk mengambil rahasia.

Membuat dan menetapkan akses ke identitas terkelola

Gunakan identitas terkelola untuk mengautentikasi aplikasi web untuk Key Vault. Identitas terkelola menghapus kebutuhan Anda untuk mengelola kredensial dalam kode.

Buat identitas untuk aplikasi dengan menggunakan az webapp identity assign:

az webapp identity assign --name "<webapp-name>" --resource-group "<resource-group>"

Perintah mengembalikan cuplikan JSON yang mirip dengan ini:

{
  "principalId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "tenantId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "type": "SystemAssigned"
}

Untuk mendapatkan izin ke brankas kunci Anda melalui Role-Based Access Control (RBAC), tetapkan peran ke "Nama Prinsipal Pengguna" (UPN) Anda menggunakan perintah Azure CLI az role assignment create.

az role assignment create --role "Key Vault Secrets User" --assignee "<upn>" --scope "/subscriptions/<subscription-id>/resourceGroups/myResourceGroup/providers/Microsoft.KeyVault/vaults/<vault-name>"

Ganti <upn>, <subscription-id>, dan <vault-name> dengan nilai aktual Anda. Jika Anda menggunakan nama grup sumber daya yang berbeda, ganti "myResourceGroup" juga. UPN Anda biasanya akan dalam format alamat email (misalnya, username@domain.com).

Sesuaikan aplikasi untuk mengakses brankas kunci Anda

Tutorial ini menggunakan pustaka klien rahasia Azure Key Vault. Anda juga dapat menggunakan pustaka klien sertifikat Azure Key Vault atau pustaka klien kunci Azure Key Vault.

Instal paket-paket tersebut

Dari jendela terminal, instal pustaka klien rahasia Azure Key Vault dan pustaka klien Azure Identity:

dotnet add package Azure.Identity
dotnet add package Azure.Security.KeyVault.Secrets

Memperbarui kode

Buka Program.cs di proyek Anda akvwebapp .

Tambahkan arahan ini using di bagian atas file:

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

Tambahkan baris berikut sebelum pemanggilan app.MapGet, lalu perbarui <vault-name> dengan nama key vault Anda. Kode ini menggunakan DefaultAzureCredential untuk mengautentikasi ke Key Vault melalui identitas terkelola aplikasi web. Untuk informasi selengkapnya, lihat panduan pengembang. Kode ini juga mengonfigurasi strategi backoff eksponensial untuk percobaan ulang jika Key Vault mengalami pembatasan laju. Untuk detail tentang batas transaksi, lihat panduan pembatasan Azure Key Vault.

SecretClientOptions options = new SecretClientOptions()
    {
        Retry =
        {
            Delay= TimeSpan.FromSeconds(2),
            MaxDelay = TimeSpan.FromSeconds(16),
            MaxRetries = 5,
            Mode = RetryMode.Exponential
         }
    };
var client = new SecretClient(new Uri("https://<vault-name>.vault.azure.net/"), new DefaultAzureCredential(), options);

KeyVaultSecret secret = client.GetSecret("<secret-name>");

string secretValue = secret.Value;

Perbarui baris app.MapGet("/", () => "Halo Dunia!"); ke:

app.MapGet("/", () => secretValue);

Simpan perubahan Anda.

Menyebarkan ulang aplikasi web Anda

Bangun kembali paket penyebaran dan sebarkan ulang:

dotnet publish -c Release -o ./publish
cd publish
zip -r ../akvwebapp.zip .
cd ..
az webapp deploy --resource-group "<resource-group>" --name "<webapp-name>" --src-path ./akvwebapp.zip --type zip

Masuk ke aplikasi web anda yang sudah selesai

https://<webapp-name>.azurewebsites.net

Di mana Anda sebelumnya melihat "Halo Dunia!", Anda sekarang melihat nilai rahasia Anda.

Langkah selanjutnya