Проверка подлинности Azure с помощью модуля удостоверений Azure для Go
В этом руководстве для проверки подлинности в Azure используется тип DefaultAzureCredential из модуля удостоверений Azure для Go. Модуль удостоверений Azure предлагает несколько типов учетных данных, ориентированных на OAuth с идентификатором Microsoft Entra.
DefaultAzureCredential
упрощает проверку подлинности путем объединения часто используемых типов учетных данных. Он объединяет типы учетных данных, используемые для проверки подлинности развернутых Azure приложений с типами учетных данных, используемыми для проверки подлинности в среде разработки.
Необходимые компоненты
- Подписка Azure. Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем начинать работу.
- Установленный язык Go версии 1.18 или более поздней
1. Установка модуля удостоверения Azure для Go
Чтобы скачать модуль azidentity, выполните следующую команду:
go get -u github.com/Azure/azure-sdk-for-go/sdk/azidentity
2. Аутентификация с помощью Azure
Используется DefaultAzureCredential
для проверки подлинности в Azure с помощью одного из следующих методов:
- Вариант 1. Определение переменных среды.
- Вариант 2. Использование удостоверения рабочей нагрузки
- Вариант 3. Использование управляемого удостоверения
- Вариант 4. Вход с помощью Azure CLI
- Вариант 5. Вход с помощью Интерфейса командной строки разработчика Azure
Дополнительные сведения о разных типах учетных данных см. в статье о типах учетных данных.
Вариант 1. Определение переменных среды.
DefaultAzureCredential
использует тип EnvironmentCredential
для настройки аутентификации с помощью переменных среды, поддерживающих три типа аутентификации. Выберите один из следующих типов аутентификации и определите соответствующие переменные среды.
Субъект-служба с секретом
Имя переменной | Значение |
---|---|
AZURE_CLIENT_ID |
Идентификатор приложения субъекта-службы Azure |
AZURE_TENANT_ID |
Идентификатор клиента Microsoft Entra приложения |
AZURE_CLIENT_SECRET |
Пароль субъекта-службы Azure |
export AZURE_TENANT_ID="<active_directory_tenant_id>"
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_CLIENT_SECRET="<service_principal_password>"
Субъект-служба с сертификатом
Имя переменной | Значение |
---|---|
AZURE_CLIENT_ID |
Идентификатор приложения Microsoft Entra |
AZURE_TENANT_ID |
Идентификатор клиента Microsoft Entra приложения |
AZURE_CLIENT_CERTIFICATE_PATH |
Путь к файлу сертификата PEM или PKCS12, включая закрытый ключ |
AZURE_CLIENT_CERTIFICATE_PASSWORD |
(необязательно) Пароль для файла сертификата |
export AZURE_TENANT_ID="<active_directory_tenant_id>"
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_CLIENT_CERTIFICATE_PATH="<azure_client_certificate_path>"
Имя пользователя и пароль
Имя переменной | Значение |
---|---|
AZURE_CLIENT_ID |
Идентификатор приложения Microsoft Entra |
AZURE_USERNAME |
Имя пользователя (обычно это адрес электронной почты) |
AZURE_PASSWORD |
Пароль пользователя |
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_USERNAME="<azure_username>"
export AZURE_PASSWORD="<azure_user_password>"
Настройка выполняется в предыдущем порядке. Например, если заданы значения секрета клиента и сертификата, используется секрет клиента. Полный учебник по проверке подлинности с помощью субъектов-служб см. в разделе Azure SDK для Go с помощью субъекта-службы.
Вариант 2. Использование удостоверения рабочей нагрузки
Идентификация рабочей нагрузки Microsoft Entra позволяет модулям pod в кластере Kubernetes использовать удостоверение Kubernetes (учетная запись службы). Выдается токен Kubernetes, и федерация OIDC позволяет приложениям Kubernetes безопасно получать доступ к ресурсам Azure с помощью идентификатора Microsoft Entra.
Если необходимые переменные среды отсутствуют EnvironmentCredential
, DefaultAzureCredential
пытается выполнить проверку подлинности с помощью WorkloadIdentityCredential. WorkloadIdentityCredential
пытается считывать конфигурацию субъекта-службы из переменных среды, заданных веб-перехватчиком удостоверений рабочей нагрузки.
Вариант 3. Использование управляемого удостоверения
Управляемые удостоверения устраняют необходимость в управлении учетными данными для разработчиков. При подключении к ресурсам, поддерживающим проверку подлинности Microsoft Entra, приложения, размещенные в Azure, могут использовать маркеры Microsoft Entra вместо учетных данных. Управляемые удостоверения не поддерживаются в локальной разработке.
Если необходимые переменные среды отсутствуют WorkloadIdentityCredential
, DefaultAzureCredential
пытается выполнить проверку подлинности с помощью ManagedIdentityCredential.
При использовании управляемого удостоверения, назначаемого пользователем, выполните следующую команду, чтобы задать AZURE_CLIENT_ID
переменную среды.
export AZURE_CLIENT_ID="<user_assigned_managed_identity_client_id>"
AZURE_CLIENT_ID
Если переменная среды не задана, пытается пройти проверку подлинности с помощью управляемого удостоверения, назначаемого системой, DefaultAzureCredentials
если он включен в ресурсе размещения.
Комплексное руководство по проверке подлинности с помощью управляемых удостоверений в приложениях, размещенных в Azure, см. в статье "Проверка подлинности с помощью пакета SDK Azure для Go" с помощью управляемого удостоверения.
Вариант 4. Вход с помощью Azure CLI
Чтобы уменьшить трение в локальной разработке, DefaultAzureCredential
можно пройти проверку подлинности при входе пользователя в Azure CLI.
Чтобы войти в Azure CLI, выполните следующую команду.
az login
Вариант 5. Вход с помощью Интерфейса командной строки разработчика Azure
В локальной разработке, если пользователь не вошел в Azure CLI, DefaultAzureCredential
может пройти проверку подлинности от имени пользователя, вошедшего в интерфейс командной строки разработчика Azure.
Выполните следующую команду, чтобы войти в Интерфейс командной строки разработчика Azure:
azd auth login
Проверка подлинности Интерфейса командной строки разработчика Azure не рекомендуется для приложений, работающих в Azure.
3. Использование DefaultAzureCredential для аутентификации ResourceClient
Создайте новый пример модуля Go с именем azure-auth
для проверки подлинности в Azure с помощью DefaultAzureCredential
:
Создайте каталог для проверки и выполните пример кода Go, а затем перейдите в этот каталог.
Выполните инициализацию мода go, чтобы создать модуль:
go mod init azure-auth
Запустите переход к загрузке, сборке и установке необходимых модулей Azure SDK для Go:
go get "github.com/Azure/azure-sdk-for-go/sdk/azidentity" go get "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/subscription/armsubscription"
Создайте файл с именем
main.go
и вставьте следующий код:package main import ( "context" "github.com/Azure/azure-sdk-for-go/sdk/azidentity" "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/subscription/armsubscription" ) const subscriptionID = "<subscription ID>" func main() { cred, err := azidentity.NewDefaultAzureCredential(nil) if err != nil { // TODO: handle error } // Azure SDK Resource Management clients accept the credential as a parameter. // The client will authenticate with the credential as necessary. client, err := armsubscription.NewSubscriptionsClient(cred, nil) if err != nil { // TODO: handle error } _, err = client.Get(context.TODO(), subscriptionID, nil) if err != nil { // TODO: handle error } }
Замените
<subscription ID>
идентификатором своей подписки.Выполните сборку
go run
и запуск приложения:go run .
Примечание.
Для запуска от имени в локальной системе необходимо войти в Azure с помощью Azure CLI или Azure Developer CLI.
Аутентификация в Azure с помощью DefaultAzureCredential
Используйте следующий код в приложении для проверки подлинности в Azure с помощью модуля удостоверений Azure:DefaultAzureCredential
// This credential type checks environment variables for configuration.
cred, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
// handle error
}
// Azure Resource Management clients accept the credential as a parameter
client, err := armresources.NewClient("<subscriptionId>", cred, nil)
if err != nil {
// handle error
}
Устранение неполадок
Рекомендации по устранению ошибок из определенных типов учетных данных см. в руководстве по устранению неполадок.