Autenticação do SDK do Azure para Go com uma entidade de serviço
Neste tutorial, você usará o SDK do Azure para Go para autenticar no Azure com uma entidade de serviço do Azure usando um segredo ou um certificado.
As entidades de serviço do Azure definem a política de acesso e as permissões em um locatário do Microsoft Entra. Habilitando recursos principais, como autenticação durante o logon e autorização durante o acesso a recursos. Removendo a necessidade de usar contas pessoais para acessar recursos do Azure. O módulo Identidade do Azure SDK for Go fornece uma maneira conveniente de autenticar com o Azure usando uma entidade de serviço usando variáveis de ambiente, um segredo ou um certificado
Siga este tutorial para criar e autenticar com o SDK do Azure para Go usando uma entidade de serviço.
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, crie um novo grupo de recursos e uma nova instância do cofre de chaves.
az group create --name go-on-azure --location eastus
az keyvault create --location eastus --name `<keyVaultName>` --resource-group go-on-azure
Substitua <keyVaultName>
por um nome globalmente exclusivo. Além disso, tome nota da saída, você a usará para o escopo da Id
conta de serviço.
2. Criar uma entidade de serviço do Azure
Use uma das seguintes técnicas para criar uma entidade de serviço do Azure:
- Opção 1: Criar uma entidade de serviço do Azure com um segredo
- Opção 2: Criar uma entidade de serviço do Azure com um certificado
Para saber mais sobre entidades de serviço do Azure, consulte Objeto principal de serviço.
Opção 1: Criar uma entidade de serviço do Azure com um segredo
Execute os seguintes comandos para criar uma entidade de serviço do Azure.
az ad sp create-for-rbac --name `<servicePrincipalName>` --role Contributor --scope <resourceGroupId>
Substitua <servicePrincipalName>
e <resourceGroupId>
com os valores apropriados.
Certifique-se de copiar o valor da senha - ele não pode ser recuperado. Se você esquecer a senha, redefina as credenciais da entidade de serviço.
Opção 2: Criar uma entidade de serviço do Azure com um certificado
az ad sp create-for-rbac --name <servicePrincipal> --create-cert --role Contributor --scope <resourceGroupId>
Substitua <servicePrincipalName>
e <resourceGroupId>
com os valores apropriados.
3. Autenticar no Azure com uma entidade de serviço
Usando o DefaultAzureCredential
, você pode evitar escrever código específico do ambiente para autenticar no Azure.
Use o DefaultAzureCredential
para configurar suas credenciais de entidade de serviço definindo variáveis de ambiente.
Escolha uma das seguintes opções para configurar suas credenciais da entidade de serviço:
Para saber mais sobre o , confira a autenticação do Azure com o DefaultAzureCredential
SDK do Azure para Go
Opção 1: Autenticar com um segredo
Defina as seguintes variáveis de ambiente:
Nome da variável | valor |
---|---|
AZURE_CLIENT_ID |
ID do aplicativo de uma entidade de serviço do Azure |
AZURE_TENANT_ID |
ID do locatário do Microsoft Entra do aplicativo |
AZURE_CLIENT_SECRET |
Senha da entidade de serviço do Azure |
export AZURE_TENANT_ID="<active_directory_tenant_id"
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_CLIENT_SECRET="<service_principal_password>"
Opção 2: Autenticar com um certificado
Nome da variável | valor |
---|---|
AZURE_CLIENT_ID |
ID do aplicativo de uma entidade de serviço do Azure |
AZURE_TENANT_ID |
ID do locatário do Microsoft Entra do aplicativo |
AZURE_CLIENT_CERTIFICATE_PATH |
Caminho para um arquivo de certificado, incluindo chave privada (sem proteção por senha) |
export AZURE_TENANT_ID="<active_directory_tenant_id"
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_CLIENT_CERTIFICATE_PATH="<azure_client_certificate_path>"
Use DefaultAzureCredential para autenticar ResourceClient
Use a NewDefaultAzureCredential
função do módulo Identidade do Azure para autenticar um ResourceClient.
cred, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
log.Fatalf("failed to obtain a credential: %v", err)
}
4. Código de exemplo
Use o exemplo de código a seguir para verificar se sua entidade de serviço se autentica no Azure e tem as permissões apropriadas para o grupo de recursos.
Crie um novo diretório chamado
go-on-azure
em 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/keyvault/azsecrets"
Crie um arquivo chamado
main.go
e adicione o código a seguir.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(name, value string) { keyVaultName := os.Getenv("KEY_VAULT_NAME") 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(), name, value, 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("ExamplePassword", "hVFkk965BuUv") }
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.export KEY_VAULT_NAME=<KeyVaultName>
Substitua
<KeyVaultName>
pelo nome da sua instância do Azure Key Vault.Execute o comando para criar o
go run
novo segredo do cofre de chaves.go run main.go
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