Tutorial: Gunakan identitas terkelola untuk menghubungkan Key Vault ke aplikasi web Azure di .NET
Azure Key Vault menyediakan cara untuk menyimpan mandat dan rahasia lainnya dengan peningkatan keamanan. Tetapi kode Anda perlu mengautentikasi ke Key Vault untuk mengambilnya. Identitas terkelola untuk sumber daya Azure membantu menyelesaikan masalah ini dengan memberi layanan Azure identitas yang dikelola secara otomatis di ID Microsoft Entra. Anda dapat menggunakan identitas ini untuk mengautentikasi ke layanan apa pun yang mendukung autentikasi Microsoft Entra, termasuk Key Vault, tanpa harus menampilkan kredensial dalam kode Anda.
Dalam tutorial ini, Anda akan membuat dan menggunakan aplikasi web Azure ke Azure App Service. Anda akan menggunakan identitas terkelola untuk mengautentikasi aplikasi web Azure Anda dengan brankas kunci Azure menggunakan pustaka klien rahasia Azure Key Vault untuk .NET dan Azure CLI. Prinsip dasar yang sama berlaku saat Anda menggunakan bahasa pengembangan pilihan Anda, Azure PowerShell, dan/atau portal Microsoft Azure.
Untuk informasi selengkapnya tentang aplikasi web layanan Azure App dan penerapan yang disajikan dalam tutorial ini, lihat:
- Gambaran umum Layanan Aplikasi
- Membuat aplikasi web ASP.NET Core di Azure App Service
- Penyebaran Git Lokal ke Azure App Service
Prasyarat
Untuk menyelesaikan tutorial ini, Anda perlu:
- Langganan Azure. Buat akun gratis.
- .NET Core 3.1 SDK (atau yang lebih baru).
- Instalasi Git versi 2.28.0 atau lebih tinggi.
- CLI Azure atau Azure PowerShell.
- Azure Key Vault. Anda dapat membuat brankas kunci dengan menggunakan portal Microsoft Azure, CLI Azure, atau Azure PowerShell.
- Sebuah Key Vault rahasia. Anda dapat membuat rahasia dengan menggunakan portal Microsoft Azure, PowerShell, atau CLI Azure.
Jika aplikasi web Anda sudah diterapkan di Azure App Service, Anda dapat melompat untuk mengonfigurasi akses aplikasi web ke brankas kunci dan mengubah bagian kode aplikasi web.
Buat aplikasi .NET Core
Dalam langkah ini, Anda akan menyiapkan proyek .NET Core lokal.
Di jendela terminal pada komputer Anda, buat direktori bernama akvwebapp
dan jadikan sebagai direktori saat ini:
mkdir akvwebapp
cd akvwebapp
Buat aplikasi .NET Core dengan menggunakan perintah web baru dotnet :
dotnet new web
Jalankan aplikasi secara lokal sehingga Anda tahu bagaimana tampilannya saat Anda menerapakannya ke Azure:
dotnet run
Di browser web, buka aplikasi di http://localhost:5000
.
Anda akan melihat pesan "Halo Dunia!" dari aplikasi contoh yang ditampilkan di halaman.
Untuk informasi selengkapnya tentang membuat aplikasi web untuk Azure, lihat Membuat aplikasi web ASP.NET Core di Azure App Service
Menyebarkan aplikasi ke Azure
Dalam langkah ini, Anda akan menggunakan aplikasi .NET Core ke Azure App Service dengan menggunakan Git lokal. Untuk informasi selengkapnya tentang cara membuat dan menggunakan aplikasi, lihat Membuat aplikasi web ASP.NET Core di Azure.
Mengonfigurasi penerapan Git lokal
Di jendela terminal, pilih Ctrl+C untuk menutup server web. Menginisialisasi repositori Git untuk proyek .NET Core:
git init --initial-branch=main
git add .
git commit -m "first commit"
Anda dapat menggunakan FTP dan Git lokal untuk menggunakan aplikasi web Azure dengan menggunakan penerapan pengguna. Setelah mengonfigurasi pengguna penerapan, Anda dapat menggunakannya untuk semua penerapan Azure Anda. Nama pengguna dan kata sandi penyebaran tingkat akun Anda berbeda dari mandat langganan Azure Anda.
Untuk mengonfigurasi penerapan pada pengguna, jalankan perintah kumpulan pengguna penyebaran az webapp. Pilih nama pengguna dan kata sandi yang mematuhi panduan ini:
- Nama pengguna harus unik dalam Azure. Untuk git lokal mendorong, itu tidak dapat berisi simbol tanda at (@).
- Kata sandi harus panjangnya minimal delapan karakter dan berisi dua dari tiga elemen berikut: huruf, angka, dan simbol.
az webapp deployment user set --user-name "<username>" --password "<password>"
Output JSON menunjukkan kata sandi sebagai null
. Jika Anda mendapatkan 'Conflict'. Details: 409
kesalahan, ubah nama pengguna. Jika Anda mendapatkan 'Bad Request'. Details: 400
kesalahan, gunakan kata sandi yang lebih kuat.
Rekam nama pengguna dan kata sandi Anda sehingga Anda dapat menggunakannya untuk menyebarkan aplikasi web Anda.
Buat grup sumber daya
Grup sumber daya Azure adalah kontainer logis yang Anda sebarkan dan mengelola sumber daya Azure Anda. Buat grup sumber daya untuk berisi brankas kunci dan aplikasi web Anda dengan menggunakan perintah buat grup az:
az group create --name "myResourceGroup" -l "EastUS"
Membuat Paket App Service
Buat paket Layanan Aplikasi dengan menggunakan perintah buat paket layanan aplikasi CLI Azure az. Contoh berikut membuat rencana App Service yang dinamai myAppServicePlan
dalam FREE
tingkat harga:
az appservice plan create --name myAppServicePlan --resource-group myResourceGroup --sku FREE
Saat paket Layanan Aplikasi dibuat, CLI Azure menampilkan informasi yang mirip dengan apa yang Anda lihat di sini:
{ "adminSiteName": null, "appServicePlanName": "myAppServicePlan", "geoRegion": "West Europe", "hostingEnvironmentProfile": null, "id": "/subscriptions/0000-0000/resourceGroups/myResourceGroup/providers/Microsoft.Web/serverfarms/myAppServicePlan", "kind": "app", "location": "West Europe", "maximumNumberOfWorkers": 1, "name": "myAppServicePlan", < JSON data removed for brevity. > "targetWorkerSizeId": 0, "type": "Microsoft.Web/serverfarms", "workerTierName": null }
Untuk informasi selengkapnya, lihat Mengelola paket Layanan Aplikasi di Azure.
Membuat aplikasi web
Buat aplikasi web Azure di paket myAppServicePlan
Layanan Aplikasi.
Penting
Seperti brankas kunci, aplikasi web Azure harus memiliki nama yang unik. Ganti <your-webapp-name>
dengan nama aplikasi web Anda dalam contoh berikut.
az webapp create --resource-group "myResourceGroup" --plan "myAppServicePlan" --name "<your-webapp-name>" --deployment-local-git
Saat aplikasi web dibuat, CLI Azure menampilkan output yang mirip dengan apa yang Anda lihat di sini:
Local git is configured with url of 'https://<username>@<your-webapp-name>.scm.azurewebsites.net/<ayour-webapp-name>.git' { "availabilityState": "Normal", "clientAffinityEnabled": true, "clientCertEnabled": false, "clientCertExclusionPaths": null, "cloningInfo": null, "containerSize": 0, "dailyMemoryTimeQuota": 0, "defaultHostName": "<your-webapp-name>.azurewebsites.net", "deploymentLocalGitUrl": "https://<username>@<your-webapp-name>.scm.azurewebsites.net/<your-webapp-name>.git", "enabled": true, < JSON data removed for brevity. > }
URL remote Git ditampilkan di deploymentLocalGitUrl
properti, dalam format https://<username>@<your-webapp-name>.scm.azurewebsites.net/<your-webapp-name>.git
. Simpan URL ini. Anda akan membutuhkannya nanti.
Sekarang konfigurasikan aplikasi web Anda untuk diterapkan dari main
cabang:
az webapp config appsettings set -g MyResourceGroup --name "<your-webapp-name>" --settings deployment_branch=main
Buka aplikasi baru Anda dengan menggunakan perintah berikut. Ganti <your-webapp-name>
dengan nama aplikasi Anda.
https://<your-webapp-name>.azurewebsites.net
Anda akan melihat halaman web default untuk aplikasi web Azure baru.
Menerapkan aplikasi lokal Anda
Kembali ke jendela terminal lokal, tambahkan remote Azure ke repositori Git lokal Anda. Dalam perintah berikut, <deploymentLocalGitUrl-from-create-step>
ganti dengan URL remote Git yang Anda simpan di bagian Buat aplikasi web.
git remote add azure <deploymentLocalGitUrl-from-create-step>
Gunakan perintah berikut untuk mendorong ke remote Azure untuk menerapkan aplikasi Anda. Saat Git Credential Manager meminta mandat kepada Anda, gunakan mandat yang Anda buat di bagian Konfigurasikan penerapan Git lokal.
git push azure main
Perintah ini mungkin perlu waktu beberapa menit untuk dijalankan. Saat dijalankan, ia menampilkan informasi yang mirip dengan apa yang Anda lihat di sini:
Enumerating objects: 5, done. Counting objects: 100% (5/5), done. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 285 bytes | 95.00 KiB/s, done. Total 3 (delta 2), reused 0 (delta 0), pack-reused 0 remote: Deploy Async remote: Updating branch 'main'. remote: Updating submodules. remote: Preparing deployment for commit id 'd6b54472f7'. remote: Repository path is /home/site/repository remote: Running oryx build... remote: Build orchestrated by Microsoft Oryx, https://github.com/Microsoft/Oryx remote: You can report issues at https://github.com/Microsoft/Oryx/issues remote: remote: Oryx Version : 0.2.20200114.13, Commit: 204922f30f8e8d41f5241b8c218425ef89106d1d, ReleaseTagName: 20200114.13 remote: Build Operation ID: |imoMY2y77/s=.40ca2a87_ remote: Repository Commit : d6b54472f7e8e9fd885ffafaa64522e74cf370e1 . . . remote: Deployment successful. remote: Deployment Logs : 'https://<your-webapp-name>.scm.azurewebsites.net/newui/jsonviewer?view_url=/api/deployments/d6b54472f7e8e9fd885ffafaa64522e74cf370e1/log' To https://<your-webapp-name>.scm.azurewebsites.net:443/<your-webapp-name>.git d87e6ca..d6b5447 main -> main
Buka (atau refresh) aplikasi yang disebarkan dengan menggunakan browser web Anda:
http://<your-webapp-name>.azurewebsites.net
Anda akan melihat pesan "Halo Dunia!" yang dilihat sebelumnya ketika Anda berkunjung http://localhost:5000
.
Untuk informasi selengkapnya tentang menggunakan aplikasi web menggunakan Git, lihat penerapan Git Lokal ke Azure App Service
Mengonfigurasi aplikasi web untuk menyambungkan ke Key Vault
Di bagian ini, Anda akan mengonfigurasi akses web ke Key Vault dan memperbarui kode aplikasi untuk mengambil rahasia dari Key Vault.
Membuat dan menetapkan akses ke identitas terkelola
Dalam tutorial ini, kita akan menggunakan identitas terkelola untuk mengautentikasi ke Key Vault. Identitas terkelola secara otomatis mengelola mandat aplikasi.
Di CLI Azure, untuk membuat identitas untuk aplikasi, jalankan perintah tetapkan az webapp-identity :
az webapp identity assign --name "<your-webapp-name>" --resource-group "myResourceGroup"
Perintah akan mengembalikan cuplikan JSON ini:
{
"principalId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"tenantId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"type": "SystemAssigned"
}
Untuk memberikan izin aplikasi Anda ke brankas kunci Anda melalui Kontrol Akses Berbasis Peran (RBAC), tetapkan peran menggunakan perintah Azure CLI az role assignment create.
az role assignment create --role "Key Vault Secrets User" --assignee "<app-id>" --scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.KeyVault/vaults/<your-unique-keyvault-name>"
Ganti <app-id>
, <subscription-id>
, <resource-group-name>
dan <your-unique-keyvault-name>
dengan nilai aktual Anda. <app-id>
adalah ID Aplikasi (klien) dari aplikasi terdaftar Anda di Microsoft Entra.
Ubah aplikasi untuk mengakses brankas kunci Anda
Dalam tutorial ini, Anda akan menggunakan pustaka klien rahasia Azure Key Vault untuk tujuan demonstrasi. Anda juga dapat menggunakan pustaka klien sertifikat Azure Key Vaultatau pustaka klien kunci Azure Key Vault.
Menginstal paket
Dari jendela terminal, instal pustaka klien rahasia Azure Key Vault untuk paket pustaka klien .NET dan Azure Identity:
dotnet add package Azure.Identity
dotnet add package Azure.Security.KeyVault.Secrets
Memperbarui kode
Temukan dan buka file Startup.cs untuk .NET 5.0 atau yang lebih lama, atau file Program.cs untuk .NET 6.0 di proyek akvwebapp Anda.
Tambahkan baris ini ke header:
using Azure.Identity;
using Azure.Security.KeyVault.Secrets;
using Azure.Core;
Tambahkan baris berikut sebelum app.UseEndpoints
panggilan (.NET 5.0 atau yang lebih lama) atau app.MapGet
panggil (.NET 6.0), perbarui URI untuk mencerminkan vaultUri
brankas kunci Anda. Kode ini menggunakan DefaultAzureCredential() untuk mengautentikasi Key Vault yang menggunakan token dari identitas terkelola untuk melakukan autentikasi. Untuk informasi selengkapnya tentang mengautentikasi ke Key Vault, lihat Panduan Pengembang. Kode ini juga menggunakan backoff eksponensial untuk dicoba jika Key Vault sedang dicekik. Untuk informasi selengkapnya tentang batas transaksi Vault Utama, 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://<your-unique-key-vault-name>.vault.azure.net/"), new DefaultAzureCredential(),options);
KeyVaultSecret secret = client.GetSecret("<mySecret>");
string secretValue = secret.Value;
.NET 5.0 atau sebelumnya
Perbarui garis await context.Response.WriteAsync("Hello World!");
agar terlihat seperti baris ini:
await context.Response.WriteAsync(secretValue);
.NET 6.0
Perbarui garis app.MapGet("/", () => "Hello World!");
agar terlihat seperti baris ini:
app.MapGet("/", () => secretValue);
Pastikan untuk menyimpan perubahan Anda sebelum melanjutkan ke langkah berikutnya.
Menyebarkan ulang aplikasi web Anda
Setelah memperbarui kode, Anda dapat melakukan redeploy ke Azure dengan menggunakan perintah Git berikut:
git add .
git commit -m "Updated web app to access my key vault"
git push azure main
Masuk ke aplikasi web anda yang sudah selesai
http://<your-webapp-name>.azurewebsites.net
Di mana sebelum Anda melihat "Halo Dunia!", Anda sekarang harus melihat nilai rahasia Anda ditampilkan.
Langkah berikutnya
- Gunakan Azure Key Vault dengan aplikasi yang diterapkan ke komputer virtual di .NET
- Pelajari selengkapnya tentang identitas terkelola untuk sumber daya Azure
- Lihat Panduan Pengembang
- Akses aman ke Key Vault