Аутентификация с помощью пакета Azure SDK для Go с использованием управляемого удостоверения
В этом руководстве вы настроите виртуальную машину Azure с управляемым удостоверением для проверки подлинности в Azure с помощью пакета SDK Azure для Go.
Управляемые удостоверения устраняют для вас необходимость в управлении учетными данными, предоставляя удостоверение непосредственно ресурсу Azure. Разрешения, назначенные удостоверению, предоставляют ресурсу доступ к другим ресурсам Azure, которые поддерживают управляемые удостоверения. Избавляя от необходимости передавать учетные данные приложению.
Следуйте указаниям из этого учебника, чтобы назначить управляемое удостоверение виртуальной машине и пройти аутентификацию в Azure с помощью управляемого удостоверения.
Необходимые компоненты
- Подписка Azure. Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем начинать работу.
- Установленный язык Go версии 1.18 или более поздней
1. Настройка среды
Прежде чем начать, необходимо настроить среду.
Развертывание виртуальной машины
Развертывание виртуальной машины в Azure. Выполните код Go, чтобы создать секрет в хранилище ключей Azure из этой виртуальной машины.
Создайте группу ресурсов Azure.
az group create --name go-on-azure --location eastus
Измените параметр
--location
на соответствующее значение для своей среды.Создайте виртуальную машину Azure.
az vm create \ --resource-group go-on-azure \ --name go-on-azure-vm \ --image canonical:ubuntuserver:19.04:latest \ --admin-username azureuser \ --admin-password <password>
Вместо
<password>
укажите свой пароль.
Дополнительные сведения о других службах, поддерживающих управляемые удостоверения, см. в статье Службы с поддержкой управляемых удостоверений для ресурсов Azure.
Развертывание экземпляра хранилища ключей
Создайте экземпляр хранилища ключей, выполнив следующую команду:
az keyvault create --location eastus --name `<keyVaultName>` --resource-group go-on-azure
Замените <keyVaultName>
на глобально уникальное имя.
2. Создание управляемого удостоверения
Azure поддерживает два типа управляемых удостоверений: назначаемые системой и назначаемые пользователем.
Удостоверения, назначаемые системой, непосредственно присоединяются к ресурсу Azure и ограничиваются только этим ресурсом. Удостоверения, назначаемые пользователем, — это автономные ресурсы, которые могут быть назначены одному или нескольким ресурсам Azure.
Чтобы узнать больше о различиях между назначаемыми системой и назначаемыми пользователем удостоверениями, ознакомьтесь с разделом Типы управляемых удостоверений.
Выберите один из следующих параметров:
- Вариант 1. Создание удостоверения, назначаемого системой.
- Вариант 2. Создание удостоверения, назначаемого пользователем.
Вариант 1. Создание удостоверения, назначаемого системой
Выполните приведенные ниже команды, чтобы создать управляемое удостоверение, назначаемое системой:
az vm identity assign -g go-on-azure -n go-on-azure-vm
Вариант 2. Создание удостоверения, назначаемого пользователем
Выполните приведенные ниже команды, чтобы создать управляемое удостоверение, назначаемое пользователем:
az identity create -g go-on-azure -n GoUserIdentity
az vm identity assign -g go-on-azure -n go-on-azure-vm --identities <UserIdentityId>
Замените <UserIdentityId>
идентификатором управляемого удостоверения пользователя.
Дополнительные сведения см. в статье Настройка управляемых удостоверений для ресурсов Azure на виртуальной машине Azure с помощью Azure CLI.
3. Назначьте роль управляемому удостоверению
После создания управляемого удостоверения вы назначаете роли, предоставляющие разрешения удостоверениям для доступа к другому ресурсу Azure. Во время работы с этим учебником вы назначите встроенную роль Key Vault Contributor
управляемому удостоверению, чтобы приложение Go могло создать секрет в экземпляре хранилища ключей.
Выберите один из следующих параметров:
- Вариант 1. Назначение роли удостоверению, назначаемому системой.
- Вариант 2. Назначение роли удостоверению, назначаемому пользователем.
Вариант 1. Назначение роли удостоверению, назначаемому системой
Выполните приведенные ниже команды, чтобы назначить роль Key Vault Contributor
управляемому удостоверению, назначаемому системой:
#output system identity principal ID
az vm identity show --name go-on-azure-vm --resource-group go-on-azure --query 'principalId' -o tsv
#output key vault ID
scope=$(az keyvault show --name go-on-azure-kv --query id -o tsv)
az role assignment create --assignee '<principalId>' --role 'Key Vault Contributor' --scope '<keyVaultId>'
Вариант 2. Назначение роли удостоверению, назначаемому пользователем
Выполните приведенные ниже команды, чтобы назначить роль Key Vault Contributor
управляемому удостоверению, назначаемому пользователем:
#output user identity principal ID
az identity show --resource-group go-on-azure --name GoUserIdentity --query 'principalId' -o tsv
#output key vault ID
az keyvault show --name go-on-azure-kv --query id -o tsv
az role assignment create --assignee '<principalId>' --role 'Key Vault Contributor' --scope '<keyVaultId>'
Дополнительные сведения о встроенных ролях см. в статье Встроенные роли Azure.
4. Создание секрета хранилища ключей с помощью Go
Затем подключитесь к виртуальной машине Azure по протоколу SSH, установите Go и выполните сборку пакета Go.
Установка Go на виртуальную машину Azure
Получите общедоступный IP-адрес виртуальной машины Azure.
az vm show -d -g go-on-azure -n go-on-azure-vm --query publicIps -o tsv
Установите SSH-подключение к виртуальной машине Azure.
ssh azureuser@<public-ip>
Замените
<public-ip>
общедоступным IP-адресом, который присвоен виртуальной машине Azure.Установка Go
sudo add-apt-repository ppa:longsleep/golang-backports; sudo apt update; sudo apt install golang-go -y
Создание пакета Go
Создайте каталог
go-on-azure
в корневом каталоге.mkidr ~/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() { keyVaultName := os.Getenv("KEY_VAULT_NAME") secretName := "quickstart-secret" secretValue := "createdWithGO" 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(), secretName, secretValue, 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() }
Перед запуском кода создайте переменную среды с именем KEY_VAULT_NAME
. В качестве значения переменной среды задайте имя Azure Key Vault, созданного ранее. Замените <KeyVaultName>
именем экземпляра Azure Key Vault.
export KEY_VAULT_NAME=<KeyVaultName>
Затем выполните go run
команду, чтобы создать секрет хранилища ключей.
go run main.go
Убедитесь, что секрет хранилища ключей создан с помощью Azure PowerShell, Azure CLI или портала Azure.
Следующие шаги
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по