IAP mit Workforce Identity-Föderation konfigurieren

Auf dieser Seite erfahren Sie, wie Sie Identity-Aware Proxy (IAP) für die Verwendung der Workforce Identity-Föderation konfigurieren.

Wenn Sie die Workforce Identity-Föderation mit IAP konfigurieren, können Sie einen externen Identitätsanbieter (IdP) verwenden, um eine Gruppe von Nutzern, z. B. Mitarbeiter, Partner und Auftragnehmer, mithilfe von Identity and Access Management (IAM) zu authentifizieren und zu autorisieren, damit die Nutzer sicher auf Dienste zugreifen können, die aufGoogle Cloud oder lokal bereitgestellt werden.

Wenn Sie IAP mit der Mitarbeiteridentitätsföderation konfigurieren, können Sie in Bezug auf Ihre IAP-gesicherten Anwendungen Folgendes tun:

  • Endnutzer zur Anmeldung an einen externen IdP wie Okta weiterleiten
  • Konfigurieren Sie eine Anmeldesitzung zwischen 15 Minuten und 12 Stunden.
  • Nur bestimmten Endnutzern oder Endnutzergruppen in einem IdP Zugriff auf Ihre Anwendung gewähren.
  • Geben Sie den Kontext an, in dem ein Endnutzer auf eine Anwendung zugreifen kann. Sie können beispielsweise den Zugriff nur zu einer bestimmten Tageszeit zulassen.

Sie können IAP mit der Mitarbeiteridentitätsföderation für alle vorhandenen Ressourcen und Load Balancer verwenden, die IAP unterstützt.

IAP mit Workforce Identity-Föderation für eine Anwendung konfigurieren

Die Konfiguration von IAP mit der Mitarbeiteridentitätsföderation umfasst die folgenden Hauptaufgaben:

  1. Personalpool und ‑anbieter einrichten
  2. Erstellen Sie eine OAuth-Client-ID und ein Secret.
  3. Aktivieren Sie IAP und konfigurieren Sie es für die Verwendung der Identitätsföderation von Arbeitslasten.

Personalpool und ‑anbieter einrichten

Richten Sie einen Personalpool und einen Anbieter ein. Folgen Sie dazu der Anleitung für einen der folgenden Anbieter:

Informationen zum Festlegen der Sitzungsdauer finden Sie unter IAP-Sitzungen mit Workforce Identity-Föderation verwalten.

Wenn Sie eine E-Mail-Adresse von einem Drittanbieter-IdP Google Cloudzuordnen möchten, müssen Sie in Ihrem Personalpoolanbieter eine Attributzuordnung für google.email hinzufügen. Beispiel: google.email=assertion.email.

OAuth-Client-ID und ‑Secret erstellen

  1. Folgen Sie der Anleitung, um eine OAuth-Client-ID und ein ‑Secret zu erstellen. Verwenden Sie dazu ein Projekt in derselben Organisation wie der Personalpool, den Sie für diese Konfiguration verwenden. Das Projekt muss nicht dasselbe Projekt sein, in dem sich die IAP-geschützte Ressource befindet. Gehen Sie beim Erstellen der OAuth-Client-ID und des Secrets so vor:

    1. Verwenden Sie beim Erstellen der Client-ID einen Platzhalter für den Weiterleitungs-URI. Nachdem Sie die Client-ID erstellt haben, führen Sie describe einen OAuth-Client aus, um die generierte clientID zu erhalten.

    2. Wenn Sie die clientID haben, führen Sie update einen OAuth-Client aus aus, um allowed-redirect-uris auf Folgendes zu aktualisieren: https://iap.googleapis.com/v1/oauth/clientIds/$CLIENT_ID:handleRedirect.

      Dabei ist CLIENT_ID die clientID, die im vorherigen Schritt abgerufen wurde.

    3. Nachdem Sie den Clientschlüssel erstellt haben, führen Sie describe an OAuth client credentials aus, um die generierte clientSecret zu erhalten.

    Speichern Sie die clientId und clientSecret, da Sie sie in späteren Schritten benötigen.

IAP für die Verwendung der Mitarbeiteridentitätsföderation aktivieren

Führen Sie die folgenden Schritte aus, um IAP mit Workforce Identity-Föderation zu aktivieren.

IAP aktivieren

Aktivieren Sie IAP für die Ressource.

Console

  1. Öffnen Sie in der Google Cloud Console die Seite „IAP“.
    Zur Seite „IAP“
  2. Wählen Sie ein Projekt aus. Das Projekt muss sich in derselben Organisation wie der Mitarbeiteridentitätspool befinden, den Sie zuvor erstellt haben. Das Projekt muss nicht das Projekt sein, in dem Sie die OAuth-Client-ID und das Secret erstellt haben.
  3. Klicken Sie auf den Tab Anwendungen und suchen Sie die Anwendung, für die Sie den Zugriff mithilfe von IAP einschränken möchten.
  4. Stellen Sie den Schieberegler in der Spalte "IAP" auf Ein.

gcloud

Wenn Sie IAP mit der gcloud CLI aktivieren möchten, folgen Sie der Anleitung für den entsprechenden Dienst:

API

  1. Erstellen Sie eine settings.json-Datei.

    cat << EOF > settings.json
    {
    "iap":
      {
        "enabled":true,
     }
    }
    EOF
    
  2. IAP in App Engine aktivieren

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -d @settings.json \
    "https://appengine.googleapis.com/v1/apps/PROJECT_ID?updateMask=iap.enabled"
    

    Wenn Sie IAP in Compute Engine aktivieren möchten, verwenden Sie die folgende URL: https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/REGION/backendServices/BACKEND_SERVICE_NAME?updateMask=iap.enabled.

IAP-Einstellungen aktualisieren

Wenn Sie IAP für die Verwendung der Workforce Identity-Föderation konfigurieren möchten, müssen Sie die folgenden Einstellungen konfigurieren:

  • WorkforceIdentitySettings: Die zuvor erstellte OAuth-Client-ID und der zugehörige Clientschlüssel.
  • IdentitySources: Die Identitätsquelle.

Weitere Informationen finden Sie unter IAP-APIs.

gcloud

  1. Erstellen Sie anhand des folgenden Beispiels eine iap_settings.yaml-Datei.

    CLIENT_ID=clientId
    CLIENT_SECRET=clientSecret
    WORKFORCE_POOL_NAME=locations/global/workforcePools/test-pool
    cat <<EOF > iap_settings.yaml
    access_settings:
      identity_sources: ["WORKFORCE_IDENTITY_FEDERATION"]
      workforce_identity_settings:
        workforce_pools: ["$WORKFORCE_POOL_NAME"]
        oauth2:
          client_id: "$CLIENT_ID"
          client_secret: "$CLIENT_SECRET"
    EOF
    
  2. Führen Sie den folgenden Befehl aus, um die IAP-Einstellungen für Ihre Ressource zu aktualisieren.

    gcloud iap settings set iap_settings.yaml --project=PROJECT --resource-type=RESOURCE_TYPE --service=SERVICE
    

    Ersetzen Sie Folgendes:

    • PROJECT: die Projekt-ID
    • RESOURCE_TYPE: Der IAP-Ressourcentyp. Der Ressourcentyp muss cloud-run (Vorschau), app-engine, iap_web, compute, organization oder folder sein.

      Verwenden Sie für den Ressourcentyp cloud-run das Flag --region, um die Region anzugeben, in der Ihr Cloud Run-Dienst bereitgestellt wird.

    • SERVICE: Der Dienstname. Dies ist sowohl für app-engine als auch für compute optional.

    Weitere Informationen zum Befehl finden Sie unter gcloud iap settings set.

API

  1. Erstellen Sie anhand des folgenden Beispiels eine iap_settings.json-Einstellungsdatei.

    CLIENT_ID=clientId
    CLIENT_SECRET=clientSecret
    WORKFORCE_POOL_NAME=locations/global/workforcePools/test-pool
    cat <<EOF > iap_settings.json
    {
       "access_settings": {
         "identity_sources": ["WORKFORCE_IDENTITY_FEDERATION"],
         "workforce_identity_settings": {
           "workforce_pools": ["$WORKFORCE_POOL_NAME"],
           "oauth2": {
             "client_id": "$CLIENT_ID",
             "client_secret": "$CLIENT_SECRET",
           }
        }
      }
    }
    EOF
    
  2. Verwenden Sie die gcloud CLI, um den Namen der Ressource abzurufen, und kopieren Sie dann die RESOURCE_NAME aus der Ausgabe, da Sie sie im nächsten Schritt benötigen.

    gcloud iap settings get \
        --project=PROJECT \
        --resource-type=RESOURCE_TYPE \
        --service=SERVICE
    

    Ersetzen Sie Folgendes:

    • PROJECT: die Projekt-ID
    • RESOURCE_TYPE: Der IAP-Ressourcentyp. Der Ressourcentyp muss appengine, iap_web, compute, organization, folder oder cloud_run-$REGION (Vorabversion) sein, wobei $REGION die Region ist, in der Ihr Cloud Run-Dienst bereitgestellt wird.
    • SERVICE: Der Dienstname. Dies ist sowohl für app-engine als auch für compute optional.
  3. Ersetzen Sie RESOURCE_NAME im folgenden Befehl durch die RESOURCE_NAME aus dem vorherigen Schritt.

    curl -X PATCH \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Accept: application/json" \
     -H "Content-Type: application/json" \
     -d @iap_settings.json \
    "https://iap.googleapis.com/v1/RESOURCE_NAME:iapSettings?updateMask=iapSettings.accessSettings.identitySources,iapSettings.accessSettings.workforceIdentitySettings.workforcePools,iapSettings.accessSettings.workforceIdentitySettings.oauth2.clientId,iapSettings.accessSettings.workforceIdentitySettings.oauth2.clientSecret"
    

Zugriff auf mit IAP gesicherte Ressourcen gewähren

Um auf eine IAP-gesicherte Ressource zuzugreifen, benötigen Endnutzer die Rolle Nutzer von IAP-gesicherten Web-Apps für die Ressource. Sie können die Rolle „Nutzer von IAP-gesicherten Web-Apps“ einem einzelnen Nutzer (Hauptkonto) oder einer Gruppe von Nutzern (Hauptkontogruppe, die einer Gruppe, einem bestimmten Attribut oder einem gesamten Nutzerpool zugeordnet ist) zuweisen.

Uneingeschränkter Zugriff auf mit IAP gesicherte Ressourcen wird nicht unterstützt.

Console

  1. Öffnen Sie in der Google Cloud Console die Seite „IAP“.
    Zur Seite „IAP“
  2. Wählen Sie die Ressource aus, die Sie mit IAP sichern möchten.
  3. Klicken Sie auf Hauptkonto hinzufügen und fügen Sie dann die Hauptkonto-IDs der Gruppen oder Einzelpersonen hinzu, denen Sie eine IAM-Rolle für die Ressource zuweisen möchten.
  4. Wählen Sie unter Rollen zuweisen die Option Nutzer von IAP-gesicherten Web-Apps aus.
  5. Klicken Sie auf Hinzufügen.

gcloud

Führen Sie den folgenden Befehl aus:

gcloud iap web add-iam-policy-binding \
    --member=PRINCIPAL_IDENTIFIER \
    --role='roles/iap.httpsResourceAccessor' \
    --project=PROJECT_ID \
    --resource-type=RESOURCE_TYPE \
    --service=SERVICE \
    --condition=CONDITION

Ersetzen Sie Folgendes :

  • PRINCIPAL_IDENTIFIER: Die Hauptkonto-IDs.
  • PROJECT_ID: die Projekt-ID
  • RESOURCE_TYPE: Der IAP-Ressourcentyp, der app-engine oder backend-services sein kann.
  • SERVICE: (Optional) Der Dienstname.
  • CONDITION: (Optional) IAM-Bedingungen. Das folgende Beispiel zeigt eine Bedingung, die mit Zugriffsebenen konfiguriert wurde:
expression="accessPolicies/12345678/accessLevels/iap_test_access_level" in request.auth.access_levels,title=iap-test-access-level,description=only access in weekdays

API

Diese Methode wird nicht empfohlen, da sie die gesamte IAM-Richtlinie einer Ressource betrifft. Durch einen Fehler kann die Richtlinie aus einer Ressource entfernt werden.

  1. Rufen Sie die vorhandenen IAM-Richtlinienbindungen ab.

    curl -X POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Accept: application/json" \
      -H "Content-Type: application/json" \
      -d {} \
    "https://iap.googleapis.com/v1/RESOURCE_NAME:getIamPolicy" -o iam_policy_bindings.json
    

    Ersetzen Sie RESOURCE_NAME durch die RESOURCE_NAME, die Sie in einem früheren Schritt erhalten haben.

  2. Entfernen Sie aus der Datei iam_policy_bindings.json, die Sie im vorherigen Schritt erhalten haben, die Zeilen für Version und ETag und fügen Sie die Bindung hinzu, die Sie für die Hauptkonto-ID hinzufügen möchten. Weitere Informationen finden Sie unter Zulassungsrichtlinien.

    {
      "bindings": [
        {
          // existing bindings
        },
        {
          "role": "roles/iap.httpsResourceAccessor",
          "members": [
          "principal://iam.googleapis.com/locations/global/workforcePools/iap-test-pool/subject/iap-test-subject"
          ],
          "condition": {
            "expression": "\"accessPolicies/12345678/accessLevels/iap_test_access_level\" in request.auth.access_levels",
            "title": "iap-test-access-level",
            "description": "only access in week days"
          }
        }
      ]
    }
    
  3. Aktualisieren Sie die IAM-Richtlinienbindungen.

    curl -X POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Accept: application/json" \
      -H "Content-Type: application/json" \
      -d "{"policy":$(cat iam_policy_bindings.json)}" \
    "https://iap.googleapis.com/v1/RESOURCE_NAME:setIamPolicy"
    

    Ersetzen Sie RESOURCE_NAME durch die RESOURCE_NAME, die Sie in einem früheren Schritt erhalten haben.

Weitere Informationen finden Sie unter GetIamPolicy und SetIamPolicy.

(Optional) Kontextsensitiven Zugriff einrichten

Optional können Sie Regeln für den kontextsensitiven Zugriff für die erweiterte Autorisierung einrichten.

Informationen zum Einrichten von Zugriffsebenen finden Sie unter Zugriffsebenen erstellen und anwenden. Zugriffsebenen, die auf Geräteinformationen basieren, sind bei Verwendung der Mitarbeiteridentitätsföderation nicht verfügbar. Sie können weiterhin anfragekontextbasierte Zugriffsebenen mit Bedingungen für IP-Adresse, Uhrzeit und Datum verwenden.

Programmatische Authentifizierung

IAP unterstützt die JWT-Authentifizierung von Dienstkonten für Anwendungen, die mit Workforce Identity Federation konfiguriert sind. Eine Anleitung finden Sie unter Mit einem Dienstkonto-JWT authentifizieren.

Einschränkungen bei der Arbeit mit Personalpools

  • Für jede IAP-fähige Anwendung kann nur ein Mitarbeiterpool konfiguriert werden und dieser darf nur einen Anbieter enthalten.
  • Der Mitarbeiteridentitätspool, die OAuth-Client-ID und der Clientschlüssel sowie die IAP-fähigen Anwendungen müssen sich alle in derselben Organisation befinden.
  • Zugriffsebenen für gerätebezogene Informationen werden nicht unterstützt.
  • Nur die folgenden Konfigurationen von IAP-Einstellungen werden unterstützt:
  • Der programmatische Zugriff mit Workforce Identity Federation wird nur für Google-Dienstkonten unterstützt.

Fehlerbehebung

Informationen zur Fehlerbehebung finden Sie unter Fehlerbehebung und häufig gestellte Fragen.