Auf dieser Seite wird erläutert, wie Sie einen Cloud Run-Dienst mit Identity-Aware Proxy schützen. (IAP).
Bekannte Einschränkungen
Cloud Run-Dienste mit HTTP/2 hinter einem klassischen Application Load Balancer, die mit IAP gesichert sind, stoßen bei Anfrage auf eine Endlosschleife. Google empfiehlt, einen globalen externen Application Load Balancer zu verwenden, wenn Sie einen mit IAP gesicherten HTTP/2-kompatiblen Dienst nutzen. Weitere Informationen finden Sie unter Load-Balancer-Modi.
IAP sichert nicht die Domain, die Cloud Run für einen bereitgestellten Dienst bereitstellt. Damit nur IAP auf den Dienst zugreifen kann, verwenden Sie die IAM-Authentifizierung für den Cloud Run-Dienst. Damit IAP auf den Cloud Run-Dienst zugreifen kann, Gewähren Sie die IAP-Dienstkontorolle
service-[PROJECT_NUMBER]@gcp-sa-iap.iam.gserviceaccount.com
mit der Rolle "Cloud Run Invoker". IAP generiert ein ID-Token und verwendet es, um sich mit dem HeaderX-Serverless-Authorization
bei Cloud Run zu authentifizieren.IAP authentifiziert sich bei Cloud Run mithilfe der
X-Serverless-Authorization
-Header. Cloud Run übergibt diesen Header an Ihren Dienst, nachdem die Signatur entfernt wurde. Wenn Ihr Dienst so konzipiert ist, dass er die Anfrage an einen anderen Cloud Run weiterleitet Dienst, der eine IAM-Authentifizierung erfordert, aktualisieren Sie Ihren Dienst, um diesen Header zuerst zu entfernen.IAP ist mit Cloud CDN nicht kompatibel.
Hinweise
Zum Aktivieren von IAP für Cloud Run benötigen Sie Folgendes:
- Ein Google Cloud Console-Projekt 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 das IAP-fähige Modell zugreifen . Wenn Sie Nutzern außerhalb Ihrer Organisation Zugriff gewähren möchten, Siehe IAP für externe Anwendungen aktivieren.
IAP aktivieren
Console
Der von Google verwaltete OAuth-Client ist nicht verfügbar, wenn Sie IAP über die Google Cloud Console aktivieren.
Wenn Sie den OAuth-Zustimmungsbildschirm Ihres Projekts nicht konfiguriert haben, dazu aufgefordert werden. 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.
- Klicken Sie unter ANWENDUNGEN das Kästchen neben dem Back-End-Dienst des Load-Balancers an, dem Sie Mitglieder hinzufügen möchten.
- Klicken Sie auf der rechten Seite auf Mitglied hinzufügen.
Geben Sie im Dialogfeld Mitglieder hinzufügen die Konten von Gruppen oder Personen ein, die für das Projekt die Rolle Nutzer von IAP-gesicherten Web-Apps haben sollen. Folgende Kontoarten sind als Mitglieder zulässig:
- Google-Konto: nutzer@gmail.com. Dies kann auch ein Google Workspace-Konto sein, z. B. nutzer@google.com oder eine andere Workspace-Domain.
- Google Group: admins@googlegroups.com
- Dienstkonto: server@beispiel.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 IAP-Seite unter APPLICATIONS nach dem Back-End-Dienst des Load-Balancers, auf den Sie den Zugriff beschränken möchten. Klicken Sie auf die Ein/Aus-Schaltfläche IAP, um IAP für eine Ressource zu aktivieren.
So aktivieren Sie IAP:
- Mindestens ein Protokoll in der Load-Balancer-Front-End-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 mit IAP gesicherte Ressourcen verwalten.
- Klicken Sie im angezeigten Fenster IAP aktivieren auf Aktivieren, um zu bestätigen, dass Ihre 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-Backenddienst zu senden.
- Hauptkonto:
service-[PROJECT-NUMBER]@gcp-sa-iap.iam.gserviceaccount.com
- Rolle: Cloud Run Invoker
- Hauptkonto:
gcloud
- Falls Sie noch kein Dienstkonto haben, erstellen Sie eines mit dem folgenden Befehl. Wenn Sie zuvor ein Dienstkonto erstellt haben, werden durch das Ausführen des Befehls keine doppelten Dienstkonten erstellt.
gcloud beta services identity create --service=iap.googleapis.com --project=[PROJECT_ID]
- Erteilen Sie dem im vorherigen Schritt erstellten Dienstkonto die Aufruferberechtigung, indem Sie den folgenden Befehl ausführen.
gcloud run services add-iam-policy-binding [SERVICE-NAME] \ --member='serviceAccount:service-[PROJECT-NUMBER]@gcp-sa-iap.iam.gserviceaccount.com' \ --role='roles/run.invoker'
Aktivieren Sie IAP, indem Sie entweder den Befehl mit globalem oder regionalem Bereich ausführen, je nachdem, ob der Back-End-Dienst des Load-Balancers global oder regional ist. Verwenden Sie die OAuth-Client-ID und das Secret aus dem vorherigen Schritt.
Globaler Geltungsbereich
gcloud compute backend-services update BACKEND_SERVICE_NAME --global --iap=enabled
Regionaler Geltungsbereich
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 die Google Cloud CLI verwenden, um eine IAP-Zugriffsrichtlinie mithilfe der Identity and Access Management-Rolle roles/iap.httpsResourceAccessor
zu bearbeiten. Weitere Informationen finden Sie unter Rollen und Berechtigungen verwalten.
Cloud Run konfigurieren, um den Zugriff einzuschränken
Sie können Ihren Cloud Run-Dienst so konfigurieren, dass nur Zugriff internen Clients und dem externen Lastenausgleichsmodul, das alle direkten aus dem öffentlichen Internet.
Befolgen Sie die Schritte in Eingehenden Traffic für Cloud Run einschränken die Einstellung für eingehenden Traffic Ihres Cloud Run-Dienstes zu konfigurieren, Internes und Cloud Load Balancing.
Fehlerbehebung
The IAP service account is not provisioned
gcloud beta services identity create --service=iap.googleapis.com --project=[PROJECT_ID]
Your client does not have permission to get URL from this server
IAP nutzt die Berechtigungen des IAP-Dienstkontos, um Rufen Sie den Cloud Run-Dienst auf. Achten Sie darauf, dass Sie der Cloud Führen Sie die Rolle „Invoker“ für das folgende Dienstkonto aus:
service-[PROJECT-NUMBER]@gcp-sa-iap.iam.gserviceaccount.com
.Wenn Sie dem vorherigen Dienstkonto erhalten und dieses Problem weiterhin besteht, stellen Sie die Cloud Run-Dienst.
Das IAP-Dienstkonto benötigt keine run.routes.invoke
-Berechtigung
Während der Ausführung von IAP mit Cloud Run Preview
Cloud Run hat die Berechtigungsprüfung run.routes.invoke
nicht durchgeführt
für Aufrufe von IAP, die die Rolle „Cloud Run Invoker“ verwenden. Mit
General Availability (GA) – Cloud Run führt diese Berechtigung aus
überprüfen.
Um fehlerhafte Änderungen zu vermeiden, wurden einige Kundenprojekte, die während der Vorabversion auf dieses Verhalten angewiesen waren, auf eine Zulassungsliste gesetzt, damit die Berechtigung nicht geprüft wurde. Wenden Sie sich zum Entfernen an den Cloud Run-Support diese Projekte auf die Zulassungsliste für die Vorabversion zu setzen.
Nächste Schritte
So richten Sie IAP für Cloud Run mit Terraform ein: Sehen Sie sich ein Terraform-Codebeispiel an.