Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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.
Autenticação baseada em token recomendada
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 biblioteca azure_identity fornece autenticação baseada em token e permite que os aplicativos se autentiquem sem dificuldades nos recursos do Azure, seja em um ambiente de desenvolvimento local, implantados no Azure ou em um servidor on-premises.
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 |
|---|---|
| Local | 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. |
| Local | Quando uma aplicação é hospedada e implantada localmente - A aplicação deve autenticar-se nos recursos do Azure usando um principal de serviço de aplicação. Esta opção é discutida na documentação do crates.io: Autenticação de 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 aplicação para armazenar. | Deve armazenar e alternar segredos na configuração da aplicação 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 administrados. |
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.
Autenticação 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. Esta credencial é ideal para o desenvolvimento local quando já estás conectado com 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(())
}
Autenticar-se 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 a aplicação utiliza depende de onde esta é executada.
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
- SDK do Azure crates on Crates.io - Lista de pacotes disponíveis do SDK do Azure
- Diretrizes de design do SDK do Azure - Princípios e padrões de design
- SDK do Azure for Rust GitHub repository - Problemas e código-fonte
- Documentação da carga - Referência completa da carga