Autenticação do Azure do Spring Cloud
Este artigo aplica-se a: ✔️ Versão 4.14.0 Versão 5.8.0 ✔️
Este artigo descreve todos os métodos de autenticação do Spring Cloud Azure.
DefaultAzureCredential
O DefaultAzureCredential
é apropriado para a maioria dos cenários em que o aplicativo se destina a ser executado na Nuvem do Azure. Isso ocorre porque o combina credenciais comumente usadas para autenticar quando implantado DefaultAzureCredential
com credenciais usadas para autenticar em um ambiente de desenvolvimento.
Nota
DefaultAzureCredential
destina-se a simplificar a introdução ao SDK manipulando cenários comuns com comportamentos padrão razoáveis. Se você quiser mais controle ou se seu cenário não for atendido pelas configurações padrão, use outros tipos de credenciais.
A DefaultAzureCredential
tentará efetuar a autenticação através dos seguintes mecanismos por ordem:
- Ambiente – a
DefaultAzureCredential
irá ler as informações da conta especificadas através das variáveis de ambiente e utilizá-las para a autenticação. - Identidade gerida – se a aplicação for implementada num anfitrião do Azure com a identidade gerida ativada, a
DefaultAzureCredential
será autenticada com essa conta. - IntelliJ - Se você se autenticou por meio do Kit de Ferramentas do Azure para IntelliJ, o será autenticado
DefaultAzureCredential
com essa conta. - Código do Visual Studio - Se você tiver autenticado por meio do plug-in da Conta do Azure do Visual Studio Code, o será autenticado
DefaultAzureCredential
com essa conta. - CLI do Azure - Se você autenticou uma conta por meio do comando da CLI
az login
do Azure, o será autenticadoDefaultAzureCredential
com essa conta.
Gorjeta
Certifique-se de que a entidade de segurança recebeu permissão suficiente para acessar o recurso do Azure. Para obter mais informações, consulte Autorizar acesso com o Microsoft Entra ID.
Nota
Desde o Spring Cloud Azure AutoConfigure 4.1.0, um ThreadPoolTaskExecutor
bean nomeado springCloudAzureCredentialTaskExecutor
será registrado automaticamente por padrão e gerenciará todos os threads criados pela Identidade do Azure. O nome de cada thread gerenciado por esse pool de threads é prefixado com az-identity-
. Este ThreadPoolTaskExecutor
feijão é independente do Executor
feijão fornecido pela Spring Boot.
Identidades geridas
Um desafio comum é o gerenciamento de segredos e credenciais usadas para proteger a comunicação entre os diferentes componentes que compõem uma solução. As identidades geridas eliminam a necessidade de gerir credenciais. As identidades gerenciadas fornecem uma identidade para os aplicativos usarem ao se conectarem a recursos que oferecem suporte à autenticação do Microsoft Entra. Os aplicativos podem usar a identidade gerenciada para obter tokens do Microsoft Entra. Por exemplo, um aplicativo pode usar uma identidade gerenciada para acessar recursos como o Azure Key Vault, onde você pode armazenar credenciais de maneira segura ou acessar contas de armazenamento.
Incentivamos o uso de identidade gerenciada em vez de usar cadeia de conexão ou chave em seu aplicativo porque é mais seguro e economizará o trabalho de gerenciar segredos e credenciais. Nesse caso, poderia servir melhor o cenário de desenvolvimento local usando informações de conta armazenadas localmente e, em seguida, DefaultAzureCredential
implantando o aplicativo na Nuvem do Azure e usando a identidade gerenciada.
Tipos de identidade gerenciados
Existem dois tipos de identidades geridas:
- Atribuído ao sistema - Alguns serviços do Azure permitem habilitar uma identidade gerenciada diretamente em uma instância de serviço. Quando você habilita uma identidade gerenciada atribuída ao sistema, uma identidade é criada no Microsoft Entra vinculada ao ciclo de vida dessa instância de serviço. Assim, quando o recurso é eliminado, o Azure elimina automaticamente a identidade por si. Por predefinição, apenas esse recurso do Azure pode utilizar essa identidade para pedir tokens ao Microsoft Entra ID.
- Atribuído pelo usuário - Você também pode criar uma identidade gerenciada como um recurso autônomo do Azure. Você pode criar uma identidade gerenciada atribuída pelo usuário e atribuí-la a uma ou mais instâncias de um serviço do Azure. Com identidades gerenciadas atribuídas pelo usuário, a identidade é gerenciada separadamente dos recursos que a usam.
Nota
Ao usar uma identidade gerenciada atribuída pelo usuário, você pode especificar o ID do cliente via spring.cloud.azure.credential.managed-identity-client-id
ou spring.cloud.azure.<azure-service>.credential.managed-identity-client-id
. Você não precisará de configuração de credenciais se usar uma identidade gerenciada atribuída ao sistema.
Gorjeta
Certifique-se de que a entidade de segurança recebeu permissão suficiente para acessar o recurso do Azure. Para obter mais informações, consulte Autorizar acesso com o Microsoft Entra ID.
Para obter mais informações sobre identidade gerenciada, consulte O que são identidades gerenciadas para recursos do Azure?.
Outros tipos de credenciais
Se você quiser mais controle ou se seu cenário não for atendido pelas DefaultAzureCredential
configurações padrão ou por elas, use outros tipos de credenciais.
Autenticação e autorização com Microsoft Entra ID
Com o Microsoft Entra ID, você pode usar o controle de acesso baseado em função do Azure (Azure RBAC) para conceder permissões a uma entidade de segurança, que pode ser um usuário ou uma entidade de serviço de aplicativo. Quando uma entidade de segurança (um usuário ou um aplicativo) tenta acessar um recurso do Azure, por exemplo, um recurso de Hubs de Eventos, a solicitação deve ser autorizada. Com o Microsoft Entra ID, o acesso a um recurso é um processo de duas etapas:
- Primeiro, a identidade da entidade de segurança é autenticada e um token OAuth 2.0 é retornado.
- Em seguida, o token é passado como parte de uma solicitação ao serviço do Azure para autorizar o acesso ao recurso especificado.
Autenticar com o Microsoft Entra ID
Para conectar aplicativos a recursos que oferecem suporte à autenticação do Microsoft Entra, você pode definir as seguintes configurações com o prefixo spring.cloud.azure.credential
ou spring.cloud.azure.<azure-service>.credential
A tabela a seguir lista as propriedades de autenticação:
Property | Description |
---|---|
ID do cliente | A ID do cliente a ser usada ao executar a autenticação da entidade de serviço com o Azure. |
client-secret | O segredo do cliente a ser usado ao executar a autenticação da entidade de serviço com o Azure. |
cliente-certificado-caminho | Caminho de um arquivo de certificado PEM a ser usado ao executar a autenticação da entidade de serviço com o Azure. |
cliente-certificado-senha | A senha do arquivo de certificado. |
nome de utilizador | O nome de usuário a ser usado ao executar a autenticação de nome de usuário/senha com o Azure. |
password | A senha a ser usada ao executar a autenticação de nome de usuário/senha com o Azure. |
habilitado para identidade gerenciada | Se a identidade gerenciada deve ser habilitada. |
Gorjeta
Para obter a lista de todas as propriedades de configuração do Spring Cloud Azure, consulte Propriedades de configuração do Spring Cloud Azure.
O aplicativo procurará em vários lugares para encontrar uma credencial disponível e usará DefaultAzureCredential
se nenhuma propriedade de credencial estiver configurada. Se você quiser usar uma credencial específica, consulte os exemplos a seguir para obter orientação.
O exemplo a seguir mostra como autenticar usando uma identidade gerenciada atribuída ao sistema:
spring.cloud.azure:
credential:
managed-identity-enabled: true
O exemplo a seguir mostra como autenticar usando uma identidade gerenciada atribuída pelo usuário:
spring.cloud.azure:
credential:
managed-identity-enabled: true
client-id: ${AZURE_CLIENT_ID}
O exemplo a seguir mostra como autenticar usando uma entidade de serviço com um segredo de cliente:
spring.cloud.azure:
credential:
client-id: ${AZURE_CLIENT_ID}
client-secret: ${AZURE_CLIENT_SECRET}
profile:
tenant-id: <tenant>
Nota
Os valores permitidos sãotenant-id
: common
, , consumers
organizations
, ou o ID do locatário. Para obter mais informações sobre esses valores, consulte a seção Usado o ponto de extremidade errado (contas pessoais e da organização) de AADSTS50020 de erro - A conta de usuário do provedor de identidade não existe no locatário. Para obter informações sobre como converter seu aplicativo de locatário único, consulte Converter aplicativo de locatário único em multilocatário no Microsoft Entra ID.
O exemplo a seguir mostra como autenticar usando uma entidade de serviço com um certificado PFX cliente:
spring.cloud.azure:
credential:
client-id: ${AZURE_CLIENT_ID}
client-certificate-path: ${AZURE_CLIENT_CERTIFICATE_PATH}
client-certificate-password: ${AZURE_CLIENT_CERTIFICATE_PASSWORD}
profile:
tenant-id: <tenant>
Nota
Os valores permitidos sãotenant-id
: common
, , consumers
organizations
, ou o ID do locatário. Para obter mais informações sobre esses valores, consulte a seção Usado o ponto de extremidade errado (contas pessoais e da organização) de AADSTS50020 de erro - A conta de usuário do provedor de identidade não existe no locatário. Para obter informações sobre como converter seu aplicativo de locatário único, consulte Converter aplicativo de locatário único em multilocatário no Microsoft Entra ID.
O exemplo a seguir mostra como autenticar usando uma entidade de serviço com certificado PEM de cliente:
spring.cloud.azure:
credential:
client-id: ${AZURE_CLIENT_ID}
client-certificate-path: ${AZURE_CLIENT_CERTIFICATE_PATH}
profile:
tenant-id: <tenant>
Nota
Os valores permitidos sãotenant-id
: common
, , consumers
organizations
, ou o ID do locatário. Para obter mais informações sobre esses valores, consulte a seção Usado o ponto de extremidade errado (contas pessoais e da organização) de AADSTS50020 de erro - A conta de usuário do provedor de identidade não existe no locatário. Para obter informações sobre como converter seu aplicativo de locatário único, consulte Converter aplicativo de locatário único em multilocatário no Microsoft Entra ID.
O exemplo a seguir mostra como autenticar usando uma credencial de usuário:
spring.cloud.azure:
credential:
client-id: ${AZURE_CLIENT_ID}
username: ${AZURE_USER_USERNAME}
password: ${AZURE_USER_PASSWORD}
O exemplo a seguir mostra como autenticar com o Cofre da Chave usando uma entidade de serviço diferente. Este exemplo configura o aplicativo com duas credenciais: uma identidade gerenciada atribuída ao sistema e uma entidade de serviço. O cliente Key Vault Secret usará a entidade de serviço, mas quaisquer outros componentes usarão a identidade gerenciada.
spring.cloud.azure:
credential:
managed-identity-enabled: true
keyvault.secret:
credential:
client-id: ${AZURE_CLIENT_ID}
client-secret: ${AZURE_CLIENT_SECRET}
profile:
tenant-id: <tenant>
Nota
Os valores permitidos sãotenant-id
: common
, , consumers
organizations
, ou o ID do locatário. Para obter mais informações sobre esses valores, consulte a seção Usado o ponto de extremidade errado (contas pessoais e da organização) de AADSTS50020 de erro - A conta de usuário do provedor de identidade não existe no locatário. Para obter informações sobre como converter seu aplicativo de locatário único, consulte Converter aplicativo de locatário único em multilocatário no Microsoft Entra ID.
Autorizar acesso com o Microsoft Entra ID
A etapa de autorização requer que uma ou mais funções do Azure sejam atribuídas à entidade de segurança. As funções atribuídas a uma entidade de segurança determinam as permissões que a entidade de segurança terá.
Gorjeta
Para obter a lista de todas as funções internas do Azure, consulte Funções internas do Azure.
A tabela a seguir lista as funções internas do Azure para autorizar o acesso aos serviços do Azure com suporte no Spring Cloud Azure:
Função | Description |
---|---|
Proprietário de dados de configuração do aplicativo | Permite acesso total aos dados de Configuração do Aplicativo. |
Leitor de dados de configuração do aplicativo | Permite acesso de leitura aos dados de Configuração do Aplicativo. |
Proprietário de Dados dos Hubs de Eventos do Azure | Permite acesso total aos recursos dos Hubs de Eventos do Azure. |
Recetor de Dados dos Hubs de Eventos do Azure | Permite receber acesso aos recursos dos Hubs de Eventos do Azure. |
Remetente de Dados dos Hubs de Eventos do Azure | Permite enviar acesso aos recursos dos Hubs de Eventos do Azure. |
Proprietário de Dados do Barramento de Serviço do Azure | Permite acesso total aos recursos do Barramento de Serviço do Azure. |
Recetor de Dados do Barramento de Serviço do Azure | Permite receber acesso aos recursos do Barramento de Serviço do Azure. |
Remetente de dados do Barramento de Serviço do Azure | Permite enviar acesso aos recursos do Barramento de Serviço do Azure. |
Proprietário dos Dados do Armazenamento de Blobs | Fornece acesso total a contêineres e dados de blob de Armazenamento do Azure, incluindo a atribuição de controle de acesso POSIX. |
Leitor de Dados do Armazenamento de Blobs | Leia e liste contêineres e blobs do Armazenamento do Azure. |
Leitor de dados da fila de armazenamento | Leia e liste filas e mensagens de fila do Armazenamento do Azure. |
Colaborador do Cache Redis | Gerencie caches Redis. |
Nota
Ao usar o Spring Cloud Azure Resource Manager para obter as cadeias de conexão para Hubs de Eventos, Barramento de Serviço e Fila de Armazenamento, ou as propriedades do Cache para Redis, atribua a função Contributor
interna do Azure . O Cache do Azure para Redis é especial e você também pode atribuir a Redis Cache Contributor
função para obter as propriedades do Redis.
Nota
Uma política de acesso ao Cofre da Chave determina se uma determinada entidade de segurança, ou seja, um usuário, aplicativo ou grupo de usuários, pode executar diferentes operações em segredos, chaves e certificados do Cofre da Chave. Você pode atribuir políticas de acesso usando o portal do Azure, a CLI do Azure ou o Azure PowerShell. Para obter mais informações, consulte Atribuir uma política de acesso ao Cofre da Chave.
Importante
O Azure Cosmos DB expõe duas definições de função internas: Cosmos DB Built-in Data Reader
e Cosmos DB Built-in Data Contributor
. No entanto, o suporte do portal do Azure para gerenciamento de funções ainda não está disponível. Para obter mais informações sobre o modelo de permissão, definições de função e atribuição de função, consulte Configurar controle de acesso baseado em função com ID do Microsoft Entra para sua conta do Azure Cosmos DB.
Tokens SAS
Você também pode configurar serviços para autenticação com Assinatura de Acesso Compartilhado (SAS). spring.cloud.azure.<azure-service>.sas-token
é a propriedade a ser configurada. Por exemplo, use spring.cloud.azure.storage.blob.sas-token
para autenticar no serviço de Blob de Armazenamento.
Cadeias de ligação
A cadeia de conexão é suportada por alguns serviços do Azure para fornecer informações de conexão e credenciais. Para se conectar a esses serviços do Azure usando a cadeia de conexão, basta configurar spring.cloud.azure.<azure-service>.connection-string
o . Por exemplo, configure spring.cloud.azure.eventhubs.connection-string
para se conectar ao serviço Hubs de Eventos.