Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo explica os métodos de autenticação do Spring Cloud Azure e ajuda você a escolher o tipo de credencial certo para proteger o acesso aos recursos de Azure.
Autenticação e autorização com a ID do Microsoft Entra
Usando o Microsoft Entra ID, você pode usar o controle de acesso baseado em função do Azure (RBAC do Azure) para conceder as 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 Azure, como um recurso dos Hubs de Eventos, a solicitação deve ser autorizada. Usando Microsoft Entra ID, o acesso a um recurso é um processo de duas etapas:
- Primeiro, autentique a identidade do principal de segurança e retorne um token OAuth 2.0.
- Em seguida, passe o token como parte de uma solicitação para o serviço Azure para autorizar o acesso ao recurso especificado.
Tipos de credencial
O Spring Cloud Azure permite que você configure diferentes tipos de credencial para autenticação, incluindoDefaultAzureCredential, WorkloadIdentityCredential, , ManagedIdentityCredential, ClientSecretCredentiale AzureCliCredentialmuito mais.
DefaultAzureCredential
DefaultAzureCredential é apropriado para a maioria dos cenários em que o aplicativo se destina a ser executado na Nuvem do Azure, pois combina as seguintes credenciais:
- Credenciais comumente usadas para autenticação em implantações.
- Credenciais usadas para autenticar em um ambiente de desenvolvimento.
Nota
DefaultAzureCredentialsimplifica a introdução à SDK do Azure manipulando cenários comuns com comportamentos padrão razoáveis. Se você quiser mais controle ou as configurações padrão não oferecerem suporte ao seu cenário, use outros tipos de credencial.
DefaultAzureCredential tenta autenticar por meio dos seguintes mecanismos na ordem:
- Ambiente –
DefaultAzureCredentialtenta ler as informações da conta especificadas por meio de variáveis de ambiente e usá-la para autenticar. - Identidade Gerenciada – se o aplicativo for implantado em um host Azure com a Identidade Gerenciada habilitada,
DefaultAzureCredentialtente autenticar usando essa conta. - Identidade da carga de trabalho – se o aplicativo for implantado em uma VM (máquina virtual),
DefaultAzureCredentialtente autenticar usando essa conta. - Cache de Token Compartilhado – Se você se autenticou por meio de Visual Studio,
DefaultAzureCredentialtenta autenticar usando essa conta. - IntelliJ – Se você se autenticou por meio do kit de ferramentas Azure para IntelliJ,
DefaultAzureCredentialtenta autenticar usando essa conta. - CLI do Azure - Se você autenticou uma conta por meio do comando CLI do Azure
az login,DefaultAzureCredentialtenta se autenticar usando essa conta. - Azure PowerShell - Se você se autenticou por meio de Azure PowerShell,
DefaultAzureCredentialtenta autenticar usando essa conta. - Azure CLI do Desenvolvedor – se você se autenticou por meio da CLI do Desenvolvedor do Azure,
DefaultAzureCredentialtenta autenticar usando essa conta.
Dica
Verifique se a entidade de segurança possui permissões suficientes para acessar o recurso do Azure. Para obter mais informações, consulte Autorizar o acesso com o Microsoft Entra ID.
Nota
Desde o Spring Cloud Azure AutoConfigure 4.1.0, você deve registrar um ThreadPoolTaskExecutor bean chamado springCloudAzureCredentialTaskExecutor para gerenciar todos os threads criados pelo Azure Identity. O nome de cada thread gerenciado por esse pool de threads é prefixado com az-identity-. Este feijão ThreadPoolTaskExecutor é independente do feijão Executor fornecido pelo Spring Boot.
Identidades gerenciadas
Um desafio comum é o gerenciamento de segredos e credenciais usados para proteger a comunicação entre diferentes componentes que compõem uma solução. As identidades gerenciadas eliminam a necessidade de gerenciar credenciais. As identidades gerenciadas fornecem uma identidade para os aplicativos usarem ao se conectar a recursos que dão suporte à autenticação do Microsoft Entra. Os aplicativos podem usar a identidade gerenciada para obter tokens Microsoft Entra. Por exemplo, um aplicativo pode usar uma identidade gerenciada para acessar recursos como Azure Key Vault em que você pode armazenar credenciais de maneira segura ou acessar contas de armazenamento.
Use a identidade gerenciada em vez de usar cadeia de conexão ou chave em seu aplicativo porque ela é mais segura e salva o problema de gerenciar segredos e credenciais. Nesse caso, DefaultAzureCredential melhor serve ao cenário de desenvolvimento local usando informações de conta armazenadas localmente e, em seguida, implantando o aplicativo no Azure Cloud e usando a identidade gerenciada.
Tipos de identidade gerenciada
Há dois tipos de identidades gerenciadas:
- atribuídas pelo sistema – alguns serviços do Azure permitem habilitar uma identidade gerenciada diretamente em uma instância de serviço. Ao habilitar uma identidade gerenciada atribuída pelo sistema, você cria uma identidade em Microsoft Entra associada ao ciclo de vida dessa instância de serviço. Portanto, quando você exclui o recurso, o Azure exclui automaticamente a identidade para você. Por definição, somente esse recurso do Azure pode usar essa identidade para solicitar tokens do Microsoft Entra ID.
- Atribuído pelo usuário – você também pode criar uma identidade gerenciada como um recurso de Azure autônomo. 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, você gerencia a identidade separadamente dos recursos que a usam.
Nota
Ao usar uma identidade gerenciada atribuída pelo usuário, especifique a ID do cliente por meio spring.cloud.azure.credential.client-id ou spring.cloud.azure.<azure-service>.credential.client-id. Você não precisará de configuração de credencial se usar uma identidade gerenciada atribuída pelo sistema.
Dica
Para acessar o recurso Azure, verifique se a entidade de segurança tem permissão suficiente. Para obter mais informações, consulte Autorizar o 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 credencial
Se você quiser mais controle do que o fornecido por DefaultAzureCredential, ou se as configurações padrão não oferecerem suporte ao seu cenário, use outros tipos de credencial.
Autenticar com a ID do Microsoft Entra
Para conectar aplicativos a recursos que dão suporte à autenticação Microsoft Entra, defina as configurações a seguir com o prefixo spring.cloud.azure.credential ou spring.cloud.azure.<azure-service>.credential.
A tabela a seguir lista as propriedades de autenticação:
| Propriedade | Descrição |
|---|---|
client-id |
O ID do cliente a ser usado ao realizar a autenticação de entidade de serviço com o Azure. |
client-secret |
O segredo do cliente a ser usado durante a realização da autenticação da entidade de serviço com o Azure. |
client-certificate-path |
Caminho de um arquivo de certificado PEM a ser usado ao executar a autenticação da entidade de serviço com o Azure. |
client-certificate-password |
A senha do arquivo de certificado. |
username |
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. |
managed-identity-enabled |
Se deseja habilitar a identidade gerenciada. |
token-credential-bean-name |
O nome do bean do tipo TokenCredential a ser usado ao executar a autenticação com o Azure. |
Dica
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 procura em vários locais para encontrar uma credencial disponível. Cada fábrica de construtor de cliente do SDK do Azure usa primeiro um bean personalizado do tipo TokenCredential caso você especifique a propriedade token-credential-bean-name e recorre a DefaultAzureCredential se você não configurar propriedades de credenciais.
Autentique-se usando um bean TokenCredential personalizado
O exemplo a seguir mostra como definir um bean personalizado TokenCredential para fazer a autenticação:
@Bean
TokenCredential myTokenCredential() {
// Your concrete TokenCredential instance
}
spring.cloud.azure:
credential:
token-credential-bean-name: myTokenCredential
Autenticar usando uma identidade gerenciada atribuída pelo sistema
O exemplo a seguir mostra como autenticar usando uma identidade gerenciada atribuída pelo sistema:
spring.cloud.azure:
credential:
managed-identity-enabled: true
Autenticar usando uma identidade gerenciada atribuída pelo usuário
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}
Autenticar usando uma entidade de serviço com o segredo do cliente
O seguinte exemplo mostra como autenticar usando uma entidade de serviço com um segredo do cliente:
spring.cloud.azure:
credential:
client-id: ${AZURE_CLIENT_ID}
client-secret: ${AZURE_CLIENT_SECRET}
profile:
tenant-id: <tenant>
Nota
Os valores permitidos para tenant-id são: common, organizations, consumersou a ID do locatário. Para obter mais informações sobre esses valores, consulte a seção Usou o endpoint incorreto (contas pessoais e organizacionais) em Erro AADSTS50020 - 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.
Autenticar usando uma entidade de serviço com o certificado do cliente
O exemplo a seguir mostra como se autenticar usando uma entidade de serviço com um certificado PFX de 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 para tenant-id são: common, organizations, consumersou a ID do locatário. Para obter mais informações sobre esses valores, consulte a seção Usou o endpoint incorreto (contas pessoais e organizacionais) em Erro AADSTS50020 - 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 PEM do 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 para tenant-id são: common, organizations, consumersou a ID do locatário. Para obter mais informações sobre esses valores, consulte a seção Uso do endpoint incorreto (contas pessoais e organizacionais) de Erro AADSTS50020 – 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.
Autenticar usando uma credencial de usuário
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}
Autentique um serviço com uma credencial diferente da dos outros
O exemplo a seguir mostra como autenticar com Key Vault usando uma entidade de serviço diferente. Este exemplo configura o aplicativo com duas credenciais: uma identidade gerenciada atribuída pelo sistema e um principal de serviço. O cliente de Segredos do Key Vault usa a entidade de serviço, mas todos os outros componentes usam 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 para tenant-id são: common, organizations, consumersou a ID do locatário. Para obter mais informações sobre esses valores, consulte a seção Uso do endpoint incorreto (contas pessoais e organizacionais) de Erro AADSTS50020 – 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 o acesso com a ID do Microsoft Entra
A etapa de autorização requer a atribuição de uma ou mais funções do Azure ao principal de segurança. As funções que você atribui a um principal de segurança determinam as permissões que esse principal tem.
Dica
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 | Descrição |
|---|---|
| Proprietário dos Dados de Configuração do Aplicativo | Permite o acesso completo aos dados da Configuração de Aplicativos. |
| leitor de dados de configuração de aplicativo | Permite o acesso de leitura aos dados da Configuração de Aplicativos. |
| proprietário de dados dos Hubs de Eventos do Azure | Permite acesso total aos recursos dos Hubs de Eventos do Azure. |
| Receptor de Dados do Hubs de Eventos do Azure | Permite receber acesso aos recursos dos Hubs de Eventos do Azure. |
| Emissor de Dados dos Hubs de Eventos do Azure | Permite o envio de 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. |
| Receptor de Dados do Barramento de Serviço do Azure | Permite acesso de recebimento aos recursos do Barramento de Serviço do Azure. |
| Remetente de Dados do Barramento de Serviço do Azure | Permite acesso de envio aos recursos do Barramento de Serviço do Azure. |
| Proprietário de Dados de Blob de Armazenamento | Fornece acesso total a contêineres e dados de blob do Armazenamento do Azure, incluindo a atribuição de controle de acesso POSIX. |
| Leitor de Dados de Blob de Armazenamento | Ler e listar contêineres e blobs do Armazenamento do Azure. |
| Leitor de Dados da Fila de Armazenamento | Ler e listar filas do Armazenamento do Azure e mensagens de fila. |
| Colaborador do Cache Redis | Gerenciar caches Redis. |
Nota
Quando você usa o Spring Cloud Azure Resource Manager para obter as cadeias de conexão de Hubs de Eventos, Barramento de Serviço e Armazenamento de Filas, ou as propriedades do Cache for Redis, atribua a função interna do Azure Contributor. O Cache do Azure para Redis é especial, e você também pode atribuir a função Redis Cache Contributor para obter as propriedades do Redis.
Nota
Uma política de acesso do Key Vault determina se um determinado principal de segurança, isto é, um usuário, aplicativo ou grupo de usuários, pode realizar diferentes operações nos segredos, nas chaves e nos certificados do Key Vault. Você pode atribuir políticas de acesso usando o portal Azure, o CLI do Azure ou Azure PowerShell. Para obter mais informações, consulte Atribuir uma política de acesso do Key Vault.
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 o controle de acesso baseado em função com a ID do Microsoft Entra para sua conta do Azure Cosmos DB.
Autentique-se usando tokens SAS
Você também pode configurar serviços para autenticação usando SAS (Assinatura de Acesso Compartilhado). Use a propriedade spring.cloud.azure.<azure-service>.sas-token para configurar esta autenticação. Por exemplo, use spring.cloud.azure.storage.blob.sas-token para autenticar no serviço blob de armazenamento.
Autenticar usando cadeias de conexão
Alguns serviços Azure dão suporte a cadeias de conexão para fornecer informações de conexão e credenciais. Para se conectar a esses serviços Azure usando cadeias de conexão, configure spring.cloud.azure.<azure-service>.connection-string. Por exemplo, configure spring.cloud.azure.eventhubs.connection-string para conectar-se ao serviço Event Hubs.