Autenticação com o SDK do Azure para 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 gerenciar credenciais fornecendo uma identidade diretamente a 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, removendo 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 no Azure usando uma identidade gerenciada.
Pré-requisitos
- Subscrição do Azure: se não tem uma subscrição 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, consulte Guia de início rápido para Bash no Azure Cloud Shell.
Se preferir executar comandos de referência da CLI localmente, instale a CLI do Azure. Se estiver a utilizar o Windows ou macOS, considere executar a CLI do Azure num contentor Docker. Para obter mais informações, consulte Como executar a CLI do Azure em um contêiner do Docker.
Se estiver a utilizar uma instalação local, inicie sessão no CLI do Azure ao utilizar o comando az login. Para concluir o processo de autenticação, siga os passos apresentados no seu terminal. Para outras opções de entrada, consulte Entrar com a CLI do Azure.
Quando solicitado, instale a extensão da CLI do Azure na primeira utilização. Para obter mais informações sobre as extensões, veja Utilizar extensões com o CLI do Azure.
Execute o comando az version para localizar a versão e as bibliotecas dependentes instaladas. Para atualizar para a versão mais recente, execute o comando 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 Az PowerShell.
- Conecte-se à sua conta do Azure usando o cmdlet Connect-AzAccount .
- Se você optar por usar o Azure Cloud Shell:
- Consulte 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.
Implementar uma máquina virtual
Implante uma máquina virtual no Azure. Execute o código Go para criar um segredo no cofre de chaves do Azure a partir dessa máquina virtual.
Criar um grupo de recursos do Azure.
az group create --name go-on-azure --location eastus
Altere o
--location
parâmetro para o valor apropriado 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 a
<password>
sua palavra-passe.
Para saber mais sobre outros serviços que dão suporte a identidades gerenciadas, consulte Serviços que dão suporte a identidades gerenciadas para recursos do Azure.
Implantar uma instância do cofre de chaves
Crie uma nova 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 nome globalmente exclusivo.
2. Crie uma identidade gerenciada
Dois tipos de identidades gerenciadas são suportados no Azure; atribuído pelo sistema e atribuído pelo usuário.
As identidades atribuídas pelo sistema são diretamente anexadas a um recurso do Azure e limitadas apenas 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 atribuído pelo sistema e atribuído pelo usuário, confira Tipos de identidade gerenciada.
Escolha uma das seguintes opções:
- Opção 1: Criar uma identidade atribuída ao sistema
- Opção 2: Criar uma identidade atribuída pelo usuário
Opção 1: Criar uma identidade atribuída ao sistema
Execute os seguintes comandos para criar uma identidade gerenciada atribuída ao 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. Atribua uma função à identidade gerenciada
Depois que uma identidade gerenciada é criada, você atribui funções para conceder as permissões de identidade para acessar outro recurso 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 Key Vault Secrets Officer
função à identidade gerenciada atribuída ao 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 Key Vault Secrets Officer
função à 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. Crie um segredo do cofre de chaves com o Go
Em seguida, 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
SSH na VM do Azure.
ssh azureuser@<public-ip>
Substitua
<public-ip>
pelo endereço IP público da 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
Faça um novo diretório com o nome
go-on-azure
no seu diretório pessoal.mkdir ~/go-on-azure
Mude para o
go-on-azure
diretório.cd ~/go-on-azure
Execute
go mod init
para criar ogo.mod
arquivo.go mod init go-on-azure
Execute
go get
para instalar os módulos Go necessários.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
main.go
arquivo e copie o código a seguir para ele.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 sua 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 da chave foi criado usando o Azure PowerShell, a CLI do Azure ou o portal do Azure.
Nota
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 "Key Vault Secrets Officer" ou "Key Vault Secrets User".
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 eliminação de recursos não utilizados ajuda-o a evitar incorrer em cobranças contínuas e mantém a sua subscrição 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 diz 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.
Próximos passos
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários