Autenticação com o SDK do Azure para linguagem Go usando uma identidade gerenciada
Neste tutorial, você configurará 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. Remover a necessidade de você passar credenciais para seu aplicativo.
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.
- Go instalado: versão 1.18 ou superior
1. Configurar seu ambiente
Antes de começar, você precisará configurar seu ambiente.
Implantar uma máquina virtual
Implante uma máquina virtual no Azure. Você executará o código Go para criar um segredo no cofre de chaves do Azure 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:ubuntuserver:19.04: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
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 <UserIdentityId>
Substitua <UserIdentityId>
pela ID da identidade de usuário gerenciada.
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ê atribuirá a função interna do Key Vault Contributor
à identidade gerenciada para que o aplicativo Go possa criar um segredo dentro da instância do cofre de 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 Contributor
à 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
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>'
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 Contributor
à 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 go-on-azure-kv --query id -o tsv
az role assignment create --assignee '<principalId>' --role 'Key Vault Contributor' --scope '<keyVaultId>'
Para saber mais sobre as funções internas, confira 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.mkidr ~/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/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/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() }
Antes de executar o código, crie uma variável de ambiente chamada KEY_VAULT_NAME
. Defina o valor da variável de ambiente para o nome do Azure Key Vault criado anteriormente. Substitua pelo <KeyVaultName>
nome da instância do Cofre de Chaves do Azure.
export KEY_VAULT_NAME=<KeyVaultName>
Em seguida, execute go run
o comando para criar um segredo do cofre de chaves.
go run main.go
Verifique se o segredo do cofre de chaves foi criado usando o Azure PowerShell, a CLI do Azure ou o portal do Azure.
Próximas etapas
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de