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

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

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

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

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

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

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

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

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

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

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

Примечание

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

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

Снимок экрана: поиск по строке

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

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

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

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

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

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

Снимок экрана: окно подтверждения управляемого удостоверения после создания на портале.

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

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

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

Примечание

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

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

Снимок экрана: поиск ресурса на портале.

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

Снимок экрана: ссылка на удостоверение для ресурса на портале.

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

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

Снимок экрана: удостоверение, назначаемое пользователем, на портале.

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

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

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

Снимок экрана: удостоверение, назначаемое пользователем, связано с ресурсом Azure на портале.

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

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

Примечание

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

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

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

Снимок экрана: окно с общими сведениями о ресурсе на портале.

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

Снимок экрана: переход к элементу для добавления назначения ролей на портале.

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

Снимок экрана: выбор роли на портале.

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

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

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

Снимок экрана: выбор управляемого удостоверения на портале.

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

Снимок экрана: добавление удостоверения в ресурс на портале.

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

Снимок экрана: добавленое назначение ролей на портале.

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

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

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

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

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

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

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

Снимок экрана: идентификатор клиента для управляемого удостоверения на портале.

См. дополнительные сведения о библиотеках удостоверений 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 Active Directory в библиотеках.

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

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

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

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

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

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

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

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

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

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

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

Дальнейшие действия