Samouczek: Federowanie tożsamości obciążenia usługi Google Cloud za pomocą Microsoft Entra ID

Usługa działająca w usłudze Google Cloud zwykle uwierzytelnia się w Microsoft Entra ID za pomocą przechowywanego wpisu tajnego aplikacji Microsoft Entra, aby mogła uzyskiwać dostęp do Azure zasobów. Musisz chronić i obracać ten wpis tajny, a usługa napotyka awarię, jeśli wpis tajny wygaśnie przed jego zastąpieniem.

Federacja tożsamości obciążenia usuwa przechowywany wpis tajny. Skonfigurujesz aplikację Microsoft Entra, aby ufała tokenowi identyfikatora wystawianego przez firmę Google na koncie usługi Google Cloud, a usługa wymienia token wystawiony przez firmę Google dla tokenu dostępu Microsoft Entra zamiast przechowywania poświadczeń.

W tym samouczku zidentyfikujesz konto usługi Google Cloud, sfederujesz je z aplikacją Microsoft Entra i wymieniasz token identyfikatora wystawionego przez firmę Google dla tokenu dostępu Microsoft Entra używanego przez obciążenie do wywoływania zasobu Azure, takiego jak Azure Blob Storage.

Samouczek zawiera trzy sekwencyjne części, które są kompilujące do jednego ukończonego scenariusza. Każda część zależy od danych wyjściowych części przed nią.

W tym samouczku nauczysz się następujących rzeczy:

  • Zidentyfikuj konto usługi Google Cloud i uzyskaj jego unikatowy identyfikator.
  • Skonfiguruj aplikację Microsoft Entra, aby ufała wystawionemu przez firmę Google tokenowi.
  • Exchange token identyfikatora Google dla tokenu dostępu Microsoft Entra i uzyskiwania dostępu do zasobu Azure.

Na poniższym diagramie przedstawiono przepływ federacji tożsamości obciążenia: obciążenie pobiera token od zewnętrznego dostawcy tożsamości, wymienia go z Platforma tożsamości Microsoft tokenu dostępu i używa tego tokenu dostępu, aby uzyskać dostęp do zasobu Azure. W tym samouczku zewnętrzny dostawca tożsamości to Google Cloud, a token jest tokenem identyfikatora wystawionego przez firmę Google.

Diagram przepływu federacji tożsamości obciążenia między obciążeniem zewnętrznym, dostawcą tożsamości, Platforma tożsamości Microsoft i Azure.

Wymagania wstępne

  • Dzierżawa Microsoft Entra i subskrypcja Azure. Jeśli nie masz subskrypcji Azure, przed rozpoczęciem utwórz darmowe konto.
  • Projekt Google Cloud i obciążenie uruchamiane w usłudze Google Cloud, które może uzyskać token identyfikatora dla konta usługi, takiego jak App Engine lub Compute Engine.
  • Dostęp do konsoli Google Cloud z uprawnieniami do wyświetlania kont usług w usłudze IAM i administrator.
  • Zainstalowane i skonfigurowane do nawiązania połączenia z dzierżawą narzędzie wiersza polecenia Azure CLI (az). Możesz również wykonać kroki Microsoft Entra w centrum administracyjne Microsoft Entra.
  • Uprawnienie do dodawania poświadczeń tożsamości federacyjnej do rejestracji aplikacji lub tożsamości zarządzanej. Aby dodać poświadczenie federacyjne do rejestracji aplikacji, twoje konto musi być właścicielem aplikacji lub posiadać jedną z ról administratora aplikacji, dewelopera aplikacji lub administratora aplikacji w chmurze albo mieć microsoft.directory/applications/credentials/update uprawnienie.

Część 1. Identyfikowanie konta usługi Google Cloud

Obciążenie Google Cloud wymaga tożsamości, dla których firma Google może wystawiać tokeny. Konta usług Google Cloud zapewniają tę tożsamość. Użyj domyślnego konta usługi projektu Google Cloud lub utwórz dedykowane konto usługi dla obciążenia.

Firma Google wystawia tokeny identyfikatorów dla konta usługi, w którym sub oświadczenie (podmiotu) jest unikatowym identyfikatorem konta usługi, a oświadczenie (wystawcy iss ) to https://accounts.google.com. Obie wartości służą do konfigurowania zaufania w aplikacji Microsoft Entra w części 2.

  1. W konsoli Google Cloud przejdź do pozycji Kontausługzarządzania dostępem i tożsamościami i administratorami>.

  2. Wybierz konto usługi, w ramach którego działa obciążenie.

  3. W szczegółach konta usługi znajdź jego unikatowy identyfikator i skopiuj wartość. Ta wartość jest oświadczeniem sub w tokenach, które firma Google wystawia na koncie usługi.

Zarejestruj unikatowy identyfikator jako <service-account-unique-id>. Używasz go jako podmiotu poświadczeń tożsamości federacyjnej w części 2.

Część 2. Konfigurowanie aplikacji Microsoft Entra w celu zaufania tokenowi Google

W tej części dodasz poświadczenie tożsamości federacyjnej do aplikacji Microsoft Entra, aby Microsoft Entra ID ufać tokenom identyfikatorów, które firma Google wystawia na koncie usługi. Poświadczenie tożsamości federacyjnej wymaga trzech danych wejściowych:

  • subject: musi być zgodny z oświadczeniem sub w tokenie wystawionym przez firmę Google — unikatowym identyfikatorem konta usługi. <service-account-unique-id>
  • issuer: musi być zgodny z oświadczeniem iss . W przypadku usługi Google Cloud ta wartość to https://accounts.google.com. Wystawca musi być zgodny ze specyfikacją odnajdywania OpenID Connect, ponieważ Microsoft Entra ID używa adresu URL wystawcy do pobierania kluczy, które weryfikują token.
  • audiences: musi być zgodny z oświadczeniem aud . Użyj zalecanej wartości api://AzureADTokenExchangeMicrosoft .

Aplikacja Microsoft Entra obsługuje ograniczoną liczbę poświadczeń tożsamości federacyjnej. Aby uzyskać informacje o bieżącym limicie i innych ograniczeniach, zobacz Ważne zagadnienia i ograniczenia dotyczące poświadczeń tożsamości federacyjnej.

  1. Utwórz plik o nazwie credential.json z następującą zawartością. Zastąp <service-account-unique-id> element unikatowym identyfikatorem skopiowanymi w części 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. Dodaj poświadczenia tożsamości federacyjnej do rejestracji aplikacji. Zastąp ciąg <your-app-id> identyfikatorem aplikacji rejestracji aplikacji (klienta).

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

Możesz również dodać poświadczenie federacyjne w centrum administracyjne Microsoft Entra. Przejdź do Rejestracje aplikacji> aplikacji >Certyfikaty i wpisy tajne>Federacyjne poświadczenia>Dodaj poświadczenia, a następnie wybierz scenariusz Inny wystawca. Podaj https://accounts.google.com jako wystawcę i unikatowy identyfikator konta usługi jako podmiot. Aby uzyskać szczegółowe instrukcje, zobacz Konfigurowanie aplikacji pod kątem zaufania zewnętrznemu dostawcy tożsamości.

Aby skonfigurować poświadczenia w tożsamości zarządzanej przypisanej przez użytkownika zamiast rejestracji aplikacji, użyj następującego polecenia. Potrzebna jest rola Właściciel lub Współautor w tożsamości zarządzanej. Aby uzyskać szczegółowe instrukcje, zobacz Konfigurowanie tożsamości zarządzanej przypisanej przez użytkownika w celu zaufania zewnętrznemu dostawcy tożsamości.

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

Przyznaj aplikacji lub tożsamości zarządzanej dostęp do zasobów Azure wywoływanych przez obciążenie, takich jak przypisanie roli na koncie magazynu.

Część 3: Exchange token Google dla tokenu dostępu Microsoft Entra

W tej części obciążenie pobiera token identyfikatora wystawionego przez firmę Google dla konta usługi i wymienia go na token dostępu Microsoft Entra, którego używa do wywoływania zasobu Azure.

Usługa Google Cloud, taka jak App Engine lub Compute Engine, żąda tokenu identyfikatora dla konta usługi z serwera metadanych Google. Firma Google zarządza kluczami podpisywania, więc obciążenie nie wymaga przechowywanych kluczy.

  1. Zażądaj tokenu identyfikatora Google z serwera metadanych. Odbiorcy w żądaniu muszą być zgodni z odbiorcami skonfigurowanymi na poświadczeniu tożsamości federacyjnej. api://AzureADTokenExchange Poniższy fragment kodu Node.js żąda tokenu i zwraca go jako ciąg. Koncepcja jest taka sama w dowolnym języku.

    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 token identyfikatora Google dla tokenu dostępu Microsoft Entra przy użyciu zestawu ClientAssertionCredential AZURE Identity SDK. ClientAssertionCredential pobiera wywołanie zwrotne, które zwraca asercję federacyjną — w tym przypadku token identyfikatora Google. Podaj identyfikator dzierżawy Microsoft Entra jako tenantId i identyfikator aplikacji rejestracji aplikacji (klienta) jako clientId.

    import { ClientAssertionCredential } from "@azure/identity";
    
    const credential = new ClientAssertionCredential(tenantId, clientId, getGoogleIdToken);
    
  3. Użyj poświadczeń z dowolnym klientem Azure SDK. Aby na przykład wywołać Azure Blob Storage:

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

Gdy klient potrzebuje tokenu, wywołuje wywołanie zwrotne, aby pobrać nowy token identyfikatora Google, wymienia token Google z Platforma tożsamości Microsoft dla tokenu dostępu i buforuje wynikowy token dostępu. Ponieważ ClientAssertionCredential dostarcza asercji federacyjnej za pośrednictwem wywołania zwrotnego, obciążenie nigdy nie przechowuje wpisu tajnego.

ClientAssertionCredentialjest dostępny w zestawach SDK Azure Identity, w tym .NET, Java, JavaScript, Python i Go. Biblioteki bibliotek MSAL obsługują również asercji klientów, jeśli potrzebujesz kontroli niższego poziomu nad wymianą tokenów.

Obciążenie Google Cloud może teraz uzyskiwać dostęp do Microsoft Entra chronionych zasobów bez przechowywanych wpisów tajnych.

Uprzątnij zasoby

Jeśli nie potrzebujesz już zasobów utworzonych w tym samouczku, usuń je, aby uniknąć bieżących opłat:

  • Usuń poświadczenia tożsamości federacyjnej z rejestracji aplikacji:

    az ad app federated-credential delete \
        --id <your-app-id> \
        --federated-credential-id AccessFromGoogle
    
  • Jeśli na potrzeby tego samouczka utworzono dedykowane konto usługi Google Cloud, usuń je w konsoli Usługi Google Cloud w obszarzeKonta usługzarządzania dostępem i tożsamościami i administratorami>.

  • Usuń wszystkie dodane przypisania ról, aby udzielić aplikacji lub tożsamości zarządzanej dostępu do zasobów Azure.