Служба приложений предоставляет высокомасштабируемую службу веб-хостинга в Azure с возможностью самостоятельной установки обновлений. Она также предоставляет управляемое удостоверение для вашего приложения, которое является готовым решением для защиты доступа к базам данных Azure:
Управляемые удостоверения в службе приложений делают ваше приложение более безопасным, устраняя из него секреты, такие как учетные данные в строках подключения. В этом руководстве показано, как подключиться к указанным выше базам данных из Службы приложений с помощью управляемых удостоверений.
Освещаются следующие темы:
- Настройте пользователя Microsoft Entra в качестве администратора для базы данных Azure.
- Подключитесь к базе данных как пользователь Microsoft Entra.
- Настройте системно назначенное или назначенное пользователем управляемое удостоверение для приложения службы Azure App Service.
- Предоставление управляемому удостоверению доступа к базе данных.
- Подключитесь к базе данных Azure из вашего кода (.NET Framework 4.8, .NET 6, Node.js, Python, Java) с помощью управляемого удостоверения.
- Подключитесь к базе данных Azure из среды разработки с помощью пользователя Microsoft Entra.
Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начинать работу.
Предварительные требования
- Создайте приложение в Службе приложений на основе .NET, Node.js, Python или Java.
- Создайте сервер базы данных с Базой данных SQL Azure, Базой данных Azure для MySQL или Базой данных Azure для PostgreSQL.
- Вы должны быть знакомы со стандартным шаблоном подключения (с именем пользователя и паролем) и иметь возможность успешно подключиться из приложения Службы приложений к выбранной базе данных.
Подготовьте среду к работе с Azure CLI.
1. Установка расширения без пароля соединителя службы
Установите последнее расширение соединителя службы без пароля для Azure CLI:
az extension add --name serviceconnector-passwordless --upgrade
Примечание.
Проверьте расширение "serviceconnector-passwordless" версии 2.0.2 или более поздней, выполнив команду az version
. Чтобы обновить версию расширения, может потребоваться сначала обновить Azure CLI.
2. Создание подключения без пароля
Затем создайте подключение без пароля к коннектору сервисов.
Совет
Портал Azure поможет вам выполнить приведенные ниже команды. В портал Azure перейдите к ресурсу службы приложение Azure, выберите "Соединитель службы" в меню слева и нажмите кнопку "Создать". Заполните форму всеми необходимыми параметрами. Azure автоматически создает команду создания подключения, которую можно скопировать в ИНТЕРФЕЙС командной строки или выполнить в Azure Cloud Shell.
Следующая команда Azure CLI использует --client-type
параметр.
При необходимости запустите az webapp connection create sql -h
файл, чтобы получить поддерживаемые типы клиентов.
Выберите тип клиента и выполните соответствующую команду. Замените заполнители ниже собственными сведениями.
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>
Примечание.
Для базы данных Azure для MySQL — гибкого сервера необходимо сначала вручную настроить аутентификацию Microsoft Entra, для которой требуется отдельное управляемое удостоверение, назначаемое пользователем, и определенные разрешения Microsoft Graph. Этот шаг не может быть автоматизирован.
Вручную настройте аутентификацию Microsoft Entra для гибкого сервера базы данных Azure для MySQL.
При необходимости выполните команду az webapp connection create mysql-flexible -h
, чтобы получить поддерживаемые типы клиентов.
Выберите тип клиента и выполните соответствующую команду. Следующая команда Azure CLI использует --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> \
--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>
Следующая команда Azure CLI использует --client-type
параметр.
При необходимости выполните команду az webapp connection create postgres-flexible -h
, чтобы получить список всех поддерживаемых типов клиентов.
Выберите тип клиента и выполните соответствующую команду.
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>
Предоставление разрешения предварительно созданным таблицам
Затем, если вы создали таблицы и последовательности на гибком сервере PostgreSQL до использования соединителя служб, необходимо подключиться под учетной записью владельца и предоставить разрешения объекту <aad-username>
, созданному соединителем службы. Имя пользователя из строка подключения или конфигурации, заданное соединителем службы, должно выглядеть следующим образомaad_<connection name>
. Если вы используете портал Azure, нажмите кнопку развертывания рядом с столбцом Service Type
и получите значение. Если вы используете Azure CLI, проверьте configurations
данные из выходных команд CLI.
Затем выполните запрос, чтобы предоставить разрешение
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>
и <owner-password>
, являющиеся владельцами существующих таблиц, могут предоставлять разрешения другим пользователям.
<aad-username>
— это пользователь, созданный с помощью сервисного соединителя. Замените их фактическим значением.
Проверьте результат с помощью команды:
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
Эта команда Соединителя служб выполняет следующие задачи в фоновом режиме:
- Включите управляемое удостоверение, назначаемое системой, или назначьте удостоверение пользователя для приложения
<server-name>
, размещенного службой приложений Azure.
- Задайте текущего вошедшего пользователя администратором Microsoft Entra.
- Добавьте пользователя базы данных для системного управляемого удостоверения или пользовательского управляемого удостоверения. Предоставьте этому пользователю все права доступа к базе данных
<database-name>
. Имя пользователя можно найти в строке подключения в выводе предыдущей команды.
- Задайте конфигурации с именами
AZURE_MYSQL_CONNECTIONSTRING
, AZURE_POSTGRESQL_CONNECTIONSTRING
или AZURE_SQL_CONNECTIONSTRING
для ресурса Azure на основе типа базы данных.
- Для Службы приложений настройки задаются в панели «Параметры приложения».
Если при создании подключения возникла проблема, обратитесь к разделу "Поиск и устранение неисправностей" для получения помощи.
3. Изменение кода
Установите зависимости.
dotnet add package Microsoft.Data.SqlClient
Получите строку подключения базы данных SQL Azure из переменной среды, добавленной Соединителем службы.
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();
Дополнительные сведения см. в разделе "Использование проверки подлинности с помощью управляемого удостоверения Active Directory".
Добавьте следующие зависимости в файл pom.xml :
<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>
Получите строку подключения к базе данных SQL Azure из переменной среды, добавленной Service Connector.
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();
}
}
}
Дополнительные сведения см. в статье "Подключение с помощью проверки подлинности Microsoft Entra".
Установите зависимости.
python -m pip install pyodbc
Получите конфигурации подключения SQL базы данных Azure из переменной среды, добавленной коннектором службы. Раскомментируйте часть фрагмента кода для используемого типа проверки подлинности.
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)
Для альтернативного метода также можно подключиться к базе данных Azure SQL с помощью токена доступа, см. статью "Миграция приложения Python для использования подключений без пароля с базы данных Azure SQL".
- Установите зависимости.
npm install mssql
- Получите конфигурации подключения База данных SQL Azure из переменных среды, добавленных соединителем службы. Раскомментируйте фрагмент кода для типа проверки подлинности, который вы хотите использовать.
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);
Для получения дополнительной информации см. домашнюю страницу клиентского программирования по Microsoft SQL Server.
Дополнительные примеры кода см. в статье "Создание беспарольного подключения к службе базы данных с помощью соединителя".
Подключение к базе данных Azure для MySQL в коде следует шаблону DefaultAzureCredential
для всех языковых стеков.
DefaultAzureCredential
отличается достаточной гибкостью, чтобы адаптироваться как к среде разработки, так и к среде Azure. При локальном запуске система может получить информацию о вошедшем в систему пользователе Azure из выбранной вами среды (Visual Studio, Visual Studio Code, Azure CLI или Azure PowerShell). При запуске в Azure извлекается управляемое удостоверение. Таким образом, можно подключиться к базе данных как во время разработки, так и в рабочей среде. Шаблон выглядит следующим образом.
- Создайте экземпляр
DefaultAzureCredential
из клиентской библиотеки удостоверений Azure. Если вы используете удостоверение, назначаемое пользователем, укажите идентификатор клиента удостоверения.
- Получение маркера доступа для База данных Azure для MySQL:
https://ossrdbms-aad.database.windows.net/.default
- Добавьте токен в строку подключения.
- Откройте подключение.
Для .NET получите токен доступа для управляемой идентичности с помощью клиентской библиотеки, такой как Azure.Identity. Затем используйте маркер доступа в качестве пароля для подключения к базе данных. При использовании приведенного ниже кода убедитесь, что вы раскомментируйте часть фрагмента кода, соответствующего типу проверки подлинности, который вы хотите использовать.
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 :
<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>
Получите строка подключения из переменной среды и добавьте имя подключаемого модуля для подключения к базе данных:
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);
Дополнительные сведения см. в статье "Использование Java и JDBC с База данных Azure для MySQL — гибкий сервер".
Установите зависимости.
pip install azure-identity
# install Connector/Python https://dev.mysql.com/doc/connector-python/en/connector-python-installation.html
pip install mysql-connector-python
Аутентификация с помощью токена доступа из библиотеки azure-identity
. Получите информацию о подключении из переменной среды, добавленной Service Connector. При использовании приведенного ниже кода убедитесь, что вы раскомментировали часть фрагмента кода, соответствующая типу аутентификации, которую вы хотите использовать.
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()
Установите зависимости.
npm install --save @azure/identity
npm install --save mysql2
Получите токен доступа с помощью @azure/identity
и информации о базе данных Azure MySQL из переменных среды, добавленных соединителем службы. При использовании приведенного ниже кода убедитесь, что вы раскомментировали часть фрагмента кода, соответствующую типу проверки подлинности, который вы хотите использовать.
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');
});
Дополнительные примеры кода см. в статье "Создание бессерверного подключения к службе базы данных с помощью соединителя службы".
Подключение к Базе данных Azure для PostgreSQL в коде подчиняется шаблону DefaultAzureCredential
для всех языковых стеков.
DefaultAzureCredential
отличается достаточной гибкостью, чтобы адаптироваться как к среде разработки, так и к среде Azure. При локальном запуске можно извлечь информацию о пользователе Azure, вошедшем в систему, из выбранной вами среды (Visual Studio, Visual Studio Code, Azure CLI или Azure PowerShell). При запуске на платформе Azure извлекается управляемое удостоверение. Таким образом, можно подключиться к базе данных как во время разработки, так и в рабочей среде. Шаблон выглядит следующим образом.
- Создайте экземпляр
DefaultAzureCredential
из клиентской библиотеки Azure Identity. Если вы используете идентичность, назначенную пользователем, укажите идентификатор клиента этой идентичности.
- Получение токена доступа для базы данных Azure на основе PostgreSQL:
https://ossrdbms-aad.database.windows.net/.default
- Добавьте токен в строку подключения.
- Откройте подключение.
Для .NET используйте такую клиентскую библиотеку, как Azure.Identity, чтобы получить токен доступа для управляемой идентичности. Затем используйте маркер доступа в качестве пароля для подключения к базе данных. При использовании приведенного ниже кода убедитесь, что вы раскомментируете часть кода, соответствующую типу проверки подлинности, который вы выбрали.
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 :
<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>
Получите строку подключения из переменных окружения и добавьте имя плагина, чтобы подключиться к базе данных.
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);
Дополнительные сведения см. на следующих ресурсах:
Установите зависимости.
pip install azure-identity
pip install psycopg2-binary
Проверка подлинности с помощью маркера доступа из библиотеки azure-identity
и использование маркера в качестве пароля. Получите сведения о подключении из переменных среды, добавленных служебным соединителем. При использовании приведенного ниже кода убедитесь, что вы раскомментируйте часть фрагмента кода, соответствующего типу проверки подлинности, который вы хотите использовать.
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)
Дополнительные сведения см. на следующих ресурсах:
Установите зависимости.
npm install --save @azure/identity
npm install --save pg
В коде получите маркер доступа с помощью @azure/identity
и информацию о подключении к PostgreSQL из переменных среды, добавленных службой Service Connector. Объедините их для установления соединения. При использовании приведенного ниже кода убедитесь, что вы раскомментируйте часть фрагмента кода, соответствующего типу проверки подлинности, который вы хотите использовать.
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();
})();
Дополнительные примеры кода см. в статье "Создание безпарольного подключения к службе базы данных через соединитель службы".
4. Настройка среды разработки
Этот пример кода использует DefaultAzureCredential
для получения рабочего токена для вашей базы данных Azure от Microsoft Entra ID, а затем добавляет его в подключение к базе данных. Хотя вы можете настроить DefaultAzureCredential
, по умолчанию он уже является универсальным. Он получает маркер от вошедшего пользователя Microsoft Entra или управляемого удостоверения в зависимости от того, выполняете ли он локально в среде разработки или в Служба приложений.
Код готов к запуску в Azure без дальнейших изменений. Однако для локальной отладки кода в среде разработки требуется пользователь Microsoft Entra, выполнивший вход. На этом шаге вы настраиваете выбранную вами среду, войдя в систему с учетной записью Microsoft Entra.
Visual Studio для Windows интегрирован с проверкой подлинности Microsoft Entra. Чтобы включить разработку и отладку в Visual Studio, добавьте пользователя Microsoft Entra в Visual Studio, выбрав пункт "Параметры>" в меню, а затем нажмите кнопку "Войти" или "Добавить".
Чтобы задать пользователя Microsoft Entra для проверки подлинности службы Azure, выберите Инструменты>Параметры из меню, а затем выберите Проверка подлинности службы Azure>Выбор учетной записи. Выберите добавленного пользователя Microsoft Entra и нажмите кнопку "ОК".
Visual Studio для macOS не поддерживает интеграцию с аутентификацией Microsoft Entra. Однако клиентская библиотека удостоверений Azure, которую вы будете использовать позже, также может извлекать токены из Azure CLI. Чтобы включить разработку и отладку в Visual Studio, необходимо установить Azure CLI на локальном компьютере.
Войдите в Azure CLI с помощью следующей команды с помощью пользователя Microsoft Entra:
az login --allow-no-subscriptions
Visual Studio Code интегрирован с проверкой подлинности Microsoft Entra через расширение Azure. Установите расширение Azure Tools в Visual Studio Code.
В Visual Studio Code на панели действий щелкните значок Azure.
В обозревателе Службы приложений выберите Войти в Azure... и следуйте инструкциям.
Клиентская библиотека удостоверений Azure, которая будет использоваться позже, может использовать маркеры из Azure CLI. Чтобы включить разработку на основе командной строки, установите Azure CLI на локальном компьютере.
Войдите в Azure с помощью следующей команды с помощью пользователя Microsoft Entra:
az login --allow-no-subscriptions
Клиентская библиотека удостоверений Azure, которая будет использоваться позже, может использовать маркеры из Azure PowerShell. Чтобы включить разработку на основе командной строки, установите Azure PowerShell на локальном компьютере.
Войдите в Azure CLI с помощью следующего командлета с помощью пользователя Microsoft Entra:
Connect-AzAccount
Дополнительные сведения о настройке среды разработки для проверки подлинности Microsoft Entra см . в клиентской библиотеке удостоверений Azure для .NET.
Теперь вы готовы разрабатывать и отлаживать приложение с помощью База данных SQL в качестве серверной части с помощью проверки подлинности Microsoft Entra.
5. Тестирование и публикация
Запустите код в среде разработки. Код использует вошедшего пользователя Microsoft Entra в вашей среде для подключения к внутренней базе данных. Пользователь может получить доступ к базе данных, так как он сконфигурирован как администратор Microsoft Entra для базы данных.
Опубликуйте код в Azure с помощью предпочтительного метода публикации. В Службе приложений ваш код использует управляемую идентификацию приложения для подключения к серверной базе данных.
Часто задаваемые вопросы
Поддерживает ли управляемое удостоверение SQL Server?
Да. Дополнительные сведения см. в разделе:
Возникает ошибка Login failed for user '<token-identified principal>'.
Управляемое удостоверение, для которого вы пытаетесь запросить токен, не авторизовано на доступ к базе данных Azure.
Я внес изменения в проверку подлинности Службы приложений или связанную регистрацию приложения. Почему я все равно получаю старый маркер?
Серверные службы управляемых удостоверений также поддерживают кэш маркеров, который обновляет маркер целевого ресурса только по истечении срока его действия. Если вы измените конфигурацию после попытки получить маркер в приложении, вы получите новый маркер с обновленными разрешениями только после того, как истечет срок действия кэшированного маркера. Лучшее обходное решение — проверить изменения с помощью нового окна в режиме InPrivate (Edge)/частный (Safari)/инкогнито (Chrome). Таким образом вы точно начнете работу с нового сеанса, прошедшего проверку подлинности.
Как добавить управляемое удостоверение в группу Microsoft Entra?
Если вы хотите, вы можете добавить удостоверение в группу Microsoft Entra, а затем предоставить доступ к группе Microsoft Entra вместо удостоверения. Например, следующие команды добавляют управляемое удостоверение из предыдущего шага в новую группу с именем 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
Чтобы предоставить разрешения базы данных для группы Microsoft Entra, ознакомьтесь с документацией по соответствующему типу базы данных.
Возникает ошибка SSL connection is required. Please specify SSL options and retry
.
Подключение к базе данных Azure требует дополнительных параметров и выходит за рамки этого руководства. Дополнительные сведения см. в одном из следующих разделов:
Настройка подключения TLS в Базе данных Azure для PostgreSQL — один серверНастройка подключения SSL в приложении для безопасного подключения к Базе данных Azure для MySQL
Соединителю служб требуется сетевой доступ к базе данных для предоставления доступа к идентификации приложения. При создании защищенного приложения и архитектуры базы данных по умолчанию в портал Azure с помощью шаблона веб-приложения и базы данных архитектура блокирует сетевой доступ к базе данных и разрешает подключения только из виртуальной сети. Это также верно для Azure Cloud Shell. Однако вы можете развернуть Cloud Shell в виртуальной сети, а затем запустить команду Service Connector в этой Cloud Shell.
Следующие шаги
Чему вы научились:
- Настройте пользователя Microsoft Entra в качестве администратора для базы данных Azure.
- Подключитесь к базе данных как пользователь Microsoft Entra.
- Настройте управляемое удостоверение, назначаемое системой или пользователем, для приложения App Service.
- Предоставление управляемому удостоверению доступа к базе данных.
- Подключение к базе данных Azure из вашего кода (.NET Framework 4.8, .NET 6, Node.js, Python, Java) с помощью управляемого удостоверения.
- Подключитесь к базе данных Azure из среды разработки с помощью пользователя Microsoft Entra.