Conexiones sin contraseña para servicios de Azure

Nota:

Las conexiones sin contraseña son una característica independiente del lenguaje que abarca varios servicios de Azure. Aunque la documentación actual se centra en algunos idiomas y servicios, actualmente estamos en proceso de generar documentación adicional para otros idiomas y servicios.

En este artículo se describen los desafíos de seguridad con las contraseñas y se presentan las conexiones sin contraseña para los servicios de Azure.

Desafíos de seguridad con contraseñas y secretos

Las contraseñas y las claves secretas deben usarse con precaución y los desarrolladores nunca deben colocarlas en una ubicación no segura. Muchas aplicaciones se conectan a servicios de bases de datos de back-end, caché, mensajería y eventos mediante nombres de usuario, contraseñas y claves de acceso. Si se expone, estas credenciales podrían usarse para obtener acceso no autorizado a información confidencial, como un catálogo de ventas que creó para una próxima campaña o datos de clientes que deben ser privados.

La inserción de contraseñas en una propia aplicación presenta un riesgo de seguridad enorme por muchas razones, incluida la detección a través de un repositorio de código. Muchos desarrolladores externalizan estas contraseñas mediante variables de entorno para que las aplicaciones puedan cargarlas desde diferentes entornos. Sin embargo, esto solo cambia el riesgo del propio código a un entorno de ejecución. Cualquier persona que obtenga acceso al entorno puede robar contraseñas, lo que a su vez aumenta el riesgo de filtración de datos.

En el siguiente ejemplo de código se muestra cómo conectarse a Azure Storage mediante una clave de cuenta de almacenamiento. Muchos desarrolladores se inclinan hacia esta solución porque se sienten familiarizados con las opciones con las que han trabajado en el pasado, aunque no sea una solución ideal. Si la aplicación usa actualmente claves de acceso, considere la posibilidad de migrar a conexiones sin contraseña.

// Connection using secret access keys
BlobServiceClient blobServiceClient = new(
    new Uri("https://<storage-account-name>.blob.core.windows.net"),
    new StorageSharedKeyCredential("<storage-account-name>", "<your-access-key>"));

Los desarrolladores deben ser diligentes para no exponer nunca estos tipos de claves o secretos en una ubicación no segura. Muchas empresas tienen estrictos requisitos de seguridad para conectarse a los servicios de Azure sin exponer contraseñas a desarrolladores, operadores ni a nadie más. A menudo usan un almacén para almacenar y cargar contraseñas en aplicaciones y reducir aún más el riesgo agregando procedimientos y requisitos de rotación de contraseñas. Este enfoque, a su vez, aumenta la complejidad operativa y, en ocasiones, conduce a interrupciones de conexión de aplicaciones.

Conexiones sin contraseña y Confianza cero

Ahora puede usar conexiones sin contraseña en las aplicaciones para conectarse a servicios basados en Azure sin necesidad de rotar contraseñas. En algunos casos, todo lo que necesita es la configuración: no se requiere ningún código nuevo. Confianza cero usa el principio de "nunca confiar, comprobar siempre y sin credenciales". Esto significa proteger todas las comunicaciones confiando en máquinas o usuarios solo después de comprobar la identidad y antes de concederles acceso a los servicios back-end.

La opción de autenticación recomendada para conexiones seguras y sin contraseña es usar identidades administradas y el control de acceso basado en rol (RBAC) de Azure en combinación. Con este enfoque, no es necesario realizar un seguimiento manual y administrar muchos secretos diferentes para identidades administradas, ya que Azure controla de forma segura estas tareas de forma segura.

Puede configurar conexiones sin contraseña a los servicios de Azure mediante Service Conectar or o puede configurarlas manualmente. El conector de servicio permite identidades administradas en servicios de hospedaje de aplicaciones como Azure Spring Apps, Azure App Service y Azure Container Apps. Service Conectar or también configura los servicios back-end con conexiones sin contraseña mediante identidades administradas y RBAC de Azure, e hidrata las aplicaciones con la información de conexión necesaria.

Si inspecciona el entorno en ejecución de una aplicación configurada para conexiones sin contraseña, puede ver el cadena de conexión completo. El cadena de conexión lleva, por ejemplo, una dirección del servidor de bases de datos, un nombre de base de datos y una instrucción para delegar la autenticación en un complemento de autenticación de Azure, pero no contiene contraseñas ni secretos.

En el vídeo siguiente se muestran las conexiones sin contraseña desde aplicaciones a servicios de Azure, mediante aplicaciones Java como ejemplo. La cobertura similar para otros idiomas está disponible.


Introducción a DefaultAzureCredential

Las conexiones sin contraseña a los servicios de Azure a través de Microsoft Entra ID y el control de acceso basado en rol (RBAC) se pueden implementar mediante DefaultAzureCredential desde las bibliotecas cliente de Identidad de Azure.

Importante

Algunos lenguajes deben implementar DefaultAzureCredential en su código de manera explícita, mientras que otros usan DefaultAzureCredential internamente a través de complementos o controladores subyacentes.

DefaultAzureCredential admite varios métodos de autenticación y determina automáticamente qué se debe usar en tiempo de ejecución. Este enfoque permite que la aplicación use diferentes métodos de autenticación en distintos entornos (desarrollo local frente a producción) sin implementar código específico del entorno.

El orden y las ubicaciones en las que DefaultAzureCredential busca las credenciales varía entre los idiomas:

Por ejemplo, cuando se trabaja en modo local con .NET, DefaultAzureCredential se autentica normalmente con la cuenta que el desarrollador ha usado para iniciar sesión en Visual Studio, la CLI de Azure o Azure PowerShell. Cuando la aplicación se implemente en Azure, DefaultAzureCredential detecta y usa automáticamente la identidad administrada del servicio de hospedaje asociado, como Azure App Service. No se necesitan cambios de código para esta transición.

Nota

Una identidad administrada proporciona una identidad de seguridad para representar una aplicación o servicio. La plataforma Azure administra la identidad y no requiere que aprovisione ni gire secretos. Puede obtener más información sobre las identidades administradas en la documentación de información general.

El siguiente ejemplo de código muestra cómo conectarse a Service Bus usando conexiones sin contraseña. En otra documentación se describe cómo migrar a esta configuración para un servicio específico con más detalle. Una aplicación .NET puede pasar una instancia de DefaultAzureCredential en el constructor de una clase cliente de servicio. DefaultAzureCredential detectará automáticamente las credenciales que estén disponibles en ese entorno.

ServiceBusClient serviceBusClient = new(
    new Uri("https://<your-service-bus-namespace>.blob.core.windows.net"),
    new DefaultAzureCredential());

Consulte también

Para obtener una explicación más detallada de las conexiones sin contraseña, consulte la guía para desarrolladores Configuración de conexiones sin contraseña entre varias aplicaciones y servicios de Azure.