Autenticação com o SDK do Azure para linguagem Go usando uma identidade gerenciada
Neste tutorial, você configura uma máquina virtual do Azure com uma identidade gerenciada para autenticar no Azure usando o SDK do Azure para Go.
As identidades gerenciadas eliminam a necessidade de você gerenciar credenciais, fornecendo uma identidade diretamente para um recurso do Azure. As permissões atribuídas à identidade concedem ao recurso acesso a outros recursos do Azure que dão suporte a identidades gerenciadas, eliminando a necessidade de você passar credenciais em seu aplicativo. Você pode usar identidades gerenciadas para autenticar e autorizar aplicativos hospedados no Azure com outros recursos do Azure.
Siga este tutorial para atribuir uma identidade gerenciada a uma máquina virtual e autenticar-se no Azure usando uma identidade gerenciada.
Pré-requisitos
- Assinatura do Azure: caso você não tenha uma assinatura do Azure, crie uma conta gratuita antes de começar.
Se você quiser usar a CLI do Azure para executar as etapas neste artigo:
Use o ambiente Bash no Azure Cloud Shell. Para obter mais informações, confira Início Rápido para Bash no Azure Cloud Shell.
Se preferir executar os comandos de referência da CLI localmente, instale a CLI do Azure. Para execuções no Windows ou no macOS, considere executar a CLI do Azure em um contêiner do Docker. Para obter mais informações, confira Como executar a CLI do Azure em um contêiner do Docker.
Se estiver usando uma instalação local, entre com a CLI do Azure usando o comando az login. Para concluir o processo de autenticação, siga as etapas exibidas no terminal. Para ver outras opções de entrada, confira Conectar-se com a CLI do Azure.
Quando solicitado, instale a extensão da CLI do Azure no primeiro uso. Para obter mais informações sobre extensões, confira Usar extensões com a CLI do Azure.
Execute az version para localizar a versão e as bibliotecas dependentes que estão instaladas. Para fazer a atualização para a versão mais recente, execute az upgrade.
Se você quiser usar o Azure PowerShell para executar as etapas neste artigo:
- Se você optar por usar o Azure PowerShell localmente:
- Instale a versão mais recente do módulo do Az PowerShell.
- Conecte-se à sua conta do Azure usando o cmdlet Connect-AzAccount.
- Se você optar por usar o Azure Cloud Shell:
- Confira Visão geral do Azure Cloud Shell para obter mais informações.
- Se você optar por usar o Azure PowerShell localmente:
1. Criar recursos do Azure
Antes de começar, você precisa criar um novo grupo de recursos, máquina virtual e instância do cofre de chaves.
Implantar uma máquina virtual
Implante uma máquina virtual no Azure. Você executa o código Go para criar um segredo no cofre de chaves do Azure a partir dessa máquina virtual.
Crie um grupo de recursos do Azure.
az group create --name go-on-azure --location eastus
Altere o parâmetro
--location
para o valor adequado para seu ambiente.Crie a máquina virtual do 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>
Substitua
<password>
pela sua senha.
Para saber mais sobre outros serviços que dão suporte a identidades gerenciadas, confira Serviços que dão suporte a identidades gerenciadas para recursos do Azure.
Implantar uma instância do cofre de chaves
Crie uma instância do cofre de chaves do Azure executando o seguinte comando:
az keyvault create --location eastus --name <keyVaultName> --resource-group go-on-azure --enable-rbac-authorization
Substitua <keyVaultName>
por um valor globalmente único.
2. Criar uma identidade gerenciada
Há suporte para dois tipos de identidades gerenciadas no Azure: atribuída pelo sistema e atribuída pelo usuário.
As identidades atribuídas pelo sistema são diretamente anexadas a um recurso do Azure e limitadas somente a esse recurso. As identidades atribuídas pelo usuário são recursos autônomos que podem ser atribuídos a um ou mais recursos do Azure.
Para saber mais sobre a diferença entre as identidades atribuídas pelo sistema e as atribuídas pelo usuário, confira Tipos de identidade gerenciada.
Escolha uma das seguintes opções:
- Opção 1: criar uma identidade atribuída pelo sistema
- Opção 2: criar uma identidade atribuída pelo usuário
Opção 1: criar uma identidade atribuída pelo sistema
Execute os seguintes comandos para criar uma identidade gerenciada atribuída pelo sistema:
az vm identity assign -g go-on-azure -n go-on-azure-vm
Opção 2: criar uma identidade atribuída pelo usuário
Execute os seguintes comandos para criar uma identidade gerenciada atribuída pelo usuário:
az identity create -g go-on-azure -n GoUserIdentity
az vm identity assign -g go-on-azure -n go-on-azure-vm --identities GoUserIdentity
Para saber mais, confira Configurar identidades gerenciadas para recursos do Azure em uma VM do Azure usando a CLI do Azure.
3. Atribuir uma função à identidade gerenciada
Depois que uma identidade gerenciada é criada, você atribui funções para conceder às permissões de identidade acesso a outros recursos do Azure. Neste tutorial, você atribui a função interna de à identidade gerenciada para que o aplicativo Go possa criar um segredo dentro da instância do cofre de Key Vault Secrets Officer
chaves.
Escolha uma das seguintes opções:
- Opção 1: atribuir uma função a uma identidade atribuída pelo sistema
- Opção 2: atribuir uma função a uma identidade atribuída pelo usuário
Opção 1: atribuir uma função a uma identidade atribuída pelo sistema
Execute os seguintes comandos para atribuir a função Key Vault Secrets Officer
à identidade gerenciada atribuída pelo sistema:
#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>
No segundo comando, substitua <keyVaultName>
pelo nome do cofre de chaves. No último comando, substitua <principalId>
e <keyVaultId>
pela saída dos dois primeiros comandos.
Opção 2: atribuir uma função a uma identidade atribuída pelo usuário
Execute os seguintes comandos para atribuir a função Key Vault Secrets Officer
à identidade gerenciada atribuída pelo usuário:
#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>
No segundo comando, substitua <keyVaultName>
pelo nome do cofre de chaves. No último comando, substitua <principalId>
e <keyVaultId>
pela saída dos dois primeiros comandos.
Para saber mais sobre funções internas no cofre de chaves do Azure, consulte Fornecer acesso a chaves, certificados e segredos do Cofre de Chaves com um controle de acesso baseado em função do Azure. Para saber mais sobre funções internas no Azure, consulte Funções internas do Azure.
4. Criar um segredo do cofre de chaves com a linguagem Go
Em seguida, execute o SSH na máquina virtual do Azure, instale o Go e crie o pacote Go.
Instalar o Go na VM do Azure
Obtenha o endereço IP público da máquina virtual do Azure.
az vm show -d -g go-on-azure -n go-on-azure-vm --query publicIps -o tsv
Execute SSH na VM do Azure.
ssh azureuser@<public-ip>
Substitua
<public-ip>
pelo endereço IP público de VM do Azure.Instalar o Go
sudo add-apt-repository ppa:longsleep/golang-backports; sudo apt update; sudo apt install golang-go -y
Criar o pacote Go
Crie um diretório com o nome
go-on-azure
em seu diretório base.mkdir ~/go-on-azure
Altere para o diretório
go-on-azure
.cd ~/go-on-azure
Execute
go mod init
para criar o arquivogo.mod
.go mod init go-on-azure
Execute
go get
para instalar os módulos necessários Go.go get "github.com/Azure/azure-sdk-for-go/sdk/azidentity" go get "github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets"
Crie um arquivo
main.go
e copie o código a seguir nele.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() }
Crie uma variável de ambiente chamada
KEY_VAULT_NAME
. Substitua<keyVaultName>
pelo nome da instância do cofre de chaves do Azure.export KEY_VAULT_NAME=<keyVaultName>
Execute
go run
o comando para criar um segredo do cofre de chaves.go run main.go
No sucesso, a saída é semelhante à seguinte:
Name: https://<keyVaultName>.vault.azure.net/secrets/quickstart-secret/0e0b941824c4493bb3b83045a31b2bf7, Value: createdWithGO
Você pode verificar se o segredo do cofre de chaves foi criado usando o Azure PowerShell, a CLI do Azure ou o portal do Azure.
Observação
Se você usar a CLI do Azure ou o Azure PowerShell, precisará garantir que sua conta de usuário do Azure receba uma função que permita ler segredos no cofre de chaves, como "Oficial de Segredos do Cofre de Chaves" ou "Usuário de Segredos do Cofre de Chaves".
5. Limpar os recursos
Se você não quiser mais usar os recursos do Azure criados neste artigo, é uma boa prática excluí-los. A exclusão de recursos não utilizados ajuda a evitar cobranças contínuas e mantém sua assinatura organizada. A maneira mais fácil de excluir os recursos usados neste tutorial é excluir o grupo de recursos.
az group delete --name go-on-azure --force-deletion-types Microsoft.Compute/virtualMachines --yes
O force-deletion-type
argumento informa ao comando para forçar a exclusão de VMs no grupo de recursos. O --yes
argumento diz ao comando para não pedir confirmação.
O comando anterior executa uma exclusão suave no cofre de chaves no grupo de recursos. Para removê-lo permanentemente da sua assinatura, digite o seguinte comando:
az keyvault purge --name <keyVaultName> --no-wait
Substitua <keyVaultName>
pelo nome do cofre de chaves.