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.
Este artigo explica os métodos de autenticação do Spring Cloud Azure e ajuda-o a escolher o tipo de credencial certo para garantir o acesso aos recursos do Azure.
Autenticação e autorização com Microsoft Entra ID
Ao usar o Microsoft Entra ID, pode usar o controlo de acesso baseado em papéis do Azure (Azure RBAC) para conceder permissões a um principal de segurança, que pode ser um principal de utilizador ou de serviço de aplicação. Quando um principal de segurança (um utilizador ou uma aplicação) tenta aceder a um recurso Azure, como um recurso de Event Hubs, o pedido deve ser autorizado. Ao utilizar o Microsoft Entra ID, o acesso a um recurso é um processo em duas etapas:
- Primeiro, autenticar a identidade do principal de segurança e devolver um token OAuth 2.0.
- De seguida, passe o token como parte de um pedido ao serviço Azure para autorizar o acesso ao recurso especificado.
Tipos de credenciais
O Spring Cloud Azure permite-lhe configurar diferentes tipos de credenciais para autenticação, incluindo DefaultAzureCredential, WorkloadIdentityCredential, ManagedIdentityCredential, ClientSecretCredential, AzureCliCredential, e mais.
DefaultAzureCredential
DefaultAzureCredential é apropriado para a maioria dos cenários em que o aplicativo se destina a ser executado na Nuvem do Azure, porque combina as seguintes credenciais:
- Credenciais comumente usadas para autenticar quando implantadas.
- Credenciais usadas para autenticar em um ambiente de desenvolvimento.
Observação
DefaultAzureCredentialSimplifica o início do SDK do Azure ao lidar com cenários comuns com comportamentos padrão razoáveis. Se quiseres mais controlo ou se as definições padrão não suportarem o teu cenário, usa outros tipos de credenciais.
DefaultAzureCredential tenta autenticar através dos seguintes mecanismos, pela ordem:
- Ambiente -
DefaultAzureCredentialtenta ler a informação da conta especificada através de variáveis de ambiente e usá-la para autenticar. - Identidade Gerida - Se a aplicação for implementada num host Azure com Identidade Gerida ativada,
DefaultAzureCredentialtenta autenticar-se usando essa conta. - Identidade da Carga de Trabalho - Se a aplicação for implementada numa máquina virtual (VM),
DefaultAzureCredentialtenta autenticar-se usando essa conta. - Cache de Tokens Partilhados - Se autenticaste através do Visual Studio,
DefaultAzureCredentialtenta autenticar usando essa conta. - IntelliJ - Se autenticaste através do Azure Toolkit para IntelliJ,
DefaultAzureCredentialtenta autenticar usando essa conta. - CLI do Azure - Se autenticaste uma conta através do comando CLI do Azure
az login,DefaultAzureCredentialtenta autenticar usando essa conta. - Azure PowerShell - Se autenticaste através do Azure PowerShell,
DefaultAzureCredentialtenta autenticar usando essa conta. - Azure Developer CLI - Se autenticaste através da CLI do Azure Developer,
DefaultAzureCredentialtenta autenticar usando essa conta.
Dica
Verifique se a entidade de segurança tem permissão suficiente para acessar o recurso do Azure. Para obter mais informações, consulte Autorizar acesso com o Microsoft Entra ID.
Observação
Desde o Spring Cloud Azure AutoConfigure 4.1.0, você deve registrar um ThreadPoolTaskExecutor bean chamado springCloudAzureCredentialTaskExecutor para 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 feijão ThreadPoolTaskExecutor é independente do feijão Executor fornecido pela Spring Boot.
Identidades gerenciadas
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 gerenciadas eliminam a necessidade de gerenciar credenciais. As identidades gerenciadas fornecem uma identidade para os aplicativos usarem ao se conectarem a recursos que oferecem suporte à autenticação do Microsoft Entra. As aplicações podem usar a identidade gerida para obter tokens Microsoft Entra. Por exemplo, uma aplicação pode usar uma identidade gerida para aceder a recursos como o Azure Key Vault, onde pode armazenar credenciais de forma segura, ou para aceder a contas de armazenamento.
Usa identidade gerida em vez de usar cadeia de ligação ou key na tua aplicação porque é mais seguro e poupa o trabalho de gerir segredos e credenciais. Neste caso, DefaultAzureCredential serve melhor o cenário de desenvolver localmente usando a informação da conta armazenada localmente, depois implantando a aplicação no Azure Cloud e usando a identidade gerida.
Tipos de identidade gerenciados
Existem dois tipos de identidades gerenciadas:
- atribuído pelo sistema - Alguns serviços do Azure permitem habilitar uma identidade gerenciada diretamente em uma instância de serviço. Quando ativas uma identidade gerida atribuída ao sistema, crias uma identidade no Microsoft Entra que está ligada ao ciclo de vida dessa instância de serviço. Assim, quando apagas o recurso, o Azure apaga automaticamente a identidade por ti. Por design, apenas esse recurso do Azure pode usar essa identidade para solicitar tokens do Microsoft Entra ID.
- Atribuído pelo utilizador - Também pode criar uma identidade gerida como um recurso 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 as identidades geridas atribuídas pelo utilizador, geres a identidade separadamente dos recursos que a utilizam.
Observação
Ao usar uma identidade gerida atribuída pelo utilizador, especifique o ID do cliente através de spring.cloud.azure.credential.client-id ou spring.cloud.azure.<azure-service>.credential.client-id. Você não precisará de configuração de credenciais se usar uma identidade gerenciada atribuída ao sistema.
Dica
Para aceder ao recurso Azure, certifique-se de que o responsável de segurança tem permissão suficiente. 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 quiseres mais controlo do que o fornecido por DefaultAzureCredential, ou se as definições padrão não suportam o teu cenário, usa outros tipos de credenciais.
Autenticar com o Microsoft Entra ID
Para ligar aplicações a recursos que suportem autenticação Microsoft Entra, defina 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:
| Propriedade | Descrição |
|---|---|
client-id |
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. |
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 a identidade gerenciada deve ser habilitada. |
token-credential-bean-name |
O nome do bean do tipo TokenCredential usar 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 lugares para encontrar uma credencial disponível. Cada fábrica de construtores de clientes do SDK do Azure adota primeiro um bean personalizado do tipo TokenCredential se especificares a propriedade token-credential-bean-name, e volta a usar DefaultAzureCredential se não configurares propriedades de credenciais.
Autenticar usando um bean TokenCredential personalizado
O exemplo seguinte mostra como definir um grão 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 ao sistema
O exemplo seguinte mostra como autenticar usando uma identidade gerida atribuída pelo sistema:
spring.cloud.azure:
credential:
managed-identity-enabled: true
Autenticar usando uma identidade gerenciada atribuída pelo usuário
O exemplo seguinte mostra como autenticar usando uma identidade gerida atribuída pelo utilizador:
spring.cloud.azure:
credential:
managed-identity-enabled: true
client-id: ${AZURE_CLIENT_ID}
Autenticar usando uma entidade de serviço com segredo do cliente
O exemplo seguinte mostra como autenticar usando um principal de serviço com um cliente secreto:
spring.cloud.azure:
credential:
client-id: ${AZURE_CLIENT_ID}
client-secret: ${AZURE_CLIENT_SECRET}
profile:
tenant-id: <tenant>
Observação
Os valores permitidos para tenant-id são: common, organizations, consumersou 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 nodo 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 certificado de cliente
O exemplo seguinte mostra como autenticar usando um principal de serviço com um certificado PFX do 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>
Observação
Os valores permitidos para tenant-id são: common, organizations, consumersou 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 nodo 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 seguinte mostra como autenticar usando um principal de serviço com um certificado PEM de cliente:
spring.cloud.azure:
credential:
client-id: ${AZURE_CLIENT_ID}
client-certificate-path: ${AZURE_CLIENT_CERTIFICATE_PATH}
profile:
tenant-id: <tenant>
Observação
Os valores permitidos para tenant-id são: common, organizations, consumersou 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 nodo 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.
Autentique usando uma credencial de utilizador
O exemplo seguinte mostra como autenticar usando uma credencial de utilizador:
spring.cloud.azure:
credential:
client-id: ${AZURE_CLIENT_ID}
username: ${AZURE_USER_USERNAME}
password: ${AZURE_USER_PASSWORD}
Autentique um serviço usando uma credencial diferente da dos outros
O exemplo seguinte mostra como autenticar com o Key Vault usando um princípio 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 usa a entidade de serviço, mas quaisquer 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>
Observação
Os valores permitidos para tenant-id são: common, organizations, consumersou 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 nodo 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 atribuir um ou mais papéis Azure ao principal de segurança. Os papéis que atribui a um responsável de segurança determinam as permissões que o principal possui.
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ções | Descrição |
|---|---|
| do proprietário dos dados de configuração do aplicativo | Permite acesso total aos dados de Configuração do Aplicativo. |
| Leitor de Dados de Configuração de Aplicativo | Permite acesso de leitura aos dados de Configuração do Aplicativo. |
| do proprietário de dados dos Hubs de Eventos do Azure | Permite acesso total aos recursos dos Hubs de Eventos do Azure. |
| do Recetor de Dados dos Hubs de Eventos do Azure | Permite receber acesso aos recursos dos Hubs de Eventos do Azure. |
| do 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. |
| do Recetor de Dados do Barramento de Serviço do Azure | Permite receber acesso aos recursos do Barramento de Serviço do Azure. |
| do Remetente de Dados do Barramento de Serviço do Azure | Permite enviar acesso aos recursos do Barramento de Serviço do Azure. |
| do proprietário de dados de Blob de armazenamento | 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 de Blob de armazenamento | 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. |
| do Colaborador do Cache Redis | Gerencie caches Redis. |
Observação
Quando usar o Spring Cloud Azure Resource Manager para obter as strings de ligação para Event Hubs, Service Bus e Storage Queue, ou as propriedades do Cache for Redis, atribua o papel Contributorincorporado do Azure . 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.
Observação
Uma política de acesso ao Key Vault determina se um dado princípio de segurança, nomeadamente um utilizador, aplicação ou grupo de utilizadores, pode realizar operações diferentes sobre segredos, chaves e certificados do Key Vault. Pode atribuir políticas de acesso usando o portal 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 o controle de acesso baseado em função com a ID do Microsoft Entra para sua conta do Azure Cosmos DB.
Autentique usando tokens SAS
Também pode configurar serviços para autenticação usando a Assinatura de Acesso Partilhada (SAS). Use a spring.cloud.azure.<azure-service>.sas-token propriedade para configurar esta autenticação. Por exemplo, use spring.cloud.azure.storage.blob.sas-token para autenticar no serviço Storage Blob.
Autenticar usando cadeias de ligação
Alguns serviços do Azure suportam strings de ligação para fornecer informação e credenciais de ligação. Para se ligar a esses serviços do Azure usando strings de ligação, configure spring.cloud.azure.<azure-service>.connection-string. Por exemplo, configure spring.cloud.azure.eventhubs.connection-string para se conectar ao serviço Hubs de Eventos.