Tutorial: Menghubungkan ke SQL Database dari App Service .NET tanpa rahasia menggunakan identitas terkelola

Azure App Service menyediakan layanan hosting web yang sangat dapat diskalakan dan dapat melakukan patch sendiri. Layanan ini juga menyediakan identitas terkelola untuk aplikasi Anda, yang merupakan solusi turn-key untuk mengamankan akses ke Azure SQL Database dan layanan Azure lainnya. Identitas terkelola di App Service membuat aplikasi Anda lebih aman dengan menghilangkan rahasia dari aplikasi Anda, misalnya kredensial dalam string koneksi. Dalam tutorial ini, Anda menambahkan identitas terkelola ke contoh aplikasi web yang Anda buat di salah satu tutorial berikut:

Setelah selesai, aplikasi sampel Anda akan terhubung ke SQL Database dengan aman tanpa perlu nama pengguna dan kata sandi.

Diagram arsitektur untuk skenario tutorial.

Catatan

Langkah-langkah yang tercakup dalam tutorial ini mendukung versi berikut:

  • .NET Framework 4.8 dan yang lebih tinggi
  • .NET 6.0 dan lebih tinggi

Untuk panduan Azure Database for MySQL atau Azure Database for PostgreSQL dalam kerangka kerja bahasa lain (Node.js, Python, dan Java), lihat Tutorial: Menyambungkan ke database Azure dari App Service tanpa rahasia menggunakan identitas terkelola.

Apa yang akan Anda pelajari:

  • Mengaktifkan identitas terkelola
  • Memberikan akses SQL Database ke identitas terkelola
  • Mengonfigurasi Entity Framework untuk menggunakan autentikasi Microsoft Entra dengan SQL Database
  • Koneksi ke SQL Database dari Visual Studio menggunakan autentikasi Microsoft Entra

Catatan

Autentikasi Microsoft Entra berbeda dari autentikasi Windows Terintegrasi di Active Directory lokal (AD DS). AD DS dan MICROSOFT Entra ID menggunakan protokol autentikasi yang sama sekali berbeda. Untuk informasi selengkapnya, lihat dokumentasi Microsoft Entra Domain Services.

Jika Anda tidak memiliki Langganan Azure, buat Akun gratis Azure sebelum memulai.

Prasyarat

Artikel ini berlanjut di mana Anda tinggalkan di salah satu tutorial berikut:

Jika Anda belum melakukannya, ikuti salah satu dari dua tutorial tersebut terlebih dahulu. Atau, Anda dapat menyesuaikan langkah-langkahnya untuk aplikasi .NET Anda sendiri dengan SQL Database.

Untuk men-debug aplikasi Anda menggunakan SQL Database sebagai back end, pastikan Anda telah mengizinkan koneksi klien dari komputer Anda. Jika tidak, tambahkan IP klien dengan mengikuti langkah-langkah di Mengelola aturan firewall IP tingkat server menggunakan portal Microsoft Azure.

Mempersiapkan lingkungan Anda untuk Azure CLI.

1. Memberikan akses database ke pengguna Microsoft Entra

Pertama, aktifkan autentikasi Microsoft Entra ke SQL Database dengan menetapkan pengguna Microsoft Entra sebagai admin server. Pengguna ini berbeda dengan akun Microsoft yang Anda gunakan untuk mendaftar langganan Azure Anda. Ini harus pengguna yang Anda buat, impor, sinkronkan, atau diundang ke ID Microsoft Entra. Untuk informasi selengkapnya tentang pengguna Microsoft Entra yang diizinkan, lihat Fitur dan batasan Microsoft Entra di SQL Database.

  1. Jika penyewa Microsoft Entra Anda belum memiliki pengguna, buat dengan mengikuti langkah-langkah di Menambahkan atau menghapus pengguna menggunakan ID Microsoft Entra.

  2. Temukan ID objek pengguna Microsoft Entra menggunakan az ad user list dan ganti <user-principal-name>. Hasilnya disimpan ke variabel.

    $azureaduser=(az ad user list --filter "userPrincipalName eq '<user-principal-name>'" --query '[].id' --output tsv)
    

    Tip

    Untuk melihat daftar semua nama utama pengguna di ID Microsoft Entra, jalankan az ad user list --query '[].userPrincipalName'.

  3. Tambahkan pengguna Microsoft Entra ini sebagai admin Direktori Aktif menggunakan az sql server ad-admin create perintah di Cloud Shell. Dalam perintah berikut, ganti <server-name> dengan nama server (tanpa akhiran .database.windows.net).

    az sql server ad-admin create --resource-group myResourceGroup --server-name <server-name> --display-name ADMIN --object-id $azureaduser
    

Untuk informasi selengkapnya tentang menambahkan admin Direktori Aktif, lihat Menyediakan administrator Microsoft Entra untuk server Anda

2. Menyiapkan lingkungan pengembangan Anda

  1. Visual Studio untuk Windows terintegrasi dengan autentikasi Microsoft Entra. Untuk mengaktifkan pengembangan dan penelusuran kesalahan di Visual Studio, tambahkan pengguna Microsoft Entra Anda di Visual Studio dengan memilih Akun File>Pengaturan dari menu, dan pilih Masuk atau Tambahkan.

  2. Untuk mengatur pengguna Microsoft Entra untuk autentikasi layanan Azure, pilih Opsi Alat>dari menu, lalu pilih Pilihan Akun Autentikasi>Layanan Azure. Pilih pengguna Microsoft Entra yang Anda tambahkan dan pilih OK.

Untuk informasi selengkapnya tentang menyiapkan lingkungan pengembangan Anda untuk autentikasi Microsoft Entra, lihat Pustaka klien Azure Identity untuk .NET.

Anda sekarang siap untuk mengembangkan dan men-debug aplikasi Anda dengan SQL Database sebagai ujung belakang, menggunakan autentikasi Microsoft Entra.

3. Mengubah proyek Anda

Catatan

Microsoft.Azure.Services.AppAuthentication tidak lagi disarankan untuk digunakan dengan Azure SDK baru. Ini digantikan dengan pustaka klien Azure Identity baru yang tersedia untuk .NET, Java, TypeScript dan Python dan harus digunakan untuk semua pengembangan baru. Informasi tentang cara bermigrasi ke Azure Identity dapat ditemukan di sini: Panduan Migrasi AppAuthentication ke Azure.Identity.

Langkah-langkah yang Anda ikuti untuk proyek Bergantung pada apakah Anda menggunakan Entity Framework Core (default untuk ASP.NET Core) atau Entity Framework (default untuk ASP.NET).

  1. Di Visual Studio, buka Konsol Manajer Paket dan tambahkan paket NuGet Microsoft.Data.SqlClient:

    Install-Package Microsoft.Data.SqlClient -Version 5.1.0
    
  2. Dalam tutorial ASP.NET Core dan SQL Database, MyDbConnection string koneksi di appsettings.json belum digunakan sama sekali. Lingkungan lokal dan lingkungan Azure keduanya mendapatkan string koneksi dari variabel lingkungan masing-masing agar rahasia koneksi tetap di luar file sumber. Tetapi sekarang dengan autentikasi Active Directory, tidak ada lagi rahasia. Dalam appsettings.json, ganti nilai string koneksi MyDbConnection dengan:

    "Server=tcp:<server-name>.database.windows.net;Authentication=Active Directory Default; Database=<database-name>;"
    

    Catatan

    Jenis autentikasi Default Active Directory dapat digunakan baik di komputer lokal Anda maupun di Azure App Service. Driver mencoba memperoleh token dari MICROSOFT Entra ID menggunakan berbagai cara. Jika aplikasi disebarkan, aplikasi akan mendapatkan token dari identitas terkelola yang ditetapkan sistem aplikasi. Ini juga dapat mengautentikasi dengan identitas terkelola yang ditetapkan pengguna jika Anda menyertakan: User Id=<client-id-of-user-assigned-managed-identity>; di string koneksi Anda. Jika aplikasi berjalan secara lokal, aplikasi tersebut mencoba mendapatkan token dari Visual Studio, Visual Studio Code, dan Azure CLI.

    Ini adalah semua yang perlu Anda hubungkan ke SQL Database. Saat Anda men-debug di Visual Studio, kode Anda menggunakan pengguna Microsoft Entra yang Anda konfigurasikan dalam 2. Siapkan lingkungan dev Anda. Anda akan menyiapkan SQL Database nanti untuk mengizinkan koneksi dari identitas terkelola aplikasi App Service Anda. Kelas DefaultAzureCredential menyimpan token dalam memori dan mengambilnya dari ID Microsoft Entra tepat sebelum kedaluwarsa. Anda tidak memerlukan kode kustom untuk menyegarkan token.

  3. Ketik Ctrl+F5 untuk menjalankan aplikasi lagi. Aplikasi CRUD yang sama di browser Anda sekarang terhubung ke Azure SQL Database secara langsung, menggunakan autentikasi Microsoft Entra. Penyiapan ini memungkinkan Anda menjalankan migrasi database dari Visual Studio.

4. Menggunakan konektivitas identitas terkelola

Selanjutnya, Anda mengonfigurasi aplikasi App Service untuk terhubung ke SQL Database dengan identitas terkelola yang ditetapkan sistem.

Catatan

Meskipun instruksi di bagian ini adalah untuk identitas yang ditetapkan sistem, identitas yang ditetapkan pengguna dapat sama mudahnya digunakan. Untuk melakukan ini. Anda akan memerlukan mengubah az webapp identity assign command untuk menetapkan identitas yang ditetapkan pengguna yang diinginkan. Kemudian, saat membuat pengguna SQL, pastikan untuk menggunakan nama sumber daya identitas yang ditetapkan pengguna dan bukan nama situs.

Mengaktifkan identitas terkelola di aplikasi

Untuk mengaktifkan identitas terkelola untuk aplikasi Azure Anda, gunakan perintah az webapp identity assign di Cloud Shell. Dalam perintah berikut, ganti <app-name>.

az webapp identity assign --resource-group myResourceGroup --name <app-name>

Catatan

Untuk mengaktifkan identitas terkelola untuk slot penyebaran, tambahkan --slot <slot-name> dan gunakan nama slot dalam <slot-name>.

Berikut adalah contoh output-nya:

{
  "additionalProperties": {},
  "principalId": "21dfa71c-9e6f-4d17-9e90-1d28801c9735",
  "tenantId": "72f988bf-86f1-41af-91ab-2d7cd011db47",
  "type": "SystemAssigned"
}

Memberikan izin ke identitas terkelola

Catatan

Jika mau, Anda dapat menambahkan identitas ke grup Microsoft Entra, lalu memberikan akses SQL Database ke grup Microsoft Entra alih-alih identitas. Misalnya, perintah berikut menambahkan identitas terkelola dari langkah sebelumnya ke grup baru yang disebut myAzureSQLDBAccessGroup:

$groupid=(az ad group create --display-name myAzureSQLDBAccessGroup --mail-nickname myAzureSQLDBAccessGroup --query objectId --output tsv)
$msiobjectid=(az webapp identity show --resource-group myResourceGroup --name <app-name> --query principalId --output tsv)
az ad group member add --group $groupid --member-id $msiobjectid
az ad group member list -g $groupid
  1. Di Cloud Shell, masuk ke SQL Database dengan menggunakan perintah SQLCMD. Ganti <nama> server dengan nama server Anda, <db-name> dengan nama database yang digunakan aplikasi Anda, dan< aad-user-name> dan< aad-password> dengan kredensial pengguna Microsoft Entra Anda.

    sqlcmd -S <server-name>.database.windows.net -d <db-name> -U <aad-user-name> -P "<aad-password>" -G -l 30
    
  2. Dalam perintah SQL untuk database yang Anda inginkan, jalankan perintah berikut untuk memberikan izin minimum yang dibutuhkan aplikasi Anda. Contohnya,

    CREATE USER [<identity-name>] FROM EXTERNAL PROVIDER;
    ALTER ROLE db_datareader ADD MEMBER [<identity-name>];
    ALTER ROLE db_datawriter ADD MEMBER [<identity-name>];
    ALTER ROLE db_ddladmin ADD MEMBER [<identity-name>];
    GO
    

    <nama> identitas adalah nama identitas terkelola di ID Microsoft Entra. Jika identitas ditetapkan sistem, nama tersebut selalu sama dengan nama aplikasi App Service Anda. Untuk slot penyebaran, nama identitas yang ditetapkan sistemnya adalah <app-name>/slots/<slot-name>. Untuk memberikan izin untuk grup Microsoft Entra, gunakan nama tampilan grup sebagai gantinya (misalnya, myAzureSQLDBAccessGroup).

  3. Ketik EXIT untuk kembali ke prompt Cloud Shell.

    Catatan

    Layanan back-end identitas terkelola juga mempertahankan cache token yang memperbarui token untuk sumber daya target hanya ketika kedaluwarsa. Jika Anda membuat kesalahan mengonfigurasi izin SQL Database Anda dan mencoba mengubah izin setelah mencoba mendapatkan token dengan aplikasi Anda, Anda tidak benar-benar mendapatkan token baru dengan izin yang diperbarui sampai token yang di-cache kedaluwarsa.

    Catatan

    ID Microsoft Entra dan identitas terkelola tidak didukung untuk SQL Server lokal.

Ubah string koneksi

Ingat bahwa perubahan yang sama dengan yang Anda buat di Web.config atau appsettings.json bekerja dengan identitas terkelola, jadi satu-satunya hal yang harus dilakukan adalah menghapus string koneksi yang ada di App Service, yang dibuat Visual Studio menyebarkan aplikasi Anda untuk pertama kalinya. Gunakan perintah berikut, tetapi ganti <app-name> dengan nama aplikasi Anda.

az webapp config connection-string delete --resource-group myResourceGroup --name <app-name> --setting-names MyDbConnection

5. Menerbitkan perubahan Anda

Yang tersisa sekarang adalah menerbitkan perubahan Anda ke Azure.

  1. Jika Anda berasal dari Tutorial: Membuat aplikasi ASP.NET di Azure dengan SQL Database, terbitkan perubahan Anda di Visual Studio. Di Penjelajah Solusi, klik kanan proyek DotNetAppSqlDb Anda dan pilih Terbitkan.

    Menerbitkan dari Penjelajah Solusi

  2. Di halaman terbitkan, pilih Terbitkan.

    Penting

    Pastikan nama layanan aplikasi Anda tidak cocok dengan Pendaftaran Aplikasi yang ada. Hal ini akan menyebabkan konflik ID Utama.

Saat halaman web baru menampilkan daftar tugas Anda, aplikasi Anda terhubung ke database menggunakan identitas terkelola.

Aplikasi Azure setelah Migrasi Pertama Kode

Anda sekarang dapat mengedit daftar tugas seperti sebelumnya.

Membersihkan sumber daya

Di langkah-langkah sebelumnya, Anda membuat sumber daya Azure dalam grup sumber daya. Jika Anda tidak membutuhkan sumber daya ini di masa mendatang, hapus grup sumber daya dengan menjalankan perintah berikut ini di Cloud Shell:

az group delete --name myResourceGroup

Perintah ini mungkin perlu waktu beberapa saat untuk dijalankan.

Langkah berikutnya

Apa yang Anda pelajari:

  • Mengaktifkan identitas terkelola
  • Memberikan akses SQL Database ke identitas terkelola
  • Mengonfigurasi Entity Framework untuk menggunakan autentikasi Microsoft Entra dengan SQL Database
  • Koneksi ke SQL Database dari Visual Studio menggunakan autentikasi Microsoft Entra