Подключение приложения к ресурсам без обработки учетных данных

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

На этой странице показано, как настроить Службу приложений, чтобы она могла подключаться к Azure Key Vault, службе хранилища Azure и Microsoft SQL Server. Те же принципы можно использовать для любого ресурса Azure, поддерживающего управляемые удостоверения и которые будут подключаться к ресурсам, поддерживающим проверку подлинности Microsoft Entra.

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

К каким ресурсам могут подключаться управляемые удостоверения?

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

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

Создание управляемого удостоверения

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

В этой статье объясняется, как создать и настроить управляемое удостоверение, назначаемое пользователем, которое рекомендуется использовать в большинстве сценариев. Если используемый вами исходный ресурс не поддерживает управляемые удостоверения, назначаемые системой, вам следует обратиться к документации этого поставщика ресурсов, чтобы узнать, как настроить его для использования управляемого удостоверения, назначаемого системой.

Создание управляемого удостоверения, назначаемого пользователем

Примечание.

Вам понадобится роль, например "Участник управляемого удостоверения", чтобы создать новое управляемое удостоверение, назначаемое пользователем.

  1. Введите "управляемые удостоверения" в строке поиска в верхней части портала и выберите нужный результат.

Screenshot of searching for managed identities in the portal.

  1. Нажмите кнопку "Создать".

Screenshot showing a managed identity create button in the portal.

  1. Выберите подписку и группу ресурсов, а затем введите имя управляемого удостоверения.

Screenshot showing a managed identity create screen in the portal.

  1. Щелкните "Проверить + создать", чтобы запустить проверочный тест, а затем нажмите кнопку "Создать".

  2. После создания удостоверения появится экран подтверждения.

Screenshot showing a managed identity confirmation screen after creation in the portal.

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

Настройка исходного ресурса для использования управляемого удостоверения, назначаемого пользователем

Выполните следующие действия, чтобы настроить ресурс Azure для использования управляемого удостоверения на портале. См. документацию по конкретному типу ресурса, чтобы узнать, как настроить удостоверение ресурса с помощью интерфейса командной строки, шаблона PowerShell или ARM.

Примечание.

Вам потребуются разрешения на запись, чтобы настроить ресурс Azure для использования удостоверения, назначаемого системой. Вам понадобится роль, например "Оператор управляемого удостоверения", чтобы связать удостоверение, назначаемое пользователем, с ресурсом Azure.

  1. Найдите ресурс с помощью панели поиска в верхней части портала.

Screenshot showing a resource being searched for in the portal.

  1. Щелкните ссылку "Удостоверение" в области навигации.

Screenshot showing the link to the identity screen for a resource in the portal.

  1. Выберите вкладку "Назначено пользователем".

  2. Нажмите кнопку "Добавить".

Screenshot showing a user-assigned identity screen in the portal.

  1. Выберите созданное удостоверение, назначаемое пользователем, и нажмите кнопку "Добавить".

Screenshot showing a user-assigned identity being selected in the portal.

  1. Удостоверение будет связано с ресурсом, и список обновится.

Screenshot showing a user-assigned identity has been associated with the Azure resource in the portal.

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

Добавление разрешений к удостоверению

Примечание.

Вам понадобится роль, такая как "Администратор доступа пользователей" или "Владелец" для целевого ресурса, чтобы добавить назначения ролей. Убедитесь, что вы предоставляете минимальные привилегии, необходимые для запуска приложения.

Теперь у Службы приложений есть управляемое удостоверение, и вам нужно предоставить удостоверению правильные разрешения. Так как вы используете это удостоверение для взаимодействия со службой хранилища Azure, вы будете использовать систему управления доступом на основе ролей Azure (RBAC).

  1. Найдите ресурс, к которому вы хотите подключиться с помощью панели поиска в верхней части портала.
  2. Щелкните ссылку "Управление доступом (IAM)" в области навигации слева.

Screenshot showing a resource summary screen in the portal.

  1. Нажмите кнопку "Добавить" в верхней части экрана и щелкните "Добавить назначение ролей".

Screenshot showing the add role assignment navigation in the portal.

  1. Отобразится список ролей. Вы можете просмотреть определенные разрешения, которые имеет роль, щелкнув ссылку "Представление". Выберите роль, которую вы хотите предоставить удостоверению, и нажмите кнопку "Далее".

Screenshot showing a role being selected in the portal.

  1. Вам будет предложено выбрать, кому должна быть предоставлена роль. Выберите "Управляемое удостоверение" и щелкните ссылку "Добавить участников".

Screenshot showing the identity type being selected in the portal.

  1. Справа появится контекстная область, где вы можете выполнить поиск по типу управляемого удостоверения. Выберите "Управляемое удостоверение, назначаемое пользователем" в поле "Управляемое удостоверение".

Screenshot showing managed identity being selected in the portal.

  1. Выберите удостоверение, созданное ранее, и нажмите кнопку "Выбрать". Контекстная область закроется, и удостоверение будет добавлено в список.

Screenshot showing an identity being added to a resource in the portal.

  1. Нажмите кнопку "Проверить + назначить", чтобы просмотреть сводную информацию о назначении роли, а затем еще раз для подтверждения.
  2. Выберите "Назначения ролей", чтобы отобразить список назначений ролей для ресурса.

Screenshot showing the role assignment has been added in the portal.

Теперь управляемое удостоверение имеет правильные разрешения на доступ к целевому ресурсу Azure. См. дополнительные сведения об управлении доступом на основе ролей Azure.

Использование управляемого удостоверения в коде

Теперь у Службы приложений есть управляемое удостоверение с разрешениями. Вы можете использовать управляемое удостоверение в своем коде для взаимодействия с целевыми ресурсами вместо того, чтобы хранить учетные данные в своем коде.

Рекомендуется использовать библиотеку удостоверений Azure для соответствующего языка программирования. Поддерживаемые языки включают .NET, Java, JavaScript, Python, Go и C++. Библиотека получает маркеры доступа для вас, упрощая подключение к целевым ресурсам.

Использование библиотеки удостоверений Azure в среде разработки

За исключением библиотеки C++, библиотеки удостоверений Azure поддерживают тип DefaultAzureCredential. DefaultAzureCredential автоматически пытается выполнить проверку подлинности с помощью нескольких механизмов, включая переменные среды или интерактивный вход. Тип учетных данных можно использовать в вашей среде разработки с использованием ваших учетных данных. Его также можно использовать в рабочей среде Azure с помощью управляемого удостоверения. При развертывании приложения изменять код не нужно.

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

Screenshot showing the client ID for the managed identity in the portal.

См. дополнительные сведения о библиотеках удостоверений Azure:

Доступ к BLOB-объекту в службе хранилища Azure

using Azure.Identity;
using Azure.Storage.Blobs;

// code omitted for brevity

// Specify the Client ID if using user-assigned managed identities
var clientID = Environment.GetEnvironmentVariable("Managed_Identity_Client_ID");
var credentialOptions = new DefaultAzureCredentialOptions
{
    ManagedIdentityClientId = clientID
};
var credential = new DefaultAzureCredential(credentialOptions);                        

var blobServiceClient1 = new BlobServiceClient(new Uri("<URI of Storage account>"), credential);
BlobContainerClient containerClient1 = blobServiceClient1.GetBlobContainerClient("<name of blob>");
BlobClient blobClient1 = containerClient1.GetBlobClient("<name of file>");

if (blobClient1.Exists())
{
    var downloadedBlob = blobClient1.Download();
    string blobContents = downloadedBlob.Value.Content.ToString();                
}

Доступ к секрету, хранящемуся в Azure Key Vault

using Azure.Identity;
using Azure.Security.KeyVault.Secrets;
using Azure.Core;

// code omitted for brevity

// Specify the Client ID if using user-assigned managed identities
var clientID = Environment.GetEnvironmentVariable("Managed_Identity_Client_ID");
var credentialOptions = new DefaultAzureCredentialOptions
{
    ManagedIdentityClientId = clientID
};
var credential = new DefaultAzureCredential(credentialOptions);        

var client = new SecretClient(
    new Uri("https://<your-unique-key-vault-name>.vault.azure.net/"),
    credential);
    
KeyVaultSecret secret = client.GetSecret("<my secret>");
string secretValue = secret.Value;

Доступ к Базе данных SQL Azure

using Azure.Identity;
using Microsoft.Data.SqlClient;

// code omitted for brevity

// Specify the Client ID if using user-assigned managed identities
var clientID = Environment.GetEnvironmentVariable("Managed_Identity_Client_ID");
var credentialOptions = new DefaultAzureCredentialOptions
{
    ManagedIdentityClientId = clientID
};

AccessToken accessToken = await new DefaultAzureCredential(credentialOptions).GetTokenAsync(
    new TokenRequestContext(new string[] { "https://database.windows.net//.default" }));                        

using var connection = new SqlConnection("Server=<DB Server>; Database=<DB Name>;")
{
    AccessToken = accessToken.Token
};
var cmd = new SqlCommand("select top 1 ColumnName from TableName", connection);
await connection.OpenAsync();
SqlDataReader dr = cmd.ExecuteReader();
while(dr.Read())
{
    Console.WriteLine(dr.GetValue(0).ToString());
}
dr.Close();	

Подключение для ресурсов, которые не поддерживают проверку подлинности на основе идентификатора или маркера Майкрософт в библиотеках

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

Чтобы не хранить учетные данные в коде или конфигурации приложения, вы можете сохранить их в качестве секрета в Azure Key Vault. Используя приведенный выше пример, вы можете получить секрет из Azure KeyVault с помощью управляемого удостоверения и передать учетные данные в строку подключения. Такой подход означает, что учетные данные не должны обрабатываться непосредственно в коде или среде.

Рекомендации, если вы обрабатываете маркеры напрямую

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

Кэширование приобретаемых маркеров

Для повышения производительности и надежности мы рекомендуем, чтобы ваше приложение кэшировало маркеры в локальной памяти или шифровало их, если вы хотите сохранить их на диске. Маркеры управляемого удостоверения действительны в течение 24 часов, поэтому нет смысла регулярно запрашивать новые маркеры, так как из конечной точки, выдавшей маркер, будет возвращен кэшированный маркер. Если вы превысите лимит запросов, вы будете ограничены в скорости и получите ошибку HTTP 429.

Когда вы получаете маркер, вы можете установить срок действия кэша маркеров за 5 минут до истечения срока действия (expires_on или эквивалентное свойство), что будет возвращено при создании маркера.

Проверка маркеров

Приложение не должно полагаться на содержимое маркера. Содержимое маркера предназначено только для аудитории (целевого ресурса), к которой осуществляется доступ, а не для клиента, запрашивающего маркер. Содержимое маркера может измениться или быть зашифровано в будущем.

Не предоставляйте и не перемещайте маркеры

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

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