Microsoft Entra perwakilan layanan dengan Azure SQL

Aplikasi ke:Azure SQL DatabaseAzure SQL Managed Instance

Sumber daya Azure SQL mendukung akses programatik untuk aplikasi yang menggunakan prinsipal layanan dan identitas terkelola di Microsoft Entra ID (sebelumnya Azure Active Directory).

Dukungan prinsipal layanan (aplikasi Microsoft Entra)

Artikel ini berlaku untuk aplikasi yang terdaftar di Microsoft Entra ID. Menggunakan kredensial aplikasi untuk mengakses Azure SQL mendukung prinsip keamanan Pemisahan Tugas, memungkinkan organisasi untuk mengonfigurasi akses yang tepat untuk setiap aplikasi yang terhubung ke database mereka. Managed Identities, sebagai bentuk khusus dari perwakilan layanan, direkomendasikan karena bersifat tanpa kata sandi dan menghilangkan kebutuhan akan kredensial yang dikelola oleh pengembang.

Microsoft Entra ID lebih lanjut memungkinkan skenario autentikasi tingkat lanjut seperti OAuth 2.0 On-Behalf-Of Flow (OBO). OBO memungkinkan aplikasi untuk meminta kredensial pengguna yang masuk, untuk skenario ketika aplikasi itu sendiri tidak boleh diberikan akses database tanpa izin yang didelegasikan.

Untuk informasi selengkapnya tentang aplikasi Microsoft Entra, lihat objek Aplikasi dan perwakilan layanan di Microsoft Entra ID dan Buat perwakilan layanan Azure dengan Azure PowerShell.

Pembuatan pengguna Microsoft Entra menggunakan prinsip layanan

Mendukung fungsionalitas ini berguna dalam Microsoft Entra proses otomatisasi aplikasi di mana prinsipal Microsoft Entra dibuat dan dikelola dalam SQL Database atau SQL Managed Instance tanpa interaksi manusia. Perwakilan layanan dapat menjadi admin Microsoft Entra untuk server logis SQL atau instans terkelola, sebagai bagian dari grup atau sebagai identitas mandiri. Aplikasi ini dapat mengotomatiskan pembuatan objek Microsoft Entra di SQL Database atau SQL Managed Instance, memungkinkan otomatisasi penuh pembuatan pengguna database.

Mengaktifkan entitas layanan untuk membuat pengguna Microsoft Entra

Saat menggunakan aplikasi untuk mengakses Azure SQL, diperlukan izin untuk membuat pengguna dan login Microsoft Entra yang tidak ditetapkan ke perwakilan layanan atau identitas terkelola secara default: kemampuan untuk membaca data pengguna, grup, dan aplikasi dalam penyewa dari *Microsoft Graph*. Izin ini diperlukan agar mesin SQL memvalidasi identitas yang ditentukan di CREATE LOGIN atau CREATE USER, dan menarik informasi penting termasuk Objek identitas atau ID Aplikasi, yang digunakan untuk membuat login atau pengguna.

Saat pengguna Microsoft Entra menjalankan perintah ini, aplikasi Microsoft menggunakan izin yang didelegasikan untuk meniru pengguna yang masuk dan melakukan kueri ke Microsoft Graph menggunakan izin mereka. Alur ini tidak dapat dilakukan dengan prinsipal layanan, karena aplikasi tidak dapat meniru aplikasi lain. Sebagai gantinya, mesin SQL mencoba menggunakan identitas servernya, yang merupakan identitas terkelola utama yang ditetapkan ke instans terkelola SQL, Azure SQL server logis, atau ruang kerja Azure Synapse. Identitas server harus ada dan memiliki izin kueri Microsoft Graph, atau operasi akan gagal.

Langkah-langkah berikut menjelaskan cara menetapkan identitas terkelola Microsoft ke server dan menetapkannya izin Microsoft Graph untuk mengaktifkan prinsipal layanan membuat pengguna Microsoft Entra dan login ke database.

  1. Tetapkan identitas server. Identitas server dapat menjadi identitas terkelola yang ditetapkan sistem atau ditetapkan pengguna. Untuk informasi selengkapnya, lihat managed identities di Microsoft Entra untuk Azure SQL.

    • Perintah PowerShell berikut membuat server logis baru yang disediakan dengan identitas terkelola yang ditetapkan sistem:
    $newServerParams = @{
        ResourceGroupName        = '<resource group>'
        Location                 = '<Location name>'
        ServerName               = '<Server name>'
        ServerVersion            = '12.0'
        SqlAdministratorCredentials = (Get-Credential)
        AssignIdentity           = $true
    }
    New-AzSqlServer @newServerParams
    

    Untuk informasi selengkapnya, lihat perintah New-AzSqlServer, atau perintah New-AzSqlInstance untuk SQL Managed Instance.

    • Untuk server logis yang ada, jalankan perintah berikut untuk menambahkan identitas terkelola yang ditetapkan sistem ke dalamnya:
    $setServerParams = @{
        ResourceGroupName = '<resource group>'
        ServerName        = '<Server name>'
        AssignIdentity    = $true
    }
    Set-AzSqlServer @setServerParams
    

    Untuk informasi selengkapnya, lihat perintah Set-AzSqlServer, atau perintah Set-AzSqlInstance untuk SQL Managed Instance.

    Catatan

    Identitas server juga dapat ditetapkan menggunakan perintah REST API dan CLI. Untuk informasi selengkapnya, lihat buat server az sql, perbarui server az sql, dan Servers - REST API.

  2. Berikan izin identitas server untuk mengkueri Microsoft Graph. Ini dapat dilakukan dengan beberapa cara: dengan menambahkan identitas ke peran Microsoft Entra Directory Readers, dengan menetapkan izin Microsoft Graph secara individu untuk identitas tersebut, atau dengan menambahkan identitas ke grup yang dapat ditetapkan peran dan memiliki peran Directory Readers:

    • Menambahkan identitas server ke grup yang dapat ditetapkan peran

      Di lingkungan produksi, disarankan agar administrator penyewa membuat grup yang dapat diberi peran dan menetapkan peran Pembaca Direktori kepadanya. Pemilik grup kemudian dapat menambahkan identitas server ke grup, mewarisi izin tersebut. Ini menghapus persyaratan bagi Administrator Peran Istimewa untuk memberikan izin ke setiap identitas server individual, memungkinkan administrator untuk mendelegasikan penetapan izin kepada pemilik grup untuk skenario ini. Untuk informasi lebih lanjut, lihat peran Directory Readers di Microsoft Entra ID untuk Azure SQL.

    • Menetapkan izin Microsoft Graph ke identitas server

      Untuk menetapkan izin Microsoft Graph individual ke identitas server, Anda harus memiliki peran Microsoft Entra Administrator Peran Istimewa. Ini direkomendasikan daripada menetapkan Pembaca Direktori sebagai peran, karena ada izin dalam peran tersebut yang tidak diperlukan oleh identitas server. Menetapkan izin baca Microsoft Graph hanya untuk individu membatasi izin identitas server pada penyewa Anda dan mempertahankan prinsip hak istimewa paling sedikit. Untuk petunjuk, lihat Identitas Terkelola di Microsoft Entra untuk Azure SQL.

    • Menambahkan identitas server ke peran Pembaca Direktori

      Untuk menambahkan identitas server ke peran Directory Readers, Anda harus menjadi anggota peran Microsoft Entra Privileged Roles Administrator. Di lingkungan produksi, opsi ini tidak disarankan karena dua alasan: peran Pembaca Direktori memberikan lebih banyak izin daripada yang diperlukan identitas server, dan proses penetapan peran masih memerlukan persetujuan administrator untuk setiap identitas server (tidak seperti menggunakan grup). Ikuti instruksi SQL Managed Instance yang tersedia dalam artikel Tetapkan Admin Microsoft Entra (SQL Managed Instance).

Troubleshoot

Saat memecahkan masalah, Anda mungkin mengalami kesalahan berikut:

Msg 33134, Level 16, State 1, Line 1
Principal 'test-user' could not be resolved.
Error message: 'Server identity is not configured. Please follow the steps in "Assign an Azure AD identity to your server and add Directory Reader permission to your identity" (https://aka.ms/sqlaadsetup)'

Kesalahan ini menunjukkan bahwa identitas server belum dibuat atau belum ditetapkan izin Microsoft Graph. Ikuti langkah-langkah untuk Menetapkan identitas ke server logis dan Menetapkan izin Pembaca Direktori ke identitas server logis.

Batasan

  • Prinsip layanan tidak dapat mengautentikasi melewati batas antar penyewa. Mencoba mengakses SQL Database atau SQL Managed Instance menggunakan aplikasi Microsoft Entra yang dibuat di penyewa (tenant) berbeda mengalami kegagalan.

  • Az.Sql 2.9.0 modul atau yang lebih tinggi diperlukan untuk mengatur aplikasi Microsoft Entra sebagai admin Microsoft Entra untuk Azure SQL. Pastikan Anda menggunakan modul terbaru.

Menyambungkan ke Azure SQL dengan perwakilan layanan

Untuk menyambungkan aplikasi ke Azure SQL Database menggunakan perwakilan layanan, Anda memerlukan:

  1. Pendaftaran aplikasi di Microsoft Entra ID dengan ID Aplikasi (klien) dan rahasia klien atau sertifikat. Untuk beban kerja produksi, gunakan identitas terkelola sebagai gantinya — identitas terkelola menghilangkan kebutuhan akan kredensial yang dikelola pengembang.

  2. Pengguna database mandiri yang dipetakan ke perwakilan layanan. Sambungkan sebagai admin Microsoft Entra dan jalankan:

    CREATE USER [my-sql-app] FROM EXTERNAL PROVIDER;
    ALTER ROLE db_datareader ADD MEMBER [my-sql-app];
    

    Ganti my-sql-app dengan nama tampilan pendaftaran aplikasi Anda. Tetapkan peran database yang sesuai berdasarkan kebutuhan akses aplikasi.

  3. A connection string yang menentukan autentikasi /> ID Aplikasi (klien) sebagai nama pengguna dan rahasia klien sebagai kata sandi.

Untuk panduan lengkap termasuk pendaftaran aplikasi dan penyiapan izin, lihat Tutorial: Membuat pengguna Microsoft Entra menggunakan aplikasi Microsoft Entra. Untuk contoh koneksi khusus driver, lihat Hubungkan ke Azure SQL dengan autentikasi Microsoft Entra dan SqlClient.