Es gibt zwei Möglichkeiten, IAP für Ihre Cloud Run-Dienste zu aktivieren: direkt für einen Cloud Run-Dienst oder für den Backend-Dienst, der den Cloud Run-Diensten vorgeschaltet ist.
Wir empfehlen, IAP direkt in Cloud Run zu aktivieren.
Dadurch wird der run.app
-Endpunkt geschützt. Wenn Sie einen Load-Balancer konfigurieren, wird auch der Load-Balancer-Endpunkt geschützt.
Wenn Sie eine zentrale Zugriffsverwaltung benötigen oder Traffic an mehrere Regionen weiterleiten möchten, fahren Sie mit den folgenden Verfahren fort.
Auf dieser Seite wird beschrieben, wie Sie einen Cloud Run-Dienst mit IAP über einen Backend-Dienst oder Load Balancer schützen. Wenn Sie Cloud Run in mehreren Regionen ausführen, die an denselben globalen Backend-Dienst des Load-Balancers angehängt sind, folgen Sie der Anleitung auf dieser Seite, um IAP einmal für den Backend-Dienst zu konfigurieren.
Bekannte Einschränkungen
Wenn Sie IAP für einen Load-Balancer aktivieren, wird der Traffic nur über den Load-Balancer und nicht über Traffic geschützt, der den Cloud Run-Dienst über seine
run.app
-URL erreicht. Wenn Sie nur IAP-autorisierten Traffic zulassen möchten, lesen Sie den Abschnitt Cloud Run zum Einschränken des Zugriffs konfigurieren.IAP authentifiziert sich mit dem Header
X-Serverless-Authorization
bei Cloud Run. Cloud Run übergibt diesen Header an Ihren Dienst, nachdem die Signatur entfernt wurde. Wenn Ihr Dienst so konzipiert ist, dass die Anfrage an einen anderen Cloud Run-Dienst weitergeleitet wird, für den eine IAM-Authentifizierung erforderlich ist, müssen Sie Ihren Dienst aktualisieren, um diesen Header zuerst zu entfernen.IAP ist nicht mit Cloud CDN kompatibel.
IAP erhöht die Latenz. Aktivieren Sie IAP nur für Instanzen, die nicht latenzsensibel sind.
Hinweise
Zum Aktivieren von IAP für Cloud Run-Ressourcen in IAP benötigen Sie Folgendes:
- Ein Google Cloud -Konsolenprojekt mit aktivierter Abrechnung.
- Eine Gruppe mit einem oder mehreren Cloud Run-Diensten, die von einem Load-Balancer bereitgestellt werden.
- Externen HTTPS-Load-Balancer einrichten.
- Internen HTTPS-Load-Balancer einrichten
- Einen Domainnamen, der auf die Adresse des Load-Balancer registriert ist.
- Anwendungscode, der überprüft, ob alle Anfragen eine Identität haben.
- Weitere Informationen dazu finden Sie unter Identität des Nutzers abrufen.
IAP verwendet einen von Google verwalteten OAuth-Client, um Nutzer zu authentifizieren. Nur Nutzer innerhalb der Organisation können auf die IAP-fähige Anwendung zugreifen. Wenn Sie Nutzern außerhalb Ihrer Organisation Zugriff gewähren möchten, lesen Sie den Abschnitt IAP für externe Anwendungen aktivieren.
IAP über einen Backend-Dienst oder Load Balancer aktivieren
Wenn Sie IAP über IAP hinter einem Backend-Dienst oder Load-Balancer aktivieren möchten, folgen Sie der Anleitung unten.
Console
Der von Google verwaltete OAuth-Client ist nicht verfügbar, wenn Sie IAP über die Google Cloud -Konsole aktivieren.
Wenn Sie den OAuth-Zustimmungsbildschirm Ihres Projekts noch nicht konfiguriert haben, werden Sie dazu aufgefordert. Informationen zum Konfigurieren des OAuth-Zustimmungsbildschirms finden Sie unter OAuth-Zustimmungsbildschirm einrichten.
IAP-Zugriff einrichten
- Rufen Sie die Seite Identity-Aware Proxy auf.
- Wählen Sie das Projekt aus, das Sie mit IAP sichern möchten.
- Aktivieren Sie unter ANWENDUNGEN das Kästchen neben dem Back-End-Dienst des Load-Balancers, dem Sie Mitglieder hinzufügen möchten.
- Klicken Sie auf der rechten Seite auf Hauptkonto hinzufügen.
Geben Sie im Dialogfeld Hauptkonto hinzufügen die Konten von Gruppen oder Einzelpersonen ein, 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. Das kann auch ein Google Workspace-Konto sein, z. B. nutzer@google.com oder eine andere Workspace-Domain.
- Google Group: admins@googlegroups.com
- Dienstkonto: server@example.iam.gserviceaccount.com
- Google Workspace-Domain: beispiel.de
Wählen Sie in der Drop-down-Liste Rollen den Eintrag Cloud IAP > Nutzer von IAP-gesicherten Web-Apps aus.
Klicken Sie auf Speichern.
IAP aktivieren
- Suchen Sie auf der Seite IAP unter ANWENDUNGEN den Backend-Dienst des Load-Balancers, auf den Sie den Zugriff beschränken möchten. Klicken Sie auf den IAP-Umschalter, um IAP für eine Ressource zu aktivieren.
So aktivieren Sie IAP:
- Mindestens ein Protokoll in der Load-Balancer-Frontend-Konfiguration muss HTTPS sein. Weitere Informationen dazu finden Sie unter Lastenausgleichsmodul einrichten.
- Sie benötigen die Berechtigungen
compute.backendServices.update
,clientauthconfig.clients.create
undclientauthconfig.clients.getWithSecret
. Diese Berechtigungen erhalten Sie über Rollen wie etwa "Projektbearbeiter". Weitere Informationen finden Sie unter Zugriff auf Ressourcen verwalten, die mit IAP gesichert sind.
- Klicken Sie im angezeigten Fenster IAP aktivieren auf Aktivieren, um zu bestätigen, dass die Ressource durch IAP gesichert werden soll. Nachdem Sie IAP aktiviert haben, sind für alle Verbindungen zu Ihrem Load-Balancer Anmeldedaten erforderlich. Zugriff erhalten nur Konten mit der Rolle Nutzer von IAP-gesicherten Web-Apps für das Projekt.
Folgen Sie der Anleitung unter Zugriffssteuerung mit IAM, um IAP zu autorisieren, Traffic an den Cloud Run-Backend-Dienst zu senden.
- Principal:
service-[PROJECT-NUMBER]@gcp-sa-iap.
- Rolle: Cloud Run Invoker
Das IAP-Dienstkonto wird erstellt, wenn IAP aktiviert ist. Wenn das IAP-Dienstkonto nicht in der Liste der Identitäten enthalten ist, können Sie es mit dem folgenden gcloud-Befehl erstellen:
gcloud beta services identity create --service=iap.googleapis.com --project=PROJECT_ID
- Principal:
gcloud
- Wenn Sie dies noch nicht im Projekt getan haben, erstellen Sie den IAP-Dienst-Agent mit dem folgenden Befehl. Wenn Sie den Dienst-Agent bereits erstellt haben, wird er durch das Ausführen des Befehls nicht dupliziert.
gcloud beta services identity create --service=iap.googleapis.com --project=[PROJECT_ID]
- Gewähren Sie dem Aufrufer die Berechtigung für das im vorherigen Schritt erstellte Dienstkonto, indem Sie den folgenden Befehl ausführen.
gcloud run services add-iam-policy-binding [SERVICE-NAME] \ --member='serviceAccount:service-[PROJECT-NUMBER]@gcp-sa-iap.' \ --role='roles/run.invoker'
Aktivieren Sie IAP, indem Sie entweder den globalen oder den regionalen Befehl ausführen, je nachdem, ob der Backend-Dienst Ihres Load-Balancers global oder regional ist. Verwenden Sie die OAuth-Client-ID und das Secret aus dem vorherigen Schritt.
Globaler Bereich
gcloud compute backend-services update BACKEND_SERVICE_NAME --global --iap=enabled
Regionaler Bereich
Ersetzen Sie Folgendes:gcloud compute backend-services update BACKEND_SERVICE_NAME --region REGION_NAME --iap=enabled
- BACKEND_SERVICE_NAME ist der Name des Backend-Dienstes.
- REGION_NAME: die Region, in der Sie IAP aktivieren möchten.
Nachdem Sie IAP aktiviert haben, können Sie mit der Google Cloud CLI eine IAP-Zugriffsrichtlinie mithilfe der IAM-Rolle (Identity and Access Management) roles/iap.httpsResourceAccessor
bearbeiten. Weitere Informationen finden Sie unter Zugriff auf Ressourcen verwalten, die mit IAP gesichert sind.
Terraform
- Wenn Sie dies noch nicht getan haben, erstellen Sie in einem Projekt den IAP-Dienst-Agent mit dem folgenden Befehl. Wenn Sie den Dienst-Agent bereits erstellt haben, wird er durch das Ausführen des Befehls nicht dupliziert.
resource "google_project_service" "project" { project = "your-project-id" service = "iap.googleapis.com" }
- Erteilen Sie dem im vorherigen Schritt erstellten Dienst-Agent die Berechtigung „Aufrufer“, indem Sie den folgenden Befehl ausführen.
resource "google_cloud_run_service_iam_binding" "binding" { location = google_cloud_run_v2_service.default.location service = google_cloud_run_v2_service.default.name role = "roles/run.invoker" members = [ "serviceAccount:service-[PROJECT-NUMBER]@gcp-sa-iap.iam.gserviceaccount.com", ] }
Aktivieren Sie IAP, indem Sie je nach Load Balancer entweder den globalen oder den regionalen Befehl ausführen. Verwenden Sie die OAuth-Client-ID und das Secret aus dem vorherigen Schritt.
Globaler Bereich
resource "google_compute_backend_service" "default" { name = "tf-test-backend-service-external" protocol = "HTTPS" load_balancing_scheme = "EXTERNAL_MANAGED" iap { enabled = true oauth2_client_id = "abc" oauth2_client_secret = "xyz" } }
Regionaler Bereich
resource "google_compute_region_backend_service" "default" { name = "tf-test-backend-service-external" protocol = "HTTPS" load_balancing_scheme = "EXTERNAL_MANAGED" iap { enabled = true oauth2_client_id = "abc" oauth2_client_secret = "xyz" } }
Cloud Run konfigurieren, um den Zugriff einzuschränken
Wenn Sie verhindern möchten, dass Traffic über die standardmäßige run.app
-URL eines Cloud Run-Dienstes weitergeleitet wird, deaktivieren Sie die Standard-URL.
Andernfalls konfigurieren Sie die Einstellungen für eingehenden Traffic so, dass eingehender Netzwerkverkehr für Cloud Run eingeschränkt wird.
Fehlerbehebung
Zugriff auf Cloud Run verweigert
Your client does not have permission to get URL from this server
IAP verwendet die Berechtigungen des IAP-Dienstkontos, um Ihren Cloud Run-Dienst aufzurufen. Achten Sie darauf, dass Sie dem folgenden Dienstkonto die Rolle „Cloud Run Invoker“ zugewiesen haben:
service-[PROJECT-NUMBER]@gcp-sa-iap.
.Wenn Sie dem vorherigen Dienstkonto die Rolle „Cloud Run Invoker“ zugewiesen haben und das Problem weiterhin besteht, stellen Sie Ihren Cloud Run-Dienst noch einmal bereit.
Fehler beim Dienst-Agent führt zu IAM-Fehler
Wenn Sie IAP zum ersten Mal in einem neuen Projekt aktivieren, kann der folgende Fehler auftreten:
Setting IAM permissions failed
Das liegt daran, dass der Cloud Run-Dienst-Agent fehlgeschlagen ist. Um das Problem zu beheben, aktivieren Sie IAP wieder oder legen Sie die IAM-Richtlinie manuell fest.
IAP kann nicht über die gcloud CLI eingerichtet werden
The IAP service account is not provisioned
Wenn dieser Fehler angezeigt wird, führen Sie den folgenden Befehl aus:
gcloud beta services identity create --service=iap.googleapis.com --project=[PROJECT_ID]
Das IAP-Dienstkonto benötigt keine run.routes.invoke
-Berechtigung.
Während der Vorschauversion von IAP mit Cloud Run wurde die Berechtigungsprüfung run.routes.invoke
für Aufrufe von IAP, die die Rolle „Cloud Run Invoker“ verwenden, nicht von Cloud Run durchgeführt. Mit der allgemeinen Verfügbarkeit (General Availability, GA) führt Cloud Run diese Berechtigungsprüfung durch.
Um Breaking Changes zu vermeiden, wurden einige Kundenprojekte, die während der Vorschauphase von diesem Verhalten abhingen, auf eine Zulassungsliste gesetzt, sodass die Berechtigung nicht geprüft wurde. Wenden Sie sich an den Cloud Run-Support, um solche Projekte von der Zulassungsliste für die Vorschau zu entfernen.
Nächste Schritte
Terraform-Codebeispiel zum Einrichten von IAP für Cloud Run.