Identitätsföderation von Arbeitslasten

Dieses Dokument bietet eine Übersicht über die Identitätsföderation für externe Arbeitslasten. Mithilfe der Identitätsföderation können Sie lokalen oder Multi-Cloud-Arbeitslasten ohne Verwendung eines Dienstkontoschlüssels Zugriff auf Google Cloud-Ressourcen gewähren.

Sie können die Identitätsföderation mit Amazon Web Services (AWS) oder mit einem anderen Identitätsanbieter nutzen, der OpenID Connect (OIDC) wie Microsoft Azure unterstützt.

Warum eine Identitätsföderation?

Früher haben Anwendungen, die außerhalb von Google Cloud ausgeführt werden, Dienstkontoschlüssel für den Zugriff auf Google Cloud-Ressourcen verwendet. Dienstkontoschlüssel sind leistungsstarke Anmeldedaten und können ein Sicherheitsrisiko darstellen, wenn sie nicht ordnungsgemäß verwaltet werden.

Bei der Identitätsföderation können Sie externen Identitäten mithilfe der Identitäts- und Zugriffsverwaltung (IAM) IAM-Rollen zuweisen. Somit bietet sich auch die Möglichkeit, die Identität von Dienstkonten zu übernehmen. Auf diese Weise können Sie direkt mit einem kurzlebigen Zugriffstoken auf Ressourcen zugreifen und der mit Dienstkontoschlüsseln verbundene Wartungs- und Sicherheitsaufwand entfällt.

Identitätspools für Arbeitslasten

Mit einem Workload Identity-Pool können Sie externe Identitäten organisieren und verwalten.

Ein Projekt kann mehrere Identitätspools von Arbeitslasten umfassen und jeder Pool kann Zugriff auf verschiedene Ressourcen haben. So können Sie dem Grundsatz der geringsten Berechtigung folgen, indem Sie verwandte Identitäten im selben Pool gruppieren und ihnen dann detaillierten Zugriff auf Ressourcen gewähren.

Im Allgemeinen empfehlen wir, für jede Umgebung, die nicht Teil von Google Cloud ist und auf Google-Cloud Ressourcen zugreifen muss, beispielsweise Entwicklungs-, Staging- oder Produktionsumgebungen, einen neuen Pool zu erstellen.

Identitätsanbieter für Arbeitslasten

Ein Identitätsanbieter für Arbeitslasten ist eine Entität, die eine Beziehung zwischen Google Cloud und einem externen Identitätsanbieter beschreibt. Beispiele für solche Anbieter sind:

  • AWS
  • Azure Active Directory
  • Lokales Active Directory
  • Okta
  • Kubernetes-Cluster

Die Identitätsföderation von Arbeitslasten entspricht der Spezifikation des OAuth 2.0-Tokenaustauschs. Sie stellen dem Security Token Service Anmeldedaten von einem externen Identitätsanbieter bereit. Die Identität der Anmeldedaten wird geprüft und im Austausch wird ein föderiertes Token zurückgegeben.

Attributzuordnungen

Anmeldedaten enthalten in der Regel Attribute, die Informationen zur Identität bieten, z. B. Name, E-Mail-Adresse oder Nutzer-ID. Diese werden durch die Anmeldedaten bestätigt. Bei der Attributzuordnung werden die Attribute von einem Google-Token aus einem externen Token übernommen. So kann IAM Tokens von externen Anbietern verwenden, um den Zugriff auf Google Cloud-Ressourcen zu autorisieren.

Für AWS stellt Google Standardzuordnungen bereit, die die gängigsten Szenarien abdecken. Sie können auch benutzerdefinierte Zuordnungen bereitstellen.

Bei OIDC-Anbietern müssen Sie die Zuordnungen angeben. In der Dokumentation des Anbieters finden Sie eine Liste der Attribute zu seinen Anmeldedaten, damit Sie die Zuordnung erstellen können.

Die Attributzuordnung unterstützt die Common Expression Language (CEL), die es Ihnen ermöglicht, anhand der externen Anmeldedaten neue benutzerdefinierte Attribute zu definieren oder vorhandene Attribute besser lesbar zu machen. Die folgende Zuordnung definiert beispielsweise ein environment-Attribut auf der Grundlage, ob ein Amazon-Ressourcenname (ARN) :instance-profile/Production enthält:

attribute.environment=assertion.arn.contains(":instance-profile/Production") ? "prod" : "test"

Zugeordnete Attribute können in der ID eines Hauptkontos in einer IAM-Rollenbindung angezeigt werden. Sie können auch zugeordnete Attribute in der Attributbedingung für den Workload Identity-Poolanbieter verwenden, wie auf dieser Seite erläutert.

Der Schlüssel ist in jeder Zuordnung der Name eines Attributs eines Google-Tokens. Jedes Attribut muss einen der folgenden Namen haben:

  • google.subject: Die externe Identität, die von IAM authentifiziert wird. Dieser Wert wird auch in Audit-Logs angezeigt.

  • google.groups: Eine Liste von Gruppen, zu denen die externe Identität gehört. Mithilfe der Syntax, die unter Identitätsübertragung für ein Dienstkonto auf dieser Seite beschrieben wird, können Sie allen Mitgliedern einer Gruppe Zugriff gewähren.

  • attribute.NAME: Ein benutzerdefinierter Attributname. Ersetzen Sie NAME durch einen eindeutigen Namen für das Attribut.

Der Wert muss ein CEL-Ausdruck sein, der als gültiger CEL-Typ ausgewertet wird. Im CEL-Ausdruck bezieht sich das Schlüsselwort assertion auf eine Zuordnung, die die vom Identitätsanbieter ausgestellten Anmeldedaten zur Authentifizierung darstellt. Sie können die Punktnotation verwenden, um auf die Werte der Karte zuzugreifen. AWS-Anmeldedaten enthalten beispielsweise den Wert arn, auf den Sie als assertion.arn zugreifen können.

Weitere Informationen finden Sie in der API-Dokumentation zum Feld attributeMapping.

Attributbedingungen

Mit einer Attributbedingung können Sie einschränken, für welche Identitäten eine Authentifizierung über den Arbeitslastidentitätspool erfolgen kann. Mit einem CEL-Ausdruck können Sie die Attribute der Anmeldedaten einer Anfrage prüfen und entscheiden, ob der Zugriff gewährt wird.

Attributbedingungen sind in verschiedenen Szenarien hilfreich:

  • Wenn Ihre Arbeitslast einen Identitätsanbieter verwendet, der öffentlich verfügbar ist, können Sie den Zugriff so einschränken, dass nur die von Ihnen ausgewählten Identitäten Zugriff auf den Identitätspool der Arbeitslast haben.

  • Wenn Sie einen Identitätsanbieter mit mehreren Cloud-Plattformen verwenden, können Sie verhindern, dass Anmeldedaten, die für eine andere Plattform vorgesehen sind, für Google Cloud verwendet werden und umgekehrt. Dies trägt dazu bei, das Problem der Confused Deputy Attack zu vermieden.

Die Attributbedingung für einen Workload Identity-Poolanbieter kann das Schlüsselwort assertion verwenden, das sich auf eine Zuordnung bezieht, die die vom Identitätsanbieter ausgestellten Authentifizierungsdaten darstellt. Sie können für den Zugriff auf die Werte der Zuordnung die Punktnotation verwenden. AWS-Anmeldedaten enthalten beispielsweise den Wert arn, auf den Sie als assertion.arn zugreifen können. Darüber hinaus kann die Attributbedingung jedes Attribut verwenden, das in der Attributzuordnung des Anbieters definiert ist.

Im folgenden Beispiel sind nur Anfragen von Identitäten mit einer bestimmten AWS-Rolle zulässig:

attribute.aws_role == "ROLE_MAPPING"

Weitere Informationen finden Sie in der API-Dokumentation zum Feld attributeCondition.

Identitätsübertragung für ein Dienstkonto

Der Token-Austausch gibt ein föderiertes Zugriffstoken zurück. Sie können mit diesem Token die Identität eines Dienstkontos übernehmen und ein kurzlebiges OAuth 2.0-Zugriffstoken abrufen. Mit diesem Token können Sie alle Google Cloud APIs aufrufen, auf die das Dienstkonto Zugriff hat.

Um die Identität eines Dienstkontos zu übernehmen, weisen Sie der externen Identität die Rolle "Nutzer von Workload Identity" (roles/iam.workloadIdentityUser) für ein Dienstkonto zu, das die für die Arbeitslast erforderlichen Rollen hat. Sie können eine Rolle entweder allen Identitäten im Workload Identity-Pool einer Arbeitslast oder bestimmten externen Identitäten anhand ihrer Attribute zuweisen.

In der folgenden Tabelle sind häufig vorkommende Szenarien für das Zuweisen von Rollen beschrieben:

Identitäten ID-Format
Eine Identität principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/SUBJECT_NAME
Alle Identitäten in einer Gruppe principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/group/GROUP_NAME
Alle Identitäten mit einem bestimmten Attributwert principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.ATTRIBUTE_NAME/ATTRIBUTE_VALUE
Alle Identitäten in einem Pool principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/*

Nächste Schritte