Проверка подлинности Azure с помощью модуля удостоверений Azure для Go

В этом руководстве для проверки подлинности в Azure используется тип DefaultAzureCredential из модуля удостоверений Azure для Go. Модуль удостоверений Azure предлагает несколько типов учетных данных, ориентированных на OAuth с идентификатором Microsoft Entra.

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

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

1. Установка модуля удостоверения Azure для Go

Чтобы скачать модуль azidentity, выполните следующую команду:

go get -u github.com/Azure/azure-sdk-for-go/sdk/azidentity

2. Аутентификация с помощью Azure

Используйте DefaultAzureCredential для аутентификации в 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 Путь к файлу сертификата, включая закрытый ключ (без защиты паролем)
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>"

Настройка выполняется в предыдущем порядке. Например, если заданы значения секрета клиента и сертификата, используется секрет клиента.

Вариант 2. Использование удостоверения рабочей нагрузки

Идентификация рабочей нагрузки Microsoft Entra позволяет модулям pod в кластере Kubernetes использовать удостоверение Kubernetes (учетная запись службы). Выдается токен Kubernetes, и федерация OIDC позволяет приложениям Kubernetes безопасно получать доступ к ресурсам Azure с помощью идентификатора Microsoft Entra.

Если необходимые переменные среды отсутствуют EnvironmentCredential , DefaultAzureCredential пытается выполнить проверку подлинности с помощью WorkloadIdentityCredential. WorkloadIdentityCredential пытается считывать конфигурацию субъекта-службы из переменных среды, заданных веб-перехватчиком удостоверений рабочей нагрузки.

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

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

Если необходимые переменные среды отсутствуют WorkloadIdentityCredential , DefaultAzureCredential пытается выполнить проверку подлинности с помощью ManagedIdentityCredential.

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

export AZURE_CLIENT_ID="<user_assigned_managed_identity_client_id>"

Вариант 4. Вход с помощью Azure CLI

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

Чтобы войти в Azure CLI, выполните следующую команду.

az login

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

3. Использование DefaultAzureCredential для аутентификации ResourceClient

Создайте новый пример модуля Go с именем azure-auth для проверки подлинности в Azure с помощью DefaultAzureCredential:

  1. Создайте каталог для проверки и выполните пример кода Go, а затем перейдите в этот каталог.

  2. Выполните инициализацию мода go, чтобы создать модуль:

    go mod init azure-auth
    
  3. Запустите переход к загрузке, сборке и установке необходимых модулей 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"
    
  4. Создайте файл с именем 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> идентификатором своей подписки.

  5. Выполните сборку go run и запуск приложения:

    go run .
    

Аутентификация в 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
}

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

Рекомендации по устранению ошибок из определенных типов учетных данных см. в руководстве по устранению неполадок.

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