Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Рекомендуемый подход к проверке подлинности Azure приложения для доступа к другим ресурсам Azure — использовать управляемое удостоверение. Этот подход поддерживается для большинства служб Azure, включая приложения, размещенные на Azure App Service, Azure Container Apps и Azure Virtual Machines. Узнайте больше о различных методах проверки подлинности и подходах на странице обзора проверки подлинности . В следующих разделах вы узнаете:
- Основные понятия управляемого удостоверения
- Создание системного управляемого удостоверения для вашего приложения
- Назначение ролей управляемому удостоверению, назначаемого системой
- Проверка подлинности с помощью управляемого удостоверения, назначаемого системой, из кода приложения
Основные понятия управляемого удостоверения
Управляемое удостоверение позволяет приложению безопасно подключаться к другим ресурсам Azure без использования секретных ключей или других секретов приложения. Внутри Azure отслеживает идентификацию и то, к каким ресурсам разрешено подключаться. Azure использует эту информацию для автоматического получения токенов Microsoft Entra для приложения, чтобы оно могло подключаться к другим ресурсам Azure.
Существует два типа управляемых удостоверений, которые следует учитывать при настройке вашего хостинг-приложения.
- System-assigned удостоверения, управляемые системой, активируются непосредственно на ресурсе Azure и связаны с его жизненным циклом. Когда ресурс удаляется, Azure автоматически удаляет удостоверение для вас. Назначаемые системой удостоверения обеспечивают минимальный подход к использованию управляемых удостоверений.
- назначаемые пользователем управляемые удостоверения создаются как автономные ресурсы Azure и обеспечивают большую гибкость и возможности. Они идеально подходят для решений с несколькими Azure ресурсами, которые должны совместно использовать одинаковые удостоверения и разрешения. Например, если нескольким виртуальным машинам требуется доступ к одному набору ресурсов Azure, управляемое удостоверение, назначаемое пользователем, обеспечивает повторное использование и оптимизированное управление.
Подсказка
Узнайте больше о выборе и управлении управляемыми удостоверениями, назначаемыми системой и пользователем, в статье рекомендации по лучшим практикам работы с управляемыми удостоверениями.
** В следующих разделах приводятся шаги по включению и использованию управляемого удостоверения, назначенного системой, для размещённого в Azure приложения. Если вам нужно использовать управляемое удостоверение, назначаемое пользователем, посетите статью управляемых удостоверений, назначаемых пользователем для получения дополнительной информации.
Включите системно назначаемое управляемое удостоверение на ресурсе размещения Azure
Чтобы начать использовать системно назначенное управляемое удостоверение с вашим приложением, включите удостоверение на Azure-ресурсе, который размещает ваше приложение, например, Azure App Service, Azure Container Apps или экземпляр Azure Virtual Machines.
Управляемое удостоверение, назначаемое системой, можно включить для ресурса Azure с помощью портала Azure или Azure CLI.
В портале Azure перейдите к ресурсу, где размещен код вашего приложения, например, к экземпляру Azure App Service или Azure Container Apps.
На странице Обзор ресурса разверните Параметры и выберите Удостоверение в области навигации.
На странице "Удостоверение" переключите ползунок "Состояние" на "Вкл".
Нажмите кнопку Сохранить, чтобы применить изменения.
Назначьте роли управляемому удостоверению
Затем определите, какие роли необходимы вашему приложению, и назначьте их управляемому удостоверению. Роли можно назначать управляемой идентичности на следующих уровнях:
- Ресурс: назначенные роли применяются только к конкретному ресурсу.
- Группа ресурсов: назначенные роли применяются ко всем ресурсам, содержащимся в группе ресурсов.
- Подписка: назначенные роли применяются ко всем ресурсам, содержащимся в подписке.
В следующем примере показано, как назначать роли в области группы ресурсов, так как многие приложения управляют всеми связанными Azure ресурсами с помощью одной группы ресурсов.
Перейдите на страницу обзора группы ресурсов, содержащей приложение с управляемым удостоверением, назначаемое системой.
Выберите элемент управления доступом (IAM) на левой панели навигации.
На странице управления доступом (IAM) выберите +Добавить в верхнем меню, а затем выберите "Добавить назначение роли ", чтобы перейти на страницу "Добавить назначение ролей ".
Страница «Добавление назначения ролей» предлагает пошаговый рабочий процесс с вкладками для назначения ролей идентификациям. На первой вкладке Роль используйте поле поиска вверху, чтобы найти роль, которую вы хотите назначить идентификатору.
Выберите роль из результатов и нажмите кнопку "Далее ", чтобы перейти на вкладку "Члены ".
Для параметра "Назначить доступ к" выберите "Управляемое удостоверение".
Для параметра Участники выберите Выбрать участников, чтобы открыть панель Выбор управляемых удостоверений.
На панели "Выбор управляемых удостоверений" используйте раскрывающиеся списки "Подписка" и "Управляемое удостоверение", чтобы отфильтровать результаты поиска для удостоверений. Используйте поле поиска Select, чтобы найти системное удостоверение, которое вы включили для ресурса Azure, который размещает ваше приложение.
Выберите удостоверение и нажмите кнопку "Выбрать " в нижней части панели, чтобы продолжить.
Выберите "Рецензирование" и "Назначить" в нижней части страницы.
На последней вкладке "Рецензирование и назначение" нажмите кнопку "Рецензирование" и "Назначить ", чтобы завершить рабочий процесс.
Аутентификация для подключения к службам Azure из вашего приложения
Модуль azidentity предоставляет различные учетные данные — реализации TokenCredential, адаптированные для поддержки различных сценариев и потоков проверки подлинности Microsoft Entra. Так как управляемое удостоверение недоступно при локальном выполнении, следующие шаги демонстрируют, какие учетные данные следует использовать в конкретном сценарии:
-
Локальная среда разработки: только во время локальной разработки используйте DefaultAzureCredential для предварительно настроенной цепочки учетных данных.
DefaultAzureCredentialобнаруживает учетные данные пользователя из локальных средств разработки, таких как Azure CLI. Она также обеспечивает гибкость и удобство повторных попыток, время ожидания ответов и поддержку нескольких вариантов проверки подлинности. Дополнительные сведения см. в статье Аутентификация в службах Azure во время локальной разработки. - Приложения, размещенные в Azure: Если ваше приложение запущено в Azure, используйте ManagedIdentityCredential для безопасного обнаружения управляемой идентичности, настроенной для вашего приложения. Указание этого точного типа учетных данных предотвращает неожиданное получение других доступных учетных данных.
Реализация кода
Добавьте модуль azidentity.
В выбранном терминале перейдите к каталогу проекта приложения и выполните следующие команды:
go get github.com/Azure/azure-sdk-for-go/sdk/azidentity
Azure службы доступны с помощью специализированных клиентов из различных клиентских библиотек Azure SDK. Для любого кода Go, создающего экземпляр клиента Azure SDK в приложении, необходимо:
- Импортируйте пакет
azidentity. - Создайте экземпляр
DefaultAzureCredentialтипа. - Передайте экземпляр типа
DefaultAzureCredentialконструктору клиента Azure SDK. - Задайте переменную среды
AZURE_TOKEN_CREDENTIALSравнойManagedIdentityCredential, чтобы убедиться, чтоDefaultAzureCredentialиспользует только учетные данные управляемой идентификации. Эта практика делает процесс аутентификации более предсказуемым и упрощает отладку при развертывании в Azure. Дополнительные сведения см. в разделе "Использование определенных учетных данных".
Пример этих действий показан в следующем фрагменте кода с клиентом Azure Storage Blob.
import (
"context"
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
)
const (
account = "https://<replace_with_your_storage_account_name>.blob.core.windows.net/"
containerName = "sample-container"
blobName = "sample-blob"
sampleFile = "path/to/sample/file"
)
func main() {
// create a credential
cred, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
// TODO: handle error
}
// create a client for the specified storage account
client, err := azblob.NewClient(account, cred, nil)
if err != nil {
// TODO: handle error
}
// TODO: perform some action with the azblob Client
// _, err = client.DownloadFile(context.TODO(), <containerName>, <blobName>, <target_file>, <DownloadFileOptions>)
}
Как описано в статье Azure SDK для проверки подлинности Go, DefaultAzureCredential поддерживает несколько методов проверки подлинности и определяет метод проверки подлинности, используемый во время выполнения. Преимуществом этого подхода является то, что приложение может использовать различные методы проверки подлинности в разных средах без реализации кода для конкретной среды. При запуске предыдущего кода на рабочей станции в ходе локальной разработки DefaultAzureCredential используется либо основная учетная запись службы приложения, как это определено параметрами среды, либо учетные данные средств разработчика для аутентификации с другими ресурсами Azure. Таким образом, один и тот же код можно использовать для проверки подлинности приложения для Azure ресурсов во время локальной разработки и при развертывании в Azure.
Это важно
DefaultAzureCredential упрощает проверку подлинности при разработке приложений, которые развертываются для Azure путем объединения учетных данных, используемых в средах размещения Azure и учетных данных, используемых в локальной разработке. В рабочей среде лучше использовать конкретный тип учетных данных, чтобы проверка подлинности была более предсказуемой и проще отлаживать.
Альтернативой DefaultAzureCredential является использование ManagedIdentityCredential. Шаги для использования ManagedIdentityCredential такие же, как для использования типа DefaultAzureCredential.
Пример этих действий показан в следующем фрагменте кода с клиентом Azure Storage Blob.
import (
"context"
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
)
const (
// Replace placeholder text with your storage account name
account = "https://<replace_with_your_storage_account_name>.blob.core.windows.net/"
containerName = "sample-container"
blobName = "sample-blob"
sampleFile = "path/to/sample/file"
)
func main() {
// create a credential
cred, err := azidentity.NewManagedIdentityCredential(nil)
// When using User Assigned Managed Identity use this instead and pass your client id in the options
// clientID := azidentity.ClientID("abcd1234-...")
// opts := azidentity.ManagedIdentityCredentialOptions{ID: clientID}
// cred, err := azidentity.NewManagedIdentityCredential(&opts)
if err != nil {
// TODO: handle error
}
// create a client for the specified storage account
client, err := azblob.NewClient(account, cred, nil)
if err != nil {
// TODO: handle error
}
// TODO: perform some action with the azblob Client
// _, err = client.DownloadFile(context.TODO(), <containerName>, <blobName>, <target_file>, <DownloadFileOptions>)
}