App Service nagymértékben skálázható, önjavító web hosting szolgáltatást nyújt Azure. Emellett managed identitást is biztosít az alkalmazás számára, amely kulcsrakész megoldás a Azure adatbázisokhoz való hozzáférés biztosításához, beleértve a következőket:
Az App Service-ben található felügyelt identitások biztonságosabbá teszik alkalmazását a titkos kódok, pl. a kapcsolati sztringekben lévő hitelesítő adatok szükségességének megszüntetésével. Ez az oktatóanyag bemutatja, hogyan csatlakozhat a fent említett adatbázisokhoz az App Service-ből felügyelt identitások használatával.
A következő tudnivalókat fogja elsajátítani:
- Konfiguráljon egy Microsoft Entra felhasználót rendszergazdaként a Azure-adatbázishoz.
- Csatlakozzon az adatbázishoz Microsoft Entra felhasználóként.
- Konfiguráljon egy rendszer által hozzárendelt vagy felhasználó által hozzárendelt felügyelt identitást egy App Service-alkalmazáshoz.
- Adatbázis-hozzáférés biztosítása a felügyelt identitáshoz.
- Csatlakozzon a Azure adatbázishoz a kódból (.NET Framework 4.8, .NET 6, Node.js, Python, Java) egy felügyelt identitás használatával.
- Csatlakozzon a Azure adatbázishoz a fejlesztési környezetből a Microsoft Entra felhasználóval.
Ha nincs Azure fiókja, a kezdés előtt hozzon létre egy felszabadító fiókot.
Előfeltételek
- Alkalmazás létrehozása az App Service-ben .NET, Node.js, Python vagy Java alapján.
- Adatbázis-kiszolgáló létrehozása Azure SQL Database, Azure Database for MySQL vagy Azure Database for PostgreSQL használatával.
- Ismernie kell a szabványos kapcsolati mintát (felhasználónévvel és jelszóval), és sikeresen csatlakoznia kell az App Service-alkalmazásból a választott adatbázishoz.
Az Azure CLI környezet előkészítése.
1. A Service Connector jelszó nélküli bővítményének telepítése
Telepítse a legújabb Service Connector jelszó nélküli bővítményt a Azure CLI:
az extension add --name serviceconnector-passwordless --upgrade
Feljegyzés
Ellenőrizze, hogy a "serviceconnector-passwordless" bővítmény verziója "2.0.2" vagy újabb-e azáltal, hogy futtatja a következő parancsot: az version. Előfordulhat, hogy először frissítenie kell Azure CLI a bővítményverzió frissítéséhez.
2. Jelszó nélküli kapcsolat létrehozása
Ezután hozzon létre egy jelszó nélküli kapcsolatot a Service Connector használatával.
Tipp.
A Azure portál az alábbi parancsok írásában segíthet. A Azure portálon lépjen a Azure App Service erőforrásra, válassza a Service Connector lehetőséget a bal oldali menüben, és válassza a Create lehetőséget. Töltse ki az űrlapot az összes szükséges paraméterrel. Azure automatikusan létrehozza a kapcsolatlétrehozási parancsot, amelyet a parancssori felületen való használatra másolhat, vagy végrehajthat Azure Cloud Shell.
Az alábbi Azure CLI parancs egy --client-type paramétert használ.
A támogatott ügyféltípusok lekéréséhez szükség esetén futtassa az webapp connection create sql -h a parancsot.
Válasszon egy ügyféltípust, és futtassa a megfelelő parancsot. Cserélje le a következő helyőrzőket saját adataival.
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>
Feljegyzés
A Azure Database for MySQL – Rugalmas kiszolgáló esetében először manual módon kell beállítania Microsoft Entra hitelesítést, amelyhez külön felhasználó által hozzárendelt felügyelt identitásra és meghatározott Microsoft Graph engedélyekre van szükség. Ez a lépés nem automatizálható.
Manuálisan állítsa be a Microsoft Entra hitelesítést az Azure Database for MySQL – Flexible Serverhez.
Ha szeretné, futtassa a parancsot az webapp connection create mysql-flexible -h a támogatott ügyféltípusok lekéréséhez.
Válasszon egy ügyféltípust, és futtassa a megfelelő parancsot. Az alábbi Azure CLI parancs egy --client-type paramétert használ.
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>
Az alábbi Azure CLI parancs egy --client-type paramétert használ.
Ha szeretné, futtassa a parancsot az webapp connection create postgres-flexible -h az összes támogatott ügyféltípus listájának lekéréséhez.
Válasszon egy ügyféltípust, és futtassa a megfelelő parancsot.
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>
Engedélyek megadása előre létrehozott táblákhoz
Ezután, ha a Service Connector használata előtt táblákat és szekvenciákat hozott létre a Rugalmas PostgreSQL-kiszolgálón, tulajdonosként kell csatlakoznia, és engedélyt kell adnia a Service Connector általi létrehozásra <aad-username> . A Service Connector által beállított kapcsolati karakterlánc vagy konfigurációs csoport felhasználónevének így kell kinéznie: aad_<connection name>. Ha a Azure portált használja, kattintson a Service Type oszlop melletti kibontás gombra, és kérje le az értéket. Ha Azure CLI-t használ, ellenőrizze configurations a CLI parancs kimenetében.
Ezután hajtsa végre a lekérdezést az engedély megadásához
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>\";"
A <owner-username> és <owner-password> a meglévő tábla tulajdonosai, akik engedélyeket adhatnak másoknak.
<aad-username> a Service Connector által létrehozott felhasználó. Cserélje le őket a tényleges értékre.
Ellenőrizze az eredményt a következő paranccsal:
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
Ez a Service Connector-parancs a következő feladatokat hajtja végre a háttérben:
- Engedélyezze a rendszer által hozzárendelt felügyelt identitást, vagy rendeljen hozzá egy felhasználói identitást a Azure App Service által üzemeltetett alkalmazáshoz
<server-name>.
- Állítsa a Microsoft Entra rendszergazdát az aktuális bejelentkezett felhasználóra.
- Adjon hozzá egy adatbázis-felhasználót a rendszer által hozzárendelt felügyelt identitáshoz vagy a felhasználó által hozzárendelt felügyelt identitáshoz. Adja meg az adatbázis
<database-name> összes jogosultságát ennek a felhasználónak. A felhasználónév a parancs előző kimenetében található kapcsolati karakterláncben található.
- Állítsa be a
AZURE_MYSQL_CONNECTIONSTRING, AZURE_POSTGRESQL_CONNECTIONSTRING vagy AZURE_SQL_CONNECTIONSTRING nevű konfigurációkat az adatbázis típusa alapján az Azure erőforrásra.
- App Service esetén a konfigurációk az Alkalmazásbeállítások panelen vannak beállítva.
Ha probléma merül fel a kapcsolat létrehozásakor, segítségért tekintse meg a hibaelhárítást .
3. A kód módosítása
Telepítse a függőségeket.
dotnet add package Microsoft.Data.SqlClient
Lekérheti az Azure SQL Database csatlakozási karakterláncot a Service Connector által hozzáadott környezeti változóból.
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();
További információ: A felügyelt identitás hitelesítésének Active Directory használata.
Adja hozzá a következő függőségeket a pom.xml fájlhoz:
<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>
Lekérheti az Azure SQL Database csatlakozási karakterláncot a Service Connector által hozzáadott környezeti változóból.
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();
}
}
}
További információ: Kapcsolódás Microsoft Entra hitelesítéssel.
Telepítse a függőségeket.
python -m pip install mssql-python python-dotenv
Kérje le a Azure SQL Database kapcsolati konfigurációkat a Service Connector által hozzáadott környezeti változóból. A használni kívánt hitelesítési típus kódrészletének kibontása.
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)
Másik módszerként hozzáférési jogkivonat használatával is csatlakozhat az Azure SQL Database-hez, hivatkozzon: Python alkalmazás migrálása jelszó nélküli kapcsolatok használatával az Azure SQL Database-hez.
- Telepítse a függőségeket.
npm install mssql
- Kérje le a Azure SQL Database kapcsolati konfigurációkat a Service Connector által hozzáadott környezeti változókból. A használni kívánt hitelesítési típus kódrészletének kibontása.
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);
További információért tekintse meg a Microsoft SQL Server ügyfélprogramozás kezdőlapját.
További kódmintákért lásd : Jelszó nélküli kapcsolat létrehozása adatbázis-szolgáltatással a Service Connectoron keresztül.
A kódjaiban az Azure Database for MySQL-hoz való csatlakozás az összes nyelvi stack esetében a DefaultAzureCredential mintát követi.
DefaultAzureCredential elég rugalmas ahhoz, hogy mind a fejlesztési környezethez, mind a Azure környezethez alkalmazkodjon. Helyi futtatáskor lekérheti a bejelentkezett Azure felhasználót a választott környezetből (Visual Studio, Visual Studio Code, Azure CLI vagy Azure PowerShell). Ha Azure fut, lekéri a felügyelt identitást. Lehetséges, hogy a fejlesztési és a produkciós környezetben egyaránt legyen kapcsolat az adatbázissal. A minta a következő:
- Egy
DefaultAzureCredential példányosítása az Azure Identity ügyfélkódtárból. Ha felhasználó által hozzárendelt identitást használ, adja meg az identitás ügyfél-azonosítóját.
- Hozzáférési jogkivonat beszerzése Azure Database for MySQL:
https://ossrdbms-aad.database.windows.net/.default.
- Adja hozzá a token-t a kapcsolati karakterlánchez.
- Nyissa meg a kapcsolatot.
A .NET számára egy hozzáférési tokent kérhet le a felügyelt identitáshoz egy ügyfélkönyvtár, például az Azure.Identity használatával. Ezután jelszóként használja a hozzáférési jogkivonatot az adatbázishoz való csatlakozáshoz. Az alábbi kód használatakor mindenképpen törölje a kódrészlet azon részét, amely megfelel a használni kívánt hitelesítési típusnak.
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
Adja hozzá a következő függőségeket a pom.xml fájlhoz:
<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>
Szerezze meg a kapcsolati karakterláncot a környezeti változókból, és adja hozzá a beépülő modul nevét, hogy csatlakozzon az adatbázishoz.
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);
További információkért lásd: A Java és a JDBC használata az Azure Database for MySQL – Rugalmas kiszolgálóval.
Telepítse a függőségeket.
pip install azure-identity
# install Connector/Python https://dev.mysql.com/doc/connector-python/en/connector-python-installation.html
pip install mysql-connector-python
Hitelesítsen egy hozzáférési jogkivonattal a azure-identity könyvtárból. Kérje le a kapcsolati adatokat a Service Connector által hozzáadott környezeti változóból. Az alábbi kód használatakor mindenképpen törölje a kódrészlet azon részét, amely megfelel a használni kívánt hitelesítési típusnak.
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()
Telepítse a függőségeket.
npm install --save @azure/identity
npm install --save mysql2
Szerezze be a hozzáférési jogkivonatot a @azure/identity és a Azure MySQL-adatbázis adatainak használatával a Service Connector által hozzáadott környezeti változókból. Az alábbi kód használatakor mindenképpen törölje a kódrészlet azon részét, amely megfelel a használni kívánt hitelesítési típusnak.
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');
});
További kódmintákért lásd : Jelszó nélküli kapcsolat létrehozása adatbázis-szolgáltatással a Service Connectoron keresztül.
A kódjában az Azure Database for PostgreSQL az összes nyelvi környezetben a DefaultAzureCredential mintát követi.
DefaultAzureCredential elég rugalmas ahhoz, hogy mind a fejlesztési környezethez, mind a Azure környezethez alkalmazkodjon. Helyi futtatáskor lekérheti a bejelentkezett Azure felhasználót a választott környezetből (Visual Studio, Visual Studio Code, Azure CLI vagy Azure PowerShell). Ha Azure fut, lekéri a felügyelt identitást. Lehetséges, hogy a fejlesztési és a produkciós környezetben egyaránt legyen kapcsolat az adatbázissal. A minta a következő:
- Egy
DefaultAzureCredential példányosítása az Azure Identity ügyfélkódtárból. Ha felhasználó által hozzárendelt identitást használ, adja meg az identitás ügyfél-azonosítóját.
- Azure Database for PostgreSQL hozzáférési token beszerzése:
https://ossrdbms-aad.database.windows.net/.default.
- Adja hozzá a token-t a kapcsolati karakterlánchez.
- Nyissa meg a kapcsolatot.
A .NET számára egy hozzáférési tokent kérhet le a felügyelt identitáshoz egy ügyfélkönyvtár, például az Azure.Identity használatával. Ezután jelszóként használja a hozzáférési jogkivonatot az adatbázishoz való csatlakozáshoz. Az alábbi kód használatakor mindenképpen törölje a kódrészlet azon részét, amely megfelel a használni kívánt hitelesítési típusnak.
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();
}
Adja hozzá a következő függőségeket a pom.xml fájlhoz:
<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>
Kérje le a kapcsolati karakterlánc a környezeti változókból, és adja hozzá a beépülő modul nevét az adatbázishoz való csatlakozáshoz:
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);
További információt a következő források tartalmaznak:
Telepítse a függőségeket.
pip install azure-identity
pip install psycopg2-binary
Hitelesítse a könyvtárból származó azure-identity hozzáférési jogkivonattal, és használja a jogkivonatot jelszóként. Kérje le a kapcsolati adatokat a Service Connector által hozzáadott környezeti változókból. Az alábbi kód használatakor mindenképpen törölje a kódrészlet azon részét, amely megfelel a használni kívánt hitelesítési típusnak.
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)
További információt a következő források tartalmaznak:
Telepítse a függőségeket.
npm install --save @azure/identity
npm install --save pg
A kódban kérje le a hozzáférési jogkivonatot @azure/identity a Service Connector szolgáltatás által hozzáadott környezeti változók segítségével, és a PostgreSQL-kapcsolati információkat is ebből nyerje. Kapcsolja össze őket a kapcsolat létrehozásához. Az alábbi kód használatakor mindenképpen törölje a kódrészlet azon részét, amely megfelel a használni kívánt hitelesítési típusnak.
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();
})();
További kódmintákért lásd : Jelszó nélküli kapcsolat létrehozása adatbázis-szolgáltatással a Service Connectoron keresztül.
4. A fejlesztői környezet beállítása
Ez a mintakód a DefaultAzureCredential használatával kér le egy használható jogkivonatot az Azure-adatbázishoz a Microsoft Entra ID-től, majd hozzáadja azt az adatbázis-kapcsolathoz. Bár testre szabható DefaultAzureCredential, alapértelmezés szerint már sokoldalú. Jogkivonatot kap a bejelentkezett Microsoft Entra felhasználótól vagy egy felügyelt identitástól attól függően, hogy helyileg futtatja-e a fejlesztői környezetben vagy az App Service-ben.
További módosítások nélkül a kód készen áll a Azure való futtatásra. A kód helyi hibakereséséhez azonban a fejlesztőkörnyezetnek egy bejelentkezett Microsoft Entra felhasználóra van szüksége. Ebben a lépésben úgy konfigurálhatja a választott környezetet, hogy bejelentkezik Microsoft Entra felhasználójával.
A Windows Visual Studio integrálva van Microsoft Entra hitelesítéssel. Ha engedélyezni szeretné a fejlesztést és a hibakeresést a Visual Studio-ban, vegye fel Microsoft Entra felhasználóját a Visual Studio-ban a menü File>Fiók beállításai pontjára kattintva, és válassza a Bejelentkezés vagy a Hozzáadás lehetőséget.
A Microsoft Entra felhasználó beállítása Azure szolgáltatáshitelesítéshez: válassza a Tools>Options lehetőséget, majd válassza a Azure Szolgáltatáshitelesítés>Fiók kiválasztása lehetőséget. Válassza ki a hozzáadott Microsoft Entra felhasználót, és válassza a OK lehetőséget.
Visual Studio for Mac nem integrálva a Microsoft Entra hitelesítéssel. Az Azure Identity ügyfélkönyvtár, amit később használni fog, jogkivonatokat is lekérhet az Azure CLI-ből. Ha engedélyezni szeretné a fejlesztést és a hibakeresést a Visual Studioban, telepítse az Azure CLI-t a helyi gépére.
Jelentkezzen be az Azure CLI-be a következő parancs segítségével a Microsoft Entra adott felhasználójával:
az login --allow-no-subscriptions
Visual Studio Code a Azure bővítményen keresztül integrálva van Microsoft Entra hitelesítéssel. Telepítse az Azure Tools bővítményt a Visual Studio Code-hoz.
A Visual Studio Code Activity Bar területén válassza a Azure emblémát.
Az App Service explorerben válassza a Sign in to Azure... és kövesse az utasításokat.
A később használni kívánt Azure Identity-ügyfélkódtár a Azure CLI jogkivonatait használhatja. A parancssori fejlesztés engedélyezéséhez install Azure CLI a helyi gépen.
Jelentkezzen be Azure a következő paranccsal a Microsoft Entra felhasználójával:
az login --allow-no-subscriptions
A később használni kívánt Azure Identity ügyfélkönyvtár az Azure PowerShell tokenjeit is használhatja. A parancssori alapú fejlesztés engedélyezéséhez telepítse az Azure PowerShellt a saját számítógépére.
Jelentkezzen be az Azure CLI-ba a következő parancsot használva a Microsoft Entra-felhasználódat:
Connect-AzAccount
A Microsoft Entra hitelesítés fejlesztői környezetének beállításáról további információt az Azure Identity ügyfélkönyvtárában talál a .NET számára.
Most már készen áll az alkalmazás fejlesztésére és hibakeresésére az SQL Database háttérrendszerrel, Microsoft Entra hitelesítés használatával.
5. Tesztelés és közzététel
Futtassa a kódot a fejlesztői környezetben. A kód a környezetbe bejelentkezett Microsoft Entra felhasználót használja a háttéradatbázishoz való csatlakozáshoz. A felhasználó hozzáférhet az adatbázishoz, mert Microsoft Entra rendszergazdaként van konfigurálva az adatbázishoz.
Tegye közzé a kódot Azure az előnyben részesített közzétételi módszer használatával. Az App Service-ben a kód az alkalmazás felügyelt identitásával csatlakozik a háttéradatbázishoz.
Gyakori kérdések
Támogatja a felügyelt identitás SQL Server?
Igen. További információk:
Hibaüzenet jelenik meg Login failed for user '<token-identified principal>'.
A tokent lekérni kívánt felügyelt identitás nem jogosult az Azure adatbázis elérésére.
Módosítottam az App Service-hitelesítést vagy a kapcsolódó alkalmazásregisztrációt. Miért kapom meg még mindig a régi kódot?
A felügyelt identitások háttérszolgáltatásai emellett olyan jogkivonat-gyorsítótárat is fenntartanak, amely csak akkor frissíti a célerőforrás jogkivonatát, ha az lejár. Ha módosítja a konfigurációt , miután megpróbált jogkivonatot lekérni az alkalmazással, akkor valójában nem kap új, frissített engedélyekkel rendelkező jogkivonatot, amíg a gyorsítótárazott jogkivonat le nem jár. Ennek a megoldásnak a legjobb módja, ha egy új InPrivate (Edge)/private (Safari)/Inkognitó (Chrome) ablakkal teszteli a módosításokat. Így biztos lehet benne, hogy egy új hitelesített munkamenet kezdődik.
Hogyan adhatom hozzá a felügyelt identitást egy Microsoft Entra csoporthoz?
Ha szeretné, hozzáadhatja az identitást egy Microsoft Entra csoporthoz, majd az identitás helyett hozzáférést adhat a Microsoft Entra csoporthoz. Az alábbi parancsok például hozzáadják a felügyelt identitást az előző lépésből egy új, myAzureSQLDBAccessGroup nevű csoporthoz:
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
Ha adatbázis-engedélyeket szeretne adni egy Microsoft Entra csoporthoz, tekintse meg a megfelelő adatbázistípus dokumentációját.
A hibaüzenetet SSL connection is required. Please specify SSL options and retrykapom.
Az Azure adatbázishoz való csatlakozáshoz több beállítás szükséges, és az oktatóanyag hatókörén kívül esik. További információkért tekintse meg az alábbi hivatkozások egyikét:
A Service Connectornak hálózati hozzáférésre van szüksége az adatbázishoz az alkalmazás identitásához való hozzáférés biztosításához. Ha a webalkalmazás + adatbázis sablonnal létrehoz egy biztonságos alkalmazás- és adatbázisarchitektúrát a Azure portálon, az architektúra zárolja az adatbázishoz való hálózati hozzáférést, és csak a virtuális hálózaton belüli kapcsolatokat engedélyezi. Ez Azure Cloud Shell is igaz. Azonban telepítheti a Cloud Shell-t a virtuális hálózatba, majd futtathatja a Service Connector parancsot ebben a Cloud Shell-ben.
Következő lépések
Amit megtanultál:
- Konfiguráljon egy Microsoft Entra felhasználót rendszergazdaként a Azure-adatbázishoz.
- Csatlakozzon az adatbázishoz Microsoft Entra felhasználóként.
- Konfiguráljon egy rendszer által hozzárendelt vagy felhasználó által hozzárendelt felügyelt identitást egy App Service-alkalmazáshoz.
- Adatbázis-hozzáférés biztosítása a felügyelt identitáshoz.
- Csatlakozzon a Azure adatbázishoz a kódból (.NET Framework 4.8, .NET 6, Node.js, Python, Java) egy felügyelt identitás használatával.
- Csatlakozzon a Azure adatbázishoz a fejlesztési környezetből a Microsoft Entra felhasználóval.