Tutorial: Federar a identidade de uma carga de trabalho Google Cloud com o Microsoft Entra ID

Um serviço que corre no Google Cloud normalmente autentica-se para o Microsoft Entra ID com um segredo de aplicação Microsoft Entra armazenado para poder aceder aos recursos do Azure. Tem de proteger e rodar esse segredo, e o serviço sofre uma falha se o segredo expirar antes de o substituir.

A federação de identidade de carga de trabalho remove esse segredo armazenado. Configura uma aplicação Microsoft Entra para confiar no token de identificação que a Google emite para uma conta de serviço Google Cloud, e o seu serviço troca o token emitido pela Google por um token de acesso Microsoft Entra em vez de armazenar uma credencial.

Neste tutorial, identifica uma conta de serviço Google Cloud, federa-a com uma aplicação Microsoft Entra e troca um ID token emitido pela Google por um token de acesso Microsoft Entra que a sua carga de trabalho usa para chamar um recurso Azure, como o Armazenamento de Blobs do Azure.

O tutorial tem três partes sequenciais que se desenvolvem para um cenário completo. Cada peça depende da saída da peça anterior.

Neste tutorial, irá aprender a:

  • Identifique uma conta de serviço Google Cloud e obtenha o seu ID único.
  • Configure uma aplicação Microsoft Entra para confiar no token emitido pela Google.
  • Exchange um token Google ID por um token de acesso Microsoft Entra e acede a um recurso Azure.

O diagrama seguinte mostra o fluxo de federação da identidade da carga de trabalho: uma carga de trabalho recebe um token de um fornecedor externo de identidade, troca-o com a plataforma de identidades da Microsoft por um token de acesso e usa esse token para aceder a um recurso Azure. Neste tutorial, o fornecedor externo de identidade é o Google Cloud e o token é um token de identificação emitido pela Google.

Diagrama do fluxo de federação de identidade de carga de trabalho entre uma carga de trabalho externa, um fornecedor de identidade, a plataforma de identidades da Microsoft e o Azure.

Pré-requisitos

  • Um inquilino Microsoft Entra e uma subscrição do Azure. Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.
  • Um projeto Google Cloud e uma carga de trabalho que corre num serviço Google Cloud que pode obter um ID token para uma conta de serviço, como o App Engine ou o Compute Engine.
  • Acesso à consola Google Cloud com permissão para visualizar contas de serviço no IAM & Admin.
  • A ferramenta de linha de comandos CLI do Azure (az) instalada e configurada para chegar ao seu tenant. Também pode completar os passos do Microsoft Entra no centro de administração Microsoft Entra.
  • Permissão para adicionar uma credencial de identidade federada a um registo de aplicação ou identidade gerida. Para adicionar uma credencial federada ao registo de uma aplicação, a sua conta deve ser proprietária da aplicação ou ter uma das funções de Administrador de Aplicações, Desenvolvedor de Aplicações ou Administrador de Aplicações na Cloud , ou ter essa microsoft.directory/applications/credentials/update permissão.

Parte 1: Identificar uma conta de serviço Google Cloud

A sua carga de trabalho Google Cloud precisa de uma identidade para a qual a Google possa emitir tokens. As contas do serviço Google Cloud fornecem esta identidade. Use a conta de serviço padrão do seu projeto Google Cloud ou crie uma conta de serviço dedicada para a sua carga de trabalho.

A Google emite tokens de ID para uma conta de serviço onde a sub reivindicação (sujeita) é o ID único da conta de serviço e a iss reivindicação do (emitente) é https://accounts.google.com. Usa ambos os valores para configurar a confiança na aplicação Microsoft Entra na Parte 2.

  1. Na consola do Google Cloud, vá a IAM & Contas de Serviço de Administrador>.

  2. Seleciona a conta de serviço com a qual a tua carga de trabalho corre.

  3. Nos dados da conta de serviço, localize o seu ID Único e copie o valor. Este valor é a sub reivindicação nos tokens que a Google emite para a conta do serviço.

Regista o ID único como <service-account-unique-id>. Usa-o como tema da credencial de identidade federada na Parte 2.

Parte 2: Configure uma aplicação Microsoft Entra para confiar no token Google

Nesta parte, adiciona-se uma credencial de identidade federada a uma aplicação Microsoft Entra para que o Microsoft Entra ID confie nos tokens de identificação que a Google emite para a sua conta de serviço. Uma credencial de identidade federada necessita de três entradas:

  • subject: deve corresponder à sub reivindicação no token emitido pela Google — o ID único da conta do serviço, <service-account-unique-id>.
  • issuer: deve corresponder à iss reivindicação. Para o Google Cloud, este valor é https://accounts.google.com. O emissor deve cumprir a especificação de descoberta OpenID Connect, porque o Microsoft Entra ID utiliza o URL do emissor para obter as chaves que validam o token.
  • audiences: deve corresponder à aud reivindicação. Use o preço api://AzureADTokenExchangerecomendado pela Microsoft.

Uma aplicação Microsoft Entra suporta um número limitado de credenciais de identidade federada. Para o limite atual e outras restrições, veja Considerações e restrições importantes para credenciais de identidade federada.

  1. Crie um arquivo nomeado credential.json com o seguinte conteúdo. Substitua <service-account-unique-id> pelo ID único que copiou na Parte 1.

    {
      "name": "AccessFromGoogle",
      "issuer": "https://accounts.google.com",
      "subject": "<service-account-unique-id>",
      "audiences": ["api://AzureADTokenExchange"],
      "description": "Federated credential for a Google Cloud workload"
    }
    
  2. Adicione a credencial de identidade federada ao registo da sua candidatura. Substitua <your-app-id> pelo ID da Aplicação (cliente) do registo da sua aplicação.

    az ad app federated-credential create --id <your-app-id> --parameters credential.json
    

Também pode adicionar a credencial federada no centro de administração Microsoft Entra. Vá a Registos de aplicações your app Certificados & segredos credenciais federadasAdicionar credencial e selecione o cenário Outro emissor. Fornece https://accounts.google.com como emissor e o ID único da conta de serviço como sujeito. Para os passos detalhados, consulte Configurar uma aplicação para confiar num fornecedor de identidade externo.

Para configurar a credencial numa identidade gerida atribuída pelo utilizador em vez de um registo de aplicação, use o seguinte comando. Precisa do papel de Proprietário ou Contribuinte na identidade gerida. Para os passos detalhados, veja Configurar uma identidade gerida atribuída pelo utilizador para confiar num fornecedor externo de identidade.

az identity federated-credential create \
    --name AccessFromGoogle \
    --identity-name <your-identity-name> \
    --resource-group <your-resource-group> \
    --issuer https://accounts.google.com \
    --subject <service-account-unique-id> \
    --audience api://AzureADTokenExchange

Conceda à sua aplicação ou identidade gerida acesso aos recursos do Azure que a sua carga de trabalho acede, como uma atribuição de funções na sua conta de armazenamento.

Parte 3: Exchange um token Google por um token de acesso Microsoft Entra

Nesta parte, a sua carga de trabalho recebe um token ID emitido pela Google para a sua conta de serviço e troca-o por um token de acesso Microsoft Entra, que utiliza para chamar um recurso Azure.

Um serviço Google Cloud, como App Engine ou Compute Engine, solicita um token ID para a sua conta de serviço ao servidor de metadados Google. A Google gere as chaves de assinatura, por isso a sua carga de trabalho não precisa de chaves armazenadas.

  1. Solicite um token de identificação Google ao servidor de metadados. O público no pedido deve corresponder ao público que configurou na credencial de identidade federada, api://AzureADTokenExchange. O Node.js snippet seguinte pede o token e devolve-o como uma cadeia. O conceito é o mesmo em qualquer língua.

    async function getGoogleIdToken() {
      const endpoint =
        "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identity?audience=api://AzureADTokenExchange";
      const headers = { "Metadata-Flavor": "Google" };
      const response = await fetch(endpoint, { method: "GET", headers });
      return response.text();
    }
    
  2. Exchange o token Google ID por um token de acesso Microsoft Entra usando ClientAssertionCredential o Azure Identity SDK. ClientAssertionCredential recebe um callback que devolve a asserção federada — neste caso, o token ID do Google. Forneça o seu ID de inquilino Microsoft Entra como tenantId e o ID da Aplicação (cliente) do registo da aplicação como clientId.

    import { ClientAssertionCredential } from "@azure/identity";
    
    const credential = new ClientAssertionCredential(tenantId, clientId, getGoogleIdToken);
    
  3. Use a credencial com qualquer cliente SDK do Azure. Por exemplo, para chamar Armazenamento de Blobs do Azure:

    const { BlobServiceClient } = require("@azure/storage-blob");
    
    const blobClient = new BlobServiceClient(blobUrl, credential);
    

Quando o cliente precisa de um token, invoca o callback para obter um novo token de ID Google, troca o token Google com a plataforma de identidades da Microsoft por um token de acesso e armazena em cache o token de acesso resultante. Como ClientAssertionCredential fornece a declaração federada através de um retorno, a sua carga de trabalho nunca guarda segredo.

ClientAssertionCredentialestá disponível nos SDKs de Identidade do Azure, incluindo .NET, Java, JavaScript, Python e Go. As bibliotecas MSAL também suportam asserções do cliente caso precise de controlo de nível inferior sobre a troca de tokens.

A sua carga de trabalho Google Cloud pode agora aceder a recursos protegidos pela Microsoft Entra sem segredos guardados.

Limpeza de recursos

Se já não precisa dos recursos que criou neste tutorial, remova-os para evitar cobranças contínuas:

  • Elimine a credencial de identidade federada do registo da sua aplicação:

    az ad app federated-credential delete \
        --id <your-app-id> \
        --federated-credential-id AccessFromGoogle
    
  • Se criou uma conta dedicada ao serviço Google Cloud para este tutorial, elimine-a na consola Google Cloud em IAM & Contas de Serviço de Administrador>.

  • Remova quaisquer atribuições de funções que tenha adicionado para conceder à sua aplicação ou identidade gerida acesso aos recursos do Azure.