Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Rust-toepassingen moeten worden geverifieerd bij Azure-services, zoals Storage, Key Vault of Cosmos DB. In dit artikel wordt uitgelegd hoe u de Azure Identity-crate gebruikt om Rust-apps veilig te verifiëren in lokale ontwikkel- en serveromgevingen, waardoor beveiliging wordt verbeterd en referentiebeheer wordt vereenvoudigd.
Aanbevolen verificatie op basis van tokens
De aanbevolen methode is om ervoor te zorgen dat uw apps verificatie op basis van tokens gebruiken in plaats van verbindingsreeksen of sleutels bij het verifiëren bij Azure-resources. De azure_identity crate biedt verificatie op basis van tokens en stelt apps in staat om naadloos te verifiëren bij Azure-resources, ongeacht of de app zich in lokale ontwikkeling bevindt, in Azure is geïmplementeerd of op een on-premises server is geïmplementeerd.
Het specifieke type verificatie op basis van tokens dat een app moet gebruiken om te verifiëren bij Azure-resources, is afhankelijk van waar de app wordt uitgevoerd.
| Milieu | Authenticatie | 
|---|---|
| Lokaal | Wanneer een ontwikkelaar een app uitvoert tijdens lokale ontwikkeling: de app kan worden geverifieerd bij Azure met behulp van de lokale referenties van de ontwikkelaar. Deze opties worden uitgebreider beschreven in de crates.io: Verifiëren met ontwikkelhulpprogramma's. | 
| Azure | Wanneer een app wordt gehost in Azure: de app moet worden geverifieerd bij Azure-resources met behulp van een beheerde identiteit. Deze optie wordt uitgebreid besproken in de crates.io documentatie: Door Azure gehoste toepassingen verifiëren. | 
| On-premises | Wanneer een app on-premises wordt gehost en geïmplementeerd: de app moet worden geverifieerd bij Azure-resources met behulp van een service-principal voor toepassingen. Deze optie wordt besproken in de crates.io documentatie: Service-principals verifiëren. | 
Voordelen van verificatie op basis van tokens
Bij het bouwen van apps voor Azure raden we u ten zeerste aan om verificatie op basis van tokens te gebruiken in plaats van geheimen, zoals verbindingsreeksen of sleutels.
| Verificatie op basis van tokens | Geheimen (verbindingsreeksen en sleutels) | 
|---|---|
| Het principe van minimale bevoegdheden: stel de specifieke machtigingen in die nodig zijn voor de app in de Azure-resource. | Een verbindingsreeks of sleutel verleent volledige rechten aan de Azure-resource. | 
| Er is geen toepassingsgeheim om op te slaan. | Geheimen moeten worden opgeslagen en gedraaid in app-instelling of omgevingsvariabele. | 
| De Azure Identity-bibliotheek beheert tokens voor u achter de schermen. Dit maakt het gebruik van verificatie op basis van tokens net zo eenvoudig als een verbindingsreeks. | Geheimen worden niet beheerd. | 
Het gebruik van verbindingsreeksen moet worden beperkt tot het eerste bewijs van concept-apps of prototypen voor ontwikkeling die geen toegang hebben tot productie- of gevoelige gegevens. Anders moeten de verificatieklassen op basis van tokens die beschikbaar zijn in de Azure Identity-bibliotheek altijd de voorkeur krijgen bij het verifiëren bij Azure-resources.
Verifiëren tijdens lokale ontwikkeling
Wanneer een toepassing wordt uitgevoerd op het werkstation van een ontwikkelaar tijdens de lokale ontwikkeling, moet de lokale omgeving zich nog steeds verifiëren bij alle Azure-services die door de app worden gebruikt.
Verifiëren met Azure CLI-referenties
De Azure CLI-referentie maakt gebruik van de verificatiestatus van de Azure CLI om uw Rust-toepassing te verifiëren. Deze referentie is ideaal voor lokale ontwikkeling wanneer u al bent aangemeld met 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(())
}
Verifiëren met Azure Developer CLI-referentie
De Azure Developer CLI-referentie maakt gebruik van de verificatiestatus van de Azure Developer CLI (azd) om uw toepassing te verifiëren. Deze referentie is handig bij het werken met azd-sjablonen en -werkstromen.
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(())
}
Verifiëren in serveromgevingen
Gebruik in serveromgevingen beheerde identiteiten voor veilige, wachtwoordloze verificatie. Beheerde identiteiten worden automatisch gemaakt en beheerd door Azure, zodat uw toepassing kan verifiëren zonder referenties op te slaan.
Wanneer u host in een serveromgeving, wijst u een unieke toepassingsidentiteit toe aan elke toepassing voor elke omgeving. In Azure wordt een app-identiteit vertegenwoordigd door een service-principal, een speciaal type beveiligingsprincipaal waarmee apps worden geïdentificeerd en geverifieerd bij Azure. Het type service-principal dat u voor uw app gebruikt, is afhankelijk van waar uw app wordt uitgevoerd.
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(())
}
Voorbeeldcode
De code die in dit artikel wordt weergegeven, is beschikbaar op https://github.com/azure-samples/azure-sdk-for-rust-docs/.
Aanvullende bronnen
- Azure SDK-kratten op Crates.io - Lijst met beschikbare Azure SDK-kratten
- Ontwerprichtlijnen voor Azure SDK - Ontwerpprincipes en -patronen
- Azure SDK voor Rust GitHub-opslagplaats - Problemen en broncode
- Cargo-documentatie - Complete Cargo-referentie