Autenticação com o SDK do Azure para 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 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. Eliminando a necessidade de passar credenciais para o seu aplicativo.
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.
- Go instalado: Versão 1.18 ou superior
1. Configure seu ambiente
Antes de começar, você precisará configurar seu ambiente.
Implementar 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 a partir dessa máquina virtual.
Criar um grupo de recursos do Azure.
az group create --name go-on-azure --location eastus
Altere o parâmetro para o
--location
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:ubuntuserver:19.04: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
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 <UserIdentityId>
Substitua <UserIdentityId>
pelo ID da identidade do usuário gerenciado.
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ê atribuirá 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 Contributor
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 Contributor
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
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 Key Vault Contributor
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 go-on-azure-kv --query id -o tsv
az role assignment create --assignee '<principalId>' --role 'Key Vault Contributor' --scope '<keyVaultId>'
Para saber mais sobre funções internas, 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.mkidr ~/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/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/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 como o nome do Cofre de Chaves do Azure criado anteriormente. Substitua <KeyVaultName>
pelo nome da sua instância do Azure Key Vault.
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ó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