Autenticación con Azure SDK para Go mediante una identidad administrada
En este tutorial, configurará una máquina virtual de Azure con una identidad administrada para autenticarse en Azure mediante el SDK de Azure para Go.
Las identidades administradas permiten que no tenga que administrar las credenciales, ya que proporcionan una identidad para el recurso de Azure. Los permisos asignados a la identidad conceden al recurso acceso a otros recursos de Azure que admiten identidades administradas, lo que elimina la necesidad de pasar credenciales en la aplicación. Puede usar identidades administradas para autenticar y autorizar aplicaciones hospedadas en Azure con otros recursos de Azure.
Siga este tutorial para asignar una identidad administrada a una máquina virtual y autenticarse en Azure mediante una identidad administrada.
Requisitos previos
- Suscripción de Azure: si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.
Si desea usar la CLI de Azure para ejecutar los pasos descritos en este artículo:
Use el entorno de Bash en Azure Cloud Shell. Para más información, consulte Inicio rápido para Bash en Azure Cloud Shell.
Si prefiere ejecutar comandos de referencia de la CLI localmente, instale la CLI de Azure. Si utiliza Windows o macOS, considere la posibilidad de ejecutar la CLI de Azure en un contenedor Docker. Para más información, vea Ejecución de la CLI de Azure en un contenedor de Docker.
Si usa una instalación local, inicie sesión en la CLI de Azure mediante el comando az login. Siga los pasos que se muestran en el terminal para completar el proceso de autenticación. Para ver otras opciones de inicio de sesión, consulte Inicio de sesión con la CLI de Azure.
En caso de que se le solicite, instale las extensiones de la CLI de Azure la primera vez que la use. Para más información sobre las extensiones, consulte Uso de extensiones con la CLI de Azure.
Ejecute az version para buscar cuál es la versión y las bibliotecas dependientes que están instaladas. Para realizar la actualización a la versión más reciente, ejecute az upgrade.
Si desea usar Azure PowerShell para ejecutar los pasos descritos en este artículo:
- Si opta por usar Azure PowerShell en un entorno local:
- Instale la versión más reciente del módulo Az de PowerShell.
- Conéctese a su cuenta de Azure mediante el cmdlet Connect-AzAccount.
- Si decide usar Azure Cloud Shell:
- Para más información, consulte Introducción a Azure Cloud Shell.
- Si opta por usar Azure PowerShell en un entorno local:
1. Creación de recursos de Azure
Antes de empezar, debe crear un nuevo grupo de recursos, una máquina virtual y una instancia del almacén de claves.
Implementación de una máquina virtual
Implemente una máquina virtual en Azure. Ejecute el código de Go para crear un secreto en Azure Key Vault desde esa máquina virtual.
Cree un grupo de recursos de Azure.
az group create --name go-on-azure --location eastus
Cambie el parámetro
--location
al valor adecuado para su entorno.Cree la máquina virtual de 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>
Reemplace
<password>
por su contraseña.
Para más información sobre otros servicios que admiten identidades administradas, consulte Servicios que admiten identidades administradas para recursos de Azure.
Implementación de una instancia de Key Vault
Para crear una nueva instancia de Azure Key Vault ejecute el comando siguiente:
az keyvault create --location eastus --name <keyVaultName> --resource-group go-on-azure --enable-rbac-authorization
Reemplace <keyVaultName>
por un nombre único global.
2. Creación de una entidad administrada
Azure admite dos tipos de identidades administradas: las asignadas por el sistema y las asignadas por el usuario.
Las identidades asignadas por el sistema se asocian directamente a un recurso de Azure y se limitan únicamente a ese recurso. Las identidades asignadas por el usuario son recursos independientes que se pueden asignar a uno o varios recursos de Azure.
Para más información sobre la diferencia entre las identidades asignadas por el sistema y las asignadas por el usuario, consulte Tipos de identidad administrada.
Elija una de las siguientes opciones:
- Opción 1: Crear una identidad administrada asignada por el sistema.
- Opción 2: Crear una identidad administrada asignada por el usuario.
Opción 1: Crear una identidad administrada asignada por el sistema.
Ejecute los siguientes comandos para crear una identidad asignada por el sistema:
az vm identity assign -g go-on-azure -n go-on-azure-vm
Opción 2: Crear una identidad administrada asignada por el usuario.
Ejecute los siguientes comandos para crear una identidad administrada asignada por el usuario:
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 más información, consulte Configuración de identidades administradas para recursos de Azure en una VM de Azure mediante la CLI de Azure.
3. Asignación de un rol a la identidad administrada
Después de crear una identidad administrada, asigne roles para conceder los permisos de identidad para acceder a otro recurso de Azure. En este tutorial, asignará el rol integrado de Key Vault Secrets Officer
a la identidad administrada para que la aplicación Go pueda crear un secreto dentro de la instancia del almacén de claves.
Elija una de las siguientes opciones:
- Opción 1: Asignar un rol a una identidad asignada por el sistema
- Opción 2: Asignar un rol a una identidad asignada por el usuario
Opción 1: Asignar un rol a una identidad asignada por el sistema
Ejecute los siguientes comandos para asignar el rol Key Vault Secrets Officer
a la identidad administrada asignada por el 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>
En el segundo comando, reemplace <keyVaultName>
por el nombre del almacén de claves. En el último comando, reemplace <principalId>
y <keyVaultId>
por la salida de los dos primeros comandos.
Opción 2: Asignar un rol a una identidad asignada por el usuario
Ejecute los comandos siguientes para asignar el rol Key Vault Secrets Officer
a la identidad administrada asignada por el usuario:
#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>
En el segundo comando, reemplace <keyVaultName>
por el nombre del almacén de claves. En el último comando, reemplace <principalId>
y <keyVaultId>
por la salida de los dos primeros comandos.
Para más información sobre los roles integrados en Azure Key Vault, consulte Proporcionar acceso a claves, certificados y secretos de Key Vault con un control de acceso basado en rol de Azure. Para más información sobre los roles integrados en Azure, consulte Roles integrados de Azure.
4. Creación de un secreto de almacén de claves con Go
A continuación, inicie sesión mediante SSH en la máquina virtual de Azure, instale Go y cree el paquete de Go.
Instalación de Go en la máquina virtual de Azure
Obtenga la dirección IP pública de la máquina virtual de Azure.
az vm show -d -g go-on-azure -n go-on-azure-vm --query publicIps -o tsv
Conéctese mediante SSH a la máquina virtual de Azure.
ssh azureuser@<public-ip>
Reemplace
<public-ip>
por la dirección IP pública de la máquina virtual de Azure.Instalación de Go
sudo add-apt-repository ppa:longsleep/golang-backports; sudo apt update; sudo apt install golang-go -y
Creación del paquete de Go
Cree un nuevo directorio con el nombre
go-on-azure
en el directorio principal.mkdir ~/go-on-azure
Cambie al directorio
go-on-azure
.cd ~/go-on-azure
Ejecute
go mod init
para crear el archivogo.mod
.go mod init go-on-azure
Ejecute
go get
para instalar los módulos de Go necesarios.go get "github.com/Azure/azure-sdk-for-go/sdk/azidentity" go get "github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets"
Cree un archivo
main.go
y copie el siguiente código en él.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() }
Cree una variable de entorno llamada
KEY_VAULT_NAME
. Reemplace<keyVaultName>
por el nombre de la instancia de Azure Key Vault.export KEY_VAULT_NAME=<keyVaultName>
Ejecute
go run
el comando para crear un secreto del almacén de claves.go run main.go
Si se ejecuta correctamente, la salida es similar a la siguiente:
Name: https://<keyVaultName>.vault.azure.net/secrets/quickstart-secret/0e0b941824c4493bb3b83045a31b2bf7, Value: createdWithGO
Puede comprobar que el secreto del almacén de claves se creó mediante Azure PowerShell, la CLI de Azure o Azure Portal.
Nota:
Si usa la CLI de Azure o Azure PowerShell, debe asegurarse de que a su cuenta de usuario de Azure se le asigna un rol que le permita leer secretos en el almacén de claves, como "Responsable de secretos de Key Vault" o "Usuario de secretos de Key Vault".
5. Limpieza de recursos
Si ya no desea usar los recursos de Azure que creó en este artículo, se recomienda eliminarlos. La eliminación de recursos sin usar le ayuda a evitar incurrir en cargos continuos y a mantener la suscripción desordenada. La manera más fácil de eliminar los recursos que usó en este tutorial es eliminar el grupo de recursos.
az group delete --name go-on-azure --force-deletion-types Microsoft.Compute/virtualMachines --yes
El force-deletion-type
argumento indica al comando que forzar la eliminación de máquinas virtuales en el grupo de recursos. El --yes
argumento indica al comando que no solicite confirmación.
El comando anterior realiza una eliminación temporal en el almacén de claves del grupo de recursos. Para quitarlo permanentemente de la suscripción, escriba el siguiente comando:
az keyvault purge --name <keyVaultName> --no-wait
Reemplace <keyVaultName>
por el nombre del almacén de claves.