Руководство. Создание бессерверного подключения к службе базы данных с помощью службы Подключение or

Для доступа к службам Azure используются управляемые удостоверения без пароля. С помощью этого подхода вам не нужно вручную отслеживать секреты для управляемых удостоверений и управлять ими. Эти задачи безопасно обрабатываются Azure.

Служба Подключение or включает управляемые удостоверения в службах размещения приложений, таких как Azure Spring Apps, служба приложение Azure и приложения контейнеров Azure. Служба Подключение or также настраивает службы баз данных, такие как База данных Azure для PostgreSQL, База данных Azure для MySQL и База данных SQL Azure для принятия управляемых удостоверений.

В этом учебнике используется Azure CLI для выполнения следующих задач:

  • Проверьте исходную среду с помощью Azure CLI.
  • Создайте подключение без пароля с помощью службы Подключение or.
  • Используйте переменные среды или конфигурации, созданные службой Подключение or, для доступа к службе базы данных.

Необходимые компоненты

Настройка среды

Учетная запись

Войдите с помощью Azure CLI.az login Если вы используете Azure Cloud Shell или уже вошли в систему, подтвердите проверку подлинности учетной записи.az account show

Установка расширения без пароля службы Подключение or

Установите расширение service Подключение or без пароля для Azure CLI:

az extension add --name serviceconnector-passwordless --upgrade

Создание подключения без пароля

Далее мы используем службу приложение Azure в качестве примера для создания подключения с помощью управляемого удостоверения.

Если вы используете:

Примечание.

Если вы используете портал Azure, перейдите в колонку "Служба Подключение" службы приложение Azure, Azure Spring Apps или "Приложения контейнеров Azure" и выберите "Создать", чтобы создать подключение. Портал Azure автоматически создадут команду и активируют выполнение команды в Cloud Shell.

Следующая команда Azure CLI использует --client-type параметр. az webapp connection create postgres-flexible -h Запустите файл, чтобы получить поддерживаемые типы клиентов и выберите тот, который соответствует приложению.

az webapp connection create postgres-flexible \
    --resource-group $RESOURCE_GROUP \
    --name $APPSERVICE_NAME \
    --target-resource-group $RESOURCE_GROUP \
    --server $POSTGRESQL_HOST \
    --database $DATABASE_NAME \
    --user-identity client-id=XX subs-id=XX \
    --client-type java

База данных Azure для MySQL . Гибкий сервер требует управляемого удостоверения, назначаемого пользователем, для включения проверки подлинности Microsoft Entra. Дополнительные сведения см. в статье Настройка проверки подлинности Microsoft Entra для База данных Azure для MySQL — гибкий сервер. Для создания управляемого удостоверения, назначаемого пользователем, можно использовать следующую команду:

USER_IDENTITY_NAME=<YOUR_USER_ASSIGNED_MANAGEMED_IDENTITY_NAME>
IDENTITY_RESOURCE_ID=$(az identity create \
    --name $USER_IDENTITY_NAME \
    --resource-group $RESOURCE_GROUP \
    --query id \
    --output tsv)

Внимание

После создания управляемого удостоверения, назначаемого пользователем, попросите глобального Администратор istrator или привилегированного Администратор istrator предоставить следующие разрешения для этого удостоверения:

  • User.Read.All
  • GroupMember.Read.All
  • Application.Read.All

Дополнительные сведения см. в разделе "Разрешения" проверки подлинности Active Directory.

Затем подключите приложение к базе данных MySQL с управляемым удостоверением, назначаемое системой, с помощью службы Подключение or.

Следующая команда Azure CLI использует --client-type параметр. az webapp connection create mysql-flexible -h Запустите файл, чтобы получить поддерживаемые типы клиентов и выберите тот, который соответствует приложению.

az webapp connection create mysql-flexible \
    --resource-group $RESOURCE_GROUP \
    --name $APPSERVICE_NAME \
    --target-resource-group $RESOURCE_GROUP \
    --server $MYSQL_HOST \
    --database $DATABASE_NAME \
    --user-identity client-id=XX subs-id=XX mysql-identity-id=$IDENTITY_RESOURCE_ID \
    --client-type java

Следующая команда Azure CLI использует --client-type параметр. az webapp connection create sql -h Запустите файл, чтобы получить поддерживаемые типы клиентов и выберите тот, который соответствует приложению.

az webapp connection create sql \
    --resource-group $RESOURCE_GROUP \
    --name $APPSERVICE_NAME \
    --target-resource-group $RESOURCE_GROUP \
    --server $SQL_HOST \
    --database $DATABASE_NAME \
    --user-identity client-id=XX subs-id=XX \
    --client-type dotnet

Эта команда Подключение or службы выполняет следующие задачи в фоновом режиме:

  • Включите управляемое удостоверение, назначаемое системой, или назначьте удостоверение пользователя для приложения$APPSERVICE_NAME, размещенного приложение Azure Service/Azure Spring Apps/Azure Container Apps.
  • Задайте администратору Microsoft Entra текущий пользователь, выполнившего вход.
  • Добавьте пользователя базы данных для управляемого удостоверения, назначаемого системой, назначаемого пользователем управляемого удостоверения или субъекта-службы. Предоставьте этому пользователю все права доступа к базе данных $DATABASE_NAME . Имя пользователя можно найти в строка подключения в предыдущих выходных данных команды.
  • Задайте конфигурации с именем AZURE_MYSQL_CONNECTIONSTRINGили AZURE_POSTGRESQL_CONNECTIONSTRINGAZURE_SQL_CONNECTIONSTRING ресурсом Azure на основе типа базы данных.
    • Для Служба приложений конфигурации задаются в колонке "Приложение Параметры".
    • Для Spring Apps конфигурации задаются при запуске приложения.
    • Для контейнерных приложений конфигурации задаются переменными среды. Все конфигурации и их значения можно получить в колонке Подключение службы в портал Azure.

Подключение в базу данных с проверкой подлинности Microsoft Entra

После создания подключения можно использовать строка подключения в приложении для подключения к базе данных с проверкой подлинности Microsoft Entra. Например, можно использовать следующие решения для подключения к базе данных с проверкой подлинности Microsoft Entra.

Для .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");
//     }
// );

// For service principal.
// var tenantId = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_TENANTID");
// var clientId = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CLIENTID");
// var clientSecret = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CLIENTSECRET");
// var sqlServerTokenProvider = new ClientSecretCredential(tenantId, clientId, clientSecret);

// 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();
}

Затем, если вы создали таблицы и последовательности в гибком сервере PostgreSQL перед использованием службы Подключение or, необходимо подключиться как владелец и предоставить разрешение, созданное <aad-username> службой Подключение or. Имя пользователя из строка подключения или конфигурации, заданное службой Подключение or, должно выглядеть следующим образом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>— это пользователь, созданный службой Подключение or. Замените их фактическим значением.

Проверьте результат с помощью команды:

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

Для .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");
//     });

// For service principal.
// var tenantId = Environment.GetEnvironmentVariable("AZURE_MYSQL_TENANTID");
// var clientId = Environment.GetEnvironmentVariable("AZURE_MYSQL_CLIENTID");
// var clientSecret = Environment.GetEnvironmentVariable("AZURE_MYSQL_CLIENTSECRET");
// var credential = new ClientSecretCredential(tenantId, clientId, clientSecret);

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

Дополнительные примеры кода см. в Подключение базах данных Azure из Служба приложений без секретов с помощью управляемого удостоверения.

  1. Установите зависимости.

    dotnet add package Microsoft.Data.SqlClient
    
  2. Получите База данных SQL Azure строка подключения из переменной среды, добавленной службой Подключение or.

    using Microsoft.Data.SqlClient;
    
    string connectionString = 
        Environment.GetEnvironmentVariable("AZURE_SQL_CONNECTIONSTRING")!;
    
    using var connection = new SqlConnection(connectionString);
    connection.Open();
    

    Дополнительные сведения см. в разделе "Использование проверки подлинности управляемого удостоверения Active Directory".

Дополнительные сведения см . на домашней странице клиентского программирования в Microsoft SQL Server.

Развертывание приложения в службе размещения Azure

Наконец, разверните приложение в службе размещения Azure. Эта исходная служба может использовать управляемое удостоверение для подключения к целевой базе данных в Azure.

Для службы приложение Azure можно развернуть код приложения с помощью az webapp deploy команды. Дополнительные сведения см. в разделе Краткое руководство. Развертывание веб-приложения ASP.NET.

Затем вы можете проверка журнал или вызвать приложение, чтобы узнать, может ли он подключиться к базе данных Azure успешно.

Устранение неполадок

Разрешение

Если возникают ошибки, связанные с разрешениями, убедитесь, что пользователь Azure CLI вошел в систему с помощью команды az account show. Убедитесь, что вы входите в систему с помощью правильной учетной записи. Затем убедитесь, что у вас есть следующие разрешения, которые могут потребоваться для создания бессерверного подключения к службе Подключение or.

Разрешение Операция
Microsoft.DBforPostgreSQL/flexibleServers/read Требуется для получения сведений о сервере базы данных
Microsoft.DBforPostgreSQL/flexibleServers/write Требуется для включения проверки подлинности Microsoft Entra для сервера базы данных
Microsoft.DBforPostgreSQL/flexibleServers/firewallRules/write Требуется для создания правила брандмауэра в случае блокировки локального IP-адреса
Microsoft.DBforPostgreSQL/flexibleServers/firewallRules/delete Требуется для отменить изменения правила брандмауэра, созданного службой Подключение or, чтобы избежать проблем с безопасностью
Microsoft.DBforPostgreSQL/flexibleServers/administrators/read Требуется проверка, если пользователь входа Azure CLI является администратором Microsoft Entra сервера базы данных
Microsoft.DBforPostgreSQL/flexibleServers/administrators/write Требуется, чтобы добавить пользователя входа Azure CLI в качестве администратора сервера базы данных Microsoft Entra
Разрешение Операция
Microsoft.DBforMySQL/flexibleServers/read Требуется для получения сведений о сервере базы данных
Microsoft.DBforMySQL/flexibleServers/write Требуется для добавления предоставленного управляемого удостоверения, назначаемого пользователем, на сервер базы данных
Microsoft.DBforMySQL/flexibleServers/firewallRules/write Требуется для создания правила брандмауэра в случае блокировки локального IP-адреса
Microsoft.DBforMySQL/flexibleServers/firewallRules/delete Требуется для отменить изменения правила брандмауэра, созданного службой Подключение or, чтобы избежать проблем с безопасностью
Microsoft.DBforMySQL/flexibleServers/administrators/read Требуется проверка, если пользователь входа Azure CLI является администратором Microsoft Entra сервера базы данных
Microsoft.DBforMySQL/flexibleServers/administrators/write Требуется, чтобы добавить пользователя входа Azure CLI в качестве администратора сервера базы данных Microsoft Entra
Разрешение Операция
Microsoft.Sql/servers/read Требуется для получения сведений о сервере базы данных
Microsoft.Sql/servers/firewallRules/write Требуется для создания правила брандмауэра в случае блокировки локального IP-адреса
Microsoft.Sql/servers/firewallRules/delete Требуется для отменить изменения правила брандмауэра, созданного службой Подключение or, чтобы избежать проблем с безопасностью
Microsoft.Sql/servers/administrators/read Требуется проверка, если пользователь входа Azure CLI является администратором Microsoft Entra сервера базы данных
Microsoft.Sql/servers/administrators/write Требуется, чтобы добавить пользователя входа Azure CLI в качестве администратора сервера базы данных Microsoft Entra

В некоторых случаях разрешения не требуются. Например, если пользователь, прошедший проверку подлинности Azure CLI, уже является Администратор istrator Active Directory на СЕРВЕРе SQL Server, у вас нет Microsoft.Sql/servers/administrators/write разрешения.

Microsoft Entra ID

Если возникает ошибка ERROR: AADSTS530003: Your device is required to be managed to access this resource., обратитесь к ИТ-отделу за помощью при присоединении этого устройства к идентификатору Microsoft Entra. Дополнительные сведения см. в разделе "Присоединенные к Microsoft Entra устройства".

Служба Подключение or должна получить доступ к идентификатору Microsoft Entra для получения сведений о вашей учетной записи и управляемом удостоверении службы размещения. Следующую команду можно использовать для проверка, если устройство может получить доступ к идентификатору Microsoft Entra:

az ad signed-in-user show

Если вы не входите в систему в интерактивном режиме, вы также можете получить ошибку и Interactive authentication is needed. Чтобы устранить ошибку, войдите в систему с помощью az login команды.

Сетевое соединение

Если сервер базы данных находится в виртуальная сеть, убедитесь, что среда, в которой выполняется команда Azure CLI, может получить доступ к серверу в виртуальная сеть.

Если сервер базы данных находится в виртуальная сеть, убедитесь, что среда, в которой выполняется команда Azure CLI, может получить доступ к серверу в виртуальная сеть.

Если сервер базы данных запрещает общедоступный доступ, убедитесь, что среда, которая выполняет команду Azure CLI, может получить доступ к серверу через частную конечную точку.

Следующие шаги

Дополнительные сведения о подключениях службы Подключение и без пароля см. в следующих ресурсах: