App Service Azure'da yüksek oranda ölçeklenebilir, kendi kendine yama yapabilen bir web barındırma hizmeti sağlar. Ayrıca uygulamanız için managed identity sağlar. Bu, aşağıdakiler de dahil olmak üzere Azure veritabanlarına erişimi güvenli hale getirmek için anahtar teslimi bir çözümdür:
App Service içindeki yönetilen kimlikler, bağlantı dizelerindeki kimlik bilgileri gibi uygulamanızdaki gizli dizileri ortadan kaldırarak uygulamanızı daha güvenli hale getirir. Bu öğreticide, yönetilen kimlikleri kullanarak App Service'ten yukarıda bahsedilen veritabanlarına nasıl bağlanabileceğiniz gösterilir.
Öğreneceğiniz şeyler:
- Microsoft Entra kullanıcıyı Azure veritabanınız için yönetici olarak yapılandırın.
- Veritabanınıza Microsoft Entra kullanıcı olarak bağlanın.
- App Service uygulaması için sistem tarafından atanan veya kullanıcı tarafından atanan yönetilen kimliği yapılandırın.
- Yönetilen kimlik için veritabanı erişimi tanıyın.
- Yönetilen kimlik kullanarak kodunuzdan (.NET Framework 4.8, .NET 6, Node.js, Python Java) Azure veritabanına bağlanın.
- Microsoft Entra kullanıcısını kullanarak geliştirme ortamınızdan Azure veritabanına bağlanın.
Azure hesabınız yoksa başlamadan önce free hesabı oluşturun.
Önkoşullar
- App Service'te .NET, Node.js, Python veya Java tabanlı bir uygulama oluşturun.
- Azure SQL Veritabanı, MySQL için Azure Veritabanı veya PostgreSQL için Azure Veri Tabanı ile bir veritabanı sunucusu oluşturun.
- Standart bağlantı desenini (kullanıcı adı ve parola ile) tanımanız ve App Service uygulamanızdan tercih ettiğiniz veritabanınıza başarıyla bağlanabilmeniz gerekir.
Ortamınızı Azure CLI için hazırlayın.
bash ortamını Azure Cloud Shell kullanın. Daha fazla bilgi için bkz. Azure Cloud Shell ile çalışmaya başlama.
CLI'yi yerel olarak çalıştırmayı tercih ediyorsanız Azure CLI'yi yükleyin. Windows veya macOS üzerinde çalıştırıyorsanız Azure CLI Docker kapsayıcısında çalıştırmayı göz önünde bulundurun. Daha fazla bilgi için bkz. Docker kapsayıcısında Azure CLI çalıştırma.
Yerel yükleme kullanıyorsanız az login komutunu kullanarak Azure CLI oturum açın. Kimlik doğrulama işlemini tamamlamak için, terminalinizde görüntülenen adımları takip edin. Diğer oturum açma seçenekleri için bkz. Azure CLI kullanarak Azure'a Kimlik Doğrulama.
İstendiğinde, ilk kullanımda Azure CLI uzantısını yükleyin. Uzantılar hakkında daha fazla bilgi için bkz. Azure CLI ile uzantıları kullanma ve yönetme.
Yüklü olan sürümü ve bağımlı kütüphaneleri bulmak için az version komutunu çalıştırın. En son sürüme yükseltmek için az upgrade komutunu çalıştırın.
1. Hizmet Bağlayıcısı parolasız uzantısını yükleyin
Azure CLI için en son Hizmet Bağlayıcısı parolasız uzantısını yükleyin:
az extension add --name serviceconnector-passwordless --upgrade
Uyarı
komutunu çalıştırarak serviceconnector-passwordlessuzantı sürümünün az version 2.0.2 veya üzeri olup olmadığını denetleyin. Gerekirse, önce Azure CLI yükseltin ve ardından uzantıyı yükseltin.
2. Parolasız bağlantı oluşturma
Ardından, Service Connector ile parolasız bir bağlantı oluşturun.
Tavsiye
Azure portalı aşağıdaki komutları oluşturmanıza yardımcı olabilir. Azure portalında Azure App Service kaynağınıza gidin, sol menüden Service Connector seçin ve Create öğesini seçin. Formu tüm gerekli parametrelerle doldurun. Azure otomatik olarak bağlantı oluşturma komutunu oluşturur. Bu komutu CLI'da kullanmak veya Azure Cloud Shell'da yürütmek üzere kopyalayabilirsiniz.
Aşağıdaki Azure CLI komutu bir --client-type parametresi kullanır.
İsteğe bağlı olarak, desteklenen istemci türlerini almak için komutunu az webapp connection create sql -h çalıştırın.
bir istemci türü seçin ve karşılık gelen komutu çalıştırın. Aşağıdaki yer tutucuları kendi bilgilerinizle değiştirin.
az webapp connection create sql \
--resource-group <group-name> \
--name <server-name> \
--target-resource-group <sql-group-name> \
--server <sql-name> \
--database <database-name> \
--user-identity client-id=<client-id> subs-id=<subscription-id> \
--client-type <client-type>
az webapp connection create sql \
--resource-group <group-name> \
--name <server-name> \
--target-resource-group <group-name> \
--server <sql-name> \
--database <database-name> \
--system-identity \
--client-type <client-type>
Uyarı
MySQL için Azure Veritabanı - Esnek Sunucu için, öncelikle Microsoft Entra kimlik doğrulamasını manuel olarak ayarlamanız gerekmektedir; bu, ayrı bir kullanıcı tarafından atanan yönetilen kimlik ve belirli Microsoft Graph izinleri gerektirir. Bu adım otomatikleştirilemez.
Manuel MySQL için Azure Veritabanı - Flexible Server için Microsoft Entra kimlik doğrulamasını ayarlayın.
İsteğe bağlı olarak, desteklenen istemci türlerini almak için komutunu az webapp connection create mysql-flexible -h çalıştırın.
bir istemci türü seçin ve karşılık gelen komutu çalıştırın. Aşağıdaki Azure CLI komutu bir --client-type parametresi kullanır.
az webapp connection create mysql-flexible \
--resource-group <group-name> \
--name <server-name> \
--target-resource-group <group-name> \
--server <mysql-name> \
--database <database-name> \
--user-identity client-id=XX subs-id=XX mysql-identity-id=$IDENTITY_RESOURCE_ID \
--client-type <client-type>
az webapp connection create mysql-flexible \
--resource-group <group-name> \
--name <server-name> \
--target-resource-group <group-name> \
--server <mysql-name> \
--database <database-name> \
--system-identity mysql-identity-id=$IDENTITY_RESOURCE_ID \
--client-type <client-type>
Aşağıdaki Azure CLI komutu bir --client-type parametresi kullanır.
İsteğe bağlı olarak komutunu az webapp connection create postgres-flexible -h çalıştırarak desteklenen tüm istemci türlerinin listesini alın.
bir istemci türü seçin ve karşılık gelen komutu çalıştırın.
az webapp connection create postgres-flexible \
--resource-group <group-name> \
--name <server-name> \
--target-resource-group <group-name> \
--server <postgresql-name> \
--database <database-name> \
--user-identity client-id=XX subs-id=XX \
--client-type java
az webapp connection create postgres-flexible \
--resource-group <group-name> \
--name <server-name> \
--target-resource-group <group-name> \
--server <postgresql-name> \
--database <database-name> \
--system-identity \
--client-type <client-type>
Önceden oluşturulmuş tablolara izin verme
Ardından, Hizmet Bağlayıcısı'nı kullanmadan önce PostgreSQL esnek sunucusunda tablolar ve diziler oluşturduysanız, sahip olarak bağlanın ve Hizmet Bağlayıcısı tarafından oluşturulan <aad-username> için yetki verin. Hizmet Bağlayıcısı tarafından ayarlanan bağlantı dizesi veya yapılandırmadaki kullanıcı adı aad_<connection name> gibi görünmelidir. Azure portalını kullanıyorsanız, değeri almak için Hizmet Türü sütununun yanındaki genişlet düğmesini seçin. Azure CLI kullanıyorsanız komut çıktısında configurations öğesini kontrol edin.
Ardından izin vermek için aşağıdaki sorguyu çalıştırın:
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> ve<owner-password>, başkalarına izin verebilen mevcut tablonun sahibine aittir.
<aad-username> , Service Connector tarafından oluşturulan kullanıcıdır. Bunları gerçek değerlerle değiştirin.
Sonucu doğrulayın:
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
Bu Hizmet Bağlayıcısı komutu arka planda aşağıdaki görevleri tamamlar:
- Sistem tarafından atanan yönetilen kimliği etkinleştirin veya Azure App Service tarafından barındırılan uygulama
<server-name> için bir kullanıcı kimliği atayın.
- Microsoft Entra yöneticisini geçerli oturum açmış kullanıcıya ayarlayın.
- Sistem tarafından atanan yönetilen kimlik veya kullanıcı tarafından atanan yönetilen kimlik için veritabanı kullanıcısı ekleyin. Veritabanının
<database-name> tüm ayrıcalıklarını bu kullanıcıya verin. Kullanıcı adı, önceki komut çıktısındaki bağlantı dizesinde bulunabilir.
-
AZURE_MYSQL_CONNECTIONSTRING, AZURE_POSTGRESQL_CONNECTIONSTRING veya AZURE_SQL_CONNECTIONSTRING adlı yapılandırmaları veritabanı türüne göre Azure kaynağına ayarlayın.
- App Service için yapılandırmalar Uygulama Ayarları dikey penceresinde ayarlanır.
Bağlantı oluştururken herhangi bir sorunla karşılaşırsanız yardım için Sorun giderme bölümüne bakın.
3. Kodunuzu değiştirme
Bağımlılıkları yükleyin.
dotnet add package Microsoft.Data.SqlClient
Hizmet Bağlayıcısı tarafından eklenen ortam değişkeninden Azure SQL Veritabanı bağlantı dizesini alın.
using Microsoft.Data.SqlClient;
// AZURE_SQL_CONNECTIONSTRING should be one of the following:
// For system-assigned managed identity:"Server=tcp:<server-name>.database.windows.net;Database=<database-name>;Authentication=Active Directory Default;TrustServerCertificate=True"
// For user-assigned managed identity: "Server=tcp:<server-name>.database.windows.net;Database=<database-name>;Authentication=Active Directory Default;User Id=<client-id-of-user-assigned-identity>;TrustServerCertificate=True"
string connectionString =
Environment.GetEnvironmentVariable("AZURE_SQL_CONNECTIONSTRING")!;
using var connection = new SqlConnection(connectionString);
connection.Open();
Daha fazla bilgi için bakınız: Active Directory Yönetilen Kimlik doğrulaması.
pom.xml dosyanıza aşağıdaki bağımlılıkları ekleyin:
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity</artifactId>
<version>1.4.6</version>
</dependency>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>10.2.0.jre11</version>
</dependency>
Hizmet Bağlayıcısı tarafından eklenen ortam değişkeninden Azure SQL Veritabanı bağlantı dizesini alın.
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import com.microsoft.sqlserver.jdbc.SQLServerDataSource;
public class Main {
public static void main(String[] args) {
// AZURE_SQL_CONNECTIONSTRING should be one of the following:
// For system-assigned managed identity: "jdbc:sqlserver://{SQLName}.database.windows.net:1433;databaseName={SQLDbName};authentication=ActiveDirectoryMSI;"
// For user-assigned managed identity: "jdbc:sqlserver://{SQLName}.database.windows.net:1433;databaseName={SQLDbName};msiClientId={UserAssignedMiClientId};authentication=ActiveDirectoryMSI;"
String connectionString = System.getenv("AZURE_SQL_CONNECTIONSTRING");
SQLServerDataSource ds = new SQLServerDataSource();
ds.setURL(connectionString);
try (Connection connection = ds.getConnection()) {
System.out.println("Connected successfully.");
} catch (SQLException e) {
e.printStackTrace();
}
}
}
Daha fazla bilgi için bkz. Microsoft Entra kimlik doğrulaması kullanarak bağlanma.
Bağımlılıkları yükleyin.
python -m pip install mssql-python python-dotenv
Hizmet Bağlayıcısı tarafından eklenen ortam değişkeninden Azure SQL Veritabanı bağlantı yapılandırmalarını alın. Kullanmak istediğiniz kimlik doğrulama türü için kod parçacığının bölümünü yorum satırından çıkarın.
import os
from mssql_python import connect
server = os.getenv('AZURE_SQL_SERVER')
port = os.getenv('AZURE_SQL_PORT')
database = os.getenv('AZURE_SQL_DATABASE')
# Uncomment the following lines according to the authentication type.
# For system-assigned managed identity.
# connection_string = f'Server={server},{port};Database={database};Authentication=ActiveDirectoryMSI;Encrypt=yes;'
# For user-assigned managed identity.
# client_id = os.getenv('AZURE_SQL_USER')
# connection_string = f'Server={server},{port};Database={database};UID={client_id};Authentication=ActiveDirectoryMSI;Encrypt=yes;'
conn = connect(connection_string)
Alternatif bir yöntem olarak, erişim belirteci kullanarak Azure SQL Veritabanı'e de bağlanabilirsiniz; bu konuda daha fazla bilgi için Azure SQL Veritabanı ile parolasız bağlantılar kullanmak üzere bir Python uygulamasını nasıl taşıyabileceğinizi öğrenin bölümüne bakın.
- Bağımlılıkları yükleyin.
npm install mssql
- Hizmet Bağlayıcısı tarafından eklenen ortam değişkenlerinden Azure SQL Veritabanı bağlantı yapılandırmalarını alın. Kullanmak istediğiniz kimlik doğrulama türü için kod parçacığının bölümünü yorum satırından çıkarın.
import sql from 'mssql';
const server = process.env.AZURE_SQL_SERVER;
const database = process.env.AZURE_SQL_DATABASE;
const port = parseInt(process.env.AZURE_SQL_PORT);
const authenticationType = process.env.AZURE_SQL_AUTHENTICATIONTYPE;
// Uncomment the following lines according to the authentication type.
// For system-assigned managed identity.
// const config = {
// server,
// port,
// database,
// authentication: {
// authenticationType
// },
// options: {
// encrypt: true
// }
// };
// For user-assigned managed identity.
// const clientId = process.env.AZURE_SQL_CLIENTID;
// const config = {
// server,
// port,
// database,
// authentication: {
// type: authenticationType
// },
// options: {
// encrypt: true,
// clientId: clientId
// }
// };
this.poolconnection = await sql.connect(config);
Daha fazla bilgi için, Microsoft SQL Server istemci programlaması ana sayfası’na bakınız.
Daha fazla kod örneği için bkz. Service Connector aracılığıyla veritabanı hizmetine parolasız bağlantı oluşturma.
Kodunuzdaki MySQL için Azure Veritabanı bağlantısı, tüm dil yığınları için DefaultAzureCredential desenini izler.
DefaultAzureCredential hem geliştirme ortamına hem de Azure ortamına uyum sağlayacak kadar esnektir. Yerel olarak çalışırken, oturum açmış Azure kullanıcıyı seçtiğiniz ortamdan (Visual Studio, Visual Studio Code, Azure CLI veya Azure PowerShell) alabilir. Azure'da çalıştırıldığında yönetilen kimliği alır. Bu nedenle hem geliştirme zamanında hem de üretimde veritabanı bağlantısına sahip olmak mümkündür. Desen aşağıdaki gibidir:
- Azure Identity istemci kütüphanesinden bir
DefaultAzureCredential örneği oluşturun. Kullanıcı tarafından atanan bir kimlik kullanıyorsanız, kimliğin istemci kimliğini belirtin.
- MySQL için Azure Veritabanı için erişim belirteci alın:
https://ossrdbms-aad.database.windows.net/.default.
- Belirteci bağlantı dizesine ekleyin.
- Bağlantıyı açın.
.NET için, Azure.Identity gibi bir istemci kitaplığı kullanarak yönetilen kimlik için bir erişim belirteci alın. Ardından veritabanına bağlanmak için erişim belirtecini parola olarak kullanın. Aşağıdaki kodu kullanırken, kod bölümünün kullanmak istediğiniz kimlik doğrulama türüne karşılık gelen kısmını yorum satırından çıkardığınızdan emin olun.
using Azure.Core;
using Azure.Identity;
using MySqlConnector;
// Uncomment the following lines according to the authentication type.
// 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");
// });
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
pom.xml dosyanıza aşağıdaki bağımlılıkları ekleyin:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity-extensions</artifactId>
<version>1.2.0</version>
</dependency>
Ortam değişkeninden bağlantı dizesi alın ve veritabanına bağlanmak için eklenti adını ekleyin:
String url = System.getenv("AZURE_MYSQL_CONNECTIONSTRING");
String pluginName = "com.azure.identity.extensions.jdbc.mysql.AzureMysqlAuthenticationPlugin";
Connection connection = DriverManager.getConnection(url + "&defaultAuthenticationPlugin=" +
pluginName + "&authenticationPlugins=" + pluginName);
Daha fazla bilgi için bkz. MySQL için Azure Veritabanı ile Java ve JDBC kullanma - Esnek Sunucu.
Bağımlılıkları yükleyin.
pip install azure-identity
# install Connector/Python https://dev.mysql.com/doc/connector-python/en/connector-python-installation.html
pip install mysql-connector-python
Kimlik doğrulamasını azure-identity kütüphanesinden bir erişim belirteci ile yapın. Service Connector tarafından eklenen ortam değişkeninden bağlantı bilgilerini alın. Aşağıdaki kodu kullanırken, kod bölümünün kullanmak istediğiniz kimlik doğrulama türüne karşılık gelen kısmını yorum satırından çıkardığınızdan emin olun.
from azure.identity import ManagedIdentityCredential, ClientSecretCredential
import mysql.connector
import os
# Uncomment the following lines according to the authentication type.
# For system-assigned managed identity.
# cred = ManagedIdentityCredential()
# For user-assigned managed identity.
# managed_identity_client_id = os.getenv('AZURE_MYSQL_CLIENTID')
# cred = ManagedIdentityCredential(client_id=managed_identity_client_id)
# acquire token
accessToken = cred.get_token('https://ossrdbms-aad.database.windows.net/.default')
# open connect to Azure MySQL with the access token.
host = os.getenv('AZURE_MYSQL_HOST')
database = os.getenv('AZURE_MYSQL_NAME')
user = os.getenv('AZURE_MYSQL_USER')
password = accessToken.token
cnx = mysql.connector.connect(user=user,
password=password,
host=host,
database=database)
cnx.close()
Bağımlılıkları yükleyin.
npm install --save @azure/identity
npm install --save mysql2
Service Connector tarafından eklenen ortam değişkenlerinden @azure/identity ve Azure MySQL veritabanı bilgilerini kullanarak erişim belirteci alın. Aşağıdaki kodu kullanırken, kod bölümünün kullanmak istediğiniz kimlik doğrulama türüne karşılık gelen kısmını yorum satırından çıkardığınızdan emin olun.
import { DefaultAzureCredential,ClientSecretCredential } from "@azure/identity";
const mysql = require('mysql2');
// Uncomment the following lines according to the authentication type.
// for system-assigned managed identity
// const credential = new DefaultAzureCredential();
// for user-assigned managed identity
// const clientId = process.env.AZURE_MYSQL_CLIENTID;
// const credential = new DefaultAzureCredential({
// managedIdentityClientId: clientId
// });
// acquire token
var accessToken = await credential.getToken('https://ossrdbms-aad.database.windows.net/.default');
const connection = mysql.createConnection({
host: process.env.AZURE_MYSQL_HOST,
user: process.env.AZURE_MYSQL_USER,
password: accessToken.token,
database: process.env.AZURE_MYSQL_DATABASE,
port: process.env.AZURE_MYSQL_PORT,
ssl: process.env.AZURE_MYSQL_SSL
});
connection.connect((err) => {
if (err) {
console.error('Error connecting to MySQL database: ' + err.stack);
return;
}
console.log('Connected to MySQL database');
});
Daha fazla kod örneği için bkz. Service Connector aracılığıyla veritabanı hizmetine parolasız bağlantı oluşturma.
Kodunuzdaki PostgreSQL için Azure Veri Tabanı bağlantı, tüm dil yığınları için DefaultAzureCredential desenini izler.
DefaultAzureCredential hem geliştirme ortamına hem de Azure ortamına uyum sağlayacak kadar esnektir. Yerel olarak çalışırken, oturum açmış Azure kullanıcıyı seçtiğiniz ortamdan (Visual Studio, Visual Studio Code, Azure CLI veya Azure PowerShell) alabilir. Azure'da çalıştırıldığında yönetilen kimliği alır. Bu nedenle hem geliştirme zamanında hem de üretimde veritabanı bağlantısına sahip olmak mümkündür. Desen aşağıdaki gibidir:
- Azure Identity istemci kütüphanesinden bir
DefaultAzureCredential örneği oluşturun. Kullanıcı tarafından atanan bir kimlik kullanıyorsanız, kimliğin istemci kimliğini belirtin.
- PostgreSQL için Azure Veri Tabanı için erişim belirteci alın:
https://ossrdbms-aad.database.windows.net/.default.
- Belirteci bağlantı dizesine ekleyin.
- Bağlantıyı açın.
.NET için, Azure.Identity gibi bir istemci kitaplığı kullanarak yönetilen kimlik için bir erişim belirteci alın. Ardından veritabanına bağlanmak için erişim belirtecini parola olarak kullanın. Aşağıdaki kodu kullanırken, kod bölümünün kullanmak istediğiniz kimlik doğrulama türüne karşılık gelen kısmını yorum satırından çıkardığınızdan emin olun.
using Azure.Identity;
using Azure.Core;
using Npgsql;
// Uncomment the following lines according to the authentication type.
// For system-assigned identity.
// var sqlServerTokenProvider = new DefaultAzureCredential();
// For user-assigned identity.
// var sqlServerTokenProvider = new DefaultAzureCredential(
// new DefaultAzureCredentialOptions
// {
// ManagedIdentityClientId = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CLIENTID");
// }
// );
// 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();
}
pom.xml dosyanıza aşağıdaki bağımlılıkları ekleyin:
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.7.5</version>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity-extensions</artifactId>
<version>1.2.0</version>
</dependency>
Ortam değişkenlerinden bağlantı dizesi alın ve veritabanına bağlanmak için eklenti adını ekleyin:
import java.sql.*;
String url = System.getenv("AZURE_POSTGRESQL_CONNECTIONSTRING");
String pluginName = "com.Azure.identity.extensions.jdbc.postgresql.AzurePostgresqlAuthenticationPlugin";
Connection connection = DriverManager.getConnection(url + "&authenticationPluginClassName=" + pluginName);
Daha fazla bilgi için aşağıdaki kaynaklara bakın:
Bağımlılıkları yükleyin.
pip install azure-identity
pip install psycopg2-binary
Kitaplıktan azure-identity bir erişim belirteciyle kimlik doğrulaması yapın ve belirteci parola olarak kullanın. Hizmet Bağlayıcısı tarafından eklenen ortam değişkenlerinden bağlantı bilgilerini alın. Aşağıdaki kodu kullanırken, kod bölümünün kullanmak istediğiniz kimlik doğrulama türüne karşılık gelen kısmını yorum satırından çıkardığınızdan emin olun.
from azure.identity import DefaultAzureCredential
import psycopg2
# Uncomment the following lines according to the authentication type.
# For system-assigned identity.
# cred = DefaultAzureCredential()
# For user-assigned identity.
# managed_identity_client_id = os.getenv('AZURE_POSTGRESQL_CLIENTID')
# cred = ManagedIdentityCredential(client_id=managed_identity_client_id)
# Acquire the access token
accessToken = cred.get_token('https://ossrdbms-aad.database.windows.net/.default')
# Combine the token with the connection string from the environment variables added by Service Connector to establish the connection.
conn_string = os.getenv('AZURE_POSTGRESQL_CONNECTIONSTRING')
conn = psycopg2.connect(conn_string + ' password=' + accessToken.token)
Daha fazla bilgi için aşağıdaki kaynaklara bakın:
Bağımlılıkları yükleyin.
npm install --save @azure/identity
npm install --save pg
Kodda, Service Connector hizmeti tarafından eklenen ortam değişkenlerinden ve PostgreSQL bağlantı bilgileri aracılığıyla @azure/identity erişim belirtecini alın. Bağlantıyı kurmak için bunları birleştirin. Aşağıdaki kodu kullanırken, kod bölümünün kullanmak istediğiniz kimlik doğrulama türüne karşılık gelen kısmını yorum satırından çıkardığınızdan emin olun.
import { DefaultAzureCredential, ClientSecretCredential } from "@azure/identity";
const { Client } = require('pg');
// Uncomment the following lines according to the authentication type.
// For system-assigned identity.
// const credential = new DefaultAzureCredential();
// For user-assigned identity.
// const clientId = process.env.AZURE_POSTGRESQL_CLIENTID;
// const credential = new DefaultAzureCredential({
// managedIdentityClientId: clientId
// });
// Acquire the access token.
var accessToken = await credential.getToken('https://ossrdbms-aad.database.windows.net/.default');
// Use the token and the connection information from the environment variables added by Service Connector to establish the connection.
(async () => {
const client = new Client({
host: process.env.AZURE_POSTGRESQL_HOST,
user: process.env.AZURE_POSTGRESQL_USER,
password: accesstoken.token,
database: process.env.AZURE_POSTGRESQL_DATABASE,
port: Number(process.env.AZURE_POSTGRESQL_PORT) ,
ssl: process.env.AZURE_POSTGRESQL_SSL
});
await client.connect();
await client.end();
})();
Daha fazla kod örneği için bkz. Service Connector aracılığıyla veritabanı hizmetine parolasız bağlantı oluşturma.
4. Geliştirme ortamınızı ayarlama
Bu örnek kod, Microsoft Entra ID ile Azure veritabanınız için işlevsel bir belirteç almak için DefaultAzureCredential kullanır ve daha sonra bunu veritabanı bağlantısına ekler. Özelleştirebilmenize rağmen, DefaultAzureCredential varsayılan olarak zaten çok yönlüdür. Geliştirme ortamınızda yerel olarak veya App Service'te çalıştırmanıza bağlı olarak oturum açmış Microsoft Entra kullanıcısından veya yönetilen kimlikten bir belirteç alır.
Daha fazla değişiklik yapılmadan kodunuz Azure çalıştırılmaya hazırdır. Ancak kodunuzun hatalarını yerel olarak ayıklamak için geliştirme ortamınızın oturum açmış bir Microsoft Entra kullanıcısı olması gerekir. Bu adımda, Microsoft Entra kullanıcınızla oturum açarak seçtiğiniz ortamı yapılandıracaksınız.
Windows için Visual Studio, Microsoft Entra kimlik doğrulamasıyla tümleşiktir. Visual Studio geliştirme ve hata ayıklamayı etkinleştirmek için menüden File>Account Settings öğesini seçerek Microsoft Entra kullanıcınızı Visual Studio ekleyin. Sign in veya Add öğesini seçin.
Azure hizmet kimlik doğrulaması için Microsoft Entra kullanıcıyı ayarlamak için, menüden Tools>Options öğesini seçin ve ardından Azure Service Authentication>Account Selection öğesini seçin. Eklediğiniz Microsoft Entra kullanıcıyı seçin ve OK öğesini seçin.
Mac için Visual Studio Microsoft Entra kimlik doğrulamasıyla tümleşik değildir. Ancak, daha sonra kullanacağınız Azure Identity istemci kitaplığı Azure CLI'dan da jetonlarını alabilir. Visual Studio'da geliştirmeyi ve hata ayıklamayı etkinleştirmek için yerel makinenizde Azure CLI yükleyin.
Microsoft Entra kullanıcınızı kullanarak aşağıdaki komutla Azure CLI oturum açın:
az login --allow-no-subscriptions
Visual Studio Code, Azure uzantısı aracılığıyla Microsoft Entra kimlik doğrulamasıyla tümleştirilir.
Azure Tools uzantısını Visual Studio Code yükleyin.
Visual Studio Code içinde, Etkinlik Çubuğu'nda Azure logosunu seçin.
App Service gezgininde Azure'a giriş yap... seçin ve yönergeleri izleyin.
Daha sonra kullanacağınız Azure Kimliği istemci kitaplığı, Azure CLI belirteçlerini kullanabilir. Komut satırı tabanlı geliştirmeyi etkinleştirmek için yerel makinenizde Azure CLI yükleyin.
Microsoft Entra kullanıcınızı kullanarak aşağıdaki komutla Azure oturum açın:
az login --allow-no-subscriptions
Daha sonra kullanacağınız Azure Kimliği istemci kitaplığı, Azure PowerShell belirteçleri kullanabilir. Komut satırı tabanlı geliştirmeyi etkinleştirmek için yerel makinenizde Azure PowerShell<> yükleyin.
Microsoft Entra kullanıcınızı kullanarak aşağıdaki cmdlet ile Azure CLI oturum açın:
Connect-AzAccount
Microsoft Entra kimlik doğrulaması için geliştirme ortamınızı kurma hakkında daha fazla bilgi için Azure Identity istemci kitaplığı (.NET için) bölümüne bakın.
Artık Microsoft Entra kimlik doğrulamasını kullanarak arka uç olarak SQL Veritabanı ile uygulamanızı geliştirmeye ve hatalarını ayıklamaya hazırsınız.
5. Test edin ve yayımlayın
Kodunuzu geliştirme ortamınızda çalıştırın. Kodunuz arka uç veritabanına bağlanmak için ortamınızdaki oturum açmış Microsoft Entra kullanıcıyı kullanır. Veritabanı için Microsoft Entra yöneticisi olarak yapılandırıldığından kullanıcı veritabanına erişebilir.
Tercih edilen yayımlama yöntemini kullanarak kodunuzu Azure yayımlayın. App Service'te kodunuz arka uç veritabanına bağlanmak için uygulamanın yönetilen kimliğini kullanır.
Sıkça sorulan sorular
Yönetilen kimlik SQL Server destekliyor mu?
Evet. Daha fazla bilgi için bakınız:
Hatayı alıyorum Login failed for user '<token-identified principal>'.
belirteç istemeye çalıştığınız yönetilen kimlik, Azure veritabanına erişme yetkisine sahip değil.
App Service kimlik doğrulamasında veya ilişkili uygulama kaydında değişiklikler yaptım. Neden hala eski jetonu alıyorum?
Yönetilen kimliklerin arka uç hizmetleri, hedef kaynağın belirtecini yalnızca süresi dolduğunda güncelleştiren bir belirteç önbelleği de tutar. Uygulamanızla belirteç almaya çalıştıktan sonra yapılandırmayı değiştirirseniz, önbelleğe alınan belirtecin süresi dolana kadar güncelleştirilmiş izinlere sahip yeni bir belirteç almazsınız. Bu sorunu geçici olarak gidermenin en iyi yolu, değişikliklerinizi yeni bir InPrivate (Edge)/private (Safari)/Incognito (Chrome) penceresiyle test etmektir. Bu şekilde, yeni bir kimliği doğrulanmış oturumdan başlayacağınızdan emin olursunuz.
Yönetilen kimliği bir Microsoft Entra grubuna nasıl ekleyebilirim?
İsterseniz, kimliği bir Microsoft Entra grubuna ekleyebilir ve ardından kimlik yerine Microsoft Entra grubuna erişim vekleyebilirsiniz. Örneğin, aşağıdaki komutlar önceki adımdaki yönetilen kimliği myAzureSQLDBAccessGroup adlı yeni bir gruba ekler:
groupid=$(az ad group create --display-name myAzureSQLDBAccessGroup --mail-nickname myAzureSQLDBAccessGroup --query objectId --output tsv)
msiobjectid=$(az webapp identity show --resource-group <group-name> --name <app-name> --query principalId --output tsv)
az ad group member add --group $groupid --member-id $msiobjectid
az ad group member list -g $groupid
bir Microsoft Entra grubu için veritabanı izinleri vermek için ilgili veritabanı türünün belgelerine bakın.
Ben SSL connection is required. Please specify SSL options and retry hatası alıyorum.
Azure veritabanına bağlanmak için daha fazla ayar gerekir ve bu öğreticinin kapsamı dışındadır. Daha fazla bilgi için aşağıdaki bağlantılardan birine bakın:
Hizmet Bağlayıcısı,uygulama kimliğine erişim vermek için veritabanına ağ erişimine ihtiyaç duyar. Web Uygulaması + Veritabanı şablonuyla Azure portalında varsayılan olarak güvenli bir uygulama ve veritabanı mimarisi oluşturduğunuzda, mimari veritabanına ağ erişimini kilitler ve yalnızca sanal ağ içinden bağlantılara izin verir. Azure Cloud Shell için de geçerlidir. Ancak sanal ağda deploy Cloud Shell ve ardından bu Cloud Shell Service Connector komutunu çalıştırabilirsiniz.
Sonraki Adımlar
Öğrendikleriniz:
- Microsoft Entra kullanıcıyı Azure veritabanınız için yönetici olarak yapılandırın.
- Veritabanınıza Microsoft Entra kullanıcı olarak bağlanın.
- App Service uygulaması için sistem tarafından atanan veya kullanıcı tarafından atanan yönetilen kimliği yapılandırın.
- Yönetilen kimlik için veritabanı erişimi tanıyın.
- Yönetilen kimlik kullanarak kodunuzdan (.NET Framework 4.8, .NET 6, Node.js, Python Java) Azure veritabanına bağlanın.
- Microsoft Entra kullanıcısını kullanarak geliştirme ortamınızdan Azure veritabanına bağlanın.