Проверка подлинности с помощью пакета 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()