Compartilhar via


Autenticar para Azure recursos de aplicativos Java hospedados localmente

Os aplicativos hospedados fora do Azure, como em um ambiente local ou em um data center de terceiros, devem usar uma entidade de serviço de aplicativo por meio de Microsoft Entra ID para autenticar nos serviços do Azure. Nas seções a seguir, você aprenderá:

  • Como registrar um aplicativo na Microsoft Entra para criar um principal de serviço.
  • Como atribuir funções a permissões dentro de um escopo.
  • Como autenticar usando um principal de serviço a partir do código do seu aplicativo.

Usando entidades de serviço de aplicativo dedicadas, você pode seguir o princípio do privilégio mínimo ao acessar recursos Azure. Limite as permissões aos requisitos específicos do aplicativo durante o desenvolvimento para impedir o acesso acidental a Azure recursos destinados a outros aplicativos ou serviços. Essa abordagem também ajuda você a evitar problemas ao mover o aplicativo para produção, garantindo que o aplicativo não tenha privilégios excessivos no ambiente de desenvolvimento.

Crie um registro de aplicativo diferente para cada ambiente em que você hospeda o aplicativo. Você pode configurar permissões de recursos específicas do ambiente para cada principal de serviço e garantir que um aplicativo desdobrado em um ambiente não acesse recursos do Azure em outro ambiente.

Registrar o aplicativo no Azure

Os objetos do service principal do aplicativo são criados por meio de um registro no Azure usando o portal do Azure ou o Azure CLI.

  1. No portal Azure, use a barra de pesquisa para navegar até a página App registrations.

  2. Na página App registrations, selecione + Novo registro.

  3. Na página Registrar um aplicativo:

    • Para o campo Nome, insira um valor descritivo que inclui o nome do aplicativo e o ambiente de destino.
    • Para os Tipos de conta com suporte, selecione Contas somente neste diretório organizacional (somente cliente da Microsoft – Locatário único) ou qualquer opção que melhor atenda às suas necessidades.
  4. Selecione Registrar para registrar seu aplicativo e criar a entidade de serviço.

    Uma captura de tela mostrando como criar um registro de aplicativo no portal do Azure.

  5. Na página Registro do aplicativo , copie a ID do aplicativo (cliente) e a ID do diretório (locatário) e cole-as em um local temporário para uso posterior nas configurações do código do aplicativo.

  6. Selecione Adicionar um certificado ou um secreto para configurar credenciais para seu aplicativo.

  7. Na página Certificados e segredos, selecione + Novo segredo do cliente.

  8. No painel de submenu Adicionar um segredo do cliente que se abre:

    • Para a Descrição, insira um valor de Current.
    • Para o valor Expira, deixe o valor padrão recomendado como 180 days.
    • Selecione Adicionar para adicionar o segredo.
  9. Na página Certificados e segredos, copie a propriedade Value do segredo do cliente para uso em uma etapa futura.

    Observação

    O valor do segredo do cliente só é exibido uma vez depois que o registro do aplicativo é criado. Você pode adicionar mais segredos do cliente sem invalidar esse segredo do cliente, mas não há como exibir esse valor novamente.

Atribuir funções ao principal de serviço do aplicativo

Em seguida, determine quais funções (permissões) seu aplicativo precisa em quais recursos e atribua essas funções à entidade de serviço que você criou. As funções podem ser atribuídas no escopo de um recurso, de um grupo de recursos ou de uma assinatura. Este exemplo mostra como atribuir funções no escopo do grupo de recursos, já que a maioria dos aplicativos agrupa todos os seus recursos Azure em um único grupo de recursos.

  1. No portal Azure, navegue até a página Overview do grupo de recursos que contém seu aplicativo.

  2. Selecione Controle de acesso (IAM) na navegação à esquerda.

  3. Na página controle de acesso (IAM), selecione + Adicionar e escolha Adicionar atribuição de função no menu suspenso. A página Adicionar atribuição de função fornece várias guias para configurar e atribuir funções.

  4. Na guia Função , use a caixa de pesquisa para localizar a função que você deseja atribuir. Selecione a função e escolha Avançar.

  5. Na guia Membros :

    • Para atribuir acesso ao valor, selecione Usuário, grupo ou entidade de serviço .
    • Para o valor Membros, escolha + Selecionar membros para abrir o painel de seleção Selecionar membros.
    • Pesquise a entidade de serviço que você criou anteriormente e selecione-a nos resultados filtrados. Escolha Selecionar para escolher o grupo e fechar o painel de menu.
    • Selecione Examinar + atribuir na parte inferior da guia Membros .

    Uma captura de tela mostrando como atribuir uma função à entidade de serviço.

  6. Na guia Revisão + atribuição , selecione Examinar + atribuir na parte inferior da página.

Definir as variáveis de ambiente do aplicativo

Durante a execução, determinadas credenciais da biblioteca Azure Identity, como DefaultAzureCredential, EnvironmentCredential e ClientSecretCredential, pesquisam informações do principal de serviço por convenção nas variáveis de ambiente. Ao trabalhar com Java, você pode configurar variáveis de ambiente de várias maneiras, dependendo de suas ferramentas e ambiente.

Independentemente da abordagem escolhida, configure as seguintes variáveis de ambiente para uma entidade de serviço:

  • AZURE_CLIENT_ID: usado para identificar o aplicativo registrado no Azure.
  • AZURE_TENANT_ID: O ID do locatário do Microsoft Entra.
  • AZURE_CLIENT_SECRET: a credencial secreta que foi gerada para o aplicativo.

Defina as variáveis de ambiente a seguir. Substitua os valores de placeholder pelos valores reais do cadastro do aplicativo:

export AZURE_CLIENT_ID="<your-client-id>"
export AZURE_TENANT_ID="<your-tenant-id>"
export AZURE_CLIENT_SECRET="<your-client-secret>"

Para um aplicativo Java em execução como um serviço sistemado em um servidor de produção, defina as variáveis de ambiente em um arquivo e faça referência a ele com a diretiva EnvironmentFile no arquivo de unidade de serviço:

[Unit]
Description=Java application service
After=network.target

[Service]
User=app-user
WorkingDirectory=/path/to/java-app
EnvironmentFile=/path/to/java-app/app-environment-variables
ExecStart=/usr/bin/java -jar app.jar

[Install]
WantedBy=multi-user.target

O arquivo de ambiente deve conter uma lista de variáveis de ambiente com seus valores:

AZURE_CLIENT_ID=<your-client-id>
AZURE_TENANT_ID=<your-tenant-id>
AZURE_CLIENT_SECRET=<your-client-secret>

Autenticar nos serviços do Azure a partir do seu aplicativo

A biblioteca Azure Identity fornece várias credenciais - implementações de TokenCredential que dão suporte a diferentes cenários e fluxos de autenticação do Microsoft Entra. As etapas a seguir mostram como usar ClientSecretCredential ao trabalhar com entidades de serviço tanto localmente quanto em produção.

Implementar o código

Adicione a dependência azure-identity ao arquivo pom.xml:

<dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-identity</artifactId>
</dependency>

Você acessa Azure serviços usando classes de cliente especializadas das várias bibliotecas de cliente Azure SDK. Para qualquer código Java que crie um objeto cliente Azure SDK em seu aplicativo, siga estas etapas:

  1. Importe a ClientSecretCredentialBuilder classe do com.azure.identity pacote.
  2. Crie um ClientSecretCredential objeto usando ClientSecretCredentialBuilder com o tenantId, clientIde clientSecret.
  3. Passe a instância de ClientSecretCredential para o método credential do construtor de objetos do cliente Azure SDK.

Um exemplo dessa abordagem é mostrado no seguinte segmento de código:

import com.azure.identity.ClientSecretCredential;
import com.azure.identity.ClientSecretCredentialBuilder;
import com.azure.storage.blob.BlobServiceClient;
import com.azure.storage.blob.BlobServiceClientBuilder;

String tenantId = System.getenv("AZURE_TENANT_ID");
String clientId = System.getenv("AZURE_CLIENT_ID");
String clientSecret = System.getenv("AZURE_CLIENT_SECRET");

ClientSecretCredential credential = new ClientSecretCredentialBuilder()
    .tenantId(tenantId)
    .clientId(clientId)
    .clientSecret(clientSecret)
    .build();

BlobServiceClient blobServiceClient = new BlobServiceClientBuilder()
    .endpoint("https://<account-name>.blob.core.windows.net")
    .credential(credential)
    .buildClient();