Partager via


Authentifier des applications Rust auprès des services Azure

Les applications Rust doivent s’authentifier auprès des services Azure tels que Stockage, Key Vault ou Cosmos DB. Cet article explique comment utiliser la caisse d’identité Azure pour authentifier en toute sécurité les applications Rust dans les environnements de développement et de serveur locaux, ce qui améliore la sécurité et simplifie la gestion des informations d’identification.

L’approche recommandée consiste à utiliser l’authentification basée sur des jetons, plutôt que sur des chaînes de connexion ou des clés, lors de l’authentification auprès des ressources Azure. La azure_identity crate fournit une authentification basée sur des jetons et permet aux applications de s’authentifier en toute transparence auprès des ressources Azure, que l’application soit en développement local, déployée sur Azure ou déployée sur un serveur local.

Le type spécifique d’authentification basée sur les jetons qu’une application doit utiliser pour s’authentifier auprès des ressources Azure dépend de l’emplacement d’exécution de l’application.

Environnement Authentication
Local Lorsqu’un développeur exécute une application pendant le développement local : l’application peut s’authentifier auprès d’Azure à l’aide des informations d’identification locales du développeur. Ces options sont fournies plus en détail dans la crates.io : s’authentifier avec les outils de développement.
Azure Lorsqu’une application est hébergée sur Azure : l’application doit s’authentifier auprès des ressources Azure à l’aide d’une identité managée. Cette option est décrite plus en détail dans la documentation crates.io : Authentifier les applications hébergées par Azure.
Sur site Lorsqu’une application est hébergée et déployée localement : l’application doit s’authentifier auprès des ressources Azure à l’aide d’un principal de service d’application. Cette option est décrite dans la documentation crates.io : Authentifier les principaux de service.

Avantages de l’authentification basée sur les jetons

Lors de la création d’applications pour Azure, nous vous recommandons vivement d’utiliser l’authentification basée sur des jetons plutôt que des secrets tels que des chaînes de connexion ou des clés.

Authentification basée sur les jetons Secrets (chaînes de connexion et clés)
Principe du privilège minimum, établissez les autorisations spécifiques nécessaires par l’application sur la ressource Azure. Une chaîne de connexion ou une clé accorde des droits complets à la ressource Azure.
Il n’existe aucun secret d’application à stocker. Doit stocker et faire pivoter les secrets dans le paramètre d’application ou la variable d’environnement.
La bibliothèque Azure Identity gère les jetons pour vous en arrière-plan. Cela permet d’utiliser l’authentification basée sur des jetons aussi facile à utiliser qu’une chaîne de connexion. Les secrets ne sont pas gérés.

L’utilisation de chaînes de connexion doit être limitée à des prototypes de preuve de concept initiales ou de prototypes de développement qui n’accèdent pas aux données de production ou sensibles. Dans le cas contraire, les classes d’authentification basées sur les jetons disponibles dans la bibliothèque d’identités Azure doivent toujours être préférées lors de l’authentification auprès des ressources Azure.

S’authentifier pendant le développement local

Lorsqu’une application est exécutée sur la station de travail d’un développeur pendant le développement local, l’environnement local doit toujours s’authentifier auprès des services Azure utilisés par l’application.

S’authentifier avec les informations d’identification Azure CLI

Les informations d’identification Azure CLI utilisent l’état d’authentification d’Azure CLI pour authentifier votre application Rust. Ces informations d’identification sont idéales pour le développement local lorsque vous êtes déjà connecté avec 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(())
}

S’authentifier avec les informations d’identification de l’interface CLI du développeur Azure

Les informations d’identification azure Developer CLI utilisent l’état d’authentification d’Azure Developer CLI (azd) pour authentifier votre application. Ces informations d’identification sont utiles lors de l’utilisation de modèles et de flux de travail 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(())
}

S’authentifier dans les environnements serveur

Dans les environnements serveur, utilisez des identités managées pour une authentification sans mot de passe sécurisée. Les identités managées sont automatiquement créées et gérées par Azure. Votre application peut donc s’authentifier sans avoir à stocker les informations d’identification.

Lors de l’hébergement dans un environnement serveur, affectez une identité d’application unique à chaque application pour chaque environnement. Dans Azure, une identité d’application est représentée par un principal de service, un type spécial de principal de sécurité qui identifie et authentifie les applications auprès d’Azure. Le type de principal de service que vous utilisez pour votre application dépend de l’emplacement d’exécution de votre application.

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(())
}

Exemple de code

Le code présenté dans cet article est disponible sur https://github.com/azure-samples/azure-sdk-for-rust-docs/.

Ressources supplémentaires