Bagikan melalui


Tutorial: Membuat koneksi tanpa kata sandi ke layanan database melalui Konektor Layanan

Koneksi tanpa kata sandi menggunakan identitas terkelola untuk mengakses layanan Azure. Dengan pendekatan ini, Anda tidak perlu melacak dan mengelola rahasia secara manual untuk identitas terkelola. Tugas-tugas ini ditangani dengan aman secara internal oleh Azure.

Konektor Layanan memungkinkan identitas terkelola dalam layanan hosting aplikasi seperti Azure Spring Apps, Azure App Service, dan Azure Container Apps. Konektor Layanan juga mengonfigurasi layanan database, seperti Azure Database for PostgreSQL, Azure Database for MySQL, Azure SQL Database, dan database SQL di Microsoft Fabric, untuk menerima identitas terkelola.

Di tutorial ini, Anda menggunakan Azure CLI untuk menyelesaikan tugas berikut:

  • Periksa lingkungan awal Anda dengan Azure CLI.
  • Buat koneksi tanpa kata sandi dengan Konektor Layanan.
  • Gunakan variabel lingkungan atau konfigurasi yang dihasilkan oleh Konektor Layanan untuk mengakses layanan database.

Prasyarat

Untuk mulai menggunakan Azure CLI:

Instal ekstensi konektor layanan tanpa perlu kata sandi

Instal ekstensi tanpa kata sandi Konektor Layanan terbaru untuk Azure CLI:

az extension add --name serviceconnector-passwordless --upgrade

Nota

Silakan periksa ekstensi "serviceconnector-passwordless" versi "2.0.2" atau lebih tinggi dengan menjalankan az version. Anda mungkin perlu meningkatkan Azure CLI terlebih dahulu untuk meningkatkan versi ekstensi.

Membuat koneksi tanpa kata sandi

Selanjutnya, kami menggunakan Azure App Service sebagai contoh untuk membuat koneksi menggunakan identitas terkelola.

Jika Anda menggunakan:

Nota

Jika Anda menggunakan portal Microsoft Azure, buka bilah Konektor LayananAzure App Service, Azure Spring Apps, atau Azure Container Apps, dan pilih Buat untuk membuat koneksi. Portal Microsoft Azure akan secara otomatis menyusun perintah untuk Anda dan memicu eksekusi perintah di Cloud Shell.

Perintah Azure CLI berikut menggunakan --client-type parameter, bisa berupa java, dotnet, python, dll. Jalankan az webapp connection create postgres-flexible -h untuk mendapatkan jenis klien yang didukung, dan pilih yang cocok dengan aplikasi Anda.

az webapp connection create postgres-flexible \
    --resource-group $RESOURCE_GROUP \
    --name $APPSERVICE_NAME \
    --target-resource-group $RESOURCE_GROUP \
    --server $POSTGRESQL_HOST \
    --database $DATABASE_NAME \
    --user-identity client-id=XX subs-id=XX \
    --client-type $CLIENT_TYPE

Azure Database for MySQL - Server Fleksibel memerlukan identitas terkelola yang ditetapkan pengguna untuk mengaktifkan autentikasi Microsoft Entra. Untuk informasi selengkapnya, lihat Menyiapkan autentikasi Microsoft Entra untuk Azure Database for MySQL - Server Fleksibel. Anda dapat menggunakan perintah berikut untuk membuat identitas terkelola yang ditetapkan pengguna:

USER_IDENTITY_NAME=<YOUR_USER_ASSIGNED_MANAGED_IDENTITY_NAME>
IDENTITY_RESOURCE_ID=$(az identity create \
    --name $USER_IDENTITY_NAME \
    --resource-group $RESOURCE_GROUP \
    --query id \
    --output tsv)

Penting

Setelah membuat identitas terkelola yang ditetapkan pengguna, minta Administrator Global atau Administrator Peran Istimewa Anda untuk memberikan izin berikut untuk identitas ini:

  • User.Read.All
  • GroupMember.Read.All
  • Application.Read.All

Untuk informasi selengkapnya, lihat bagian Izin dari autentikasi Direktori Aktif.

Kemudian, sambungkan aplikasi Anda ke database MySQL dengan identitas terkelola yang ditetapkan sistem menggunakan Konektor Layanan.

Perintah Azure CLI berikut menggunakan --client-type parameter . Jalankan az webapp connection create mysql-flexible -h untuk mendapatkan jenis klien yang didukung, dan pilih yang cocok dengan aplikasi Anda.

az webapp connection create mysql-flexible \
    --resource-group $RESOURCE_GROUP \
    --name $APPSERVICE_NAME \
    --target-resource-group $RESOURCE_GROUP \
    --server $MYSQL_HOST \
    --database $DATABASE_NAME \
    --user-identity client-id=XX subs-id=XX mysql-identity-id=$IDENTITY_RESOURCE_ID \
    --client-type java

Perintah Azure CLI berikut menggunakan --client-type parameter . Jalankan az webapp connection create sql -h untuk mendapatkan jenis klien yang didukung, dan pilih yang cocok dengan aplikasi Anda.

az webapp connection create sql \
    --resource-group $RESOURCE_GROUP \
    --name $APPSERVICE_NAME \
    --target-resource-group $RESOURCE_GROUP \
    --server $SQL_HOST \
    --database $DATABASE_NAME \
    --user-identity client-id=XX subs-id=XX \
    --client-type dotnet

Perintah Azure CLI berikut menggunakan --client-type parameter . Jalankan az webapp connection create fabricsql -h untuk mendapatkan jenis klien yang didukung, dan pilih yang cocok dengan aplikasi Anda.

Penting

Berbagi akses secara manual saat ini diperlukan untuk proses penerimaan yang lengkap. Lihat Berbagi akses ke database SQL di Fabric.

az webapp connection create fabricsql \
    --resource-group $RESOURCE_GROUP \
    --name $APPSERVICE_NAME \
    --fabric-workspace-uuid $FABRIC_WORKSPACE_UUID \
    --fabric-sql-db-uuid $FABRIC_SQL_DB_UUID \
    --user-identity client-id=XX subs-id=XX \
    --client-type dotnet

Perintah Konektor Layanan ini menyelesaikan tugas berikut di latar belakang:

  • Aktifkan identitas terkelola yang ditetapkan sistem, atau tetapkan identitas pengguna untuk aplikasi $APPSERVICE_NAME yang dihosting oleh Azure App Service/Azure Spring Apps/Azure Container Apps.
  • Aktifkan Microsoft Entra Authentication untuk server database jika tidak diaktifkan sebelumnya.
  • Tetapkan admin Microsoft Entra kepada pengguna yang sedang masuk.
  • Tambahkan pengguna database untuk identitas terkelola yang ditetapkan sistem, identitas terkelola yang ditetapkan pengguna, atau perwakilan layanan. Berikan semua hak istimewa database $DATABASE_NAME kepada pengguna ini. Nama pengguna dapat ditemukan di string koneksi dalam output perintah sebelumnya.
  • Atur konfigurasi bernama AZURE_MYSQL_CONNECTIONSTRING, AZURE_POSTGRESQL_CONNECTIONSTRING, AZURE_SQL_CONNECTIONSTRING, atau FABRIC_SQL_CONNECTIONSTRING ke sumber daya Azure berdasarkan jenis database.
    • Untuk App Service, konfigurasi diatur di bilah Pengaturan Aplikasi.
    • Untuk Spring Apps, konfigurasi diatur saat aplikasi diluncurkan.
    • Untuk Container Apps, konfigurasi diatur ke variabel lingkungan. Anda bisa mendapatkan semua konfigurasi dan nilainya di bilah Konektor Layanan di portal Microsoft Azure.

Konektor Layanan akan menetapkan hak istimewa berikut kepada pengguna, Anda dapat mencabutnya dan menyesuaikan hak istimewa berdasarkan kebutuhan Anda.

GRANT ALL PRIVILEGES ON DATABASE "$DATABASE_NAME" TO "username"; 

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO "username"; 

GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO "username"; 

GRANT ALL PRIVILEGES ON $DATABASE_NAME.* TO 'username'@'%'; 
GRANT CONTROL ON DATABASE::"$DATABASE_NAME" TO "username";
ALTER ROLE db_datareader ADD MEMBER "username"
ALTER ROLE db_datawriter ADD MEMBER "username"
ALTER ROLE db_ddladmin ADD MEMBER "username"

Menyambungkan ke database dengan autentikasi Microsoft Entra

Setelah membuat koneksi, Anda dapat menggunakan string koneksi di aplikasi Anda untuk menyambungkan ke database dengan autentikasi Microsoft Entra. Misalnya, Anda dapat menggunakan solusi berikut untuk menyambungkan ke database dengan autentikasi Microsoft Entra.

Untuk .NET, tidak ada plugin atau pustaka untuk mendukung koneksi tanpa kata sandi. Anda bisa mendapatkan token akses untuk identitas terkelola atau perwakilan layanan menggunakan pustaka klien seperti Azure.Identity. Kemudian Anda dapat menggunakan token akses sebagai kata sandi untuk menyambungkan ke database. Saat menggunakan kode di bawah ini, hapus tanda komentar pada bagian cuplikan kode untuk jenis autentikasi yang ingin Anda gunakan.

using Azure.Identity;
using Azure.Core;
using Npgsql;

// Uncomment the following lines corresponding to the authentication type you want to use.
// For system-assigned identity.
// var sqlServerTokenProvider = new DefaultAzureCredential();

// For user-assigned identity.
// var sqlServerTokenProvider = new DefaultAzureCredential(
//     new DefaultAzureCredentialOptions
//     {
//         ManagedIdentityClientId = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CLIENTID");
//     }
// );

// For service principal.
// var tenantId = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_TENANTID");
// var clientId = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CLIENTID");
// var clientSecret = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CLIENTSECRET");
// var sqlServerTokenProvider = new ClientSecretCredential(tenantId, clientId, clientSecret);

// Acquire the access token. 
AccessToken accessToken = await sqlServerTokenProvider.GetTokenAsync(
    new TokenRequestContext(scopes: new string[]
    {
        "https://ossrdbms-aad.database.windows.net/.default"
    }));

// Combine the token with the connection string from the environment variables provided by Service Connector.
string connectionString =
    $"{Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CONNECTIONSTRING")};Password={accessToken.Token}";

// Establish the connection.
using (var connection = new NpgsqlConnection(connectionString))
{
    Console.WriteLine("Opening connection using access token...");
    connection.Open();
}

Selanjutnya, jika Anda telah membuat tabel dan urutan di server fleksibel PostgreSQL sebelum menggunakan Konektor Layanan, Anda perlu terhubung sebagai pemilik dan memberikan izin untuk <aad-username> dibuat oleh Konektor Layanan. Nama pengguna dari string koneksi atau konfigurasi yang ditetapkan oleh Konektor Layanan akan terlihat seperti aad_<connection name>. Jika Anda menggunakan portal Azure, pilih tombol perluas di Service Type samping kolom dan dapatkan nilainya. Jika Anda menggunakan Azure CLI, periksa configurations output perintah CLI.

Kemudian, jalankan kueri untuk memberikan izin

az extension add --name rdbms-connect

az postgres flexible-server execute -n <postgres-name> -u <owner-username> -p "<owner-password>" -d <database-name> --querytext "GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO \"<aad-username>\";GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO \"<aad username>\";"

<owner-username> dan <owner-password> adalah pemilik tabel yang ada yang dapat memberikan izin kepada orang lain. <aad-username> adalah pengguna yang dibuat oleh Konektor Layanan. Ganti dengan nilai aktual.

Validasi hasil dengan perintah :

az postgres flexible-server execute -n <postgres-name> -u <owner-username> -p "<owner-password>" -d <database-name> --querytext "SELECT distinct(table_name) FROM information_schema.table_privileges WHERE grantee='<aad-username>' AND table_schema='public';" --output table

Untuk .NET, tidak ada plugin atau pustaka untuk mendukung koneksi tanpa kata sandi. Anda bisa mendapatkan token akses untuk identitas terkelola atau perwakilan layanan menggunakan pustaka klien seperti Azure.Identity. Kemudian Anda dapat menggunakan token akses sebagai kata sandi untuk menyambungkan ke database. Saat menggunakan kode di bawah ini, hapus tanda komentar pada bagian cuplikan kode untuk jenis autentikasi yang ingin Anda gunakan.

using Azure.Core;
using Azure.Identity;
using MySqlConnector;

// Uncomment the following lines corresponding to the authentication type you want to use.
// For system-assigned managed identity.
// var credential = new DefaultAzureCredential();

// For user-assigned managed identity.
// var credential = new DefaultAzureCredential(
//     new DefaultAzureCredentialOptions
//     {
//         ManagedIdentityClientId = Environment.GetEnvironmentVariable("AZURE_MYSQL_CLIENTID");
//     });

// For service principal.
// var tenantId = Environment.GetEnvironmentVariable("AZURE_MYSQL_TENANTID");
// var clientId = Environment.GetEnvironmentVariable("AZURE_MYSQL_CLIENTID");
// var clientSecret = Environment.GetEnvironmentVariable("AZURE_MYSQL_CLIENTSECRET");
// var credential = new ClientSecretCredential(tenantId, clientId, clientSecret);

var tokenRequestContext = new TokenRequestContext(
    new[] { "https://ossrdbms-aad.database.windows.net/.default" });
AccessToken accessToken = await credential.GetTokenAsync(tokenRequestContext);
// Open a connection to the MySQL server using the access token.
string connectionString =
    $"{Environment.GetEnvironmentVariable("AZURE_MYSQL_CONNECTIONSTRING")};Password={accessToken.Token}";

using var connection = new MySqlConnection(connectionString);
Console.WriteLine("Opening connection using access token...");
await connection.OpenAsync();

// do something

Untuk sampel kode lainnya, lihat Menyambungkan ke database Azure dari App Service tanpa rahasia menggunakan identitas terkelola.

  1. Instal dependensi.

    dotnet add package Microsoft.Data.SqlClient
    
  2. Dapatkan string koneksi Azure SQL Database dari variabel lingkungan yang ditambahkan oleh Konektor Layanan.

    using Microsoft.Data.SqlClient;
    
    string connectionString = 
        Environment.GetEnvironmentVariable("AZURE_SQL_CONNECTIONSTRING")!;
    
    using var connection = new SqlConnection(connectionString);
    connection.Open();
    

    Untuk informasi selengkapnya, lihat Menggunakan autentikasi Identitas Terkelola Active Directory.

Untuk informasi selengkapnya, lihat Beranda untuk pemrograman klien ke Microsoft SQL Server.

  1. Instal dependensi.

    dotnet add package Microsoft.Data.SqlClient
    
  2. Ambil database SQL dalam string koneksi Microsoft Fabric dari variabel lingkungan yang ditambahkan oleh Konektor Layanan.

    using Microsoft.Data.SqlClient;
    
    string connectionString = 
        Environment.GetEnvironmentVariable("FABRIC_SQL_CONNECTIONSTRING")!;
    
    using var connection = new SqlConnection(connectionString);
    connection.Open();
    

    Untuk informasi selengkapnya, lihat Menggunakan autentikasi identitas terkelola Direktori Aktif.

Untuk informasi selengkapnya, lihat Menyambungkan ke database SQL Anda di Microsoft Fabric.

Menyebarkan aplikasi ke layanan hosting Azure

  1. Sebarkan aplikasi Anda ke layanan hosting Azure. Secara opsional lihat panduan di bawah ini untuk informasi selengkapnya tentang menyebarkan sumber daya ini.

  2. Periksa log atau panggil aplikasi untuk melihat apakah aplikasi berhasil tersambung ke database Azure.

Penyelesaian Masalah

Hak akses

Jika Anda mengalami kesalahan terkait izin, konfirmasikan pengguna masuk Azure CLI dengan perintah az account show. Pastikan Anda masuk dengan akun yang benar. Selanjutnya, konfirmasikan bahwa Anda memiliki izin berikut yang mungkin diperlukan untuk membuat koneksi tanpa kata sandi dengan Konektor Layanan.

Persetujuan Operasi
Microsoft.DBforPostgreSQL/flexibleServers/read Diperlukan untuk mendapatkan informasi server database
Microsoft.DBforPostgreSQL/flexibleServers/write Diperlukan untuk mengaktifkan autentikasi Microsoft Entra untuk server database
Microsoft.DBforPostgreSQL/flexibleServers/firewallRules/write Diperlukan untuk membuat aturan firewall jika alamat IP lokal diblokir
Microsoft.DBforPostgreSQL/flexibleServers/firewallRules/delete Diperlukan untuk mengembalikan aturan firewall yang dibuat oleh Konektor Layanan untuk menghindari masalah keamanan
Microsoft.DBforPostgreSQL/flexibleServers/administrators/read Diperlukan untuk memeriksa apakah pengguna login Azure CLI adalah administrator Microsoft Entra server database
Microsoft.DBforPostgreSQL/flexibleServers/administrators/write Diperlukan untuk menambahkan pengguna yang masuk Azure CLI sebagai administrator Microsoft Entra di server database
Persetujuan Operasi
Microsoft.DBforMySQL/flexibleServers/read Diperlukan untuk mendapatkan informasi server database
Microsoft.DBforMySQL/flexibleServers/write Diperlukan untuk menambahkan identitas terkelola yang ditetapkan Pengguna yang disediakan ke server database
Microsoft.DBforMySQL/flexibleServers/firewallRules/write Diperlukan untuk membuat aturan firewall jika alamat IP lokal diblokir
Microsoft.DBforMySQL/flexibleServers/firewallRules/delete Diperlukan untuk mengembalikan aturan firewall yang dibuat oleh Konektor Layanan untuk menghindari masalah keamanan
Microsoft.DBforMySQL/flexibleServers/administrators/read Diperlukan untuk memeriksa apakah pengguna login Azure CLI adalah administrator Microsoft Entra server database
Microsoft.DBforMySQL/flexibleServers/administrators/write Diperlukan untuk menambahkan pengguna yang masuk Azure CLI sebagai administrator Microsoft Entra di server database
Persetujuan Operasi
Microsoft.Sql/servers/read Diperlukan untuk mendapatkan informasi server database
Microsoft.Sql/servers/firewallRules/write Diperlukan untuk membuat aturan firewall jika alamat IP lokal diblokir
Microsoft.Sql/servers/firewallRules/delete Diperlukan untuk mengembalikan aturan firewall yang dibuat oleh Konektor Layanan untuk menghindari masalah keamanan
Microsoft.Sql/servers/administrators/read Diperlukan untuk memeriksa apakah pengguna login Azure CLI adalah administrator Microsoft Entra server database
Microsoft.Sql/servers/administrators/write Diperlukan untuk menambahkan pengguna yang masuk Azure CLI sebagai administrator Microsoft Entra di server database

Dalam beberapa kasus, izin tidak diperlukan. Misalnya, jika pengguna yang diautentikasi Azure CLI sudah menjadi Administrator Direktori Aktif di server SQL, Anda tidak perlu memiliki Microsoft.Sql/servers/administrators/write izin.

Microsoft Entra ID

Jika Anda mengalami kesalahan ERROR: AADSTS530003: Your device is required to be managed to access this resource., minta bantuan departemen IT Anda untuk menghubungkan perangkat ini ke Microsoft Entra ID. Untuk informasi selengkapnya, lihat Perangkat gabungan Microsoft Entra.

Konektor Layanan perlu mengakses ID Microsoft Entra untuk mendapatkan informasi tentang akun Anda dan identitas terkelola layanan hosting. Anda dapat menggunakan perintah berikut untuk memeriksa apakah perangkat Anda dapat mengakses ID Microsoft Entra:

az ad signed-in-user show

Jika Anda tidak masuk secara interaktif, Anda mungkin juga mendapatkan kesalahan dan Interactive authentication is needed. Untuk mengatasi kesalahan, masuk dengan perintah az login.

Konektivitas jaringan

Jika server database Anda berada di Virtual Network, pastikan lingkungan Anda yang menjalankan perintah Azure CLI dapat mengakses server di Virtual Network.

Jika server database Anda berada di Virtual Network, pastikan lingkungan Anda yang menjalankan perintah Azure CLI dapat mengakses server di Virtual Network.

Jika server database Anda melarang akses publik, pastikan lingkungan Anda yang menjalankan perintah Azure CLI dapat mengakses server melalui titik akhir privat.

Langkah selanjutnya

Untuk informasi selengkapnya tentang Konektor Layanan dan koneksi tanpa kata sandi, lihat sumber daya berikut: