Partilhar via


Autenticar aplicativos Rust nos serviços do Azure

Os aplicativos Rust devem se autenticar em serviços do Azure, como Armazenamento, Cofre de Chaves ou Cosmos DB. Este artigo explica como usar a caixa de Identidade do Azure para autenticar com segurança aplicativos Rust em ambientes de servidor e desenvolvimento local, melhorando a segurança e simplificando o gerenciamento de credenciais.

A abordagem recomendada é fazer com que seus aplicativos usem autenticação baseada em token, em vez de cadeias de conexão ou chaves, ao autenticar em recursos do Azure. A caixa de azure_identity fornece autenticação baseada em token e permite que os aplicativos se autentiquem perfeitamente nos recursos do Azure, quer o aplicativo esteja em desenvolvimento local, implantado no Azure ou implantado em um servidor local.

O tipo específico de autenticação baseada em token que um aplicativo deve usar para autenticar nos recursos do Azure depende de onde o aplicativo está sendo executado.

Meio Ambiente Authentication
Locais Quando um desenvolvedor executa um aplicativo durante o desenvolvimento local - O aplicativo pode se autenticar no Azure usando as credenciais locais do desenvolvedor. Essas opções são fornecidas com mais detalhes na crates.io: Autenticar com ferramentas de desenvolvimento.
Azure Quando um aplicativo é hospedado no Azure - O aplicativo deve se autenticar nos recursos do Azure usando uma identidade gerenciada. Essa opção é discutida com mais detalhes na documentação do crates.io : Autenticar aplicativos hospedados no Azure.
No local Quando um aplicativo é hospedado e implantado localmente - O aplicativo deve se autenticar nos recursos do Azure usando uma entidade de serviço de aplicativo. Esta opção é discutida na documentação crates.io : Autenticar entidades de serviço.

Vantagens da autenticação baseada em tokens

Ao criar aplicativos para o Azure, é altamente recomendável usar a autenticação baseada em token em vez de segredos, como cadeias de conexão ou chaves.

Autenticação baseada em tokens Segredos (cadeias de conexão e chaves)
Princípio do menor privilégio, estabeleça as permissões específicas necessárias para o aplicativo no recurso do Azure. Uma cadeia de conexão ou chave concede direitos completos ao recurso do Azure.
Não há nenhum segredo de aplicativo para armazenar. Deve armazenar e girar segredos na configuração do aplicativo ou na variável de ambiente.
A biblioteca de Identidade do Azure gerencia tokens para você nos bastidores. Isso torna o uso da autenticação baseada em token tão fácil de usar quanto uma cadeia de conexão. Os segredos não são geridos.

O uso de cadeias de conexão deve ser limitado a aplicativos de prova de conceito iniciais ou protótipos de desenvolvimento que não acessam dados confidenciais ou de produção. Caso contrário, as classes de autenticação baseada em tokens disponíveis na biblioteca de Identidades do Azure devem sempre ser preferidas ao autenticar em recursos do Azure.

Autenticar durante o desenvolvimento local

Quando um aplicativo é executado na estação de trabalho de um desenvolvedor durante o desenvolvimento local, o ambiente local ainda deve se autenticar em todos os serviços do Azure usados pelo aplicativo.

Autenticar com a credencial da CLI do Azure

A credencial da CLI do Azure usa o estado de autenticação da CLI do Azure para autenticar seu aplicativo Rust. Essa credencial é ideal para o desenvolvimento local quando você já está conectado com az logino .

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

Autenticar com a credencial da CLI do Desenvolvedor do Azure

A credencial da CLI do Desenvolvedor do Azure usa o estado de autenticação da CLI do Desenvolvedor do Azure (azd) para autenticar seu aplicativo. Essa credencial é útil ao trabalhar com modelos azd e fluxos de trabalho.

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

Autenticar em ambientes de servidor

Em ambientes de servidor, use identidades gerenciadas para autenticação segura e sem senha. As identidades gerenciadas são criadas e gerenciadas automaticamente pelo Azure, para que seu aplicativo possa se autenticar sem precisar armazenar credenciais.

Ao hospedar em um ambiente de servidor, atribua uma identidade de aplicativo exclusiva a cada aplicativo para cada ambiente. No Azure, uma identidade de aplicativo é representada por uma entidade de serviço, um tipo especial de entidade de segurança que identifica e autentica aplicativos no Azure. O tipo de entidade de serviço que você usa para seu aplicativo depende de onde ele é executado.

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 exemplo

O código mostrado neste artigo está disponível em https://github.com/azure-samples/azure-sdk-for-rust-docs/.

Recursos adicionais