Cadenas de credenciales en la biblioteca cliente de Identidad de Azure para Go
La biblioteca cliente de Identidad de Azure proporciona credenciales
Funcionamiento de una credencial encadenada
En tiempo de ejecución, una cadena de credenciales intenta autenticarse mediante la primera credencial de la secuencia. Si esa credencial no puede adquirir un token de acceso, se intenta realizar la siguiente credencial de la secuencia, etc., hasta que se obtenga correctamente un token de acceso. En el diagrama de secuencia siguiente se muestra este comportamiento:
¿Por qué usar cadenas de credenciales?
Una credencial encadenada puede ofrecer las siguientes ventajas:
reconocimiento del entorno: selecciona automáticamente la credencial más adecuada en función del entorno en el que se ejecuta la aplicación. Sin él, tendría que escribir código como este:
// Set up credential based on environment (Azure or local development) if os.Getenv("WEBSITE_HOSTNAME") != "" { clientID := azidentity.ClientID("abcd1234-...") opts := azidentity.ManagedIdentityCredentialOptions{ID: clientID} cred, err := azidentity.NewManagedIdentityCredential(&opts) if err != nil { // TODO: handle error } } else { // Use Azure CLI Credential credential, err = azidentity.NewAzureCLICredential(nil) if err != nil { // TODO: handle error } }
transiciones sin problemas: la aplicación puede pasar del desarrollo local al entorno de ensayo o producción sin cambiar el código de autenticación.
Resistencia mejorada: incluye un mecanismo de reserva que pasa a la siguiente credencial cuando la anterior no puede adquirir un token de acceso.
Cómo elegir una credencial encadenada
Con Go, hay dos opciones para el encadenamiento de credenciales:
- Usa una cadena preconfigurada: utiliza la cadena preconfigurada implementada por el tipo
DefaultAzureCredential
. Para este enfoque, consulte la sección Información general sobre DefaultAzureCredential. - Crear una cadena de credenciales personalizada: comience con una cadena vacía e incluya solo lo que necesita. Para este enfoque, consulte la sección Información general sobre ChainedTokenCredential.
Introducción a DefaultAzureCredential
DefaultAzureCredential es una cadena preconfigurada de credenciales fundamentada. Está diseñado para admitir muchos entornos, junto con los flujos de autenticación y las herramientas de desarrollo más comunes. En forma gráfica, la cadena subyacente tiene este aspecto:
Orden en el que DefaultAzureCredential
intenta las credenciales.
compra | Credential: | Descripción |
---|---|---|
1 | Entorno | Lee una colección de variables de entorno para determinar si una entidad de servicio de aplicación (usuario de aplicación) está configurada para la aplicación. Si es así, DefaultAzureCredential usa estos valores para autenticar la aplicación en Azure. Este método se usa con más frecuencia en entornos de servidor, pero también se puede usar al desarrollar localmente. |
2 | Identidad de carga de trabajo | Si la aplicación se implementa en un host de Azure con la identidad de carga de trabajo habilitada, autentíquela. |
3 | Identidad Administrada | Si la aplicación se implementa en un host de Azure con identidad administrada habilitada, autentíquela en Azure mediante esa identidad administrada. |
4 | CLI de Azure | Si el desarrollador se autentica en Azure mediante el comando az login de la CLI de Azure, autentíquela en Azure con esa misma cuenta. |
5 | CLI para desarrolladores de Azure | Si el desarrollador se autentica en Azure mediante el comando azd auth login de la CLI para desarrolladores de Azure, autentíquese con esa cuenta. |
En su forma más sencilla, puede usar la versión sin parámetros de DefaultAzureCredential
de la siguiente manera:
import (
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
)
// create a credential
credential, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
// TODO: handle error
}
// create a Blob service client
accountURL := "https://<my_account_name>.blob.core.windows.net"
client, err := azblob.NewClient(accountURL, credential, nil)
if err != nil {
// TODO: handle error
}
Introducción a ChainedTokenCredential
ChainedTokenCredential es una cadena vacía a la que agregas credenciales para satisfacer las necesidades de la aplicación. Por ejemplo:
managed, err := azidentity.NewManagedIdentityCredential(nil)
if err != nil {
// handle error
}
azCLI, err := azidentity.NewAzureCLICredential(nil)
if err != nil {
// handle error
}
chain, err := azidentity.NewChainedTokenCredential([]azcore.TokenCredential{managed, azCLI}, nil)
if err != nil {
// handle error
}
El ejemplo de código anterior crea una cadena de credenciales adaptada formada por dos credenciales. Se intenta ManagedIdentityCredential
primero, seguido de AzureCliCredential
, si es necesario. En forma gráfica, la cadena tiene el siguiente aspecto:
Sugerencia
Para mejorar el rendimiento, optimice el orden de credenciales en ChainedTokenCredential
para el entorno de producción. Las credenciales diseñadas para su uso en el entorno de desarrollo local deben agregarse en último lugar.
Guía de uso para DefaultAzureCredential
DefaultAzureCredential
es sin duda la forma más sencilla de comenzar a trabajar con la biblioteca cliente de Azure Identity, pero con esa comodidad conlleva ciertos compromisos. Una vez que implemente la aplicación en Azure, debe comprender los requisitos de autenticación de la aplicación. Por ese motivo, considere encarecidamente la posibilidad de pasar de DefaultAzureCredential
a una de las siguientes soluciones:
- Una implementación de credencial específica, como
ManagedIdentityCredential
. - Una implementación
ChainedTokenCredential
simplificada optimizada para el entorno de Azure donde se ejecuta tu aplicación.
Este es el motivo:
- Desafíos de Depuración: Cuando se produce un error en la autenticación, puede resultar desafiante depurar e identificar la credencial problemática. Debe habilitar el registro para ver la progresión de una credencial a la siguiente y el estado de éxito o error de cada una. Para obtener más información, consulte Depuración de una credencial encadenada.
- sobrecarga de rendimiento: el proceso de probar secuencialmente varias credenciales puede suponer una sobrecarga de rendimiento. Por ejemplo, cuando se ejecuta en una máquina de desarrollo local, la identidad administrada no está disponible. Por lo tanto,
ManagedIdentityCredential
siempre falla en el entorno de desarrollo local, a menos que se deshabilite explícitamente a través de su propiedad con prefijoexclude
correspondiente. - comportamiento imprevisible:
DefaultAzureCredential
comprueba la presencia de determinadas variables de entorno . Es posible que alguien pueda agregar o modificar estas variables de entorno en el nivel de sistema en el equipo host. Esos cambios se aplican globalmente y, por tanto, modifican el comportamiento deDefaultAzureCredential
en tiempo de ejecución en cualquier aplicación que se ejecute en esa máquina.
Depuración de una credencial encadenada
Para diagnosticar un problema inesperado o comprender lo que hace una credencial encadenada, habilite el registro en la aplicación. Opcionalmente, filtre los registros solo a esos eventos emitidos desde la biblioteca cliente de identidades de Azure. Por ejemplo:
import azlog "github.com/Azure/azure-sdk-for-go/sdk/azcore/log"
// print log output to stdout
azlog.SetListener(func(event azlog.Event, s string) {
fmt.Println(s)
})
// include only azidentity credential logs
azlog.SetEvents(azidentity.EventAuthentication)
Para obtener instrucciones sobre cómo resolver errores de tipos de credenciales específicos, consulte la guía de solución de problemas de .