Аутентификация пакета Azure SDK для Go с помощью субъекта-службы
Во время работы с этим учебником вы будете использовать пакет Azure SDK для Go, чтобы выполнить аутентификацию в Azure с помощью субъекта-службы Azure, используя либо секрет, либо сертификат.
Субъекты-службы Azure определяют политику доступа и разрешения в клиенте Microsoft Entra. Обеспечивая базовые функции, включая аутентификацию во время входа, а также авторизацию во время получения доступа к ресурсам. Избавляя от необходимости использовать личные учетные записи для доступа к ресурсам Azure. Модуль удостоверения Azure пакета Azure SDK для Go предоставляет удобный способ аутентификации в Azure с помощью субъекта-службы, используя переменные среды, секрет или сертификат.
Следуйте указаниям из этого учебника, чтобы создать и выполнить аутентификацию с помощью Azure SDK для Go, используя субъект-службу.
Необходимые компоненты
- Подписка Azure. Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем начинать работу.
- Установленный язык Go версии 1.18 или более поздней
1. Настройка среды
Прежде чем начать, создайте новую группу ресурсов и экземпляр хранилища ключей.
az group create --name go-on-azure --location eastus
az keyvault create --location eastus --name `<keyVaultName>` --resource-group go-on-azure
Замените <keyVaultName>
на глобально уникальное имя. Кроме того, обратите внимание на Id
выходные данные, используйте его для область учетной записи службы.
2. Создание субъекта-службы Azure
Чтобы создать субъект-службу Azure используйте один из следующих методов:
- Вариант 1. Создание субъекта-службы Azure с секретом.
- Вариант 2. Создание субъекта-службы Azure с сертификатом.
Дополнительные сведения о субъектах-службах Azure см. в разделе Объект субъекта-службы.
Вариант 1. Создание субъекта-службы Azure с секретом
Чтобы создать субъект-службу Azure, выполните следующие команды.
az ad sp create-for-rbac --name `<servicePrincipalName>` --role Contributor --scope <resourceGroupId>
Замените <servicePrincipalName>
и <resourceGroupId>
соответствующими значениями.
Обязательно скопируйте это значение пароля, так как его нельзя получить повторно. Если вы забыли пароль, сбросьте учетные данные для субъекта-службы.
Вариант 2. Создание субъекта-службы Azure с сертификатом
az ad sp create-for-rbac --name <servicePrincipal> --create-cert --role Contributor --scope <resourceGroupId>
Замените <servicePrincipalName>
и <resourceGroupId>
соответствующими значениями.
3. Аутентификация в Azure с помощью субъекта-службы
С помощью DefaultAzureCredential
можно избежать написания кода для конкретной среды для аутентификации в Azure.
Используйте DefaultAzureCredential
для настройки учетных данных субъекта-службы, определив переменные среды.
Чтобы настроить учетные данные субъекта-службы, выберите один из следующих вариантов:
Дополнительные сведения о DefaultAzureCredential
см. в статье Аутентификация Azure с помощью Azure SDK для Go.
Вариант 1. Аутентификация с помощью секрета
Определите следующие переменные среды:
Имя переменной | Значение |
---|---|
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>"
Вариант 2. Аутентификация с помощью сертификата
Имя переменной | Значение |
---|---|
AZURE_CLIENT_ID |
Идентификатор приложения субъекта-службы Azure |
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>"
Использование DefaultAzureCredential для аутентификации ResourceClient
Используйте функцию NewDefaultAzureCredential
модуля удостоверения Azure для аутентификации ResourceClient.
cred, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
log.Fatalf("failed to obtain a credential: %v", err)
}
4. Пример кода
Используйте следующий пример кода, чтобы убедиться, что субъект-служба выполняет аутентификацию в Azure и имеет соответствующие разрешения для группы ресурсов.
Создайте каталог
go-on-azure
в домашнем каталоге.mkdir ~/go-on-azure
Перейдите в каталог
go-on-azure
.cd ~/go-on-azure
Чтобы создать файл
go.mod
, выполнитеgo mod init
.go mod init go-on-azure
Чтобы установить необходимые модули Go, выполните
go get
.go get "github.com/Azure/azure-sdk-for-go/sdk/azidentity" go get "github.com/Azure/azure-sdk-for-go/sdk/keyvault/azsecrets"
Создайте файл
main.go
и добавьте код ниже.package main import ( "context" "fmt" "log" "os" "github.com/Azure/azure-sdk-for-go/sdk/azidentity" "github.com/Azure/azure-sdk-for-go/sdk/keyvault/azsecrets" ) func createSecret(name, value string) { keyVaultName := os.Getenv("KEY_VAULT_NAME") keyVaultUrl := fmt.Sprintf("https://%s.vault.azure.net/", keyVaultName) cred, err := azidentity.NewDefaultAzureCredential(nil) if err != nil { log.Fatalf("failed to obtain a credential: %v", err) } client, err := azsecrets.NewClient(keyVaultUrl, cred, nil) if err != nil { log.Fatalf("failed to create a client: %v", err) } resp, err := client.SetSecret(context.TODO(), name, value, nil) if err != nil { log.Fatalf("failed to create a secret: %v", err) } fmt.Printf("Name: %s, Value: %s\n", *resp.ID, *resp.Value) } func main() { createSecret("ExamplePassword", "hVFkk965BuUv") }
Создайте переменную среды с именем
KEY_VAULT_NAME
. В качестве значения переменной среды задайте имя Azure Key Vault, созданного ранее.export KEY_VAULT_NAME=<KeyVaultName>
Замените
<KeyVaultName>
именем экземпляра Azure Key Vault.go run
Выполните команду, чтобы создать новый секрет хранилища ключей.go run main.go
Следующие шаги
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по