IAP für Cloud Run konfigurieren

Auf dieser Seite wird beschrieben, wie Sie IAP über Cloud Run aktivieren und Traffic, der für einen Cloud Run-Dienst bestimmt ist, durch Weiterleitung zur Authentifizierung an IAP schützen. Wenn Sie IAP über Cloud Run aktivieren, können Sie Traffic mit einem einzigen Klick von allen Ingress-Pfaden weiterleiten, einschließlich der Standard-URLs run.app und Load-Balancern.

Bekannte Einschränkungen

  • Das Projekt muss Teil einer Organisation sein.
  • Identitäten müssen aus derselben Organisation stammen.
  • Sie können IAP nicht sowohl für den Load Balancer als auch für den Cloud Run-Dienst konfigurieren.
  • Einige Integrationen, z. B. Pub/Sub, funktionieren möglicherweise nicht mehr, wenn IAP aktiviert ist.

Hinweise

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Aktivieren von IAP benötigen:

  • Cloud Run-Administrator (roles/run.admin) für das Projekt
  • Zugriff auf den IAP-fähigen Dienst gewähren: IAP Policy Admin (roles/iap.admin) für das Projekt
  • Erstellen Sie einen IAP-fähigen Dienst oder aktualisieren Sie einen vorhandenen Dienst, um IAP zu aktivieren:

Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.

IAP über Cloud Run aktivieren

Sie können IAP über Cloud Run aktivieren.

Wenn Sie sowohl IAP als auch Identity and Access Management (IAM) für denselben Cloud Run-Dienst verwenden, beachten Sie die folgenden Bedingungen:

  • Sowohl die IAP- als auch die IAM-Prüfungen werden durchgeführt.

  • Die IAP-Prüfung erfolgt zuerst. Anfragen werden basierend auf der IAP-Konfiguration akzeptiert oder blockiert.

  • Wenn die Anfrage die IAP-Prüfung besteht, verwendet IAP das eigene Dienstkonto, um sich für die IAM-Prüfung von Cloud Run zu authentifizieren.

  • Da die IAP-Prüfung zuerst erfolgt, werden einige Dienste wie Pub/Sub möglicherweise nicht richtig authentifiziert.

Sie können IAP über die Google Cloud Console, die Google Cloud CLI oder Terraform für Cloud Run aktivieren.

Konsole

Wenn Sie IAP für Cloud Run aktivieren, sind für IAP Berechtigungen zum Aufrufen Ihres Cloud Run-Dienstes erforderlich. Wenn Sie IAP über die Google Cloud -Konsole aktivieren, wird diese Berechtigung automatisch erteilt, indem dem IAP-Dienst-Agent die Cloud Run Invoker-Rolle (roles/run.invoker) zugewiesen wird.

So aktivieren Sie IAP über Cloud Run:

  1. Rufen Sie in der Google Cloud Console die Seite „Cloud Run“ auf:

    Zu Cloud Run

  2. Wenn Sie einen neuen Dienst konfigurieren, für den Sie die Bereitstellung vornehmen, wählen Sie Container bereitstellen > Dienst aus. Wenn Sie einen vorhandenen Dienst konfigurieren und bereitstellen, klicken Sie auf den Dienst und dann auf Neue Überarbeitung bearbeiten und bereitstellen.

  3. Wenn Sie einen neuen Dienst konfigurieren, füllen Sie die Seite mit den anfänglichen Diensteinstellungen wie gewünscht aus und wählen Sie dann Erweiterte Authentifizierung mit Identity-Aware Proxy (IAP) aus.

  4. Wenn Sie einen vorhandenen Dienst konfigurieren und bereitstellen, klicken Sie auf den Dienst und wählen Sie dann Erweiterte Authentifizierung mit Identity-Aware Proxy (IAP) aus.

  5. Klicken Sie auf Richtlinie bearbeiten, um eine Richtlinie für den kontextsensitiven Zugriff zu erstellen:

    • Fügen Sie ein oder mehrere Hauptkonten und optional die Zugriffsebene hinzu, die für jedes Hauptkonto für den Anwendungszugriff erforderlich ist.

    • Klicken Sie auf Speichern.

  6. Klicken Sie auf Speichern.

gcloud

Wenn Sie IAP direkt über Cloud Run aktivieren möchten, fügen Sie beim Bereitstellen Ihrer App das Flag --iap hinzu und erteilen Sie dem IAP-Dienstkonto die Aufruferberechtigung:

  1. Stellen Sie Ihren Cloud Run-Dienst mit einem der folgenden Befehle bereit:

    Für einen neuen Dienst:

    gcloud beta run deploy SERVICE_NAME \
    --region=REGION \
    --image=IMAGE_URL \
    --no-allow-unauthenticated \
    --iap

    Für einen vorhandenen Dienst:

    gcloud beta run services update SERVICE_NAME \
    --region=REGION \
    --iap

    Ersetzen Sie Folgendes:

    • SERVICE_NAME: Der Name Ihres Cloud Run-Dienstes.
    • REGION: Der Name Ihrer Cloud Run-Region. Beispiel: europe-west1.
    • IMAGE_URL: ein Verweis auf das Container-Image, z. B. us-docker.pkg.dev/cloudrun/container/hello:latest Wenn Sie Artifact Registry verwenden, muss das Repository REPO_NAME bereits erstellt sein. Die URL hat das Format LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
    • PROJECT_NUMBER: Ihre Google Cloud -Projektnummer.
  2. Gewähren Sie dem IAP-Dienst-Agent die Aufruferberechtigung:

    gcloud run services add-iam-policy-binding SERVICE_NAME \
    --region=REGION \
    --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-iap.iam.gserviceaccount.com \
    --role=roles/run.invoker

    Ersetzen Sie Folgendes:

    • SERVICE_NAME: Der Name Ihres Cloud Run-Dienstes.
    • REGION: Der Name Ihrer Cloud Run-Region. Beispiel: europe-west1.
    • PROJECT_NUMBER: Ihre Google Cloud -Projektnummer.
  3. Führen Sie den folgenden Befehl aus, um zu prüfen, ob Ihr Dienst mit aktiviertem IAP konfiguriert ist:

    gcloud beta run services describe SERVICE_NAME

    Die Ausgabe sollte den folgenden String enthalten:

    Iap Enabled: true

Sie leiten jetzt den gesamten Traffic, der für den konfigurierten Cloud Run-Dienst bestimmt ist, zur Authentifizierung an IAP weiter, bevor er an den Container übergeben wird.

Terraform

Informationen zum Anwenden oder Entfernen einer Terraform-Konfiguration finden Sie unter Grundlegende Terraform-Befehle.

Wenn Sie IAP mit Terraform aktivieren möchten, müssen Sie Ihre Dienstdefinition aktualisieren und eine IAM-Richtlinienbindung hinzufügen, um die Berechtigung „Aufrufer“ für IAP zu erteilen.

  1. Fügen Sie iap_enabled = true einer google_cloud_run_v2_service-Ressource in Ihrer Terraform-Konfiguration hinzu, um IAP für den Dienst zu aktivieren:

    resource "google_cloud_run_v2_service" "default" {
      provider = google-beta
      name     = "cloudrun-iap-service"
      location = "europe-west1"
      ingress      = "INGRESS_TRAFFIC_ALL"
      launch_stage = "BETA"
      iap_enabled  = true
    
      template {
        containers {
          image = "us-docker.pkg.dev/cloudrun/container/hello"
        }
      }
    }
    
  2. Fügen Sie Folgendes hinzu, um dem IAP-Dienst-Agent die Rolle roles/run.invoker zuzuweisen.

    resource "google_cloud_run_v2_service_iam_member" "iap_invoker" {
      provider = google-beta
      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. Optional. Wenn Sie die aktuellen IAM-Richtliniendaten abrufen möchten, fügen Sie der Ressource google_cloud_run_v2_service_iam_policy in Ihrer Terraform-Konfiguration Folgendes hinzu.

    data "google_cloud_run_v2_service_iam_policy" "policy" {
      project = google_cloud_run_v2_service.default.project
      location = google_cloud_run_v2_service.default.location
      name = google_cloud_run_v2_service.default.name
    }
    

IAP über Cloud Run deaktivieren

Sie können IAP über die Google Cloud Console oder die gcloud CLI deaktivieren.

Konsole

So deaktivieren Sie IAP über Cloud Run:

  1. Rufen Sie in der Google Cloud Console die Seite „Cloud Run“ auf:

    Zu Cloud Run

  2. Klicken Sie auf den vorhandenen Dienst, den Sie ändern möchten.

  3. Klicken Sie auf Sicherheit und entfernen Sie dann das Häkchen bei Erweiterte Authentifizierung mit Identity-Aware Proxy (IAP).

  4. Klicken Sie auf Speichern.

gcloud

Wenn Sie IAP direkt über Cloud Run deaktivieren möchten, fügen Sie beim Bereitstellen Ihrer App das Flag --no-iap hinzu:

  1. Stellen Sie Ihren Cloud Run-Dienst mit einem der folgenden Befehle bereit:

    Für einen neuen Dienst:

    gcloud beta run deploy SERVICE_NAME \
    --region=REGION \
    --image=IMAGE_URL \
    --no-iap

    Für einen vorhandenen Dienst:

    gcloud beta run services update SERVICE_NAME \
    --region=REGION \
    --no-iap

    Ersetzen Sie Folgendes:

    • SERVICE_NAME: Der Name Ihres Cloud Run-Dienstes.
    • REGION: Der Name Ihrer Cloud Run-Region.
    • IMAGE_URL: ein Verweis auf das Container-Image, z. B. us-docker.pkg.dev/cloudrun/container/hello:latest Wenn Sie Artifact Registry verwenden, muss das Repository REPO_NAME bereits erstellt sein. Die URL hat das Format LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
  2. Führen Sie den folgenden Befehl aus, um zu prüfen, ob Ihr Dienst nicht mehr mit aktivierter IAP konfiguriert ist:

    gcloud beta run services describe SERVICE_NAME

    Die Ausgabe sollte den folgenden String nicht mehr enthalten:

    Iap Enabled: true

Sie leiten nicht mehr den gesamten Traffic, der für den konfigurierten Cloud Run-Dienst bestimmt ist, zur Authentifizierung an IAP weiter, bevor er an den Container übergeben wird.

Nutzer- oder Gruppenzugriff verwalten

Standardmäßig verwendet IAP für Cloud Run organisationsinterne Identitäten mit Google-Konten. Sie können den Zugriff auf einen Cloud Run-Dienst über die Google Cloud Console oder die gcloud CLI hinzufügen oder entfernen.

Konsole

So fügen Sie Zugriffsrechte hinzu oder entfernen sie:

  1. Rufen Sie in der Google Cloud Console die Seite „Cloud Run“ auf:

    Zu Cloud Run

  2. Klicken Sie auf den vorhandenen Dienst, den Sie ändern möchten, und dann auf Sicherheit.

  3. Klicken Sie unter IAP auf Richtlinie bearbeiten.

  4. Geben Sie das Hauptkonto und optional die Zugriffsebene(n) ein, die Sie hinzufügen möchten.

  5. Wenn Sie den Zugriff eines vorhandenen Hauptkontos entfernen möchten, klicken Sie neben Zugriffsebenen auf das Symbol Richtlinie löschen.

  6. Klicken Sie auf Speichern.

gcloud

Führen Sie einen der folgenden Befehle aus, um einzelnen Nutzern oder Gruppen in Ihrer Organisation den Zugriff auf einen Cloud Run-Dienst zu gewähren oder zu entziehen:

  • So fügst du Zugriffsrechte hinzu:

    gcloud beta iap web add-iam-policy-binding \
    --member=user:USER_EMAIL \
    --role=roles/iap.httpsResourceAccessor \
    --region=REGION \
    --resource-type=cloud-run \
    --service=SERVICE_NAME
  • So entfernen Sie den Zugriff:

    gcloud beta iap web remove-iam-policy-binding \
    --member=user:USER_EMAIL \
    --role=roles/iap.httpsResourceAccessor \
    --region=REGION \
    --resource-type=cloud-run \
    --service=SERVICE_NAME
  • So rufen Sie den Zugriff auf:

    gcloud beta iap web get-iam-policy \
    --region=REGION \
    --resource-type=cloud-run \
    --service=SERVICE_NAME

Ersetzen Sie Folgendes:

  • USER_EMAIL: Die E-Mail-Adresse des Nutzers.
  • REGION: Der Name Ihrer Cloud Run-Region.
  • SERVICE_NAME: Der Name Ihres Cloud Run-Dienstes.

Fehlerbehebung

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.

Nächste Schritte