GKE-Anwendungen und -Ressourcen mit IAP sichern.

Auf dieser Seite wird erläutert, wie eine Google Kubernetes Engine-Instanz (GKE) mit Identity-Aware Proxy (IAP) geschützt wird.

Informationen zum Schutz von Ressourcen, die nicht in Google Cloud gespeichert sind, finden Sie unter Lokale Anwendungen und Ressourcen sichern.

Übersicht

IAP wird über Ingress für GKE eingebunden. Damit können Sie den Zugriff für Mitarbeiter auf Ressourcenebene steuern, anstatt ein VPN zu verwenden.

In einem GKE-Cluster wird eingehender Traffic von HTTP(S)-Load-Balancing verarbeitet, einer Komponente von Cloud Load Balancing. Der HTTP(S)-Load-Balancer wird normalerweise vom Kubernetes Ingress-Controller konfiguriert. Der Ingress-Controller ruft Konfigurationsinformationen von einem Kubernetes-Ingress-Objekt ab, das einem oder mehreren Dienstobjekten zugeordnet ist. Jedes Serviceobjekt enthält Routinginformationen, mit denen eingehende Anfragen an einen bestimmten Pod und Port weitergeleitet werden können.

Ab Kubernetes Version 1.10.5-gke.3 können Sie eine Konfiguration für den Load-Balancer hinzufügen. Ordnen Sie dazu einem BackendConfig-Objekt einen Dienst zu. BackendConfig ist eine benutzerdefinierte Ressourcendefinition, die im Repository kubernetes/ingress-gce festgelegt wird.

Der Kubernetes Ingress-Controller liest die Konfigurationsinformationen aus BackendConfig und richtet den Load-Balancer entsprechend ein. BackendConfig enthält für Cloud Load Balancing spezifische Konfigurationsinformationen, mit denen Sie eine separate Konfiguration für jeden Back-End-Dienst des HTTP(S)-Load-Balancing definieren können.

Vorbereitung

Zum Aktivieren von IAP für GKE benötigen Sie Folgendes:

  • Ein Google Cloud Console-Projekt mit aktivierter Abrechnung.
  • Eine Gruppe mit einer oder mehreren GKE-Instanzen, die von einem HTTPS-Load-Balancer bereitgestellt werden. Der Load-Balancer sollte automatisch erstellt werden, wenn Sie in einem GKE-Cluster ein Ingress-Objekt erstellen.
  • Einen Domainnamen, der für die Adresse des Load-Balancers registriert ist.
  • Anwendungscode, der überprüft, ob alle Anfragen eine Identität haben.

IAP aktivieren

OAuth-Zustimmungsbildschirm konfigurieren

Wenn Sie den OAuth-Zustimmungsbildschirm Ihres Projekts nicht konfiguriert haben, müssen Sie dies nachholen. Für den OAuth-Zustimmungsbildschirm sind eine E-Mail-Adresse und ein Produktname erforderlich.

  1. Rufen Sie den OAuth-Zustimmungsbildschirm auf.
    Zustimmungsbildschirm konfigurieren
  2. Wählen Sie unter Support-E-Mail-Adresse die E-Mail-Adresse aus, die als öffentlicher Kontakt angezeigt werden soll. Dies muss Ihre E-Mail-Adresse oder die einer Google-Gruppe sein, deren Inhaber Sie sind.
  3. Geben Sie unter Name der Anwendung den Namen der Anwendung ein, der angezeigt werden soll.
  4. Fügen Sie nach Belieben weitere Details hinzu.
  5. Klicken Sie auf Speichern.

Zum Ändern von Informationen im OAuth-Zustimmungsbildschirm wie Produktname oder E-Mail-Adresse müssen Sie die vorherigen Schritte zur Konfiguration des Zustimmungsbildschirms wiederholen.

OAuth-Anmeldedaten erstellen

  1. Rufen Sie die Seite Anmeldedaten auf.
    Zur Seite "Anmeldedaten"
  2. Wählen Sie in der Drop-down-Liste Anmeldedaten erstellen die Option OAuth-Client-ID aus.
  3. Wählen Sie unter Anwendungstyp die Option Webanwendung aus.
  4. Fügen Sie unter Name einen Namen für Ihre OAuth-Client-ID hinzu.
  5. Klicken Sie auf Erstellen. Ihre OAuth-Client-ID und Ihr Clientschlüssel werden generiert und im Fenster OAuth-Client angezeigt.
  6. Klicken Sie auf OK.
  7. Wählen Sie den von Ihnen erstellten Client aus.
  8. Kopieren Sie die Client-ID in die Zwischenablage.
  9. Fügen Sie die universelle Weiterleitungs-URL im Feld Autorisierte Weiterleitungs-URIs im folgenden Format hinzu:
    https://iap.googleapis.com/v1/oauth/clientIds/CLIENT_ID:handleRedirect

    Dabei ist CLIENT_ID die OAuth-Client-ID.

  10. Klicken Sie oben auf der Seite auf JSON herunterladen. Sie benötigen diese Anmeldedaten in einem späteren Schritt.

IAP-Zugriff einrichten

  1. Rufen Sie die Seite Identity-Aware Proxy auf.
    Zur Seite "Identity-Aware Proxy"
  2. Wählen Sie das Projekt aus, das Sie mit IAP sichern möchten.
  3. Aktivieren Sie das Kästchen neben der Ressource, die neue Mitglieder erhalten soll.
  4. Klicken Sie auf der rechten Seite auf Mitglied hinzufügen.
  5. Fügen Sie im daraufhin angezeigten Dialogfeld Mitglieder hinzufügen die E-Mail-Adressen von Nutzergruppen oder einzelnen Nutzern hinzu, denen Sie für das Projekt die Rolle Nutzer von IAP-gesicherten Web-Apps zuweisen möchten.

    Folgende Kontoarten sind als Mitglieder zulässig:

    • Google-Konto: nutzer@gmail.com
    • Google Group: admins@googlegroups.com
    • Dienstkonto: server@example.gserviceaccount.com
    • Google Workspace-Domain: example.com

    Fügen Sie unbedingt ein Google-Konto hinzu, auf das Sie zugreifen können.

  6. Wählen Sie in der Drop-down-Liste Rollen den Eintrag Cloud IAP > Nutzer von IAP-gesicherten Web-Apps aus.
  7. Klicken Sie auf Speichern.

BackendConfig konfigurieren

Erstellen Sie ein Kubernetes-Secret und fügen dann einen iap-Block zu BackendConfig hinzu, um BackendConfig für IAP zu konfigurieren.

Ein Kubernetes-Secret erstellen

BackendConfig verwendet ein Kubernetes-Secret, um den zuvor erstellten OAuth-Client zu verpacken. Kubernetes-Secrets werden wie andere Kubernetes-Objekte mithilfe der kubectl-Befehlszeile verwaltet. Mit folgendem Befehl erstellen Sie ein Secret, wobei client_id_key und client_secret_key die Schlüssel aus der JSON-Datei sind, die Sie beim Erstellen der OAuth-Anmeldedaten heruntergeladen haben:

kubectl create secret generic my-secret --from-literal=client_id=client_id_key \
    --from-literal=client_secret=client_secret_key

Mit dem vorherigen Befehl wird eine Ausgabe angezeigt, um zu bestätigen, dass das Secret erfolgreich erstellt wurde:

secret "my-secret" created

Einen iap-Block zu BackendConfig hinzufügen

Zum Konfigurieren von BackendConfig für IAP müssen Sie die Werte enabled und secretName angeben. Achten Sie darauf, dass Sie die Berechtigung compute.backendServices.update haben, und fügen Sie BackendConfig den iap-Block hinzu, um diese Werte festzulegen. In diesem Block ist my-secret der Name zuvor erstellten Kubernetes-Secrets:

apiVersion: cloud.google.com/v1
kind: BackendConfig
metadata:
  name: config-default
  namespace: my-namespace
spec:
  iap:
    enabled: true
    oauthclientCredentials:
      secretName: my-secret

Zum Aktivieren von IAP müssen Sie noch Dienstports mit Ihrer BackendConfig verknüpfen. Sie können diese Verknüpfung dadurch herstellen, dass Sie Ihre BackendConfig als Standardeinstellung für alle Ports angeben. Fügen Sie Ihrer Dienstressource hierfür folgende Annotation hinzu:

metadata:
  annotations:
    beta.cloud.google.com/backend-config: '{"default": "config-default"}'

Führen Sie kubectl get event aus, um die Konfiguration zu testen. Wird die Meldung "no BackendConfig for service port exists" angezeigt, haben Sie den Dienstport erfolgreich mit Ihrer BackendConfig verknüpft, die BackendConfig-Ressource wurde jedoch nicht gefunden. Dieser Fehler kann auftreten, wenn Sie die BackendConfig-Ressource gar nicht oder im falschen Namespace erstellt haben oder den Verweis in der Dienstannotation falsch geschrieben haben.

Wenn der von Ihnen referenzierte secretName nicht existiert oder nicht richtig strukturiert ist, wird eine der folgenden Fehlermeldungen angezeigt:

  • BackendConfig default/config-default is not valid: error retrieving secret "foo": secrets "foo" not found. Dieser Fehler lässt sich beheben, indem Sie dafür sorgen, dass das Kubernetes-Secret wie im letzten Abschnitt beschrieben korrekt erstellt wurde.
  • BackendConfig default/config-default is not valid: secret "foo" missing client_secret data. Dieser Fehler lässt sich beheben, indem Sie dafür sorgen, dass die OAuth-Anmeldedaten korrekt erstellt wurden. Prüfen Sie außerdem, ob Sie in der zuvor heruntergeladenen JSON-Datei die richtigen client_id- und client_secret-Schlüssel referenziert haben.

Wenn das Flag enabled auf true gesetzt und secretName korrekt festgelegt ist, dann ist IAP für die ausgewählte Ressource konfiguriert.

IAP deaktivieren

Zum Deaktivieren von IAP müssen Sie für enabled in BackendConfig den Wert false festlegen. Wenn Sie den IAP-Block aus BackendConfig löschen, bleiben die Einstellungen erhalten. Beispiel: Wenn IAP mit secretName: my_secret aktiviert ist und Sie den Block löschen, wird IAP weiterhin mit den in my_secret gespeicherten OAuth-Anmeldedaten aktiviert.

Nächste Schritte