Zugriffsebenen auf mit IAP gesicherte Ressourcen erstellen und anwenden

Auf dieser Seite wird erläutert, wie Sie Zugriffsebenen mit Access Context Manager erstellen und auf IAP-gesicherte Ressourcen (Identity-Aware Proxy) anwenden.

Überblick

Eine Zugriffsebene ist eine Gruppe von Attributen, die Anfragen auf der Grundlage ihres Ursprungs zugewiesen werden. Mithilfe von Kriterien wie Gerätetyp, IP-Adresse oder Nutzeridentität können Sie festlegen, welche Zugriffsebene gewährt werden soll. Beispielsweise können Sie Verbindungen innerhalb Ihres Unternehmensnetzwerks die Ebene "High_Trust" zuweisen und externen Geräten, auf denen genehmigte Betriebssysteme ausgeführt werden, die Ebene "Medium_Trust".

Geräteinformationen werden gesammelt und über Zugriffsebenen referenziert, sobald Sie die Endpunktprüfung einrichten. Die Endpunktprüfung erstellt ein Inventar aller Unternehmens- und privaten Geräte, die auf Ihre Unternehmensressourcen zugreifen.

Zugriffsebenen werden erzwungen, wenn Sie sie als Bedingung der Identitäts- und Zugriffsverwaltung (IAM) für eine mit IAP gesicherte Ressource hinzufügen. Dank IAP können Sie ein detailliertes Zugriffssteuerungsmodell auf Ressourcenebene statt Firewalls auf Netzwerkebene nutzen. Beispiel: Sie können festlegen, dass die meisten Ressourcen auf der Ebene "Medium_Trust" verfügbar sind, während bestimmte sensible Ressourcen die Ebene "High_Trust" erfordern.

Weitere Informationen finden Sie in der Übersicht zum Access Context Manager.

Hinweise

Bevor Sie beginnen, müssen Sie Folgendes tun:

  • Mit IAP eine Ressource sichern.
  • Die Endpunktprüfung einrichten. Beachten Sie, dass dies nur erforderlich ist, wenn Sie den Zugriff auf Ressourcen auf Basis von Nutzergeräteinformationen wie dem Speicherverschlüsselungsstatus einschränken möchten.
  • Sie müssen für Ihr Projekt eine der folgenden Rollen gewährt haben.

    • Access Context Manager-Administrator
    • Access Context Manager-Bearbeiter

Zugriffsebene erstellen

Der folgende Vorgang erstellt eine Zugriffsebene.

Angenommen, Sie möchten eine Zugriffsebene erstellen, mit der eine Gruppe interner Prüfer für ein Projekt auf die Google Cloud-Beobachtbarkeit zugreifen kann. Hierfür können Sie den Geräten der Prüfer IP-Adressen zwischen 203.0.113.0 und 203.0.113.127 in einem Subnetz zuweisen. Außerdem möchten Sie dafür sorgen, dass die Geräte verschlüsselt sind. Sie wissen, dass diesem Subnetz keine anderen Geräte als die der Prüfer zugewiesen werden.

Console

  1. Rufen Sie in der Google Cloud Console die Seite „Access Context Manager“ auf.

    Zur Seite „Access Context Manager“

  2. Wählen Sie Ihre Organisation aus, wenn Sie dazu aufgefordert werden.

  3. Klicken Sie oben auf der Seite Access Context Manager auf Neu.

  4. Klicken Sie im Bereich Neue Zugriffsebene im Abschnitt Bedingungen auf Attribut hinzufügen und dort auf Geräterichtlinie.

  5. Klicken Sie auf das Drop-down-Menü Speicherverschlüsselung und wählen Sie Verschlüsselt aus. Beachten Sie, dass diese Regel nur funktioniert, nachdem Sie auf den Geräten Ihrer Mitarbeiter die Endpunktprüfung eingerichtet haben.

  6. Klicken Sie noch einmal auf Attribut hinzufügen und wählen Sie IP-Subnetzwerke aus.

  7. Geben Sie in das Feld IP-Subnetzwerke einen oder mehrere Bereiche von IPv4- oder IPv6-Adressen als CIDR-Blöcke ein.

    In diesem Beispiel geben Sie in das Feld IP-Subnetzwerke 203.0.113.0/25 ein, um den Zugriff auf die Prüfer zu beschränken.

  8. Klicken Sie auf Speichern.

gcloud

  1. Erstellen Sie eine .yaml-Datei für eine Zugriffsebene und legen Sie dort einen oder mehrere Bereiche von IPv4- oder IPv6-Adressen fest, die als CIDR-Blöcke formatiert sind.

    In diesem Beispiel geben Sie Folgendes in die .yaml-Datei ein, um den Zugriff nur auf die Prüfer zu beschränken:

    - ipSubnetworks:
        - 203.0.113.0/25
    - devicePolicy:
        allowedEncryptionStatuses
          - ENCRYPTED
    

    Eine Liste der Zugriffsebenenattribute und ihres YAML-Formats finden Sie unter Zugriffsebenenattribute. In dieser Beispiel-YAML-Datei für die Zugriffsebene finden Sie eine umfassende YAML-Datei aller möglichen Attribute.

    Beachten Sie, dass die Regel devicePolicy nur funktioniert, nachdem Sie auf den Geräten Ihrer Mitarbeiter die Endpunktprüfung eingerichtet haben.

  2. Speichern Sie die Datei. In diesem Beispiel heißt die Datei CONDITIONS.yaml.

  3. Erstellen Sie die Zugriffsebene.

    gcloud access-context-manager levels create NAME \
       --title TITLE \
       --basic-level-spec CONDITIONS.yaml \
       --policy=POLICY_NAME
    

    Wobei:

    • NAME ist der eindeutige Name für die Zugriffsebene. Dieser Name muss mit einem Buchstaben beginnen und darf nur Buchstaben, Zahlen und Unterstriche enthalten.

    • TITLE ist ein für Menschen lesbarer Titel. Er muss für die Richtlinie eindeutig sein.

    • POLICY_NAME ist der Name der Zugriffsrichtlinie Ihrer Organisation.

    Die Ausgabe sollte etwa so aussehen:

    Create request issued for: NAME
    Waiting for operation [accessPolicies/POLICY_NAME/accessLevels/NAME/create/1521594488380943] to complete...done.
    Created level NAME.
    

API

  1. Verfassen Sie einen Anfragetext für das Erstellen einer AccessLevel-Ressource, die einen oder mehrere Bereiche von IPv4- oder IPv6-Adressen, die als CIDR-Blöcke formatiert sind, und eine Geräterichtlinie enthält, die verschlüsselten Speicher erfordert.

    In diesem Beispiel geben Sie Folgendes in den Anfragetext ein, um den Zugriff nur auf die Prüfer zu beschränken:

    {
     "name": "NAME",
     "title": "TITLE",
     "basic": {
       "conditions": [
         {
           "ipSubnetworks": [
             "203.0.113.0/25"
           ]
         },
         {
         "devicePolicy": [
           "allowedEncryptionStatuses": [
             "ENCRYPTED"
           ]
         ]
         }
       ]
     }
    }
    

    Wobei:

    • NAME ist der eindeutige Name für die Zugriffsebene. Dieser Name muss mit einem Buchstaben beginnen und darf nur Buchstaben, Zahlen und Unterstriche enthalten.

    • TITLE ist ein für Menschen lesbarer Titel. Er muss für die Richtlinie eindeutig sein.

  2. Rufen Sie zum Erstellen der Zugriffsebene Folgendes auf: accessLevels.create.

    POST https://accesscontextmanager.googleapis.com/v1/accessPolicies/POLICY_NAME/accessLevels
    

    Wobei:

    • POLICY_NAME ist der Name der Zugriffsrichtlinie Ihrer Organisation.

Zugriffsebene anwenden

Eine IAP-gesicherte Ressource hat eine IAM-Richtlinie, die die IAP-Rolle an die Ressource bindet.

Durch das Hinzufügen einer bedingten IAM-Bindung zur IAM-Richtlinie wird der Zugriff auf Ihre Ressourcen auf der Grundlage von Anfrageattributen weiter eingeschränkt. Diese Anfrageattribute umfassen:

  • Zugriffsebenen
  • URL-Host/-Pfad
  • Datum/Uhrzeit

Beachten Sie, dass in einer bedingten IAM-Bindung festgelegte Anfragewerte, die mit request.host und request.path verglichen werden, exakt angegeben werden müssen. Wenn Sie beispielsweise den Zugriff auf Pfade beschränken, die mit /internal admin beginnen, können Sie die Beschränkung über /internal%20admin umgehen. Weitere Informationen finden Sie unter Hostname und Pfadbedingungen verwenden.

In den folgenden Schritten wird beschrieben, wie Sie Ihre Zugriffsebene zu einer IAP-gesicherten Ressource hinzufügen. Dazu aktualisieren Sie die IAM-Richtlinie dieser Ressource.

Console

  1. Rufen Sie die IAP-Administratorseite auf.

    Rufen Sie die IAP-Administratorseite auf.

  2. Klicken Sie auf das Kästchen neben den Ressourcen, für die Sie IAM-Berechtigungen aktualisieren möchten.

  3. Klicken Sie auf der rechten Seite im Infobereich auf Hauptkonto hinzufügen.

  4. Geben Sie im Feld Neues Hauptkonto die Hauptkonten ein, denen Sie eine Rolle zuweisen möchten.

  5. Wählen Sie in der Drop-down-Liste Rolle auswählen die Rolle Nutzer IAP-gesicherter Web-Apps aus.

  6. Wenn Sie vorhandene Zugriffsebenen festlegen möchten, wählen Sie diese in der Drop-down-Liste Zugriffsebenen aus. Sie müssen die Rolle Nutzer von IAP-gesicherten Web-Apps auswählen und Berechtigungen auf Organisationsebene haben, um vorhandene Zugriffsebenen aufrufen zu können.

    Wenn Sie mehrere Zugriffsebenen auf eine Ressource anwenden, erhalten Nutzer Zugriff auf die Ressource, wenn sie die Bedingungen für mindestens eine der ausgewählten Zugriffsebenen erfüllen. Dies ist eine logische OR-Verknüpfung der Zugriffsebenen in der Liste. Wenn Sie möchten, dass Nutzer die Bedingungen in mehreren Zugriffsebenen erfüllen (eine logische AND-Verknüpfung der Zugriffsebenen), erstellen Sie eine Zugriffsebene mit mehreren Ebenen.

  7. Wenn Sie den Hauptkonten weitere Rollen hinzufügen möchten, klicken Sie auf Weitere Rolle hinzufügen.

  8. Wenn Sie mit dem Hinzufügen von Rollen fertig sind, klicken Sie auf Speichern.

gcloud

Derzeit können Sie nur mit der gcloud CLI bedingte Bindungen auf Projektebene festlegen.

Zum Festlegen bedingter Bindungen bearbeiten Sie die Datei policy.yaml Ihres Projekts in folgender Weise:

  1. Öffnen Sie mit dem folgenden gcloud-Befehl die IAM-Richtlinie für die Anwendung:

    gcloud projects get-iam-policy PROJECT_ID > policy.yaml
    
  2. Bearbeiten Sie die Datei policy.yaml, um Folgendes anzugeben:

    • Die Nutzer und Gruppen, auf die Sie die IAM-Bedingung anwenden möchten.
    • Die Rolle iap.httpsResourceAccessor, die ihnen Zugriff auf die Ressourcen gewährt.
    • Die IAM-Bedingung mit Ihrer Zugriffsebene.

    Die folgende Bedingung gewährt dem Nutzer und der Gruppe Zugriff, wenn die Zugriffsebenenanforderungen für ACCESS_LEVEL_NAME erfüllt sind und der Ressourcen-URL-Pfad mit / beginnt.

    ...
    - members:
    - group:EXAMPLE_GROUP@GOOGLE.COM
    - user:EXAMPLE_USER@GOOGLE.COM
    role: roles/iap.httpsResourceAccessor
    condition:
        expression: "accessPolicies/ORGANIZATION_NUMBER/accessLevels/ACCESS_LEVEL_NAME" in request.auth.access_levels && request.path.startsWith("/")
        title: CONDITION_TITLE
    ...
    
  3. Binden Sie die Richtlinie mithilfe des Befehls set-iam-policy an die Anwendung. gcloud projects set-iam-policy PROJECT_ID policy.yaml

API

Zum Bearbeiten der Datei policy.json Ihrer Anwendung gehen Sie wie unten für Ihren Anwendungstyp dargestellt vor. Weitere Informationen zum Verwenden der IAM API für das Verwalten von Zugriffsrichtlinien finden Sie unter Zugriff auf Ressourcen verwalten, die mit IAP gesichert sind.

Bevor Sie die folgenden anwendungsspezifischen API-Schritte ausführen, exportieren Sie die folgenden Variablen:

 export PROJECT_NUM=PROJECT_NUMBER
 export IAP_BASE_URL=https://iap.googleapis.com/v1beta1/projects/${PROJECT_NUMBER}/iap_web
 # Replace POLICY_FILE.JSON with the name of JSON file to use for setIamPolicy
 export JSON_NEW_POLICY=POLICY_FILE.JSON
 

App Engine

  1. Exportieren Sie die folgenden App Engine-Variablen:

    # The APP_ID is usually the project ID
    export GAE_APP_ID=APP_ID
    export GAE_BASE_URL=${IAP_BASE_URL}/appengine-${GAE_APP_ID}

  2. Rufen Sie die IAM-Richtlinie für die App Engine-Anwendung mit der Methode getIamPolicy ab. Das leere Datenbit am Ende wandelt die curl-Anfrage in POST anstelle von GET um.

    curl -i -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -d '' ${GAE_BASE_URL}/:getIamPolicy
    

  3. Fügen Sie der JSON-Datei der IAM-Richtlinie die bedingte IAM-Bindung hinzu. Im Folgenden finden Sie ein Beispiel für eine bearbeitete Datei policy.json, mit der die Rolle iap.httpsResourceAccessor an zwei Nutzer gebunden und diesen Zugriff auf die mit BeyondCorp Enterprise gesicherten Ressourcen gewährt wird. Es wurde eine IAM-Bedingung hinzugefügt, damit sie nur dann Zugriff auf die Ressourcen haben, wenn die Zugriffsebenenanforderung für ACCESS_LEVEL_NAME erfüllt ist und der URL-Pfad der Ressource mit / beginnt. Es kann nur eine Bedingung pro Bindung vorhanden sein.

    Beispieldatei policy.json

    {
    "policy": {
      "bindings": [
            {
              "role": "roles/iap.httpsResourceAccessor",
              "members": [
                  "group:EXAMPLE_GROUP@GOOGLE.COM",
                  "user:EXAMPLE_USER@GOOGLE.COM"
              ],
              "condition": {
                "expression": ""accessPolicies/ORGANIZATION_NUMBER/accessLevels/ACCESS_LEVEL_NAME" in request.auth.access_levels && request.path.startsWith("/")",
                "title": "CONDITION_NAME"
              }
            }
        ]
      }
    }
    

  4. Legen Sie die neue policy.json-Datei mit der Methode setIamPolicy fest.

    curl -i -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    ${GAE_BASE_URL}:setIamPolicy -d @${JSON_NEW_POLICY}
    

App Engine-Dienste und -Versionen

Sie können auch die IAM-Richtlinie eines App Engine-Dienstes, aller Versionen oder einer bestimmten Version eines Dienstes aktualisieren. Führen Sie die folgenden Schritte für eine bestimmte Version eines Dienstes aus:

  1. Exportieren Sie die folgenden zusätzlichen Variablen.
    export GAE_SERVICE=SERVICE_NAME
    export GAE_VERSION=VERSION_NAME
    
  2. Aktualisieren Sie die exportierte Variable GAE_BASE_URL.
    export GAE_BASE_URL=${IAP_BASE_URL}/appengine-${GAE_APP_ID}/services/${GAE_SERVICE}/versions/${GAE_VERSION}
  3. Rufen Sie die IAM-Richtlinie für die Version ab und richten Sie sie mithilfe der oben dargestellten Befehle getIamPolicy und setIamPolicy ein.

GKE und Compute Engine

  1. Exportieren Sie die Projekt-ID Ihres Back-End-Dienstes.

    export BACKEND_SERVICE_NAME=BACKEND_SERVICE_NAME

  2. Rufen Sie die IAM-Richtlinie für die Compute Engine-Anwendung mit der Methode getIamPolicy ab. Das leere Datenbit am Ende wandelt die curl-Anfrage in POST anstelle von GET um.

    curl -i -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     ${IAP_BASE_URL}/compute/services/${BACKEND_SERVICE_NAME}:getIamPolicy \
     -d ''
    

  3. Fügen Sie der JSON-Datei der IAM-Richtlinie die bedingte IAM-Bindung hinzu. Im Folgenden finden Sie ein Beispiel für eine bearbeitete Datei policy.json, mit der die Rolle iap.httpsResourceAccessor an zwei Nutzer gebunden und diesen Zugriff auf die mit BeyondCorp Enterprise gesicherten Ressourcen gewährt wird. Es wurde eine IAM-Bedingung hinzugefügt, damit sie nur dann Zugriff auf die Ressourcen haben, wenn die Zugriffsebenenanforderung für ACCESS_LEVEL_NAME erfüllt ist und der URL-Pfad der Ressource mit / beginnt. Es kann nur eine Bedingung pro Bindung vorhanden sein.


    Beispieldatei policy.json

    {
      "policy": {
        "bindings": [
          {
            "role": "roles/iap.httpsResourceAccessor",
            "members": [
              "group":EXAMPLE_GROUP@GOOGLE.COM,
              "user:EXAMPLE_USER@GOOGLE.COM"
            ],
            "condition": {
              "expression": ""accessPolicies/ORGANIZATION_NUMBER/accessLevels/ACCESS_LEVEL_NAME" in request.auth.access_levels && request.path.startsWith("/")",
              "title": "CONDITION_NAME"
            }
          }
        ]
      }
    }
    

  4. Legen Sie die neue policy.json-Datei mit der Methode setIamPolicy fest.

    curl -i -H "Content-Type:application/json" \
         -H "Authorization: Bearer $(gcloud auth print-access-token)" \
         ${IAP_BASE_URL}/compute/services/${BACKEND_SERVICE_NAME}:setIamPolicy \
         -d @${JSON_NEW_POLICY}