Menyiapkan autentikasi Microsoft Entra untuk Azure Database for MySQL - Server Fleksibel

BERLAKU UNTUK: Azure Database for MySQL - Server Fleksibel

Tutorial ini menunjukkan kepada Anda cara menyiapkan autentikasi Microsoft Entra untuk server fleksibel Azure Database for MySQL.

Dalam tutorial ini, Anda akan mempelajari cara:

  • Mengonfigurasi Admin Microsoft Entra.
  • Koneksi ke server fleksibel Azure Database for MySQL menggunakan ID Microsoft Entra.

Prasyarat

Mengonfigurasi Admin Microsoft Entra

Untuk membuat pengguna Admin Microsoft Entra, ikuti langkah-langkah berikut.

  • Di portal Azure, pilih instans server fleksibel Azure Database for MySQL yang ingin Anda aktifkan untuk ID Microsoft Entra.

  • Di bawah panel Keamanan, pilih Autentikasi: Diagram of how to configure Microsoft Entra authentication.

  • Ada tiga jenis autentikasi yang tersedia:

    • Hanya autentikasi MySQL – Secara default, MySQL menggunakan plugin autentikasi mysql_native_password bawaan, yang melakukan autentikasi menggunakan metode hashing kata sandi asli

    • Autentikasi Microsoft Entra saja – Hanya mengizinkan autentikasi dengan akun Microsoft Entra. Menonaktifkan autentikasi mysql_native_password dan mengaktifkan parameter server aad_auth_only

    • Autentikasi MySQL dan Microsoft Entra – Memungkinkan autentikasi menggunakan kata sandi MySQL asli atau akun Microsoft Entra. Menonaktifkan parameter server aad_auth_only

  • Pilih Identitas – Pilih/Tambahkan Identitas terkelola yang ditetapkan pengguna. Izin berikut diperlukan untuk memungkinkan UMI membaca dari Microsoft Graph sebagai identitas server. Atau, beri UMI peran Pembaca Direktori.

Penting

Hanya Administrator Global atau Administrator Peran Istimewa yang dapat memberikan izin ini.

  • Pilih pengguna Microsoft Entra yang valid atau grup Microsoft Entra di penyewa pelanggan untuk menjadi administrator Microsoft Entra. Setelah dukungan autentikasi Microsoft Entra diaktifkan, Admin Microsoft Entra dapat ditambahkan sebagai prinsip keamanan dengan izin untuk menambahkan pengguna Microsoft Entra ke server MySQL.

    Catatan

    Hanya satu admin Microsoft Entra yang dapat dibuat per server MySQL, dan memilih yang lain menimpa admin Microsoft Entra yang ada yang dikonfigurasi untuk server.

Memberikan izin kepada Identitas terkelola yang ditetapkan pengguna

Contoh skrip PowerShell berikut memberikan izin yang diperlukan untuk UMI. Sampel ini menetapkan izin ke UMI umiservertest.

Untuk menjalankan skrip, Anda harus masuk sebagai pengguna dengan peran Administrator Global atau Administrator Peran Istimewa.

Skrip memberikan User.Read.Allizin , GroupMember.Read.All, dan Application.Read.ALL kepada UMI untuk mengakses Microsoft Graph.

# Script to assign permissions to the UMI "umiservertest"

import-module AzureAD
$tenantId = '<tenantId>' # Your Azure AD tenant ID

Connect-AzureAD -TenantID $tenantId
# Log in as a user with a "Global Administrator" or "Privileged Role Administrator" role
# Script to assign permissions to an existing UMI 
# The following Microsoft Graph permissions are required: 
#   User.Read.All
#   GroupMember.Read.All
#   Application.Read.ALL

# Search for Microsoft Graph
$AAD_SP = Get-AzureADServicePrincipal -SearchString "Microsoft Graph";
$AAD_SP
# Use Microsoft Graph; in this example, this is the first element $AAD_SP[0]

#Output

#ObjectId                             AppId                                DisplayName
#--------                             -----                                -----------
#47d73278-e43c-4cc2-a606-c500b66883ef 00000003-0000-0000-c000-000000000000 Microsoft Graph
#44e2d3f6-97c3-4bc7-9ccd-e26746638b6d 0bf30f3b-4a52-48df-9a82-234910c4a086 Microsoft Graph #Change 

$MSIName = "<managedIdentity>";  # Name of your user-assigned
$MSI = Get-AzureADServicePrincipal -SearchString $MSIName 
if($MSI.Count -gt 1)
{ 
Write-Output "More than 1 principal found, please find your principal and copy the right object ID. Now use the syntax $MSI = Get-AzureADServicePrincipal -ObjectId <your_object_id>"

# Choose the right UMI

Exit
} 

# If you have more UMIs with similar names, you have to use the proper $MSI[ ]array number

# Assign the app roles

$AAD_AppRole = $AAD_SP.AppRoles | Where-Object {$_.Value -eq "User.Read.All"}
New-AzureADServiceAppRoleAssignment -ObjectId $MSI.ObjectId  -PrincipalId $MSI.ObjectId  -ResourceId $AAD_SP.ObjectId[0]  -Id $AAD_AppRole.Id 
$AAD_AppRole = $AAD_SP.AppRoles | Where-Object {$_.Value -eq "GroupMember.Read.All"}
New-AzureADServiceAppRoleAssignment -ObjectId $MSI.ObjectId  -PrincipalId $MSI.ObjectId  -ResourceId $AAD_SP.ObjectId[0]  -Id $AAD_AppRole.Id
$AAD_AppRole = $AAD_SP.AppRoles | Where-Object {$_.Value -eq "Application.Read.All"}
New-AzureADServiceAppRoleAssignment -ObjectId $MSI.ObjectId  -PrincipalId $MSI.ObjectId  -ResourceId $AAD_SP.ObjectId[0]  -Id $AAD_AppRole.Id

Dalam langkah terakhir skrip, jika Anda memiliki lebih banyak UMI dengan nama serupa, Anda harus menggunakan nomor yang tepat $MSI[ ]array . Contohnya $AAD_SP.ObjectId[0].

Memeriksa izin untuk identitas terkelola yang ditetapkan pengguna

Untuk memeriksa izin untuk UMI, buka portal Azure. Di sumber daya ID Microsoft Entra, buka Aplikasi perusahaan. Pilih Semua Aplikasi untuk Jenis aplikasi, dan cari UMI yang dibuat.

Pilih UMI, dan masuk ke pengaturan Izin di bawah Keamanan.

Setelah Anda memberikan izin ke UMI, izin diaktifkan untuk semua server yang dibuat dengan UMI yang ditetapkan sebagai identitas server.

Koneksi ke server fleksibel Azure Database for MySQL menggunakan ID Microsoft Entra

1 - Mengautentikasi dengan ID Microsoft Entra

Mulailah dengan mengautentikasi dengan MICROSOFT Entra ID menggunakan alat Azure CLI.
(Langkah ini tidak diperlukan di Azure Cloud Shell.)

  • Masuk ke akun Azure menggunakan perintah az login . Perhatikan properti ID, yang mengacu pada ID Langganan untuk akun Azure Anda:

    az login
    

Perintah meluncurkan jendela browser ke halaman autentikasi Microsoft Entra. Ini mengharuskan Anda untuk memberikan ID pengguna dan kata sandi Microsoft Entra Anda.

  • Jika Anda memiliki beberapa langganan, pilih langganan yang sesuai menggunakan perintah az account set:

    az account set --subscription \<subscription id\>
    

2 - Ambil token akses Microsoft Entra

Panggil alat Azure CLI untuk memperoleh token akses untuk pengguna yang diautentikasi Microsoft Entra dari langkah 1 untuk mengakses server fleksibel Azure Database for MySQL.

  • Contoh (untuk Cloud Publik):

    az account get-access-token --resource https://ossrdbms-aad.database.windows.net
    
  • Nilai sumber daya di atas harus ditentukan persis seperti yang ditunjukkan. Untuk cloud lain, nilai sumber daya dapat dicari menggunakan yang berikut ini:

    az cloud show
    
  • Untuk Azure CLI versi 2.0.71 dan versi yang lebih baru, perintah dapat ditentukan dalam versi yang lebih nyaman berikut untuk semua cloud:

    az account get-access-token --resource-type oss-rdbms
    
  • Menggunakan PowerShell, Anda dapat menggunakan perintah berikut untuk mendapatkan token akses:

    $accessToken = Get-AzAccessToken -ResourceUrl https://ossrdbms-aad.database.windows.net
    $accessToken.Token | out-file C:\temp\MySQLAccessToken.txt
    

Setelah autentikasi berhasil, ID Microsoft Entra mengembalikan token akses:

{
  "accessToken": "TOKEN",
  "expiresOn": "...",
  "subscription": "...",
  "tenant": "...",
  "tokenType": "Bearer"
}

Token adalah string Base 64 yang mengodekan semua informasi tentang pengguna yang diautentikasi dan ditargetkan ke layanan Azure Database for MySQL.

Validitas token akses berkisar antara 5 menit hingga 60 menit. Sebaiknya Anda mendapatkan token akses sebelum memulai masuk ke server fleksibel Azure Database for MySQL.

  • Anda dapat menggunakan perintah PowerShell berikut untuk melihat validitas token.
   $accessToken.ExpiresOn.DateTime

3 - Gunakan token sebagai kata sandi untuk masuk dengan MySQL

Anda perlu menggunakan token akses sebagai kata sandi pengguna MySQL saat menyambungkan. Anda dapat menggunakan metode yang dijelaskan di atas untuk mengambil token menggunakan klien GUI seperti workbench MySQL.

Koneksi ke server fleksibel Azure Database for MySQL menggunakan MySQL CLI

Saat menggunakan CLI, Anda dapat menggunakan singkatan ini untuk menyambungkan:

Contoh (Linux/macOS):

mysql -h mydb.mysql.database.azure.com \
  --user user@tenant.onmicrosoft.com \
  --enable-cleartext-plugin \
  --password=`az account get-access-token --resource-type oss-rdbms --output tsv --query accessToken`

Contoh (PowerShell):

mysql -h mydb.mysql.database.azure.com \
  --user user@tenant.onmicrosoft.com \
  --enable-cleartext-plugin \
  --password=$(az account get-access-token --resource-type oss-rdbms --output tsv --query accessToken)


mysql -h mydb.mysql.database.azure.com \
  --user user@tenant.onmicrosoft.com \
  --enable-cleartext-plugin \
  --password=$((Get-AzAccessToken -ResourceUrl https://ossrdbms-aad.database.windows.net).Token)

Koneksi ke server fleksibel Azure Database for MySQL menggunakan MySQL Workbench

  • Luncurkan MySQL Workbench dan Pilih opsi Database, lalu pilih Koneksi ke database.
  • Di bidang nama host, masukkan MySQL FQDN misalnya, mysql.database.azure.com.
  • Di bidang nama pengguna, masukkan nama administrator MySQL Microsoft Entra. Contohnya, user@tenant.onmicrosoft.com.
  • Di bidang kata sandi, pilih Simpan di Vault dan tempelkan token akses dari file misalnya, C:\temp\MySQLAccessToken.txt.
  • Pilih tab tingkat lanjut dan pastikan Anda mencentang Aktifkan Plugin Autentikasi Cleartext.
  • Pilih Oke untuk menyambungkan ke layanan database.

Pertimbangan penting saat menyambungkan

  • user@tenant.onmicrosoft.com adalah nama pengguna atau grup Microsoft Entra yang coba Anda sambungkan sebagai
  • Pastikan untuk menggunakan cara yang tepat untuk mengeja nama pengguna atau grup Microsoft Entra
  • Nama pengguna dan grup Microsoft Entra peka huruf besar/kecil
  • Saat menyambungkan sebagai grup, gunakan hanya nama grup (misalnya, GroupName)
  • Jika nama mengandung spasi, gunakan \ sebelum setiap spasi untuk meng-escapenya

Catatan

Pengaturan "enable-cleartext-plugin" - Anda perlu menggunakan konfigurasi serupa dengan klien lain untuk memastikan token dikirim ke server tanpa di-hash.

Anda sekarang diautentikasi ke server fleksibel MySQL Anda menggunakan autentikasi Microsoft Entra.

Perintah admin Microsoft Entra lainnya

  • Mengelola administrator Direktori Aktif server

    az mysql flexible-server ad-admin
    
  • Membuat administrator Direktori Aktif

    az mysql flexible-server ad-admin create
    

    Contoh: Buat administrator Direktori Aktif dengan pengguna 'john@contoso.com', ID administrator '00000000-0000-0000-0000-0000000000000' dan identitas 'test-identity'

    az mysql flexible-server ad-admin create -g testgroup -s testsvr -u john@contoso.com -i 00000000-0000-0000-0000-000000000000 --identity test-identity
    
  • Menghapus administrator Direktori Aktif

    az mysql flexible-server ad-admin delete
    

    Contoh: Menghapus administrator Direktori Aktif

    az mysql flexible-server ad-admin delete -g testgroup -s testsvr
    
  • Mencantumkan semua administrator Direktori Aktif

    az mysql flexible-server ad-admin list
    

    Contoh: Mencantumkan administrator Direktori Aktif

    az mysql flexible-server ad-admin list -g testgroup -s testsvr
    
  • Mendapatkan administrator Direktori Aktif

    az mysql flexible-server ad-admin show
    

    Contoh: Dapatkan administrator Direktori Aktif

    az mysql flexible-server ad-admin show -g testgroup -s testsvr
    
  • Tunggu hingga administrator Direktori Aktif memenuhi kondisi tertentu

    az mysql flexible-server ad-admin wait
    

    Contoh:

    • Tunggu hingga administrator Direktori Aktif ada
    az mysql flexible-server ad-admin wait -g testgroup -s testsvr --exists
    
    • Tunggu hingga administrator Direktori Aktif dihapus
    az mysql flexible-server ad-admin wait -g testgroup -s testsvr –deleted
    

Membuat pengguna Microsoft Entra di Azure Database for MySQL

Untuk menambahkan pengguna Microsoft Entra ke database Azure Database for MySQL Anda, lakukan langkah-langkah berikut setelah menyambungkan:

  1. Pertama pastikan bahwa pengguna <user>@yourtenant.onmicrosoft.com Microsoft Entra adalah pengguna yang valid di penyewa Microsoft Entra.
  2. Masuk ke instans Azure Database for MySQL Anda sebagai pengguna Admin Microsoft Entra.
  3. Buat pengguna <user>@yourtenant.onmicrosoft.com di Azure Database for MySQL.

Contoh:

CREATE AADUSER 'user1@yourtenant.onmicrosoft.com';

Untuk nama pengguna yang melebihi 32 karakter, disarankan Anda menggunakan alias sebagai gantinya, untuk digunakan saat menyambungkan:

Contoh:

CREATE AADUSER 'userWithLongName@yourtenant.onmicrosoft.com' as 'userDefinedShortName';

Catatan

  1. MySQL mengabaikan spasi di depan dan di belakang, sehingga nama pengguna tidak boleh memiliki spasi awal atau akhir.
  2. Mengautentikasi pengguna melalui ID Microsoft Entra tidak memberi pengguna izin apa pun untuk mengakses objek dalam database Azure Database for MySQL. Anda harus memberi pengguna izin yang diperlukan secara manual.

Membuat grup Microsoft Entra di Azure Database for MySQL

Untuk mengaktifkan grup Microsoft Entra untuk akses ke database Anda, gunakan mekanisme yang tepat untuk pengguna, tetapi sebagai gantinya tentukan nama grup:

Contoh:

CREATE AADUSER 'Prod_DB_Readonly';

Saat masuk, anggota grup menggunakan token akses pribadi mereka tetapi masuk dengan nama grup yang ditentukan sebagai nama pengguna.

Kompatibilitas dengan driver aplikasi

Sebagian besar driver didukung; namun, pastikan untuk menggunakan pengaturan untuk mengirim kata sandi dalam teks yang jelas, sehingga token dikirim tanpa modifikasi.

  • C/C++

    • libmysqlclient: Didukung
    • mysql-connector-c++: Didukung
  • Java

    • Konektor/J (mysql-connector-java): Didukung, harus menggunakan pengaturan useSSL
  • Python

    • Connector/Python: Didukung
  • Ruby

    • mysql2: Didukung
  • .NET

    • mysql-connector-net: Didukung, perlu menambahkan plugin untuk mysql_clear_password
    • mysql-net/MySqlConnector: Didukung
  • Node.js

    • mysqljs: Tidak didukung (tidak mengirim token dalam cleartext tanpa patch)
    • node-mysql2: Didukung
  • Perl

    • DBD::mysql: Didukung
    • Net::MySQL: Tidak didukung
  • Go

    • go-sql-driver: Didukung, tambahkan ?tls=true&allowCleartextPasswords=true ke string koneksi

Langkah berikutnya