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


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

Важно!

Эта статья относится к устаревшей версии пакета SDK Azure для Go. Для проверки подлинности до последних модулей используется пакет удостоверений Azure.

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

Доступные типы и методы аутентификации

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

Тип аутентификации Рекомендуется в следующем случае
Проверка подлинности на основе сертификатов У вас есть сертификат X509, настроенный для пользователя или субъекта-службы Microsoft Entra. Дополнительные сведения см. в статье "Начало работы с проверкой подлинности на основе сертификатов" в идентификаторе Microsoft Entra.
Учетные данные клиента У вас есть субъект-служба, настроенный для этого приложения или класса, к которому оно относится. Дополнительные сведения см. в статье Создание субъекта-службы Azure с помощью Azure CLI.
Управляемые удостоверения для ресурсов Azure Приложение выполняется в ресурсе Azure, настроенном для использования управляемого удостоверения. Дополнительные сведения см. в статье Управляемые удостоверения для ресурсов Azure.
Маркер устройства Приложение предназначено только для интерактивного использования. У пользователей может быть включена многофакторная проверка подлинности. Пользователям предоставляется доступ к веб-браузеру для входа. Дополнительные сведения см. в разделе об использовании аутентификации на основе маркера устройства.
Имя пользователя/пароль У вас есть интерактивное приложение, в котором нельзя использовать другой метод аутентификации. У пользователей нет многофакторной проверки подлинности для входа в Систему Microsoft Entra.

Ключевые моменты

  • Если вы используете тип проверки подлинности, отличный от учетных данных клиента, приложение должно быть зарегистрировано в идентификаторе Microsoft Entra. Сведения об интеграции приложений с идентификатором Microsoft Entra.
  • Если нет особых требований, избегайте проверки пароля или имени пользователя. В ситуациях, когда требуется вход на основе пользователей, проверка подлинности маркера устройства обычно может использоваться вместо этого.

Для этих типов аутентификации используются разные методы.

Все функции и типы проверки подлинности доступны в пакете github.com/Azure/go-autorest/autorest/azure/auth .

Примечание.

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

Использование аутентификации на основе среды

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

Проверка подлинности на основе среды поддерживает все типы проверки подлинности, кроме маркеров устройств, которые оцениваются в следующем порядке:

  • Учетные данные клиента
  • Проверка подлинности на основе сертификатов
  • Имя пользователя/пароль
  • Управляемые удостоверения для ресурсов Azure

Если значения для типа аутентификации удалены или отклонены, пакет SDK автоматически попытается использовать следующий тип аутентификации. Когда будут использованы все типы, пакет SDK вернет ошибку.

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

Тип аутентификации Переменная среды Description
Учетные данные клиента AZURE_TENANT_ID Идентификатор для клиента Active Directory, к которому относится субъект-служба.
AZURE_CLIENT_ID Имя или идентификатор субъекта-службы.
AZURE_CLIENT_SECRET Секрет, связанный с субъектом-службой.
Certificate AZURE_TENANT_ID Идентификатор клиента Active Directory, в котором зарегистрирован сертификат.
AZURE_CLIENT_ID Идентификатор клиента приложения, связанный с сертификатом.
AZURE_CERTIFICATE_PATH Путь к файлу сертификата клиента.
AZURE_CERTIFICATE_PASSWORD Пароль для сертификата клиента.
Имя пользователя или пароль AZURE_TENANT_ID Идентификатор для клиента Active Directory, к которому относится пользователь.
AZURE_CLIENT_ID Идентификатор клиента приложения.
AZURE_USERNAME Имя пользователя для входа в систему.
AZURE_PASSWORD Пароль для входа в систему.
Управляемое удостоверение Учетные данные для аутентификации на основе управляемого удостоверения не требуются. Приложение должно выполняться в ресурсе Azure, настроенном для использования управляемых удостоверений. Дополнительные сведения см. в статье Управляемые удостоверения для ресурсов Azure.

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

Переменная среды Description
AZURE_ENVIRONMENT Имя облачной среды, к которой нужно подключиться.
AZURE_AD_RESOURCE Идентификатор ресурса Active Directory, который нужно использовать при подключении, в виде универсального кода ресурса (URI) для точки управления.

При аутентификации на основе среды вызовите функцию NewAuthorizerFromEnvironment, чтобы получить объект авторизации. Затем этот объект задается в свойстве Authorizer клиентов, чтобы разрешить им доступ к Azure.

import "github.com/Azure/go-autorest/autorest/azure/auth"
authorizer, err := auth.NewAuthorizerFromEnvironment()

Аутентификация в Azure Stack

Для аутентификации в Azure Stack нужно задать следующие переменные:

Переменная среды Description
AZURE_AD_ENDPOINT Конечная точка Azure Active Directory
AZURE_AD_RESOURCE Идентификатор ресурса Active Directory

Эти переменные можно извлечь из метаданных Azure Stack. Чтобы получить метаданные, откройте веб-браузер в среде Azure Stack и перейдите по URL-адресу (ResourceManagerURL)/metadata/endpoints?api-version=1.0.

ResourceManagerURL зависит от названия региона, имени компьютера и внешнего полного доменного имени (FQDN) для конкретного развертывания Azure Stack:

Среда ResourceManagerURL
Комплект разработки https://management.local.azurestack.external/
Интегрированные системы https://management.(region).ext-(machine-name).(FQDN)

Дополнительные сведения о том, как использовать пакет Azure SDK для Go в Azure Stack, см. в руководстве по использованию профилей версий API и Go в Azure Stack.

Использование аутентификации на основе файла

Аутентификация на основе файлов использует формат файла, создаваемый Azure CLI. Этот файл можно легко создать при создании субъекта-службы с использованием параметра --sdk-auth. Если вы планируете применить аутентификацию на основе файлов, убедитесь, что этот аргумент задан при создании субъекта-службы. Так как CLI выводит выходные данные в stdout, перенаправьте их в файл.

az ad sp create-for-rbac --role Contributor \
    --scopes /subscriptions/<subscription_id> \
    --sdk-auth > azure.auth

Задайте в переменной среды AZURE_AUTH_LOCATION расположение файла авторизации. Эта переменная среды считывается приложением, затем содержащиеся в ней учетные данные анализируются. Если вам нужно выбрать файл авторизации во время выполнения, используйте для среды программы функцию os.Setenv.

Чтобы загрузить данные для аутентификации, вызовите функцию NewAuthorizerFromFile. В отличие от авторизации на основе среды, для авторизации на основе файла требуется конечная точка ресурса.

import "github.com/Azure/go-autorest/autorest/azure/auth"
authorizer, err := NewAuthorizerFromFile(azure.PublicCloud.ResourceManagerEndpoint)

Дополнительные сведения об использовании субъектов-служб и управлении правами доступа к ним см. в статье Создание субъекта-службы Azure с помощью Azure CLI.

Использование аутентификации на основе маркера устройства

Если нужно обеспечить интерактивный вход пользователей, лучший вариант — это аутентификация на основе маркера устройства. Этот поток проверки подлинности передает пользователю маркер для вставки на сайт входа Майкрософт, где затем они проходят проверку подлинности с помощью учетной записи Microsoft Entra. Этот метод проверки подлинности поддерживает учетные записи с поддержкой многофакторной проверки подлинности, в отличие от стандартной проверки подлинности имени пользователя и пароля.

Для аутентификации на основе маркера устройства создайте авторизацию DeviceFlowConfig с использованием функции NewDeviceFlowConfig. Чтобы начать аутентификацию, вызовите в полученном объекте Authorizer. Аутентификация на основе маркера устройства блокирует выполнение программы до завершения процесса.

import "github.com/Azure/go-autorest/autorest/azure/auth"
deviceConfig := auth.NewDeviceFlowConfig(applicationID, tenantID)
authorizer, err := deviceConfig.Authorizer()

Использование клиента аутентификации

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

  • для написания интерактивной программы;
  • для использования специализированных файлов конфигурации;
  • для настройки требования, которое запрещает использование встроенного метода аутентификации.

Предупреждение

Ни в коем случае не следует жестко задавать учетные данные Azure в приложении. Если поместить секреты в двоичный файл приложения, злоумышленникам будет проще извлечь их независимо от того, работает ли приложение. Это подвергает опасности все ресурсы Azure, для которых авторизованы учетные данные!

В приведенной ниже таблице перечислены типы в пакете SDK, которые соответствуют интерфейсу AuthorizerConfig.

Тип аутентификации Тип авторизации
Проверка подлинности на основе сертификатов ClientCertificateConfig
Учетные данные клиента ClientCredentialsConfig
Управляемые удостоверения для ресурсов Azure MSIConfig
Имя пользователя/пароль UsernamePasswordConfig

Создайте структуру аутентификации с использованием связанной функции New и вызовите в полученном объекте Authorize, чтобы выполнить аутентификацию. Например, для аутентификации на основе сертификатов:

import "github.com/Azure/go-autorest/autorest/azure/auth"
certificateAuthorizer := auth.NewClientCertificateConfig(certificatePath, certificatePassword, clientID, tenantID)
authorizerToken, err := certificateAuthorizer.Authorizer()

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