Поделиться через


Проверка подлинности 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 Путь к файлу сертификата 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:

  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 с помощью 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
}

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

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

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