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 Azure AD dengan SQL Database
  • Menyambungkan ke SQL Database dari Visual Studio menggunakan autentikasi Microsoft Azure AD

Catatan

Autentikasi Microsoft Azure AD berbeda dengan autentikasi Integrated Windows di Direktori Aktif (AD DS) lokal. AD DS dan Microsoft Azure AD menggunakan protokol autentikasi yang sama sekali berbeda. Untuk informasi selengkapnya, lihat Dokumentasi Azure AD 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.

Persiapkan lingkungan Anda untuk Azure CLI.

1. Memberikan akses database ke pengguna Azure AD

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

  1. Jika penyewa Azure AD Anda belum memiliki pengguna, buat dengan mengikuti langkah-langkah di Menambahkan atau menghapus pengguna menggunakan Azure Active Directory.

  2. Temukan ID objek pengguna Azure AD 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 prinsipal pengguna di Microsoft Azure AD, jalankan az ad user list --query '[].userPrincipalName'.

  3. Tambahkan pengguna Azure AD ini sebagai admin Direktori Aktif menggunakan perintah az sql server ad-admin create 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 Memprovisi administrator Azure Active Directory untuk server Anda

2. Menyiapkan lingkungan pengembangan Anda

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

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

Untuk informasi selengkapnya tentang menyiapkan lingkungan pengembangan Anda untuk autentikasi Azure Active Directory, lihat pustaka klien Identitas Azure untuk .NET.

Kini Anda siap mengembangkan dan men-debug aplikasi dengan SQL Database sebagai back end, menggunakan autentikasi Microsoft Azure AD.

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. Pengemudi mencoba untuk mendapatkan token dari Azure Active Directory menggunakan berbagai cara. Jika aplikasi disebarkan, aplikasi tersebut mendapat token dari identitas terkelola aplikasi. 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 Azure AD yang Anda konfigurasikan di 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 Microsoft Azure AD 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 kini terhubung ke Azure SQL Database secara langsung, menggunakan autentikasi Microsoft Azure AD. 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 pada 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 diinginkan, Anda bisa menambahkan identitas ke grup Microsoft Azure AD, lalu beri akses SQL Database ke grup Azure AD dan bukan 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 <server-name> dengan nama server, <db-name> dengan nama database yang digunakan aplikasi Anda, dan <aad-user-name> dan <aad-password> dengan informasi masuk pengguna Azure AD 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. Misalnya,

    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
    

    <identity-name> adalah nama identitas terkelola di Azure AD. 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 Azure AD, gunakan nama display 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

    Azure Active Directory dan identitas terkelola tidak didukung untuk SQL Server lokal.

Mengubah 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.

    Terbitkan 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

Dalam langkah-langkah sebelumnya, Anda membuat sumber daya Azure dalam grup sumber daya. Jika Anda tidak ingin 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 satu menit 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 Azure AD dengan SQL Database
  • Menyambungkan ke SQL Database dari Visual Studio menggunakan autentikasi Microsoft Azure AD