Compartilhar via


Autenticação do Spring Cloud Azure

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 deve ser executado na Nuvem do Azure. Isso ocorre porque as DefaultAzureCredential credenciais combinadas comumente usadas para autenticar quando implantadas com credenciais usadas para autenticar em um ambiente de desenvolvimento.

Observação

DefaultAzureCredential destina-se a simplificar a introdução ao SDK, lidando com cenários comuns com comportamentos padrão aceitáveis. Se você quiser mais controle ou seu cenário não for atendido pelas configurações padrão, use outros tipos de credenciais.

DefaultAzureCredential tentará autenticar por meio dos seguintes mecanismos, nesta ordem:

Diagram showing the authentication mechanism for `DefaultAzureCredential`.

  • Ambiente – DefaultAzureCredential lerá as informações de conta especificadas por meio de variáveis de ambiente, usando-as para autenticação.
  • Identidade gerenciada – se o aplicativo for implantado em um host do Azure com identidade gerenciada habilitada, o DefaultAzureCredential será autenticado com essa conta.
  • IntelliJ – se você tiver autenticado usando o Azure Toolkit for IntelliJ, a DefaultAzureCredential será autenticada com essa conta.
  • Visual Studio Code – se você tiver autenticado usando o plug-in de conta do Azure do Visual Studio Code, a DefaultAzureCredential será autenticada com essa conta.
  • CLI do Azure – se você tiver autenticado uma conta por meio do comando az login da CLI do Azure, a DefaultAzureCredential será autenticada com essa conta.

Dica

Verifique se a entidade de segurança recebeu permissão suficiente para acessar o recurso do Azure. Para obter mais informações, confira Autorizar o acesso com o Microsoft Entra ID.

Observação

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 pelo Azure Identity. 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 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 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 Cofre de Chaves do Azure, onde você pode armazenar credenciais de maneira segura ou para acessar contas de armazenamento.

Incentivamos o uso de identidade gerenciada em vez de usar a cadeia de conexão ou a chave em seu aplicativo, pois ela é mais segura e economizará o trabalho de gerenciar segredos e credenciais. Nesse caso, poderia atender melhor ao cenário de desenvolvimento local usando informações de conta armazenadas localmente, DefaultAzureCredential implantando o aplicativo na Nuvem do Azure e usando a identidade gerenciada.

Tipos de identidade gerenciada

Há dois tipos de identidades gerenciadas:

  • Atribuído pelo sistema - Alguns serviços do Azure permitem que você habilite uma identidade gerenciada diretamente em uma instância de serviço. Quando você habilita uma identidade gerenciada atribuída pelo sistema, uma identidade é criada no Microsoft Entra vinculada ao ciclo de vida dessa instância de serviço. Assim, quando o recurso é excluído, o Azure exclui automaticamente a identidade para você. Por design, somente o 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 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 as identidades gerenciadas atribuídas pelo usuário, a identidade é gerenciada separadamente dos recursos que a usam.

Observação

Ao usar uma identidade gerenciada atribuída pelo usuário, você pode especificar a 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 pelo sistema.

Dica

Verifique se a entidade de segurança recebeu permissão suficiente para acessar o recurso do Azure. Para obter mais informações, confira 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 credenciais

Se você quiser mais controle ou seu cenário não for atendido pelas DefaultAzureCredential configurações padrão ou ou, use outros tipos de credenciais.

Autenticação e autorização com o Microsoft Entra ID

Com o Microsoft Entra ID, você pode usar o controle de acesso baseado em função do Azure (RBAC do Azure) 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:

  1. Primeiro, a identidade da entidade de segurança é autenticada e um token OAuth 2.0 é retornado.
  2. Em seguida, o token é passado como parte de uma solicitação ao serviço do Azure para autorizar o acesso ao recurso especificado.

Autenticação 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:

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.
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 Usuário 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.
gerenciado-identity-enabled Se deseja habilitar a identidade gerenciada.

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 procurará em vários lugares para encontrar uma credencial disponível e será usado DefaultAzureCredential se nenhuma propriedade de credencial estiver configurada. Se você quiser usar credenciais específicas, consulte os exemplos a seguir para obter orientação.

O exemplo a seguir mostra como autenticar usando uma identidade gerenciada atribuída pelo 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 do cliente:

spring.cloud.azure:
  credential:
    client-id: ${AZURE_CLIENT_ID}
    client-secret: ${AZURE_CLIENT_SECRET}
  profile:
    tenant-id: <tenant>

Observação

Os valores permitidos sãotenant-id: common, , , organizationsconsumersou 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 de organização) do 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 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>

Observação

Os valores permitidos sãotenant-id: common, , , organizationsconsumersou 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 de organização) do 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 certificado PEM do 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 sãotenant-id: common, , , organizationsconsumersou 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 de organização) do 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 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 de Chaves 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 Secreto do Cofre de Chaves 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>

Observação

Os valores permitidos sãotenant-id: common, , , organizationsconsumersou 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 de organização) do 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 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 terá.

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 de dados da configuração de aplicativos Permite o acesso completo aos dados de Configuração de Aplicativos.
Leitor de dados da configuração de aplicativos Permite o acesso de leitura aos dados de 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 dos Hubs de Eventos do Azure Permite acesso de recebimento aos recursos dos Hubs de Eventos do Azure.
Remetente de dados dos Hubs de Eventos do Azure Permite acesso de envio 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 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 de Dados do Blob de Armazenamento Fornece acesso completo aos dados e contêineres de blob do Armazenamento do Azure, incluindo a atribuição de controle de acesso POSIX.
Leitor de Dados do Blob de Armazenamento Leia e liste contêineres e blobs do Armazenamento do Azure.
Leitor de dados da fila de armazenamento Lê e lista as filas do armazenamento do Azure e as mensagens da fila.
Colaborador do Cache Redis Gerenciar caches Redis.

Observação

Ao usar o Gerenciador de Recursos do Azure do Spring Cloud para obter as cadeias de conexão para Hubs de Eventos, Barramento de Serviço e Fila de Armazenamento ou as propriedades de Cache para Redis, atribua a função Contributorinterna 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 Redis.

Observação

Uma política de acesso do Key Vault determina se certa entidade de segurança, ou seja, um usuário, um aplicativo ou um grupo de usuários, pode executar operações diferentes em segredos, chavese certificados do Key Vault. 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, confira 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.

Tokens SAS

Você também pode configurar serviços para autenticação com SAS (Assinatura de Acesso Compartilhado). 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 Blob de Armazenamento.

Cadeias de conexã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-stringo . Por exemplo, configure spring.cloud.azure.eventhubs.connection-string para se conectar ao serviço Hubs de Eventos.