Autenticación de Azure SDK para Go con una entidad de servicio
En este tutorial, usará el SDK de Azure para Go para autenticarse en Azure con una entidad de servicio de Azure mediante un secreto o un certificado.
Las entidades de servicio de Azure definen la directiva de acceso y los permisos en un inquilino de Microsoft Entra, lo que habilita las características principales, como la autenticación durante el inicio de sesión y la autorización durante el acceso a los recursos. Quitan la necesidad de usar cuentas personales para acceder a los recursos de Azure. Puede asignar a una entidad de servicio los permisos exactos necesarios para la aplicación y desarrollarlos con esos permisos, en lugar de usar una cuenta personal, que podría tener más privilegios en el inquilino que la aplicación. También puede usar entidades de servicio para aplicaciones hospedadas en el entorno local que necesitan usar recursos de Azure. El módulo Azure SDK para Go Azure Identity proporciona una manera cómoda de autenticarse en Azure con una entidad de servicio mediante variables de entorno y un secreto o un certificado.
Siga este tutorial para crear una instancia de Azure SDK para Go y autenticarse mediante una entidad de servicio.
Requisitos previos
- Suscripción de Azure: si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.
Go instalado: versión 1.18 o posterior
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, cree un nuevo grupo de recursos y una instancia del almacén de claves.
az group create --name go-on-azure --location eastus
az keyvault create --location eastus --name <keyVaultName> --resource-group go-on-azure --enable-rbac-authorization
Reemplace <keyVaultName>
por un nombre único global.
Anote la id
propiedad de la salida del az keyvault create
comando. Lo usará en la sección siguiente para definir el ámbito de la autorización para la entidad de servicio. El id
valor tiene el formato siguiente: /subscriptions/<subscriptionId>/resourceGroups/go-on-azure/providers/Microsoft.KeyVault/vaults/<keyVaultName>
.
2. Creación de una entidad de servicio de Azure
Use una de las técnicas siguientes para crear una entidad de servicio de Azure y asignarle el rol "Responsable de secretos de Key Vault" en el almacén de claves:
- Opción 1: Creación de una entidad de servicio de Azure con un secreto
- Opción 2: Creación de una entidad de servicio de Azure con un certificado
Para más información sobre las entidades de servicio de Azure, consulte Objeto de entidad de servicio.
Al asignar el rol "Oficial de secretos de Key Vault" a la entidad de servicio, se autoriza a crear, leer, actualizar y eliminar secretos en el almacén de claves. Para más información sobre los roles integrados para 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.
Opción 1: Creación de una entidad de servicio de Azure con un secreto
Ejecute los comandos siguientes para crear una entidad de servicio de Azure y asígnele el rol "Oficial de secretos de Key Vault" en el almacén de claves.
az ad sp create-for-rbac --name <servicePrincipalName> --role "Key Vault Secrets Officer" --scope <keyVaultId>
Reemplace <servicePrincipalName>
y <keyVaultId>
por los valores adecuados.
Anote las password
propiedades , tenant
y appId
de la salida. Los necesitará en la siguiente sección.
Después de la creación, no se puede recuperar la contraseña de la entidad de servicio. Si olvida la contraseña, puede restablecer las credenciales de la entidad de servicio.
Opción 2: Creación de una entidad de servicio de Azure con un certificado
Ejecute los siguientes comandos para crear una entidad de servicio de Azure que use un certificado y asígnele el rol "Oficial de secretos de Key Vault" en el almacén de claves.
az ad sp create-for-rbac --name <servicePrincipalName> --create-cert --role "Key Vault Secrets Officer" --scope <keyVaultId>
Reemplace <servicePrincipalName>
y <keyVaultId>
por los valores adecuados.
Anote las fileWithCertAndPrivateKey
propiedades , tenantId
y appId
de la salida. Los necesitará en la siguiente sección.
3. Autenticación en Azure con una entidad de servicio
DefaultAzureCredential
Mediante , puede evitar escribir código específico del entorno para autenticarse en Azure. Con DefaultAzureCredential
, puede configurar las credenciales de la entidad de servicio mediante la definición de variables de entorno.
Elija una de las siguientes opciones para configurar las credenciales de la entidad de servicio:
Para más información sobre DefaultAzureCredential
, consulte Autenticación de Azure con Azure SDK para Go
Opción 1: Autenticación con un secreto
Defina las siguientes variables de entorno:
Nombre de la variable | Valor |
---|---|
AZURE_CLIENT_ID |
Identificador de aplicación de una entidad de servicio de Azure |
AZURE_TENANT_ID |
Identificador del inquilino de Microsoft Entra de la aplicación |
AZURE_CLIENT_SECRET |
Contraseña de la entidad de servicio de Azure |
export AZURE_TENANT_ID="<active_directory_tenant_id>"
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_CLIENT_SECRET="<service_principal_password>"
Opción 2: Autenticación con un certificado
Nombre de la variable | Valor |
---|---|
AZURE_CLIENT_ID |
Identificador de aplicación de una entidad de servicio de Azure |
AZURE_TENANT_ID |
Identificador del inquilino de Microsoft Entra de la aplicación |
AZURE_CLIENT_CERTIFICATE_PATH |
Ruta de acceso a un archivo de certificado PEM o PKCS12, incluida la clave privada. Si ha seguido los pasos de la CLI de Azure, el archivo no está protegido con contraseña. Si ha seguido los pasos de Azure PowerShell, el archivo está protegido con contraseña y también tendrá que establecer la AZURE_CLIENT_CERTIFICATE_PASSWORD variable de entorno. |
AZURE_CLIENT_CERTIFICATE_PASSWORD |
La contraseña que especificó al crear la entidad de servicio. Solo es necesario si ha seguido los pasos de Azure PowerShell. |
export AZURE_TENANT_ID="<active_directory_tenant_id>"
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_CLIENT_CERTIFICATE_PATH="<azure_client_certificate_path>"
Uso de DefaultAzureCredential para autenticar un cliente de recursos
Después de establecer las variables de entorno, puede usar DefaultAzureCredential
en el módulo Azure Identity para autenticar un cliente de recursos. En el código siguiente se muestra cómo obtener una instancia de DefaultAzureCredential
.
cred, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
log.Fatalf("failed to obtain a credential: %v", err)
}
4. Creación de un secreto de almacén de claves con Go
Use el ejemplo de código siguiente para comprobar que la entidad de servicio se autentica en Azure y tiene los permisos adecuados para el almacén de claves.
Cree un directorio denominado
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 llamado
main.go
y agregue el siguiente código.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(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) } params := azsecrets.SetSecretParameters{Value: &value} resp, err := client.SetSecret(context.TODO(), name, 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("ExamplePassword", "hVFkk965BuUv") }
Cree una variable de entorno llamada
KEY_VAULT_NAME
. Establezca el valor de la variable de entorno en el nombre de la instancia de Azure Key Vault que creó previamente.export KEY_VAULT_NAME=<keyVaultName>
Reemplace por
<keyVaultName>
el nombre de la instancia de Azure Key Vault.Ejecute el
go run
comando para crear el nuevo 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/ExamplePassword/1e697f71d0014761a65641226f2f057b, Value: hVFkk965BuUv
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 --yes
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.
Por último, debe quitar el registro de aplicaciones y la entidad de servicio.
az ad app delete --id <servicePrincipalAppId>
Reemplace por <servicePrincipalAppId>
el identificador de aplicación de la entidad de servicio.