IAP für Cloud Run aktivieren

Es gibt zwei Möglichkeiten, Identity-Aware Proxy für Ihre Cloud Run-Dienste zu aktivieren.

  1. Empfohlen: Direkt für einen Cloud Run-Dienst:
    • Schützt den run.app-Endpunkt direkt, sodass Sie keine Load-Balancer-Ressourcen bereitstellen müssen.
    • Bietet eine einfachere Einrichtung und vermeidet zusätzliche Load-Balancer-Kosten.
    • Wenn Sie einen Load-Balancer vor Cloud Run platzieren, wird auch der Endpunkt des Load-Balancers geschützt.
  2. Für den Back-End-Dienst, der vor den Cloud Run-Diensten steht: Wenn Sie Cloud Run in mehreren Regionen ausführen, die mit demselben globalen Back-End-Dienst des Load-Balancers verbunden sind, und eine zentrale Zugriffsverwaltung benötigen, folgen Sie der Anleitung auf dieser Seite. Andernfalls empfehlen wir, IAP direkt für den Cloud Run-Dienst zu aktivieren.

Bekannte Einschränkungen

  • IAP kann nicht sowohl für Cloud Run-Dienste als auch für den Load-Balancer verwendet werden. Wenn Sie IAP für einen Load-Balancer aktivieren, sichert IAP den Traffic nur über den Load-Balancer und nicht den Traffic, der den Cloud Run-Dienst möglicherweise über die run.app-URL erreicht. Informationen dazu, wie Sie nur IAP-autorisierten Traffic zulassen, finden Sie unter Cloud Run so konfigurieren, dass der Zugriff beschränkt wird.

  • IAP authentifiziert sich bei Cloud Run mit dem X-Serverless-Authorization Header. Cloud Run übergibt diesen Header an Ihren Dienst, nachdem die Signatur entfernt wurde. Wenn Ihr Dienst so konfiguriert 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 latenzabhängig sind.

Hinweis

Wir empfehlen, IAP direkt in Cloud Run zu aktivieren.

Wenn Sie IAP für Cloud Run-Ressourcen auf dem Load-Balancer und nicht direkt in Cloud Run aktivieren möchten, benötigen Sie Folgendes:

IAP über einen Back-End-Dienst oder Load-Balancer aktivieren

Wenn Sie IAP über IAP hinter einem Back-End-Dienst oder Load-Balancer aktivieren müssen, folgen Sie der Anleitung unten.

Console

Wenn Sie den OAuth-Zustimmungsbildschirm Ihres Projekts nicht konfiguriert haben, werden Sie dazu aufgefordert. Informationen zum Konfigurieren des OAuth-Zustimmungsbildschirms finden Sie unter OAuth-Zustimmungsbildschirm einrichten.

IAP-Zugriff einrichten

  1. Rufen Sie die Seite Identity-Aware Proxy auf.
  2. Wählen Sie das Projekt aus, das Sie mit IAP sichern möchten.
  3. Aktivieren Sie unter ANWENDUNGEN das Kästchen neben dem Back-End-Dienst des Load-Balancers, dem Sie Mitglieder hinzufügen möchten.
  4. Klicken Sie in der rechten Seitenleiste auf Hauptkonto hinzufügen.
  5. Geben Sie im Dialogfeld Hauptkonto hinzufügen die Konten von Gruppen oder Einzelpersonen 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: user@gmail.com. Dies kann auch ein Google Workspace-Konto sein, z. B. user@google.com oder eine andere Workspace-Domain.
    • Google Group: admins@googlegroups.com
    • Dienstkonto: server@example.iam.gserviceaccount.com
    • Google Workspace-Domain: beispiel.de
  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.

Zugriff für Nutzer außerhalb Ihrer Organisation aktivieren

Wenn Sie IAP aktivieren, wird standardmäßig ein von Google verwalteter OAuth-Client verwendet, um Nutzer zu authentifizieren. Daher können nur Nutzer innerhalb der Organisation auf die IAP-aktivierte Anwendung zugreifen.

Wenn Sie den Zugriff für Nutzer außerhalb Ihrer Organisation oder ohne eine Organisation aktivieren möchten, aktualisieren Sie die OAuth-Clientkonfiguration, um einen benutzerdefinierten OAuth Client zu verwenden. Eine Anleitung dazu finden Sie unter IAP für externe Anwendungen aktivieren.

IAP aktivieren

  1. Suchen Sie auf der IAP-Seite unter ANWENDUNGEN den Back-End-Dienst des Load-Balancers, für den Sie den Zugriff einschränken möchten. Klicken Sie auf die Schaltfläche IAP, 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 und clientauthconfig.clients.getWithSecret. Diese Berechtigungen erhalten Sie über Rollen wie etwa "Projektbearbeiter". Weitere Informationen dazu finden Sie unter Zugriff auf Ressourcen verwalten, die mit IAP gesichert sind.
  2. Klicken Sie im Fenster IAP aktivieren auf Aktivieren , um zu bestätigen, dass IAP Ihre Ressource sichern 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.
  3. Folgen Sie der Anleitung unter Zugriffssteuerung mit IAM, um IAP zu autorisieren, Traffic an den Back-End-Cloud Run-Dienst zu senden.

    • Hauptkonto: service-[PROJECT-NUMBER]@gcp-sa-iap.iam.gserviceaccount.com
    • Rolle: Cloud Run-Aufrufer

    Das IAP-Dienstkonto wird erstellt, wenn IAP aktiviert ist. Wenn das IAP-Dienstkonto nicht in der Liste der Hauptkonten enthalten ist, können Sie es mit dem folgenden gcloud-Befehl erstellen:

    gcloud beta services identity create
        --service=iap.googleapis.com
        --project=PROJECT_ID
    

gcloud

  1. 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 Ausführen des Befehls nicht dupliziert.
    gcloud beta services identity create --service=iap.googleapis.com --project=[PROJECT_ID]
  2. Erteilen Sie dem im vorherigen Schritt erstellten Dienstkonto die Berechtigung zum Aufrufen, 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'
    
  3. Aktivieren Sie IAP, indem Sie je nachdem, ob Ihr Back-End-Dienst des Load-Balancers global oder regional ist, den Befehl mit globalem oder regionalem Bereich ausführen. 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

    gcloud compute backend-services update BACKEND_SERVICE_NAME --region REGION_NAME --iap=enabled
    
    Ersetzen Sie Folgendes:

    • BACKEND_SERVICE_NAME ist der Name des Back-End-Dienstes.
    • REGION_NAME ist 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 Identity and Access Management-Rolle roles/iap.httpsResourceAccessor bearbeiten. Weitere Informationen finden Sie unter Zugriff auf Ressourcen verwalten, die mit IAP gesichert sind.

Terraform

  1. 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 Ausführen des Befehls nicht dupliziert.
    resource "google_project_service" "project" {
      project = "your-project-id"
      service = "iap.googleapis.com"
    }
    
  2. Fügen Sie Folgendes hinzu, um dem IAP-Dienst-Agent die Rolle roles/run.invoker zu gewähren.

    resource "google_cloud_run_v2_service_iam_member" "iap_invoker" {
      project = google_cloud_run_v2_service.default.project
      location = google_cloud_run_v2_service.default.location
      name = google_cloud_run_v2_service.default.name
      role   = "roles/run.invoker"
      member = "serviceAccount:service-"PROJECT_NUMBER@gcp-sa-iap.iam.gserviceaccount.com"
    }
    

    Ersetzen Sie PROJECT_NUMBER durch die Projekt-ID.

  3. Aktivieren Sie IAP, indem Sie je nach Load-Balancer 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 so konfigurieren, dass der Zugriff beschränkt wird

Wenn Sie verhindern möchten, dass Traffic über die Standard-URL run.app eines Cloud Run-Dienstes weitergeleitet wird, deaktivieren Sie die Standard-URL. Konfigurieren Sie andernfalls die Ingress-Einstellungen, um den Netzwerkeingang für Cloud Run einzuschränken.

Fehlerbehebung

Berechtigung für den 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-Aufrufer“ zugewiesen haben: service-[PROJECT-NUMBER]@gcp-sa-iap.iam.gserviceaccount.com.

  • Wenn Sie dem vorherigen Dienstkonto die Rolle „Cloud Run-Aufrufer“ zugewiesen haben und das Problem weiterhin besteht, stellen Sie Ihren Cloud Run-Dienst noch einmal bereit.

Fehler des Dienst-Agents verursacht 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 nicht funktioniert hat. Um das Problem zu beheben, aktivieren Sie IAP noch einmal 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 nicht die Berechtigung run.routes.invoke

Während der IAP-Vorschau mit Cloud Run hat Cloud Run die Berechtigung run.routes.invoke nicht für Aufrufe von IAP geprüft, die die Rolle „Cloud Run-Aufrufer“ verwenden. Mit der allgemeinen Verfügbarkeit führt Cloud Run diese Berechtigungsprüfung durch.

Um Breaking Changes zu vermeiden, wurden einige Kundenprojekte, die während der Vorschau von diesem Verhalten abhängig waren, in eine Zulassungsliste aufgenommen, sodass die Berechtigung nicht geprüft wurde. Wenden Sie sich an den Cloud Run-Support, um solche Projekte aus der Zulassungsliste für die Vorschau zu entfernen.

Nächste Schritte

IAP für Cloud Run konfigurieren