App Service предоставляет высокомасштабируемую службу самостоятельного размещения веб-сайтов в 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, создайте учетную запись free перед началом работы.
Предварительные требования
- Создайте приложение в службе приложений на основе .NET, Node.js, Python или Java.
- Создайте сервер базы данных с База данных SQL Azure, База данных Azure для MySQL или База данных Azure для PostgreSQL.
- Вы должны быть знакомы со стандартным шаблоном подключения (с именем пользователя и паролем) и иметь возможность успешно подключиться из приложения Службы приложений к выбранной базе данных.
Подготовьте среду для Azure CLI.
1. Установка расширения без пароля соединителя службы
Установите новейшее расширение без необходимости пароля для Service Connector в Azure CLI.
az extension add --name serviceconnector-passwordless --upgrade
Примечание.
Проверьте расширение "serviceconnector-passwordless" версии 2.0.2 или более поздней, выполнив команду az version. Чтобы обновить версию расширения, может потребоваться сначала обновить Azure CLI.
2. Создание подключения без пароля
Затем создайте подключение без пароля к коннектору сервисов.
Совет
Портал Azure поможет вам выполнить следующие команды. На портале Azure перейдите к ресурсу Служба приложений Azure выберите Service Connector в меню слева и выберите Create. Заполните форму всеми необходимыми параметрами. 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 - Flexible Server.
При необходимости выполните команду 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 из переменной среды, добавленной Service Connector.
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 mssql-python python-dotenv
Получите конфигурации подключения для базы данных Azure SQL из переменной среды, добавленной Service Connector. Раскомментируйте часть фрагмента кода для используемого типа проверки подлинности.
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)
Для альтернативного метода вы также можете подключиться к База данных SQL Azure с помощью токена доступа, см. статью Перенос приложения Python для использования подключений без пароля с База данных SQL Azure.
- Установите зависимости.
npm install mssql
- Получите конфигурации подключения к базе данных Azure SQL из переменных окружения, добавленных Коннектором службы. Раскомментируйте часть фрагмента кода для используемого типа проверки подлинности.
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);
Дополнительные сведения см. в разделе Homepage для клиентского программирования на Microsoft SQL Server.
Дополнительные примеры кода см. в статье "Создание беспарольного подключения к службе базы данных с помощью соединителя".
Подключение к База данных Azure для MySQL в коде следует шаблону DefaultAzureCredential для всех стеков языков.
DefaultAzureCredential достаточно гибким, чтобы адаптироваться как к среде разработки, так и к среде Azure. При локальном запуске он может получить вошедшего пользователя Azure из выбранной вами среды (Visual Studio, Visual Studio Code, Azure CLI или Azure PowerShell). При работе в среде Azure осуществляется получение управляемого удостоверения. Таким образом, можно подключиться к базе данных как во время разработки, так и в рабочей среде. Шаблон выглядит следующим образом.
- Создайте экземпляр
DefaultAzureCredential из клиентской библиотеки Azure Identity. Если вы используете удостоверение, назначаемое пользователем, укажите идентификатор клиента удостоверения.
- Получите маркер доступа для База данных 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 Database для 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 и информации о базе данных MySQL Azure из переменных окружения, добавленных соединителем службы. При использовании приведенного ниже кода убедитесь, что вы раскомментируйте часть фрагмента кода, соответствующего типу проверки подлинности, который вы хотите использовать.
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, выбрав File>Account Settings в меню, и выберите Sign in или Add.
Чтобы задать пользователя Microsoft Entra для аутентификации службы Azure, выберите Tools>Options в меню, затем выберите Аутентификация службы Azure> и Выбор учетной записи. Выберите добавленного Microsoft Entra пользователя и выберите OK.
Visual Studio для Mac не интегрирован с аутентификацией Microsoft Entra. Однако клиентская библиотека Azure идентификации, которую вы будете использовать позже, также может получить токены из Azure CLI. Чтобы включить разработку и отладку в Visual Studio, install 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 на панели Activity Bar выберите логотип Azure.
В обозревателе App Service выберите Войти в Azure... и следуйте инструкциям.
Клиентская библиотека удостоверений Azure, которую вы будете использовать позже, может использовать маркеры из Azure CLI. Чтобы включить разработку на основе командной строки, install Azure CLI на локальном компьютере.
Войдите в Azure, используя следующую команду с вашей учётной записью Microsoft Entra.
az login --allow-no-subscriptions
Клиентская библиотека удостоверений Azure, которую вы будете использовать позже, может использовать маркеры из Azure PowerShell. Чтобы включить разработку на основе командной строки, install 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, а затем предоставить доступ к этой группе вместо удостоверения. Например, следующие команды добавляют управляемое удостоверение из предыдущего шага в новую группу с именем 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 требует дополнительных параметров и выходит за рамки этого руководства. Дополнительные сведения см. в одном из следующих разделов:
Соединителю служб требуется сетевой доступ к базе данных для предоставления доступа к идентификации приложения. При создании защищенного приложения и базы данных по умолчанию на портале Azure с помощью шаблона веб-приложения и базы данных архитектура блокирует сетевой доступ к базе данных и разрешает подключения только из виртуальной сети. Это также верно для Azure Cloud Shell. Однако вы можете развернуть Cloud Shell в виртуальной сети, затем выполнить команду Соединителя службы в этом Cloud Shell.
Следующие шаги
Чему вы научились:
- Настройте пользователя Microsoft Entra в качестве администратора для базы данных Azure.
- Подключитесь к базе данных в качестве пользователя Microsoft Entra.
- Настройте системно назначенное или назначенное пользователем управляемое удостоверение для приложения службы Azure App Service.
- Предоставление управляемому удостоверению доступа к базе данных.
- Подключитесь к базе данных Azure из кода (.NET Framework 4.8, .NET 6, Node.js, Python, Java) с помощью управляемого удостоверения.
- Подключитесь к базе данных Azure из среды разработки с помощью пользователя Microsoft Entra.