Tutorial: Membuat pengguna Azure Active Directory menggunakan aplikasi Microsoft Azure Active Directory

BERLAKU UNTUK: Azure SQL Database

Artikel ini membawa Anda melalui proses pembuatan pengguna Microsoft Azure Active Directory di Azure SQL Database, menggunakan perwakilan layanan Azure (aplikasi Microsoft Azure Active Directory). Fungsionalitas ini sudah ada di Azure SQL Managed Instance, tetapi sekarang mulai diperkenalkan di Azure SQL Database. Untuk mendukung skenario ini, Identitas Azure Active Directory harus dibuat dan ditetapkan ke server logika Azure SQL.

Untuk informasi selengkapnya tentang autentikasi Azure Active Directory untuk Azure SQL, lihat artikel Menggunakan autentikasi Microsoft Azure Active Directory.

Dalam tutorial ini, Anda akan belajar cara:

  • Menetapkan identitas ke server logika Azure SQL
  • Menetapkan izin Pembaca Direktori ke identitas server logis SQL
  • Membuat perwakilan layanan (aplikasi Azure Active Directory) di Azure Active Directory
  • Membuat pengguna perwakilan layanan di Azure SQL Database
  • Membuat pengguna Microsoft Azure Active Directory yang berbeda di SQL Database menggunakan pengguna perwakilan layanan Microsoft Azure Active Directory

Prasyarat

  • Penyebaran Azure SQL Database yang sudah ada. Kami menganggap Anda memiliki SQL Database yang berfungsi untuk tutorial ini.
  • Akses ke Azure Active Directory yang sudah ada.
  • Modul Az.Sql 2.9.0 atau yang lebih tinggi diperlukan saat menggunakan PowerShell untuk menyiapkan aplikasi Microsoft Azure Active Directory individual sebagai admin Microsoft Azure Active Directory untuk Azure SQL. Pastikan Anda ditingkatkan ke modul terbaru.

Menetapkan identitas ke server logika Azure SQL

  1. Sambungkan ke Azure Active Directory Anda. Anda harus menemukan ID Penyewa Anda. Ini dapat ditemukan dengan masuk ke portal Microsoft Azure, dan masuk ke sumber daya Microsoft Azure Active Directory Anda. Di panel Gambaran Umum, Anda akan melihat ID Penyewa Anda. Jalankan perintah PowerShell berikut ini:

    • Ganti <TenantId> dengan ID Penyewa Anda.
    Connect-AzAccount -Tenant <TenantId>
    

    Catat untuk TenantId digunakan di masa mendatang dalam tutorial ini.

  2. Hasilkan dan tetapkan Identitas Microsoft Azure Active Directory ke server logika Azure SQL. Jalankan perintah PowerShell berikut ini:

    • Ganti <resource group> dan <server name> dengan sumber daya Anda. Jika nama server Anda adalah myserver.database.windows.net, ganti <server name> dengan myserver.
    Set-AzSqlServer -ResourceGroupName <resource group> -ServerName <server name> -AssignIdentity
    

    Untuk informasi selengkapnya, lihat perintah Set-AzSqlServer.

    Penting

    Jika identitas Microsoft Azure Active Directory disiapkan untuk server logis Azure SQL, izin Pembaca Direktori harus di berikan kepada identitas tersebut. Kami akan melalui langkah ini di bagian berikut. Jangan lompati langkah ini karena autentikasi Microsoft Azure Active Directory akan berhenti berfungsi.

    • Jika Anda menggunakan perintah New-AzSqlServer dengan parameter AssignIdentity untuk pembuatan server SQL baru di masa lalu, Anda harus menjalankan perintah Set-AzSqlServer setelah itu sebagai perintah terpisah untuk mengaktifkan properti ini di kain Azure.
  3. Periksa identitas server berhasil ditetapkan. Jalankan perintah PowerShell berikut ini:

    • Ganti <resource group> dan <server name> dengan sumber daya Anda. Jika nama server Anda adalah myserver.database.windows.net, ganti <server name> dengan myserver.
    $xyz = Get-AzSqlServer  -ResourceGroupName <resource group> -ServerName <server name>
    $xyz.identity
    

    Output Anda harus menunjukkan kepada Anda PrincipalId, Type, dan TenantId. Identitas yang ditugaskan adalah PrincipalId.

  4. Anda juga dapat memeriksa identitas dengan masuk ke portal Microsoft Azure.

    • Di bawah sumber daya Azure Active Directory, buka Aplikasi perusahaan. Ketik nama server logis SQL Anda. Anda akan melihat bahwa ia memiliki ID Objek yang terlampir di sumber dayanya.

    id-objek

Menetapkan izin Pembaca Direktori ke identitas server logis SQL

Untuk memperbolehkan identitas yang ditetapkan Azure Active Directory berfungsi dengan baik untuk Azure SQL, Directory Readersizin AAD harus diberikan kepada identitas server.

Untuk memberikan izin yang diperlukan ini, jalankan skrip berikut.

Catatan

Skrip ini harus dijalankan oleh Azure Active DirectoryGlobal Administrator atau Privileged Roles Administrator.

Anda dapat menetapkan peran Directory Readers ke grup di Azure AD. Pemilik grup kemudian dapat menambahkan identitas terkelola sebagai anggota grup ini, yang akan melewati kebutuhan untuk Global Administrator atau Privileged Roles Administrator untuk memberikan Directory Readers peran. Untuk informasi selengkapnya tentang fitur ini, lihat Peran Pembaca Direktori di Azure Active Directory untuk Azure SQL.

  • Ganti <TenantId> dengan TenantId berkumpul sebelumnya Anda.
  • Ganti <server name> dengan nama server logis SQL Anda. Jika nama server Anda adalah myserver.database.windows.net, ganti <server name> dengan myserver.
# This script grants Azure "Directory Readers" permission to a Service Principal representing the Azure SQL logical server
# It can be executed only by a "Global Administrator" or "Privileged Roles Administrator" type of user.
# To check if the "Directory Readers" permission was granted, execute this script again

Import-Module AzureAD
Connect-AzureAD -TenantId "<TenantId>"    #Enter your actual TenantId
$AssignIdentityName = "<server name>"     #Enter Azure SQL logical server name
 
# Get Azure AD role "Directory Users" and create if it doesn't exist
$roleName = "Directory Readers"
$role = Get-AzureADDirectoryRole | Where-Object {$_.displayName -eq $roleName}
if ($role -eq $null) {
    # Instantiate an instance of the role template
    $roleTemplate = Get-AzureADDirectoryRoleTemplate | Where-Object {$_.displayName -eq $roleName}
    Enable-AzureADDirectoryRole -RoleTemplateId $roleTemplate.ObjectId
    $role = Get-AzureADDirectoryRole | Where-Object {$_.displayName -eq $roleName}
}
 
# Get service principal for managed instance
$roleMember = Get-AzureADServicePrincipal -SearchString $AssignIdentityName
$roleMember.Count
if ($roleMember -eq $null) {
    Write-Output "Error: No Service Principals with name '$($AssignIdentityName)', make sure that AssignIdentityName parameter was entered correctly."
    exit
}

if (-not ($roleMember.Count -eq 1)) {
    Write-Output "Error: More than one service principal with name pattern '$($AssignIdentityName)'"
    Write-Output "Dumping selected service principals...."
    $roleMember
    exit
}
 
# Check if service principal is already member of readers role
$allDirReaders = Get-AzureADDirectoryRoleMember -ObjectId $role.ObjectId
$selDirReader = $allDirReaders | where{$_.ObjectId -match $roleMember.ObjectId}
 
if ($selDirReader -eq $null) {
    # Add principal to readers role
    Write-Output "Adding service principal '$($AssignIdentityName)' to 'Directory Readers' role'..."
    Add-AzureADDirectoryRoleMember -ObjectId $role.ObjectId -RefObjectId $roleMember.ObjectId
    Write-Output "'$($AssignIdentityName)' service principal added to 'Directory Readers' role'..."
 
    #Write-Output "Dumping service principal '$($AssignIdentityName)':"
    #$allDirReaders = Get-AzureADDirectoryRoleMember -ObjectId $role.ObjectId
    #$allDirReaders | where{$_.ObjectId -match $roleMember.ObjectId}
} else {
    Write-Output "Service principal '$($AssignIdentityName)' is already member of 'Directory Readers' role'."
}

Catatan

Output dari skrip di atas ini akan menunjukkan apakah izin Pembaca Direktori diberikan kepada identitas. Anda dapat menjalankan kembali skrip jika Anda tidak yakin apakah izin diberikan.

Untuk pendekatan serupa tentang cara mengatur izin Pembaca Direktori untuk Instans Terkelola SQL, lihat Penyediaan admin Microsoft Azure Active Directory (Instans Terkelola SQL).

Membuat perwakilan layanan (aplikasi Azure Active Directory) di Azure Active Directory

  1. Ikuti panduan di sini untuk mendaftarkan aplikasi Anda.

  2. Anda juga harus membuat rahasia klien untuk masuk. Ikuti panduan di sini untuk mengunggah sertifikat atau membuat rahasia untuk masuk.

  3. Catat hal berikut ini dari pendaftaran aplikasi Anda. Ini harus tersedia dari panel Gambaran Umum Anda:

    • ID aplikasi
    • ID Penyewa - Ini harus sama seperti sebelumnya

Dalam tutorial ini, kita akan menggunakan AppSP sebagai prinsip perwakilan layanan kami, dan myapp sebagai pengguna utama layanan kedua yang akan dibuat di Azure SQL oleh AppSP. Anda harus membuat dua aplikasi, AppSP dan myapp.

Untuk informasi selengkapnya tentang cara membuat aplikasi Microsoft Azure Active Directory, lihat artikel Cara: Menggunakan portal untuk membuat aplikasi Microsoft Azure Active Directory dan perwakilan layanan yang dapat mengakses sumber daya.

Membuat pengguna perwakilan layanan di Microsoft Azure SQL Database

Setelah perwakilan layanan dibuat di AAD, buat pengguna di Microsoft Azure SQL Database. Anda harus menyambungkan ke Microsoft Azure SQL Database Anda dengan login yang valid dengan izin untuk membuat pengguna dalam database.

  1. Buat AppSP pengguna di Microsoft Azure SQL Database menggunakan perintah T-SQL berikut:

    CREATE USER [AppSP] FROM EXTERNAL PROVIDER
    GO
    
  2. Berikandb_owner izin ke AppSP, yang memungkinkan pengguna untuk membuat pengguna AAD lain dalam database.

    EXEC sp_addrolemember 'db_owner', [AppSP]
    GO
    

    Untuk informasi selengkapnya, lihat sp_addrolemember

    Atau, ALTER ANY USER izin dapat diberikan alih-alih memberikan db_owner peran. Ini akan memungkinkan perwakilan layanan untuk menambahkan pengguna Microsoft Azure Active Directory lainnya.

    GRANT ALTER ANY USER TO [AppSp]
    GO
    

    Catatan

    Pengaturan di atas tidak diperlukan saat AppSP ditetapkan sebagai admin Microsoft Azure Active Directory untuk server. Untuk mengatur perwakilan layanan sebagai admin AD untuk server logis SQL, Anda bisa menggunakan perintah portal Microsoft Azure, PowerShell, atau CLI Azure. Untuk informasi selengkapnya, lihat Admin Provision Azure Active Directory (Database SQL).

Membuat pengguna AAD di SQL Database menggunakan perwakilan layanan AAD

Penting

Perwakilan layanan yang digunakan untuk masuk ke SQL Database harus memiliki rahasia klien. Jika ia tidak memilikinya, ikuti langkah 2 dari Buat perwakilan layanan (aplikasi AAD) in AAD. Rahasia klien ini perlu ditambahkan sebagai parameter input di skrip berikut.

  1. Gunakan skrip berikut untuk membuat pengguna perwakilan layanan AAD myapp menggunakan perwakilan layanan AppSP.

    • Ganti <TenantId> dengan TenantId berkumpul sebelumnya Anda.
    • Ganti <ClientId> dengan ClientId berkumpul sebelumnya Anda.
    • Ganti <ClientSecret> dengan rahasia klien Anda yang dibuat sebelumnya.
    • Ganti <server name> dengan nama server logis SQL Anda. Jika nama server Anda adalah myserver.database.windows.net, ganti <server name> dengan myserver.
    • Ganti <database name> dengan nama Microsoft Azure SQL Database Anda.
    # PowerShell script for creating a new SQL user called myapp using application AppSP with secret
    # AppSP is part of an Azure AD admin for the Azure SQL server below
    
    # Download latest  MSAL  - https://www.powershellgallery.com/packages/MSAL.PS
    Import-Module MSAL.PS
    
    $tenantId = "<TenantId>"   # tenantID (Azure Directory ID) were AppSP resides
    $clientId = "<ClientId>"   # AppID also ClientID for AppSP     
    $clientSecret = "<ClientSecret>"   # Client secret for AppSP 
    $scopes = "https://database.windows.net/.default" # The end-point
    
    $result = Get-MsalToken -RedirectUri $uri -ClientId $clientId -ClientSecret (ConvertTo-SecureString $clientSecret -AsPlainText -Force) -TenantId $tenantId -Scopes $scopes
    
    $Tok = $result.AccessToken
    #Write-host "token"
    $Tok
    
    $SQLServerName = "<server name>"    # Azure SQL logical server name 
    $DatabaseName = "<database name>"     # Azure SQL database name
    
    Write-Host "Create SQL connection string"
    $conn = New-Object System.Data.SqlClient.SQLConnection 
    $conn.ConnectionString = "Data Source=$SQLServerName.database.windows.net;Initial Catalog=$DatabaseName;Connect Timeout=30"
    $conn.AccessToken = $Tok
    
    Write-host "Connect to database and execute SQL script"
    $conn.Open() 
    $ddlstmt = 'CREATE USER [myapp] FROM EXTERNAL PROVIDER;'
    Write-host " "
    Write-host "SQL DDL command"
    $ddlstmt
    $command = New-Object -TypeName System.Data.SqlClient.SqlCommand($ddlstmt, $conn)       
    
    Write-host "results"
    $command.ExecuteNonQuery()
    $conn.Close()
    

    Atau, Anda dapat menggunakan sampel kode di blog, autentikasi perwakilan layanan AAD ke SQL DB - Code Sample. Ubah skrip untuk menjalankan pernyataan DDL CREATE USER [myapp] FROM EXTERNAL PROVIDER. Skrip yang sama dapat digunakan untuk membuat pengguna Microsoft Azure AD reguler atau sebuah grup di SQL Database.

  2. Periksa apakah pengguna myapp ada di database dengan menjalankan perintah berikut:

    SELECT name, type, type_desc, CAST(CAST(sid as varbinary(16)) as uniqueidentifier) as appId from sys.database_principals WHERE name = 'myapp'
    GO
    

    Anda akan melihat output serupa:

    name    type    type_desc   appId
    myapp   E   EXTERNAL_USER   6d228f48-xxxx-xxxx-xxxx-xxxxxxxxxxxx
    

Langkah berikutnya