Аутентификация с помощью пакета Azure SDK для Go с использованием управляемого удостоверения
В этом руководстве описана настройка виртуальной машины Azure с управляемым удостоверением для проверки подлинности в Azure с помощью пакета SDK Azure для Go.
Управляемые удостоверения устраняют для вас необходимость в управлении учетными данными, предоставляя удостоверение непосредственно ресурсу Azure. Разрешения, назначенные удостоверению, предоставляют ресурсу доступ к другим ресурсам Azure, поддерживающим управляемые удостоверения, удаляя необходимость передачи учетных данных в приложении. Управляемые удостоверения можно использовать для проверки подлинности и авторизации размещенных в Azure приложений с другими ресурсами Azure.
Следуйте указаниям из этого учебника, чтобы назначить управляемое удостоверение виртуальной машине и пройти аутентификацию в Azure с помощью управляемого удостоверения.
Необходимые компоненты
- Подписка Azure. Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем начинать работу.
Если вы хотите использовать Azure CLI для выполнения действий, описанных в этой статье:
Используйте среду Bash в Azure Cloud Shell. Дополнительные сведения см . в кратком руководстве по Bash в Azure Cloud Shell.
Если вы предпочитаете выполнять справочные команды CLI локально, установите Azure CLI. Если вы работаете в Windows или macOS, Azure CLI можно запустить в контейнере Docker. Дополнительные сведения см. в статье Как запустить Azure CLI в контейнере Docker.
Если вы используете локальную установку, выполните вход в Azure CLI с помощью команды az login. Чтобы выполнить аутентификацию, следуйте инструкциям в окне терминала. Сведения о других возможностях, доступных при входе, см. в статье Вход с помощью Azure CLI.
Установите расширение Azure CLI при первом использовании, когда появится соответствующий запрос. Дополнительные сведения о расширениях см. в статье Использование расширений с Azure CLI.
Выполните команду az version, чтобы узнать установленную версию и зависимые библиотеки. Чтобы обновиться до последней версии, выполните команду az upgrade.
Если вы хотите использовать Azure PowerShell для выполнения действий, описанных в этой статье:
- Если вы решили использовать Azure PowerShell локально:
- Установите последнюю версию модуля Az PowerShell.
- Подключитесь к учетной записи Azure с помощью командлета Connect-AzAccount.
- Если вы решили использовать Azure Cloud Shell:
- Дополнительные сведения см. в статье Общие сведения об Azure Cloud Shell.
- Если вы решили использовать Azure PowerShell локально:
1. Создание ресурсов Azure
Перед началом работы необходимо создать новую группу ресурсов, виртуальную машину и экземпляр хранилища ключей.
Развертывание виртуальной машины
Развертывание виртуальной машины в 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:0001-com-ubuntu-server-jammy:22_04-lts:latest \ --admin-username azureuser \ --admin-password <password>
Вместо
<password>
укажите свой пароль.
Дополнительные сведения о других службах, поддерживающих управляемые удостоверения, см. в статье Службы с поддержкой управляемых удостоверений для ресурсов Azure.
Развертывание экземпляра хранилища ключей
Создайте экземпляр хранилища ключей, выполнив следующую команду:
az keyvault create --location eastus --name <keyVaultName> --resource-group go-on-azure --enable-rbac-authorization
Замените <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 GoUserIdentity
Дополнительные сведения см. в статье Настройка управляемых удостоверений для ресурсов Azure на виртуальной машине Azure с помощью Azure CLI.
3. Назначьте роль управляемому удостоверению
После создания управляемого удостоверения вы назначаете роли, предоставляющие разрешения удостоверениям для доступа к другому ресурсу Azure. В этом руководстве вы назначите встроенную роль Key Vault Secrets Officer
управляемому удостоверению, чтобы приложение Go смогла создать секрет в экземпляре хранилища ключей.
Выберите один из следующих параметров:
- Вариант 1. Назначение роли удостоверению, назначаемому системой.
- Вариант 2. Назначение роли удостоверению, назначаемому пользователем.
Вариант 1. Назначение роли удостоверению, назначаемому системой.
Выполните приведенные ниже команды, чтобы назначить роль Key Vault Secrets Officer
управляемому удостоверению, назначаемому системой:
#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
az keyvault show --name <keyVaultName> --query id -o tsv
az role assignment create --assignee <principalId> --role "Key Vault Secrets Officer" --scope <keyVaultId>
Во второй команде замените <keyVaultName>
имя хранилища ключей. В последней команде замените <principalId>
и <keyVaultId>
на выходные данные из первых двух команд.
Вариант 2. Назначение роли удостоверению, назначаемому пользователем.
Выполните приведенные ниже команды, чтобы назначить роль Key Vault Secrets Officer
управляемому удостоверению, назначаемому пользователем:
#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 <keyVaultName> --query id -o tsv
az role assignment create --assignee <principalId> --role "Key Vault Secrets Officer" --scope <keyVaultId>
Во второй команде замените <keyVaultName>
имя хранилища ключей. В последней команде замените <principalId>
и <keyVaultId>
на выходные данные из первых двух команд.
Дополнительные сведения о встроенных ролях в хранилище ключей Azure см. в статье Предоставление доступа к ключам Key Vault, сертификатам и секретам с помощью управления доступом на основе ролей Azure. Дополнительные сведения о встроенных ролях в Azure см. в статье о встроенных ролях 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
в корневом каталоге.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/security/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/security/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) } params := azsecrets.SetSecretParameters{Value: &secretValue} resp, err := client.SetSecret(context.TODO(), secretName, params, 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
. Замените<keyVaultName>
именем экземпляра хранилища ключей Azure.export KEY_VAULT_NAME=<keyVaultName>
Выполните
go run
команду, чтобы создать секрет хранилища ключей.go run main.go
При успешном выполнении выходные данные похожи на следующие:
Name: https://<keyVaultName>.vault.azure.net/secrets/quickstart-secret/0e0b941824c4493bb3b83045a31b2bf7, Value: createdWithGO
Вы можете проверить, что секрет хранилища ключей был создан с помощью Azure PowerShell, Azure CLI или портал Azure.
Примечание.
Если вы используете Azure CLI или Azure PowerShell, необходимо убедиться, что учетной записи пользователя Azure назначена роль, которая позволяет ему читать секреты в хранилище ключей, например "Сотрудник по секретам Key Vault" или "Пользователь секретов Key Vault".
5. Очистка ресурсов
Если вы больше не хотите использовать ресурсы Azure, созданные в этой статье, рекомендуется удалить их. Удаление неиспользуемых ресурсов помогает избежать текущих расходов и не загромождает подписку. Самый простой способ удалить ресурсы, используемые в этом руководстве, — удалить группу ресурсов.
az group delete --name go-on-azure --force-deletion-types Microsoft.Compute/virtualMachines --yes
Аргумент force-deletion-type
сообщает команде принудительное удаление виртуальных машин в группе ресурсов. Аргумент --yes
указывает команде не запрашивать подтверждение.
Предыдущая команда выполняет обратимое удаление в хранилище ключей в группе ресурсов. Чтобы окончательно удалить ее из подписки, введите следующую команду:
az keyvault purge --name <keyVaultName> --no-wait
Замените <keyVaultName>
именем своего хранилища ключей.