Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Las aplicaciones de Rust deben autenticarse en servicios de Azure como Storage, Key Vault o Cosmos DB. En este artículo se explica cómo usar azure Identity crate para autenticar de forma segura las aplicaciones de Rust en entornos de servidor y desarrollo local, lo que mejora la seguridad y simplifica la administración de credenciales.
Autenticación basada en tokens recomendada
El enfoque recomendado es hacer que las aplicaciones usen la autenticación basada en tokens, en lugar de cadenas de conexión o claves, al autenticarse en recursos de Azure. El azure_identity crate proporciona autenticación basada en tokens y permite que las aplicaciones se autentiquen sin problemas en los recursos de Azure, tanto si la aplicación está en desarrollo local, implementada en Azure como si se implementa en un servidor local.
El tipo específico de autenticación basada en tokens que una aplicación debe usar para autenticarse en los recursos de Azure depende de dónde se ejecute la aplicación.
| Medio ambiente | Autenticación |
|---|---|
| Locales | Cuando un desarrollador ejecuta una aplicación durante el desarrollo local: la aplicación puede autenticarse en Azure mediante las credenciales locales del desarrollador. Estas opciones se proporcionan con más detalle en la crates.io: Autenticación con herramientas de desarrollo. |
| Azure | Cuando una aplicación se hospeda en Azure: la aplicación debe autenticarse en los recursos de Azure mediante una identidad administrada. Esta opción se describe con más detalle en la documentación de crates.io : Autenticación de aplicaciones hospedadas en Azure. |
| Local | Cuando una aplicación se hospeda e implementa de forma local: la aplicación debe autenticarse en los recursos de Azure mediante una entidad de servicio de aplicación. Esta opción se describe en la documentación de crates.io : Autenticar entidades de servicio. |
Ventajas de la autenticación basada en tokens
Al compilar aplicaciones para Azure, se recomienda encarecidamente usar la autenticación basada en tokens en lugar de secretos como cadenas de conexión o claves.
| Autenticación basada en tokens | Secretos (cadenas de conexión y claves) |
|---|---|
| Principio de privilegios mínimos, establezca los permisos específicos necesarios para la aplicación en el recurso de Azure. | Una cadena de conexión o clave concede derechos completos al recurso de Azure. |
| No hay ningún secreto de aplicación que almacenar. | Debe almacenar y rotar secretos en la configuración de la aplicación o la variable de entorno. |
| La biblioteca de identidades de Azure administra los tokens automáticamente en segundo plano. Esto hace que el uso de la autenticación basada en tokens sea tan fácil de usar como una cadena de conexión. | Los secretos no se administran. |
El uso de cadenas de conexión debe limitarse a la prueba inicial de aplicaciones de concepto o prototipos de desarrollo que no tienen acceso a la producción ni a los datos confidenciales. De lo contrario, las clases de autenticación basadas en tokens disponibles en la biblioteca de identidades de Azure siempre deben preferirse al autenticarse en los recursos de Azure.
Autenticación durante el desarrollo local
Cuando una aplicación se ejecuta en la estación de trabajo de un desarrollador durante el desarrollo local, el entorno local todavía debe autenticarse en los servicios de Azure usados por la aplicación.
Autenticación con credenciales de la CLI de Azure
La credencial de la CLI de Azure usa el estado de autenticación de la CLI de Azure para autenticar la aplicación de Rust. Esta credencial es ideal para el desarrollo local cuando ya ha iniciado sesión con az login.
use azure_identity::AzureCliCredential;
use azure_security_keyvault_secrets::SecretClient;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
dotazure::load()?;
let vault_url = std::env::var("AZURE_KEYVAULT_URL")
.map_err(|_| "AZURE_KEYVAULT_URL environment variable is required")?;
let credential = AzureCliCredential::new(None)?;
let client = SecretClient::new(&vault_url, credential.clone(), None)?;
Ok(())
}
Autenticación con credenciales de la CLI para desarrolladores de Azure
La credencial de la CLI para desarrolladores de Azure usa el estado de autenticación de la CLI para desarrolladores de Azure (azd) para autenticar la aplicación. Esta credencial es útil al trabajar con plantillas y flujos de trabajo azd.
use azure_identity::AzureDeveloperCliCredential;
use azure_security_keyvault_secrets::SecretClient;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
dotazure::load()?;
let vault_url = std::env::var("AZURE_KEYVAULT_URL")
.map_err(|_| "AZURE_KEYVAULT_URL environment variable is required")?;
let credential = AzureDeveloperCliCredential::new(None)?;
let client = SecretClient::new(&vault_url, credential.clone(), None)?;
Ok(())
}
Autenticación en entornos de servidor
En entornos de servidor, use identidades administradas para la autenticación segura sin contraseña. Azure crea y administra automáticamente las identidades administradas, por lo que la aplicación puede autenticarse sin necesidad de almacenar credenciales.
Al hospedar en un entorno de servidor, asigne una identidad de aplicación única a cada aplicación para cada entorno. En Azure, una identidad de aplicación se representa mediante una entidad de servicio, un tipo especial de entidad de seguridad que identifica y autentica las aplicaciones en Azure. El tipo de entidad de servicio que usa para la aplicación depende de dónde se ejecute la aplicación.
use azure_identity::{ManagedIdentityCredential, ManagedIdentityCredentialOptions, UserAssignedId};
use azure_security_keyvault_secrets::SecretClient;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
dotazure::load()?;
let vault_url = std::env::var("AZURE_KEYVAULT_URL")
.map_err(|_| "AZURE_KEYVAULT_URL environment variable is required")?;
let user_assigned_id: Option<UserAssignedId> = std::env::var("AZURE_USER_ASSIGNED_IDENTITY")
.ok()
.map(|id| UserAssignedId::ClientId(id.clone()));
let credential_options = ManagedIdentityCredentialOptions {
user_assigned_id,
..Default::default()
};
let credential = ManagedIdentityCredential::new(Some(credential_options))?;
let client = SecretClient::new(vault_url.as_str(), credential.clone(), None)?;
Ok(())
}
Código de ejemplo
El código que se muestra en este artículo está disponible en https://github.com/azure-samples/azure-sdk-for-rust-docs/.
Recursos adicionales
- Crates del SDK de Azure en Crates.io : lista de contenedores de Azure SDK disponibles
- Directrices de diseño del SDK de Azure : principios y patrones de diseño
- Repositorio de GitHub del SDK de Azure para Rust : problemas y código fuente
- Documentación de Cargo : Referencia completa de carga