Bagikan melalui


Tutorial: Menggunakan identitas terkelola untuk menyambungkan aplikasi web Azure ke database Azure SQL tanpa rahasia

Azure App Service menyediakan layanan hosting web yang sangat dapat diskalakan dan di-patch sendiri di Azure. App Service juga menyediakan identitas terkelola untuk aplikasi Anda, yang merupakan solusi turnkey untuk mengamankan akses ke Azure SQL dan layanan Azure lainnya. Identitas terkelola di App Service membuat aplikasi Anda lebih aman dengan menghilangkan rahasia, seperti kredensial dalam string koneksi.

Tutorial ini menunjukkan kepada Anda cara menambahkan identitas terkelola ke sampel aplikasi .NET yang memiliki backend Azure SQL. Setelah selesai, aplikasi Anda dapat tersambung ke database Azure SQL dengan aman tanpa perlu nama pengguna dan kata sandi.

Diagram arsitektur untuk skenario tutorial.

Di tutorial ini, Anda akan:

  • Aktifkan identitas terkelola.
  • Berikan akses Azure SQL Database ke identitas terkelola.
  • Konfigurasikan Kerangka Kerja Entitas untuk menggunakan autentikasi Microsoft Entra dengan SQL Database.
  • Sambungkan ke SQL Database dari Visual Studio menggunakan autentikasi Microsoft Entra.

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

Catatan

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

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

Prasyarat

Memberikan akses admin database ke pengguna Microsoft Entra

Aktifkan autentikasi Microsoft Entra ke database Azure SQL dengan menetapkan pengguna Microsoft Entra sebagai admin server Azure SQL. Admin Microsoft Entra harus merupakan pengguna yang dibuat, diimpor, disinkronkan, atau diundang ke id Microsoft Entra. Pengguna ini mungkin tidak sama dengan pengguna akun Microsoft untuk langganan Azure Anda.

Jalankan perintah berikut di lingkungan Bash Azure Cloud Shell, atau setelah masuk ke Azure CLI secara lokal.

  1. Gunakan az ad user list dengan display-nameparameter , , filteratau upn untuk mendapatkan ID objek untuk pengguna ID Microsoft Entra yang ingin Anda jadikan admin. Jalankan az ad user list mandiri untuk menampilkan informasi bagi semua pengguna di direktori Microsoft Entra.

    Misalnya, perintah berikut mencantumkan informasi untuk pengguna ID Microsoft Entra dengan display-name Nama Belakang Nama Depan.

    az ad user list --display-name "Firstname Lastname"
    

    Berikut adalah contoh output:

     "businessPhones": [],
     "displayName": "Firstname Lastname",
     "givenName": null,
     "id": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
     "jobTitle": null,
     "mail": "firstname@contoso.com",
     "mobilePhone": null,
     "officeLocation": null,
     "preferredLanguage": null,
     "surname": null,
     "userPrincipalName": "firstname@contoso.com"
    
  2. Tambahkan pengguna ID Microsoft Entra sebagai admin di server Azure SQL dengan menggunakan az sql server ad-admin create dengan object-id parameter . Dalam perintah berikut, ganti <server-name> dengan nama server Anda tanpa akhiran .database.windows.net, dan ganti <entra-id> dengan nilai id dari output perintah az ad user list sebelumnya.

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

Menyiapkan konektivitas identitas terkelola untuk aplikasi

Langkah-langkah berikut mengonfigurasi aplikasi Anda untuk menyambungkan ke Azure SQL Database dengan menggunakan identitas terkelola yang ditetapkan sistem. Untuk menggunakan identitas yang ditetapkan pengguna, lihat Tutorial: Menyambungkan ke database Azure dari App Service tanpa rahasia menggunakan identitas terkelola.

Mengaktifkan identitas terkelola untuk aplikasi

Untuk mengaktifkan identitas terkelola untuk aplikasi Azure Anda, gunakan perintah az webapp identity assign , ganti <app-name> dengan nama aplikasi Anda. Nama identitas yang ditetapkan sistem selalu sama dengan nama aplikasi.

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

Berikut adalah contoh output-nya:

{
  "additionalProperties": {},
  "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222",
  "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
  "type": "SystemAssigned"
}

Untuk mengaktifkan identitas terkelola untuk slot penyebaran, tambahkan --slot <slot-name> ke perintah sebelumnya dan gunakan nama slot di <slot-name>. Nama identitas yang ditetapkan sistem untuk slot penyebaran adalah <app-name>/slots/<slot-name>.

Anda juga dapat menambahkan identitas ke grup Microsoft Entra, lalu memberikan akses SQL Database ke grup Microsoft Entra alih-alih ke identitas. Untuk memberikan izin untuk grup Microsoft Entra, gunakan nama tampilan grup. Perintah berikut menambahkan contoh identitas terkelola 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

Memberikan izin ke identitas terkelola

Berikan identitas izin minimum yang dibutuhkan aplikasi Anda.

  1. Buka baris perintah PowerShell dan masuk ke SQL Database dengan menggunakan perintah SQLCMD berikut. Ganti <server-name> dengan nama server Anda, <db-name> dengan nama database Anda, dan <admin-user> dengan userPrincipalName pengguna admin dari output perintah sebelumnya az ad user list .

    sqlcmd -S <servername>.database.windows.net -d <db-name> -U <admin-user> -G -l 30
    

    Ikuti permintaan untuk masuk.

  2. Pada perintah SQL, jalankan perintah berikut untuk memberi aplikasi izin minimum yang dibutuhkan pada database. Ganti <identity-name> dengan nama identitas terkelola di ID Microsoft Entra, yang sama dengan nama aplikasi.

    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
    

Catatan

Layanan identitas backend yang dikelola mempertahankan cache token yang hanya memperbarui token ketika kedaluwarsa untuk sumber daya target. Jika Anda mencoba mengubah izin SQL Database setelah terlebih dahulu mendapatkan token dengan aplikasi, Anda tidak mendapatkan token baru dengan izin yang diperbarui hingga token yang di-cache kedaluwarsa.

Menghapus string koneksi asli

Setiap perubahan yang Anda buat di web.config atau appsettings.json berfungsi dengan identitas terkelola. Anda dapat menghapus string koneksi asli yang Anda gunakan saat menyebarkan aplikasi untuk pertama kalinya. Untuk menghapus string koneksi, jalankan perintah Azure CLI berikut, ganti <app-name> dengan nama aplikasi Anda dan <connection-string-name> dengan nama string koneksi Anda.

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

Menyiapkan lingkungan pengembangan Anda

Siapkan lingkungan pengembangan yang Anda pilih dan masuk ke Azure. Untuk informasi selengkapnya tentang menyiapkan lingkungan pengembangan Anda untuk autentikasi Microsoft Entra, lihat Pustaka klien Azure Identity untuk .NET.

Visual Studio untuk Windows terintegrasi dengan autentikasi Microsoft Entra.

  1. Untuk mengaktifkan pengembangan dan penelusuran kesalahan di Visual Studio, tambahkan pengguna Microsoft Entra Anda di Visual Studio dengan memilihPengaturan AkunFile> dari menu atas, lalu pilih Masuk atau Tambahkan.
  2. Untuk mengatur pengguna Microsoft Entra untuk autentikasi layanan Azure, pilihOpsiAlat> dari menu atas, lalu pilihPilihan AkunAutentikasi> Layanan Azure. Pilih pengguna Microsoft Entra yang Anda tambahkan dan pilih OK.

Mengubah proyek Anda dan menerbitkan aplikasi Anda

Aplikasi web yang didukung database Azure SQL Anda menggunakan konteks database untuk menyambungkan dengan database. Untuk menggunakan autentikasi Microsoft Entra agar berfungsi dengan aplikasi, Anda harus memperbarui konteks database untuk merujuk ke penyedia Entity Framework SQL Server, yang bergantung pada penyedia ADO.NET Microsoft.Data.SqlClient modern.

Penyedia Entity Framework menggantikan penyedia SQL Server bawaan System.Data.SqlClient , dan menyertakan dukungan untuk metode autentikasi ID Microsoft Entra. Untuk informasi selengkapnya, lihat Microsoft.EntityFramework.SqlServer.

[DbConfigurationType(typeof(MicrosoftSqlDbConfiguration))] bekerja secara lokal untuk digunakan Microsoft.Data.SqlClient untuk konteks database, tetapi karena System.Data.SqlClient dikodekan secara permanen sebagai penyedia di Azure App Service, Anda harus memperluas MicrosoftSqlDbConfiguration untuk mengalihkan System.Data.SqlClient referensi ke Microsoft.Data.SqlClient sebagai gantinya. Langkah-langkahnya berbeda tergantung pada apakah Anda memiliki aplikasi ASP.NET atau ASP.NET Core.

Aplikasi ASP.NET Core menggunakan Entity Framework Core secara default.

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

    Install-Package Microsoft.Data.SqlClient
    
  2. Di appsettings.json, ganti nilai string koneksi dengan kode berikut, ganti <server-name dan <database-name> dengan nama server dan nama database Anda.

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

    Catatan

    Anda dapat menggunakan otentikasi Active Directory Default baik di komputer lokal Anda maupun di Azure App Service. Driver dapat memperoleh token dari MICROSOFT Entra ID dengan beberapa cara berbeda.

    Jika aplikasi disebarkan, driver mendapatkan token dari identitas terkelola yang ditetapkan sistem aplikasi. Driver juga dapat mengautentikasi dengan identitas terkelola yang ditetapkan pengguna jika Anda menyertakan User Id=<client-id-of-user-assigned-managed-identity>; dalam string koneksi Anda.

    Kelas DefaultAzureCredential menyimpan token dalam memori dan mengambilnya dari ID Microsoft Entra sebelum kedaluwarsa. Anda tidak memerlukan kode kustom untuk menyegarkan token.

    Anda sekarang memiliki semua yang Anda butuhkan untuk menyambungkan ke Azure SQL Database saat Anda men-debug di Visual Studio. Kode Anda menggunakan pengguna Microsoft Entra yang Anda konfigurasi saat menyiapkan lingkungan dev Anda.

  3. Jalankan aplikasi Anda. Aplikasi CRUD di browser Anda terhubung ke database Azure SQL secara langsung, menggunakan autentikasi Microsoft Entra. Penyiapan ini memungkinkan Anda menjalankan migrasi database dari Visual Studio.

  4. Terbitkan perubahan Anda menggunakan perintah Git berikut:

    git commit -am "configure managed identity"
    git push azure main
    

Menguji aplikasi

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

Cuplikan layar yang memperlihatkan aplikasi Azure setelah Migrasi Pertama Kode.

Sekarang Anda dapat mengedit daftar to-do.

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.