Zelfstudie: Een Google Cloud-workloadidentiteit federeren met Microsoft Entra ID

Een service die in Google Cloud wordt uitgevoerd, wordt normaal gesproken geverifieerd bij Microsoft Entra ID met een opgeslagen Microsoft Entra toepassingsgeheim, zodat deze Azure resources kan bereiken. U moet dat geheim beveiligen en roteren en de service krijgt te maken met een storing als het geheim verloopt voordat u het vervangt.

Federatie van workloadidentiteit verwijdert dat opgeslagen geheim. U configureert een Microsoft Entra-toepassing om het id-token te vertrouwen dat Google uitgeeft aan een Google Cloud-serviceaccount en uw service wisselt het door Google uitgegeven token voor een Microsoft Entra toegangstoken in plaats van een referentie op te slaan.

In deze zelfstudie identificeert u een Google Cloud-serviceaccount, kunt u dit federeren met een Microsoft Entra-toepassing en een door Google uitgegeven id-token uitwisselen voor een Microsoft Entra-toegangstoken dat uw workload gebruikt om een Azure resource aan te roepen, zoals Azure Blob Storage.

De zelfstudie bevat drie opeenvolgende onderdelen die zijn gebouwd op één voltooid scenario. Elk onderdeel is afhankelijk van de uitvoer van het onderdeel ervoor.

In deze handleiding leert u:

  • Identificeer een Google Cloud-serviceaccount en haal de unieke id op.
  • Configureer een Microsoft Entra-toepassing om het door Google uitgegeven token te vertrouwen.
  • Exchange een Google ID-token voor een Microsoft Entra toegangstoken en toegang tot een Azure-resource.

In het volgende diagram ziet u de stroom voor de federatie van de workloadidentiteit: een workload haalt een token op van een externe id-provider, wisselt deze uit met de Microsoft identity platform voor een toegangstoken en gebruikt dat toegangstoken om een Azure resource te bereiken. In deze zelfstudie is de externe id-provider Google Cloud en het token is een door Google uitgegeven id-token.

Diagram van de stroom van de identiteitsfederatie van de workload tussen een externe workload, een id-provider, de Microsoft identity platform en Azure.

Prerequisites

  • Een Microsoft Entra-tenant en een Azure-abonnement. Als je geen Azure-abonnement hebt, maak dan een gratis account aan voordat je begint.
  • Een Google Cloud-project en een workload die wordt uitgevoerd op een Google Cloud-service die een id-token kan verkrijgen voor een serviceaccount, zoals App Engine of Compute Engine.
  • Toegang tot de Google Cloud-console met toestemming om serviceaccounts weer te geven in IAM & Admin.
  • Het opdrachtregelprogramma Azure CLI (az) is geïnstalleerd en geconfigureerd om uw tenant te bereiken. U kunt ook de Microsoft Entra stappen in de Microsoft Entra-beheercentrum voltooien.
  • Machtiging om een federatieve identiteitsreferentie toe te voegen aan een app-registratie of beheerde identiteit. Als u een federatieve referentie wilt toevoegen aan een app-registratie, moet uw account eigenaar zijn van de app of een van de rollen Toepassingsbeheerder, Toepassingsontwikkelaar of Cloudtoepassingsbeheerder hebben of over de microsoft.directory/applications/credentials/update machtiging beschikken.

Deel 1: Een Google Cloud-serviceaccount identificeren

Uw Google Cloud-workload heeft een identiteit nodig waarvoor Google tokens kan uitgeven. Google Cloud-serviceaccounts bieden deze identiteit. Gebruik het standaardserviceaccount van uw Google Cloud-project of maak een speciaal serviceaccount voor uw workload.

Google geeft id-tokens uit voor een serviceaccount waarbij de sub (onderwerp)-claim de unieke id van het serviceaccount is en de iss claim (verlener).https://accounts.google.com U gebruikt beide waarden om vertrouwensrelatie te configureren voor de Microsoft Entra-toepassing in deel 2.

  1. Ga in de Google Cloud-console naar IAM- enbeheerserviceaccounts>.

  2. Selecteer het serviceaccount dat door uw workload wordt uitgevoerd.

  3. Zoek op de details van het serviceaccount de unieke id en kopieer de waarde. Deze waarde is de sub claim in de tokens die Google uitgeeft voor het serviceaccount.

Noteer de unieke id als <service-account-unique-id>. U gebruikt deze als onderwerp van de federatieve identiteitsreferentie in deel 2.

Deel 2: Een Microsoft Entra-toepassing configureren om het Google-token te vertrouwen

In dit deel voegt u een federatieve identiteitsreferentie toe aan een Microsoft Entra toepassing, zodat Microsoft Entra ID de id-tokens vertrouwt die Google voor uw serviceaccount uitgeeft. Een federatieve identiteitsreferentie heeft drie invoer nodig:

  • subject: moet overeenkomen met de sub claim in het door Google uitgegeven token : de unieke id van het serviceaccount, <service-account-unique-id>.
  • issuer: moet overeenkomen met de iss claim. Voor Google Cloud is https://accounts.google.comdeze waarde . De verlener moet voldoen aan de OpenID Connect-detectiespecificatie, omdat Microsoft Entra ID de URL van de verlener gebruikt om de sleutels op te halen waarmee het token wordt gevalideerd.
  • audiences: moet overeenkomen met de aud claim. Gebruik de Microsoft aanbevolen waardeapi://AzureADTokenExchange.

Een Microsoft Entra-toepassing ondersteunt een beperkt aantal federatieve identiteitsreferenties. Zie Belangrijke overwegingen en beperkingen voor federatieve identiteitsreferenties voor de huidige limiet en andere beperkingen.

  1. Maak een bestand met de naam credential.json met de volgende inhoud. Vervang door <service-account-unique-id> de unieke id die u in deel 1 hebt gekopieerd.

    {
      "name": "AccessFromGoogle",
      "issuer": "https://accounts.google.com",
      "subject": "<service-account-unique-id>",
      "audiences": ["api://AzureADTokenExchange"],
      "description": "Federated credential for a Google Cloud workload"
    }
    
  2. Voeg de federatieve identiteitsreferenties toe aan uw app-registratie. Vervang door <your-app-id> de toepassings-id (client) van uw app-registratie.

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

U kunt ook de federatieve referentie toevoegen in de Microsoft Entra-beheercentrum. Ga naar App-registraties> uw app-certificaten> en geheimen >federatieve referenties>toevoegen en selecteer het scenario Andere verlener. Geef https://accounts.google.com als verlener en de unieke id van het serviceaccount op als onderwerp. Zie Een app configureren om een externe id-provider te vertrouwen voor de gedetailleerde stappen.

Gebruik de volgende opdracht om de referenties te configureren voor een door de gebruiker toegewezen beheerde identiteit in plaats van een app-registratie. U hebt de rol Eigenaar of Inzender voor de beheerde identiteit nodig. Zie Een door de gebruiker toegewezen beheerde identiteit configureren om een externe id-provider te vertrouwen voor gedetailleerde stappen.

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

Verdeel uw app of beheerde identiteit toegang tot de Azure resources die uw workload aanroept, zoals een roltoewijzing in uw opslagaccount.

Deel 3: een Google-token Exchange voor een Microsoft Entra-toegangstoken

In dit deel krijgt uw workload een door Google uitgegeven id-token voor het serviceaccount en wisselt deze uit voor een Microsoft Entra toegangstoken, dat wordt gebruikt om een Azure resource aan te roepen.

Een Google Cloud-service, zoals App Engine of Compute Engine, vraagt een id-token aan voor het serviceaccount van de Google-metagegevensserver. Google beheert de ondertekeningssleutels, zodat uw workload geen opgeslagen sleutels nodig heeft.

  1. Vraag een Google ID-token aan bij de metagegevensserver. De doelgroep in de aanvraag moet overeenkomen met de doelgroep die u hebt geconfigureerd op de federatieve identiteitsreferentie. api://AzureADTokenExchange Het volgende Node.js codefragment vraagt het token aan en retourneert het als een tekenreeks. Het concept is hetzelfde in elke taal.

    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 het Google ID-token voor een Microsoft Entra toegangstoken met behulp van ClientAssertionCredential de Azure Identity SDK. ClientAssertionCredential neemt een callback die de federatieve assertie retourneert, in dit geval het Google ID-token. Geef uw Microsoft Entra tenant-id op als tenantId en de toepassings-id (client)-id van de app-registratie als clientId.

    import { ClientAssertionCredential } from "@azure/identity";
    
    const credential = new ClientAssertionCredential(tenantId, clientId, getGoogleIdToken);
    
  3. Gebruik de referentie met een Azure SDK-client. Als u bijvoorbeeld Azure Blob Storage wilt aanroepen:

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

Wanneer de client een token nodig heeft, roept deze de callback aan om een nieuw Google ID-token op te halen, wisselt het Google-token uit met Microsoft identity platform voor een toegangstoken en slaat het resulterende toegangstoken in de cache op. Omdat ClientAssertionCredential de federatieve assertie wordt geleverd via een callback, slaat uw workload nooit een geheim op.

ClientAssertionCredentialis beschikbaar in de Azure Identity SDK's, waaronder .NET, Java, JavaScript, Python en Go. De MSAL-bibliotheken ondersteunen ook clientverklaringen als u controle op een lager niveau nodig hebt over de tokenuitwisseling.

Uw Google Cloud-workload heeft nu toegang tot Microsoft Entra beveiligde resources zonder opgeslagen geheimen.

De hulpbronnen opschonen

Als u de resources die u in deze zelfstudie hebt gemaakt niet meer nodig hebt, verwijdert u deze om doorlopende kosten te voorkomen:

  • Verwijder de federatieve identiteitsreferentie uit uw app-registratie:

    az ad app federated-credential delete \
        --id <your-app-id> \
        --federated-credential-id AccessFromGoogle
    
  • Als u voor deze zelfstudie een toegewezen Google Cloud-serviceaccount hebt gemaakt, verwijdert u dit in de Google Cloud-console onder IAM & Admin>Service Accounts.

  • Verwijder roltoewijzingen die u hebt toegevoegd om uw app of beheerde identiteit toegang te verlenen tot Azure resources.