App Service je vysoce škálovatelná služba s automatickými opravami pro hostování webů v Azure. Poskytuje také spravovanou identitu pro vaši aplikaci, což je řešení pro zabezpečení přístupu k databázím Azure, včetně následujících:
Spravované identity ve službě App Service zvyšují zabezpečení vaší aplikace tím, že z aplikace odstraňují tajné kódy, jako jsou přihlašovací údaje v připojovacích řetězcích. V tomto kurzu se dozvíte, jak se z App Service připojit k výše uvedeným databázím pomocí spravovaných identit.
Co se naučíte:
- Nakonfigurujte uživatele Microsoft Entra jako správce pro vaši databázi Azure.
- Připojte se k databázi jako uživatel Microsoft Entra.
- Nakonfigurujte spravovanou identitu přiřazenou systémem nebo přiřazenou uživatelem pro aplikaci app Service.
- Udělte spravované identitě přístup k databázi.
- Připojte se k databázi Azure z kódu (.NET Framework 4.8, .NET 6, Node.js, Python, Java) pomocí spravované identity.
- Připojte se k databázi Azure z vývojového prostředí pomocí uživatele Microsoft Entra.
Pokud nemáte účet Azure, vytvořte si bezplatný účet před tím, než začnete.
Požadavky
- Vytvořte aplikaci ve službě App Service na základě .NET, Node.js, Pythonu nebo Javy.
- Vytvořte databázový server pomocí Azure SQL Database, Azure Database for MySQL nebo Azure Database for PostgreSQL.
- Měli byste být obeznámeni se standardním vzorem připojení (s uživatelským jménem a heslem) a úspěšně se připojit z aplikace App Service k databázi podle vašeho výběru.
Připravte prostředí pro Azure CLI.
1. Nainstalujte rozšíření bez hesla pro Service Connector
Nainstalujte nejnovější rozšíření bez hesla konektoru Service Connector pro Azure CLI:
az extension add --name serviceconnector-passwordless --upgrade
Poznámka:
Spuštěním příkazu az version zkontrolujte, jestli je verze serviceconnector-passwordless verze 2.0.2 nebo vyšší. Abyste mohli upgradovat verzi rozšíření, možná budete muset nejprve upgradovat Azure CLI.
2. Vytvoření připojení bez hesla
Dále vytvořte připojení bez hesla pomocí konektoru Service Connector.
Návod
S vytvářením příkazů níže vám může pomoct Azure Portal. V Azure Portal přejděte na prostředek Azure App Service, v levé nabídce vyberte Konektor služby a zvolte Vytvořit. Vyplňte formulář všemi požadovanými parametry. Azure automaticky vygeneruje příkaz pro vytvoření připojení, který můžete zkopírovat do rozhraní příkazového řádku nebo spustit v Azure Cloud Shellu.
Následující příkaz Azure CLI používá --client-type parametr.
Volitelně spusťte příkaz az webapp connection create sql -h pro získání podporovaných typů klientů.
Zvolte typ klienta a spusťte odpovídající příkaz. Nahraďte zástupné symboly níže vlastními informacemi.
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>
Poznámka:
Pro flexibilní server Azure Database for MySQL musíte nejprve ručně nastavit ověřování Microsoft Entra, které vyžaduje samostatnou spravovanou identitu přiřazenou uživatelem a konkrétní oprávnění Microsoft Graphu. Tento krok nejde automatizovat.
Ruční nastavení ověřování Microsoft Entra pro Azure Database for MySQL – flexibilní server.
Volitelně spusťte příkaz az webapp connection create mysql-flexible -h pro získání podporovaných typů klientů.
Zvolte typ klienta a spusťte odpovídající příkaz. Následující příkaz Azure CLI používá --client-type parametr.
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>
Následující příkaz Azure CLI používá --client-type parametr.
Volitelně spuštěním příkazu az webapp connection create postgres-flexible -h získejte seznam všech podporovaných typů klientů.
Zvolte typ klienta a spusťte odpovídající příkaz.
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>
Udělení oprávnění k předem vytvořeným tabulkám
Pokud jste vytvořili tabulky a sekvence na flexibilním serveru PostgreSQL před použitím konektoru služby, musíte se připojit jako vlastník a udělit oprávnění k objektům vytvořeným konektorem služby <aad-username>. Uživatelské jméno z připojovacího řetězce nebo nastavení konfigurace nastavené konektorem služby by mělo vypadat taktoaad_<connection name>. Pokud používáte Azure portál, vyberte tlačítko rozbalit vedle sloupce Service Type a získejte hodnotu. Pokud používáte Azure CLI, zkontrolujte výstup příkazu configurations.
Pak spusťte dotaz, který udělí oprávně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> a <owner-password> jsou vlastníkem existující tabulky, který může udělit oprávnění ostatním.
<aad-username> je uživatel vytvořený konektorem služby. Nahraďte je skutečnou hodnotou.
Pomocí příkazu ověřte výsledek:
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
Tento příkaz konektoru služby dokončí v pozadí následující úlohy:
- Povolte spravovanou identitu přiřazenou systémem nebo přiřaďte identitu uživatele pro aplikaci
<server-name> hostované službou Aplikace Azure Service.
- Nastavte správce Microsoft Entra na aktuálně přihlášeného uživatele.
- Přidejte uživatele databáze pro spravovanou identitu přiřazenou systémem nebo spravovanou identitu přiřazenou uživatelem. Udělte tomuto uživateli všechna oprávnění databáze
<database-name> . Uživatelské jméno najdete v připojovacím řetězci v předchozím výstupu příkazu.
- Nastavte konfigurace s názvem
AZURE_MYSQL_CONNECTIONSTRING, AZURE_POSTGRESQL_CONNECTIONSTRINGnebo AZURE_SQL_CONNECTIONSTRING na prostředek Azure na základě typu databáze.
- V případě služby App Service se konfigurace nastaví v okně Nastavení aplikace.
Pokud při vytváření připojení narazíte na nějaký problém, projděte si nápovědu v části Řešení potíží .
3. Úprava kódu
Nainstalujte závislosti.
dotnet add package Microsoft.Data.SqlClient
Získejte konfigurační řetězec Azure SQL Database z proměnné prostředí přidané Service Connectorem.
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();
Další informace najdete v tématu Použití ověřování spravované identity služby Active Directory.
Do souboru pom.xml přidejte následující závislosti:
<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>
Získejte konfigurační řetězec Azure SQL Database z proměnné prostředí přidané Service Connectorem.
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();
}
}
}
Další informace naleznete v tématu Připojení pomocí ověřování Microsoft Entra.
Nainstalujte závislosti.
python -m pip install pyodbc
Získejte konfigurace připojení k Azure SQL Database z proměnné prostředí, kterou přidal Service Connector. Odkomentujte část fragmentu kódu pro typ ověřování, který chcete použít.
import os;
import pyodbc
server = os.getenv('AZURE_SQL_SERVER')
port = os.getenv('AZURE_SQL_PORT')
database = os.getenv('AZURE_SQL_DATABASE')
authentication = os.getenv('AZURE_SQL_AUTHENTICATION') # The value should be 'ActiveDirectoryMsi'
# Uncomment the following lines according to the authentication type.
# For system-assigned managed identity.
# connString = f'Driver={{ODBC Driver 18 for SQL Server}};Server={server},{port};Database={database};Authentication={authentication};Encrypt=yes;'
# For user-assigned managed identity.
# client_id = os.getenv('AZURE_SQL_USER')
# connString = f'Driver={{ODBC Driver 18 for SQL Server}};Server={server},{port};Database={database};UID={client_id};Authentication={authentication};Encrypt=yes;'
conn = pyodbc.connect(connString)
Pokud chcete použít alternativní metodu, můžete se také připojit ke službě Azure SQL Database pomocí přístupového tokenu. Vizte Migrace aplikace v Pythonu pro použití připojení bez hesla se službou Azure SQL Database.
- Nainstalujte závislosti.
npm install mssql
- Získejte konfigurace připojení ke službě Azure SQL Database z proměnných prostředí přidaných konektorem služby. Odkomentujte část fragmentu kódu pro typ ověřování, který chcete použít.
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);
Další informace naleznete v tématu Domovská stránka pro programování klientů na Microsoft SQL Server.
Další ukázky kódu najdete v tématu Vytvoření připojení bez hesla k databázové službě prostřednictvím konektoru Service Connector.
Připojení ke službě Azure Database for MySQL ve vašem kódu se řídí vzorem DefaultAzureCredential pro všechny zásobníky jazyků.
DefaultAzureCredential je dostatečně flexibilní, aby se přizpůsobila vývojovému prostředí i prostředí Azure. Při místním spuštění může načíst přihlášeného uživatele Azure z libovolného prostředí (Visual Studio, Visual Studio Code, Azure CLI nebo Azure PowerShell). Při spuštění v Azure načte spravovanou identitu. Proto je možné mít připojení k databázi v době vývoje i v produkčním prostředí. Vzor je následující:
- Vytvořte instanci
DefaultAzureCredential z klientské knihovny Azure Identity. Pokud používáte identitu přiřazenou uživatelem, zadejte ID klienta identity.
- Získejte přístupový token pro Službu Azure Database for MySQL:
https://ossrdbms-aad.database.windows.net/.default.
- Přidejte token do svého připojovacího řetězce.
- Otevřete připojení.
Pro .NET získejte přístupový token pro spravovanou identitu pomocí klientské knihovny, jako je Azure.Identity. Pak se pomocí přístupového tokenu připojte k databázi heslem. Při použití následujícího kódu nezapomeňte odkomentovat část fragmentu kódu, která odpovídá typu ověřování, který chcete použít.
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
Do souboru pom.xml přidejte následující závislosti:
<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>
Získejte připojovací řetězec ze systémové proměnné prostředí a přidejte název pluginu, aby bylo možné se připojit k databázi.
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);
Další informace najdete v tématu Použití Javy a JDBC s flexibilním serverem Azure Database for MySQL.
Nainstalujte závislosti.
pip install azure-identity
# install Connector/Python https://dev.mysql.com/doc/connector-python/en/connector-python-installation.html
pip install mysql-connector-python
Ověřte se pomocí přístupového tokenu azure-identity z knihovny. Získejte informace o připojení z proměnné prostředí, kterou přidal konektor Service Connector. Při použití následujícího kódu nezapomeňte odkomentovat část fragmentu kódu, která odpovídá typu ověřování, který chcete použít.
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()
Nainstalujte závislosti.
npm install --save @azure/identity
npm install --save mysql2
Získejte přístupový token pomocí @azure/identity a informace o databázi Azure MySQL z proměnných prostředí přidaných konektorem služby. Při použití následujícího kódu nezapomeňte odkomentovat část fragmentu kódu, která odpovídá typu ověřování, který chcete použít.
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');
});
Další ukázky kódu najdete v tématu Vytvoření připojení bez hesla k databázové službě prostřednictvím konektoru Service Connector.
Připojení ke službě Azure Database for PostgreSQL ve vašem kódu se řídí vzorem DefaultAzureCredential pro všechny zásobníky jazyků.
DefaultAzureCredential je dostatečně flexibilní, aby se přizpůsobila vývojovému prostředí i prostředí Azure. Při místním spuštění může načíst přihlášeného uživatele Azure z libovolného prostředí (Visual Studio, Visual Studio Code, Azure CLI nebo Azure PowerShell). Při spuštění v Azure načte spravovanou identitu. Proto je možné mít připojení k databázi v době vývoje i v produkčním prostředí. Vzor je následující:
- Vytvořte instanci
DefaultAzureCredential z klientské knihovny Azure Identity. Pokud používáte identitu přiřazenou uživatelem, zadejte ID klienta identity.
- Získejte přístupový token pro Azure Database for PostgreSQL:
https://ossrdbms-aad.database.windows.net/.default.
- Přidejte token do svého připojovacího řetězce.
- Otevřete připojení.
Pro .NET získejte přístupový token pro spravovanou identitu pomocí klientské knihovny, jako je Azure.Identity. Pak se pomocí přístupového tokenu připojte k databázi heslem. Při použití následujícího kódu nezapomeňte odkomentovat část fragmentu kódu, která odpovídá typu ověřování, který chcete použít.
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();
}
Do souboru pom.xml přidejte následující závislosti:
<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>
Získejte připojovací řetězec z proměnných prostředí a přidejte název pluginu pro připojení k databázi:
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);
Další informace naleznete v následujících zdrojích:
Nainstalujte závislosti.
pip install azure-identity
pip install psycopg2-binary
Ověřte se pomocí přístupového tokenu azure-identity z knihovny a použijte token jako heslo. Získejte informace o připojení z proměnných prostředí, které přidal Service Connector. Při použití následujícího kódu nezapomeňte odkomentovat část fragmentu kódu, která odpovídá typu ověřování, který chcete použít.
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)
Další informace naleznete v následujících zdrojích:
Nainstalujte závislosti.
npm install --save @azure/identity
npm install --save pg
V kódu získejte přístupový token prostřednictvím @azure/identity a informace o připojení PostgreSQL z proměnných prostředí přidaných službou Service Connector. Zkombinujte je za účelem navázání připojení. Při použití následujícího kódu nezapomeňte odkomentovat část fragmentu kódu, která odpovídá typu ověřování, který chcete použít.
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();
})();
Další ukázky kódu najdete v tématu Vytvoření připojení bez hesla k databázové službě prostřednictvím konektoru Service Connector.
4. Nastavení vývojového prostředí
Tento ukázkový kód používá DefaultAzureCredential k získání použitelného tokenu pro vaši databázi Azure z ID Microsoft Entra a pak ho přidá do připojení k databázi. I když můžete přizpůsobit DefaultAzureCredential, je to už ve výchozím nastavení všestranné. Získá token od přihlášeného uživatele Microsoft Entra nebo ze spravované identity v závislosti na tom, jestli ho spouštíte místně ve vývojovém prostředí nebo ve službě App Service.
Bez jakýchkoli dalších změn je váš kód připravený ke spuštění v Azure. K místnímu ladění kódu ale vaše vývojové prostředí potřebuje přihlášeného uživatele Microsoft Entra. V tomto kroku nakonfigurujete své prostředí podle vlastního výběru přihlášením pomocí uživatele Microsoft Entra.
Visual Studio pro Windows je integrované s ověřováním Microsoft Entra. Pokud chcete povolit vývoj a ladění v sadě Visual Studio, přidejte uživatele služby Microsoft Entra v sadě Visual Studio tak, že v nabídce vyberete Soubor>Nastavení účtu a vyberete Přihlásit se nebo Přidat.
Pokud chcete nastavit uživatele Microsoft Entra pro ověřování služby Azure, v nabídce vyberte Možnosti nástrojů>a pak vyberte Výběr účtu ověřování>služby Azure. Vyberte uživatele Microsoft Entra, který jste přidali, a vyberte OK.
Visual Studio pro Mac není integrované s ověřováním Microsoft Entra. Klientská knihovna Azure Identity, kterou použijete později, ale může také načítat tokeny z Azure CLI. Pokud chcete povolit vývoj a ladění v sadě Visual Studio, nainstalujte Azure CLI na místní počítač.
Přihlaste se k Azure CLI pomocí následujícího příkazu pomocí uživatele Microsoft Entra:
az login --allow-no-subscriptions
Visual Studio Code je integrovaný s ověřováním Microsoft Entra prostřednictvím rozšíření Azure. Nainstalujte rozšíření Azure Tools v editoru Visual Studio Code.
V editoru Visual Studio Code na panelu aktivit vyberte logo Azure.
V Průzkumníku služby App Service vyberte Přihlásit se k Azure... a postupujte podle pokynů.
Klientská knihovna Azure Identity, kterou použijete později, může používat tokeny z Azure CLI. Pokud chcete povolit vývoj založený na příkazovém řádku, nainstalujte Azure CLI na místní počítač.
Přihlaste se k Azure pomocí následujícího příkazu pomocí uživatele Microsoft Entra:
az login --allow-no-subscriptions
Klientská knihovna Azure Identity, kterou použijete později, může používat tokeny z Azure PowerShellu. Pokud chcete povolit vývoj založený na příkazovém řádku, nainstalujte Azure PowerShell na místní počítač.
Přihlaste se k Azure CLI pomocí následujícího příkazu a svého uživatelského účtu Microsoft Entra:
Connect-AzAccount
Další informace o nastavení vývojového prostředí pro ověřování Microsoft Entra najdete v tématu Klientská knihovna identit Azure pro .NET.
Nyní jste připraveni vyvíjet a ladit aplikaci s použitím služby SQL Database jako zázemí, přičemž využíváte ověřování Microsoft Entra.
5. Testování a publikování
Spusťte kód ve vývojovém prostředí. Váš kód používá přihlášeného uživatele Microsoft Entra ve vašem prostředí k připojení k back-endové databázi. Uživatel má přístup k databázi, protože je nakonfigurovaný jako správce Microsoft Entra pro databázi.
Publikujte svůj kód do Azure pomocí upřednostňované metody publikování. Ve službě App Service váš kód používá spravovanou identitu aplikace k připojení k back-endové databázi.
Nejčastější dotazy
Podporuje spravovaná identita SQL Server?
Ano. Další informace naleznete v tématu:
Zobrazuje se mi chyba Login failed for user '<token-identified principal>'.
Spravovaná identita, pro kterou se pokoušíte požádat o token, nemá oprávnění pro přístup k databázi Azure.
Provedl(a) jsem změny v autentizaci služby App Service nebo přidružené registraci aplikace. Proč stále dostávám starý token?
Back-endové služby spravovaných identit také udržují mezipaměť tokenů, která aktualizuje token pro cílový prostředek, pouze když vyprší jeho platnost. Pokud konfiguraci upravíte po pokusu o získání tokenu s vaší aplikací, ve skutečnosti nezískáte nový token s aktualizovanými oprávněními, dokud nevyprší platnost tokenu uloženého v mezipaměti. Nejlepší způsob, jak to obejít, je otestovat změny pomocí nového okna InPrivate (Edge)/private (Safari)/Anonymní okno (Chrome). Tímto způsobem určitě začínáte z nové ověřené relace.
Jak přidat spravovanou identitu do skupiny Microsoft Entra?
Pokud chcete, můžete přidat identitu do skupiny Microsoft Entra a pak místo identity udělit přístup ke skupině Microsoft Entra. Například následující příkazy přidají spravovanou identitu z předchozího kroku do nové skupiny myAzureSQLDBAccessGroup:
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
Pokud chcete udělit oprávnění k databázi pro skupinu Microsoft Entra, přečtěte si dokumentaci k příslušnému typu databáze.
Zobrazuje se mi chyba SSL connection is required. Please specify SSL options and retry.
Připojení k databázi Azure vyžaduje další nastavení a přesahuje rozsah tohoto kurzu. Další informace najdete na jednom z následujících odkazů:
Konfigurace připojení TLS ve službě Azure Database for PostgreSQL – Jeden server– Konfigurace připojení SSL ve vaší aplikaci pro bezpečné připojení ke službě Azure Database for MySQL
Service Connector potřebuje síťový přístup k databázi, aby mohl udělit přístup k identitě aplikace. Když vytvoříte na webu Azure Portal zabezpečenou architekturu aplikace a databáze pomocí šablony Web App + Database, architektura uzamkne síťový přístup k databázi a povolí připojení pouze z virtuální sítě. Platí to také pro Azure Cloud Shell. Cloud Shell ale můžete nasadit ve virtuální síti a pak v cloud Shellu spustit příkaz konektoru služby.
Další kroky
Naučili jste se:
- Nakonfigurujte uživatele Microsoft Entra jako správce pro vaši databázi Azure.
- Připojte se k databázi jako uživatel Microsoft Entra.
- Nakonfigurujte spravovanou identitu přiřazenou systémem nebo přiřazenou uživatelem pro aplikaci app Service.
- Udělte spravované identitě přístup k databázi.
- Připojte se k databázi Azure z kódu (.NET Framework 4.8, .NET 6, Node.js, Python, Java) pomocí spravované identity.
- Připojte se k databázi Azure z vývojového prostředí pomocí uživatele Microsoft Entra.