Conexões sem senha para serviços do Azure

Observação

Conexões sem senha são um recurso independente de linguagem que abrange vários serviços do Azure. Embora a documentação atual se concentre em alguns idiomas e serviços, estamos atualmente no processo de produção de documentação adicional para outros idiomas e serviços.

Este artigo descreve os desafios de segurança com senhas e apresenta conexões sem senha para serviços do Azure.

Desafios de segurança com senhas e segredos

Senhas e chaves secretas devem ser usadas com cautela, e os desenvolvedores nunca devem colocá-las em um local não seguro. Muitos aplicativos se conectam a serviços de banco de dados de back-end, cache, mensagens e eventos usando nomes de usuário, senhas e chaves de acesso. Se expostas, essas credenciais podem ser usadas para obter acesso não autorizado a informações confidenciais, como um catálogo de vendas criado para uma campanha futura ou dados de clientes que devem ser privados.

A incorporação de senhas em um aplicativo em si apresenta um enorme risco de segurança por vários motivos, incluindo a descoberta por meio de um repositório de código. Muitos desenvolvedores externalizam essas senhas usando variáveis de ambiente para que os aplicativos possam carregá-las de diferentes ambientes. No entanto, isso apenas desloca o risco do próprio código para um ambiente de execução. Qualquer pessoa que tenha acesso ao ambiente pode roubar senhas, o que, por sua vez, aumenta o risco de exfiltração de dados.

O exemplo de código a seguir demonstra como se conectar ao Armazenamento do Azure usando uma chave de conta de armazenamento. Muitos desenvolvedores gravitam em torno dessa solução porque parece familiar às opções com as quais trabalharam no passado, mesmo que não seja uma solução ideal. Se seu aplicativo usa chaves de acesso no momento, considere migrar para conexões sem senha.

// Connection using secret access keys
BlobServiceClient blobServiceClient = new(
    new Uri("https://<storage-account-name>.blob.core.windows.net"),
    new StorageSharedKeyCredential("<storage-account-name>", "<your-access-key>"));

Os desenvolvedores devem ser diligentes para nunca expor esses tipos de chaves ou segredos em um local não seguro. Muitas empresas têm requisitos de segurança rígidos para se conectar aos serviços do Azure sem expor senhas a desenvolvedores, operadores ou qualquer outra pessoa. Eles geralmente usam um cofre para armazenar e carregar senhas em aplicativos e reduzir ainda mais o risco adicionando requisitos e procedimentos de rotação de senha. Essa abordagem, por sua vez, aumenta a complexidade operacional e, às vezes, leva a interrupções na conexão de aplicativos.

Conexões sem senha e Zero Trust

Agora você pode usar conexões sem senha em seus aplicativos para se conectar a serviços baseados no Azure sem precisar girar senhas. Em alguns casos, tudo o que você precisa é de configuração — nenhum novo código é necessário. A Zero Trust usa o princípio de "nunca confiar, sempre verificar e sem credenciais". Isso significa proteger todas as comunicações confiando em máquinas ou usuários somente depois de verificar a identidade e antes de conceder a eles acesso a serviços de back-end.

A opção de autenticação recomendada para conexões seguras e sem senha é usar identidades gerenciadas e RBAC (controle de acesso baseado em função) do Azure em combinação. Com essa abordagem, você não precisa rastrear e gerenciar manualmente muitos segredos diferentes para identidades gerenciadas, pois essas tarefas são tratadas internamente com segurança pelo Azure.

Você pode configurar conexões sem senha para serviços do Azure usando o Service Connector ou configurá-las manualmente. O Conector de Serviço habilita identidades gerenciadas nos serviços de hospedagem de aplicativos como os Aplicativos Spring do Azure, o Serviço de Aplicativo do Azure e os Aplicativos de Contêiner do Azure. O Service Connector também configura serviços de back-end com conexões sem senha usando identidades gerenciadas e RBAC do Azure e hidrata os aplicativos com as informações de conexão necessárias.

Se você inspecionar o ambiente em execução de um aplicativo configurado para conexões sem senha, poderá ver a cadeia de conexão completa. A cadeia de conexão carrega, por exemplo, um endereço de servidor de banco de dados, um nome de banco de dados e uma instrução para delegar autenticação a um plug-in de autenticação do Azure, mas não contém senhas ou segredos.

O vídeo a seguir ilustra conexões sem senha de aplicativos para serviços do Azure, usando aplicativos Java como exemplo. Cobertura semelhante para outros idiomas está por vir.


Apresentando o DefaultAzureCredential

As conexões sem senha com os serviços do Azure por meio da ID do Microsoft Entra e do RBAC (Controle de Acesso Baseado em Função) podem ser implementadas usando DefaultAzureCredential as bibliotecas de cliente da Identidade do Azure.

Importante

Algumas linguagens devem implementar DefaultAzureCredential explicitamente no código, enquanto outras utilizam DefaultAzureCredential internamente por meio de plug-ins ou drivers subjacentes.

DefaultAzureCredential dá suporte a vários métodos de autenticação e determina automaticamente quais devem ser usados no runtime. Essa abordagem permite que seu aplicativo use diferentes métodos de autenticação em ambientes diferentes (desenvolvimento local versus produção) sem implementar código específico do ambiente.

A ordem e os locais em que DefaultAzureCredential as pesquisas de credenciais variam entre os idiomas:

Por exemplo, ao trabalhar localmente com o .NET, DefaultAzureCredential geralmente será autenticada usando a conta que o desenvolvedor usou para entrar no Visual Studio, CLI do Azure ou Azure PowerShell. Quando o aplicativo for implantado no Azure, DefaultAzureCredential descobrirá e usará automaticamente a identidade gerenciada do serviço de hospedagem associado, como Serviço de Aplicativo do Azure. Nenhuma alteração de código é necessária para essa transição.

Observação

Uma identidade gerenciada fornece uma identidade de segurança para representar um aplicativo ou serviço. A identidade é gerenciada pela plataforma Azure e não exige que você provisione ou gire segredos. Você pode ler mais sobre identidades gerenciadas na documentação de visão geral.

O exemplo de código a seguir demonstra como se conectar ao Barramento de Serviço usando conexões sem senha. Outra documentação descreve como migrar para essa configuração para um serviço específico com mais detalhes. Um aplicativo .NET pode passar uma instância de para o construtor de uma classe de cliente de DefaultAzureCredential serviço. DefaultAzureCredential descobrirá automaticamente as credenciais disponíveis nesse ambiente.

ServiceBusClient serviceBusClient = new(
    new Uri("https://<your-service-bus-namespace>.blob.core.windows.net"),
    new DefaultAzureCredential());

Confira também

Para obter uma explicação mais detalhada das conexões sem senha, consulte o guia do desenvolvedor Configurar conexões sem senha entre vários aplicativos e serviços do Azure.