Autorisierungsrichtlinien für Application Load Balancer einrichten

Auf dieser Seite erfahren Sie, wie Sie Autorisierungsrichtlinien für Application Load Balancer einrichten.

Hinweis

Load-Balancer einrichten

Wenn Sie noch keinen Load Balancer erstellt haben, finden Sie auf den folgenden Seiten Informationen zum Einrichten des gewünschten Application Load Balancers:

Autorisierungsrichtlinie erstellen

Wenn Sie eine Autorisierungsrichtlinie erstellen möchten, erstellen Sie eine YAML-Datei, in der das Ziel und die Regeln definiert sind, und importieren Sie die Datei dann mit dem Befehl gcloud network-security authz-policies.

In diesem Abschnitt finden Sie eine Anleitung zum Erstellen verschiedener Arten von Autorisierungsrichtlinien, die an die Weiterleitungsregel eines Load-Balancers angehängt werden.

Autorisierungsrichtlinie zum Ablehnen von Anfragen

In diesem Abschnitt finden Sie ein Beispiel für eine Autorisierungsrichtlinie, die Anfragen basierend auf bestimmten Anfrageattributen ablehnt.

Global

Wenn Sie einen globalen externen Application Load Balancer verwenden, gehen Sie so vor, um eine Autorisierungsrichtlinie zu erstellen und zu importieren, die Anfragen basierend auf IP-Adressbereichen ablehnt:

  1. Erstellen Sie eine YAML-Datei für die Autorisierungsrichtlinie, um bestimmte Anfragen abzulehnen.

    Im folgenden Beispiel wird eine authz-policy-deny.yaml-Datei für die Weiterleitungsregel LB_FORWARDING_RULE am Standort global erstellt. Die Richtlinie verweigert Clients mit IP-Adressen im Bereich 10.0.0.0/24 den Zugriff auf den URL-Pfad /api/payments.

    cat >authz-policy-deny.yaml <<EOF
    name: my-authz-policy-deny
    target:
      loadBalancingScheme: LB_SCHEME
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules/LB_FORWARDING_RULE"
    httpRules:
    - from:
        sources:
        - ipBlocks:
          - prefix: "10.0.0.0"
            length: "24"
    - to:
        operations:
        - paths:
          - prefix: "/api/payments"
    action: DENY
    EOF
    

    Ersetzen Sie Folgendes:

    • LB_SCHEME: Ihr Load-Balancing-Schema. Legen Sie für globale externe Application Load Balancer das Schema auf EXTERNAL_MANAGED fest.
    • PROJECT_ID: die ID Ihres Projekts in Google Cloud .
    • LB_FORWARDING_RULE: der Name der Weiterleitungsregel des Load-Balancers.
  2. Erstellen Sie eine Autorisierungsrichtlinie und importieren Sie die YAML-Datei.

    Mit dem folgenden Beispielbefehl importieren Sie die zuvor erstellte Richtliniendatei und erstellen eine Autorisierungsrichtlinie:

    gcloud network-security authz-policies import my-authz-policy-deny \
        --source=authz-policy-deny.yaml \
        --location=global
    

Regionsübergreifend

Wenn Sie einen regionenübergreifenden internen Application Load Balancer verwenden, folgen Sie dieser Anleitung, um eine Autorisierungsrichtlinie zu erstellen und zu importieren, mit der Anfragen basierend auf Clientzertifikatsprinzipalen abgelehnt werden.

  1. Erstellen Sie eine YAML-Datei für die Autorisierungsrichtlinie, um bestimmte Anfragen abzulehnen.

    Im folgenden Beispiel wird eine authz-policy-deny.yaml-Datei für die Weiterleitungsregel LB_FORWARDING_RULE am Standort global erstellt. Die Richtlinie verweigert den Zugriff auf den /api/payments-URL-Pfad für Clients, die www.example.com in ihren SANs für den DNS-Namen des Clientzertifikats haben.

    cat >authz-policy-deny.yaml <<EOF
    name: my-authz-policy-deny
    target:
      loadBalancingScheme: LB_SCHEME
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules/LB_FORWARDING_RULE"
    httpRules:
    - from:
        sources:
        - principals:
          - principalSelector: CLIENT_CERT_DNS_NAME_SAN
            principal:
              exact: "www.example.com"
      to:
        operations:
        - paths:
          - prefix: "/api/payments"
    action: DENY
    EOF
    

    Ersetzen Sie Folgendes:

    • LB_SCHEME: Ihr Load-Balancing-Schema. Legen Sie für regionenübergreifende interne Application Load Balancer das Schema auf INTERNAL_MANAGED fest.
    • PROJECT_ID: die ID Ihres Projekts in Google Cloud .
    • LB_FORWARDING_RULE: der Name der Weiterleitungsregel des Load Balancers.
  2. Erstellen Sie eine Autorisierungsrichtlinie und importieren Sie die YAML-Datei.

    Mit dem folgenden Beispielbefehl importieren Sie die zuvor erstellte Richtliniendatei und erstellen eine Autorisierungsrichtlinie:

    gcloud network-security authz-policies import my-authz-policy-deny \
        --source=authz-policy-deny.yaml \
        --location=global
    

Regional

Wenn Sie einen regionalen externen Application Load Balancer oder einen regionalen internen Application Load Balancer verwenden, gehen Sie so vor, um eine Autorisierungsrichtlinie zu erstellen und zu importieren, die Anfragen basierend auf Clientzertifikat-Principals ablehnt.

  1. Erstellen Sie eine YAML-Datei für die Autorisierungsrichtlinie, um bestimmte Anfragen abzulehnen.

    Im folgenden Beispiel wird eine authz-policy-deny.yaml-Datei für die Weiterleitungsregel LB_FORWARDING_RULE in einerGoogle Cloud -Region erstellt. Die Richtlinie verweigert den Zugriff auf den /api/payments-URL-Pfad für Clients, die www.example.com in ihren DNS-Namen-SANs des Clientzertifikats haben.

    cat >authz-policy-deny.yaml <<EOF
    name: my-authz-policy-deny
    target:
      loadBalancingScheme: LB_SCHEME
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/LB_FORWARDING_RULE"
    policyProfile: REQUEST_AUTHZ
    httpRules:
    - from:
        sources:
        - principals:
          - principalSelector: CLIENT_CERT_DNS_NAME_SAN
            principal:
              exact: "www.example.com"
      to:
        operations:
        - paths:
          - prefix: "/api/payments"
    action: DENY
    EOF
    

    Ersetzen Sie Folgendes:

    • LB_SCHEME: Ihr Load-Balancing-Schema. Legen Sie für regionale externe Application Load Balancer das Schema auf EXTERNAL_MANAGED fest. Legen Sie für regionale interne Application Load Balancer das Schema auf INTERNAL_MANAGED fest.
    • PROJECT_ID: die ID Ihres Projekts in Google Cloud .
    • LOCATION: Ihre Google Cloud Region.
    • LB_FORWARDING_RULE: der Name der Weiterleitungsregel des Load Balancers.
  2. Erstellen Sie eine Autorisierungsrichtlinie und importieren Sie die YAML-Datei.

    Mit dem folgenden Beispielbefehl importieren Sie die zuvor erstellte Richtliniendatei und erstellen eine Autorisierungsrichtlinie in der Region LOCATION:

    gcloud beta network-security authz-policies import my-authz-policy-deny \
        --source=authz-policy-deny.yaml \
        --location=LOCATION
    

Autorisierungsrichtlinie zum Zulassen von Anfragen

In diesem Abschnitt finden Sie ein Beispiel für eine Autorisierungsrichtlinie, die Anfragen aus bestimmten IP-Adressbereichen zulässt.

Global und regionsübergreifend

Wenn Sie einen globalen externen Application Load Balancer oder einen regionenübergreifenden internen Application Load Balancer verwenden, gehen Sie so vor, um eine Autorisierungsrichtlinie zu erstellen und zu importieren:

  1. Erstellen Sie eine YAML-Datei für die Autorisierungsrichtlinie, um bestimmte Anfragen zuzulassen.

    Im folgenden Beispiel wird eine authz-policy-allow.yaml-Datei für die Weiterleitungsregel LB_FORWARDING_RULE am Standort global erstellt. Die Richtlinie erlaubt Clients mit IP-Adressen im Bereich 10.0.0.0/24 den Zugriff auf den URL-Pfad /api/payments.

    cat >authz-policy-allow.yaml <<EOF
    name: my-authz-policy-allow
    target:
      loadBalancingScheme: LB_SCHEME
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules/LB_FORWARDING_RULE"
    httpRules:
    - from:
        sources:
        - ipBlocks:
          - prefix: "10.0.0.0"
            length: "24"
      to:
        operations:
        - paths:
          - exact: "/api/payments"
    action: ALLOW
    EOF
    

    Ersetzen Sie Folgendes:

    • LB_SCHEME: Ihr Load-Balancing-Schema. Legen Sie für globale externe Application Load Balancer das Schema auf EXTERNAL_MANAGED fest. Legen Sie für regionenübergreifende interne Application Load Balancer das Schema auf INTERNAL_MANAGED fest.
    • PROJECT_ID: die ID Ihres Projekts in Google Cloud .
    • LB_FORWARDING_RULE: der Name der Weiterleitungsregel des Load Balancers.
  2. Erstellen Sie eine Autorisierungsrichtlinie und importieren Sie die YAML-Datei.

    Mit dem folgenden Beispielbefehl importieren Sie die zuvor erstellte Richtliniendatei und erstellen eine Autorisierungsrichtlinie:

    gcloud network-security authz-policies import my-authz-policy-allow \
        --source=authz-policy-allow.yaml \
        --location=global
    

Regional

Wenn Sie einen regionalen externen oder internen Application Load Balancer verwenden, gehen Sie so vor, um eine Autorisierungsrichtlinie zu erstellen und zu importieren:

  1. Erstellen Sie eine YAML-Datei für die Autorisierungsrichtlinie, um bestimmte Anfragen zuzulassen.

    Im folgenden Beispiel wird eine authz-policy-allow.yaml-Datei für die Weiterleitungsregel LB_FORWARDING_RULE in einer bestimmten Google Cloud -Region erstellt. Die Richtlinie erlaubt Clients mit IP-Adressen im Bereich 10.0.0.0/24 den Zugriff auf den URL-Pfad /api/payments.

    cat >authz-policy-allow.yaml <<EOF
    name: my-authz-policy-allow
    target:
      loadBalancingScheme: LB_SCHEME
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/LB_FORWARDING_RULE"
    policyProfile: REQUEST_AUTHZ
    httpRules:
    - from:
        sources:
        - ipBlocks:
          - prefix: "10.0.0.0"
            length: "24"
      to:
        operations:
        - paths:
          - exact: "/api/payments"
    action: ALLOW
    EOF
    

    Ersetzen Sie Folgendes:

    • LB_SCHEME: Ihr Load-Balancing-Schema. Wenn Sie einen regionalen externen Application Load Balancer verwenden, legen Sie das Schema auf EXTERNAL_MANAGED fest. Wenn Sie einen regionalen internen Application Load Balancer verwenden, legen Sie das Schema auf INTERNAL_MANAGED fest.
    • PROJECT_ID: die ID Ihres Projekts in Google Cloud .
    • LOCATION: Ihre Google Cloud Region.
    • LB_FORWARDING_RULE: der Name der Weiterleitungsregel des Load Balancers.
  2. Erstellen Sie eine Autorisierungsrichtlinie und importieren Sie die YAML-Datei.

    Mit dem folgenden Beispielbefehl importieren Sie die zuvor erstellte Richtliniendatei und erstellen eine Autorisierungsrichtlinie in der Region LOCATION:

    gcloud beta network-security authz-policies import my-authz-policy-allow \
        --source=authz-policy-allow.yaml \
        --location=LOCATION
    

Autorisierungsrichtlinie basierend auf Dienstkonten oder Tags

Sie können eine Autorisierungsrichtlinie basierend auf Dienstkonten oder sicheren Tags anwenden, die an verschiedene Google Cloud Ressourcen angehängt sind.

In diesem Beispiel wird davon ausgegangen, dass Sie Folgendes bereits erledigt haben:

Dienstkonto

  1. Erstellen Sie eine YAML-Datei für die Autorisierungsrichtlinie, um bestimmte Anfragen abzulehnen.

    Im folgenden Beispiel wird eine authz-policy-deny.yaml-Datei für die Weiterleitungsregel LB_FORWARDING_RULE eines regionalen internen Application Load Balancers erstellt. Die Richtlinie ist so konfiguriert, dass Anfragen von einer Google Cloud -Ressource, z. B. einer Compute Engine-VM, mit dem Dienstkonto my-sa-123@PROJECT_ID.iam.gserviceaccount.com für den Pfad /api/payments abgelehnt werden.

    cat >authz-policy-deny.yaml <<EOF
    name: my-authz-policy-deny
    target:
      loadBalancingScheme: LB_SCHEME
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/LB_FORWARDING_RULE"
    policyProfile: REQUEST_AUTHZ
    httpRules:
    - from:
        sources:
        - resources:
           - iamServiceAccount:
               exact: "my-sa-123@PROJECT_ID.iam.gserviceaccount.com"
      to:
        operations:
        - paths:
          - prefix: "/api/payments"
    action: DENY
    EOF
    

    Ersetzen Sie Folgendes:

    • LB_SCHEME: Ihr Load-Balancing-Schema. Legen Sie für einen regionalen internen Application Load Balancer das Schema auf INTERNAL_MANAGED fest.
    • PROJECT_ID: die ID Ihres Projekts in Google Cloud .
    • LOCATION: Ihre Google Cloud Region.
    • LB_FORWARDING_RULE: der Name der Weiterleitungsregel des Load Balancers.
  2. Erstellen Sie eine Autorisierungsrichtlinie und importieren Sie die YAML-Datei.

    Mit dem folgenden Beispielbefehl importieren Sie die zuvor erstellte Richtliniendatei und erstellen eine Autorisierungsrichtlinie in der angegebenen Region Google Cloud .

    gcloud beta network-security authz-policies import my-authz-policy-deny \
        --source=authz-policy-deny.yaml \
        --location=LOCATION
    

    Ersetzen Sie LOCATION durch Ihre Google Cloud Region.

Tag

  1. Erstellen Sie eine YAML-Datei für die Autorisierungsrichtlinie, um bestimmte Anfragen zuzulassen.

    Im folgenden Beispiel wird eine authz-policy-allow.yaml-Datei für die Weiterleitungsregel LB_FORWARDING_RULE eines regionalen internen Application Load Balancer erstellt. Die Richtlinie lässt nur Anfragen zu, die von einer Google Cloud -Ressource wie einer Compute Engine-VM mit dem sicheren Tag-Wert TAG_VALUE_PERMANENT_ID stammen, um auf den URL-Pfad /api/payments zuzugreifen.

    cat >authz-policy-allow.yaml <<EOF
    name: my-authz-policy-allow
    target:
      loadBalancingScheme: LB_SCHEME
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/LB_FORWARDING_RULE"
    policyProfile: REQUEST_AUTHZ
    httpRules:
    - from:
      sources:
        resources:
        - tagValueIdSet:
          - ids: "TAG_VALUE_PERMANENT_ID"
      to:
        operations:
        - paths:
          - exact: "/api/payments"
    action: ALLOW
    EOF
    

    Ersetzen Sie Folgendes:

    • LB_SCHEME: Das Load-Balancing-Schema. Legen Sie für einen regionalen internen Application Load Balancer das Schema auf INTERNAL_MANAGED fest.
    • PROJECT_ID: die ID Ihres Projekts in Google Cloud .
    • LOCATION: Ihre Google Cloud Region.
    • LB_FORWARDING_RULE: Der Name der Weiterleitungsregel des Load-Balancers.
    • TAG_VALUE_PERMANENT_ID: die permanente ID eines Tag-Werts.
  2. Erstellen Sie eine Autorisierungsrichtlinie und importieren Sie die YAML-Datei.

    Mit dem folgenden Beispielbefehl importieren Sie die zuvor erstellte Richtliniendatei und erstellen eine Autorisierungsrichtlinie in der angegebenen RegionGoogle Cloud :

    gcloud beta network-security authz-policies import my-authz-policy-allow \
        --source=authz-policy-allow.yaml \
        --location=LOCATION
    

    Ersetzen Sie Folgendes:

    • LOCATION: Ihre Google Cloud Region.

Autorisierungsrichtlinie zum Delegieren von Autorisierungsentscheidungen

In den Beispielen in diesem Abschnitt wird eine Autorisierungsrichtlinie erstellt, die Autorisierungsentscheidungen über Service Extensions an die folgenden Dienste delegiert:

Autorisierungsentscheidung an einen vom Nutzer verwalteten Dienst delegieren

Sie können eine Autorisierungsrichtlinie so konfigurieren, dass die Autorisierungsentscheidung über Service Extensions, insbesondere eine Autorisierungserweiterung, an einen vom Nutzer verwalteten Dienst delegiert wird.

  • Bei globalen und regionenübergreifenden Load-Balancern kann die Autorisierungserweiterung in einem nutzerverwalteten Google Cloud Backend-Dienst ausgeführt werden.

  • Bei regionalen Load-Balancern kann die Autorisierungserweiterung sowohl für einen vom Nutzer verwalteten Google Cloud Backend-Dienst als auch für einen FQDN-basierten Dienst ausgeführt werden.

Bei dieser Beispielkonfiguration wird davon ausgegangen, dass Sie einen vom Nutzer verwalteten Google Cloud Backend-Dienst (auch als Callout-Backend-Dienst bezeichnet) mit dem Namen authz-service erstellt haben. Weitere Informationen zum Erstellen eines solchen Dienstes finden Sie unter Vom Nutzer verwalteten Callout-Backend-Dienst konfigurieren.

Bei einem FQDN-basierten Dienst wird in diesem Beispiel davon ausgegangen, dass der benutzerdefinierte Dienst in Ihrer eigenen VPC bereitgestellt wird, das ext_authz-Protokoll unterstützt und über den voll qualifizierten Domainnamen mycustomauthz.internal.net zugänglich ist.

Global und regionsübergreifend

Wenn Sie einen globalen externen Application Load Balancer oder einen regionenübergreifenden internen Application Load Balancer verwenden, folgen Sie dieser Anleitung, um die Autorisierungsentscheidung an einen vom Nutzer verwalteten Dienst zu delegieren.

  1. Definieren Sie die Autorisierungserweiterung in einer YAML-Datei. Die Autorisierungserweiterung wird in einem Backend-Dienst (authz-service) ausgeführt und unterstützt das ext_authz-Protokoll.

    cat >authz-extension.yaml <<EOF
    name: my-authz-ext
    authority: ext11.com
    loadBalancingScheme: LB_SCHEME
    service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/authz-service
    forwardHeaders:
      - Authorization
    failOpen: false
    timeout: "0.1s"
    wireFormat: EXT_AUTHZ_GRPC
    EOF
    
  2. Erstellen Sie die Autorisierungserweiterung, indem Sie die YAML-Datei für die Autorisierungserweiterung mit dem Befehl gcloud service-extensions authz-extensions import importieren.

    gcloud service-extensions authz-extensions import my-authz-ext \
        --source=authz-extension.yaml \
        --location=global
    

    Ersetzen Sie Folgendes:

    • LB_SCHEME: Das Load-Balancing-Schema. Legen Sie für globale externe Application Load Balancer das Schema auf EXTERNAL_MANAGED fest. Legen Sie für regionenübergreifende interne Application Load Balancer das Schema auf INTERNAL_MANAGED fest.
    • PROJECT_ID: die ID Ihres Projekts in Google Cloud .
  3. Definieren Sie die Autorisierungsrichtlinie in einer YAML-Datei. Die Autorisierungsrichtlinie delegiert die Autorisierung an die Autorisierungserweiterung im Feld customProvider.

    Die Richtlinie ruft die Autorisierungserweiterung my-authz-ext für den gesamten Traffic zum URL-Pfad example.com/api/payments auf, wenn die Anfrage einen nicht leeren Authorization-Header enthält.

    cat >authz-policy-custom.yaml <<EOF
    name: my-authz-policy-custom
    target:
      loadBalancingScheme: LB_SCHEME
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules/LB_FORWARDING_RULE"
    httpRules:
    - to:
        operations:
        - hosts:
          - exact: "example.com"
        - paths:
          - exact: "/api/payments"
      when: 'request.headers["Authorization"] != ""'
    action: CUSTOM
    customProvider:
      authzExtension:
        resources:
        - "projects/PROJECT_ID/locations/global/authzExtensions/my-authz-ext"
    EOF
    

    Ersetzen Sie Folgendes:

    • LB_SCHEME: Ihr Load-Balancing-Schema. Legen Sie für globale externe Application Load Balancer das Schema auf EXTERNAL_MANAGED fest. Legen Sie für regionenübergreifende interne Application Load Balancer das Schema auf INTERNAL_MANAGED fest.
    • PROJECT_ID: die ID Ihres Projekts in Google Cloud .
    • LB_FORWARDING_RULE: der Name der Weiterleitungsregel des Load Balancers.
  4. Erstellen Sie die Autorisierungsrichtlinie, indem Sie die YAML-Datei der Autorisierungsrichtlinie mit dem Befehl gcloud network-security authz-policies import importieren.

    gcloud network-security authz-policies import my-authz-policy-custom \
        --source=authz-policy-custom.yaml \
        --location=global
    

Regional

Wenn Sie einen regionalen externen Application Load Balancer oder einen regionalen internen Application Load Balancer verwenden, folgen Sie dieser Anleitung, um die Autorisierungsentscheidung an einen vom Nutzer verwalteten Dienst zu delegieren.

  1. Definieren Sie die Autorisierungserweiterung in einer YAML-Datei. Die Autorisierungserweiterung kann auf einem Backend-Dienst oder einem FQDN-basierten Dienst ausgeführt werden.

    cat >authz-extension.yaml <<EOF
    name: my-authz-ext
    authority: ext11.com
    loadBalancingScheme: LB_SCHEME
    service: BACKEND_SERVICE_URI_OR_FQDN
    forwardHeaders:
      - Authorization
    failOpen: false
    timeout: "0.1s"
    wireFormat: EXT_AUTHZ_GRPC
    EOF
    

    Ersetzen Sie Folgendes:

    • LB_SCHEME: Das Load-Balancing-Schema. Legen Sie für regionale externe Application Load Balancer das Schema auf EXTERNAL_MANAGED fest. Legen Sie für regionale interne Application Load Balancer das Schema auf INTERNAL_MANAGED fest.
    • BACKEND_SERVICE_URI_OR_FQDN: Der Dienst kann einer der folgenden sein:
      • einen regionalen Backend-Dienst-Ressourcen-URI im Format https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/backendServices/authz-service.
      • ein vollqualifizierter Domainname (z. B. mycustomauthz.extension.net), der von Cloud DNS aufgelöst werden kann.
  2. Erstellen Sie die Autorisierungserweiterung, indem Sie die YAML-Datei für die Autorisierungserweiterung mit dem Befehl gcloud service-extensions authz-extensions import importieren.

    gcloud service-extensions authz-extensions import my-authz-ext \
        --source=authz-extension.yaml \
        --location=LOCATION
    

    Ersetzen Sie LOCATION durch die Google Cloud-Region, in der der Callout-Backend-Dienst konfiguriert ist.

  3. Definieren Sie die Autorisierungsrichtlinie in einer YAML-Datei. Die Autorisierungsrichtlinie delegiert die Autorisierung an die Autorisierungserweiterung im Feld customProvider.

    Die Richtlinie ruft die Autorisierungserweiterung my-authz-ext für den gesamten Traffic zum URL-Pfad example.com/api/payments auf, wenn die Anfrage einen nicht leeren Authorization-Header enthält.

    cat >authz-policy-custom.yaml <<EOF
    name: my-authz-policy-custom
    target:
      loadBalancingScheme: LB_SCHEME
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/LB_FORWARDING_RULE"
    policyProfile: REQUEST_AUTHZ
    httpRules:
    - to:
        operations:
        - paths:
          - exact: "/api/payments"
      when: 'request.headers["Authorization"] != ""'
    action: CUSTOM
    customProvider:
      authzExtension:
        resources:
        - "projects/PROJECT_ID/locations/LOCATION/authzExtensions/my-authz-ext"
    EOF
    

    Ersetzen Sie Folgendes:

    • LB_SCHEME: Das Load-Balancing-Schema. Legen Sie für regionale externe Application Load Balancer das Schema auf EXTERNAL_MANAGED fest. Legen Sie für regionale interne Application Load Balancer das Schema auf INTERNAL_MANAGED fest.
    • PROJECT_ID: die ID Ihres Projekts in Google Cloud .
    • LOCATION: die Google Cloud Region.
    • LB_FORWARDING_RULE: der Name der Weiterleitungsregel des Load-Balancers.
  4. Erstellen Sie die Autorisierungsrichtlinie, indem Sie die YAML-Datei der Autorisierungsrichtlinie mit dem Befehl gcloud network-security authz-policies import importieren.

    gcloud beta network-security authz-policies import my-authz-policy-custom \
        --source=authz-policy-custom.yaml \
        --location=LOCATION
    

    Ersetzen Sie LOCATION durch die Google CloudRegion, in der der Load-Balancer konfiguriert ist.

Weitere Informationen zu Autorisierungserweiterungen finden Sie unter Autorisierungserweiterung konfigurieren.

Autorisierungsentscheidung an Model Armor delegieren

Sie können eine Autorisierungsrichtlinie konfigurieren, um die Autorisierungsentscheidung an Model Armor zu delegieren.

Erstellen Sie zuerst eine Model Armor-Vorlage. In diesem Beispiel verweist die Autorisierungsrichtlinie auf eine Autorisierungserweiterung, die wiederum auf Model Armor verweist.

Wenn Sie einen regionalen externen oder einen regionalen internen Application Load Balancer verwenden, folgen Sie dieser Anleitung, um die Autorisierungsentscheidung an Model Armor zu delegieren.

Regional

  1. Definieren Sie die Autorisierungserweiterung in einer YAML-Datei. Die Autorisierungserweiterung verweist auf Model Armor-Anfrage- und Antwortvorlagen.

    cat >authz-extension.yaml <<EOF
    name: my-authz-extension
    loadBalancingScheme: INTERNAL_MANAGED
    service: modelarmor.LOCATION.rep.googleapis.com
    metadata:
      model_armor_settings: '[
        {
        "response_template_id": "projects/PROJECT_ID/locations/LOCATION/templates/RESPONSE_TEMPLATE_ID",
        "request_template_id": "projects/PROJECT_ID/locations/LOCATION/templates/REQUEST_TEMPLATE_ID"
        }
      ]'
    failOpen: true
    EOF
    

    Ersetzen Sie Folgendes:

    • LOCATION: der Standort der Vorlage
    • PROJECT_ID: die ID des Projekts, zu dem die Vorlage gehört
    • RESPONSE_TEMPLATE_ID: ID der Antwortvorlage
    • REQUEST_TEMPLATE_ID: die ID der Anfragevorlage
  2. Erstellen Sie die Autorisierungserweiterung, indem Sie die YAML-Datei für die Autorisierungserweiterung mit dem Befehl gcloud beta service-extensions authz-extensions import importieren.

    gcloud beta service-extensions authz-extensions import my-authz-ext \
      --source=authz-extension.yaml \
      --location=LOCATION
    

    Ersetzen Sie LOCATION durch die Google Cloud-Region, in der sich der Load-Balancer befindet.

  3. Definieren Sie die Autorisierungsrichtlinie in einer YAML-Datei. Die Autorisierungsrichtlinie delegiert die Autorisierung an die Autorisierungserweiterung im Feld customProvider.

    Der Wert von policyProfile ist CONTENT_AUTHZ.

    cat >authz-policy-custom.yaml <<EOF
    name: my-authz-policy-custom
    target:
      loadBalancingScheme: INTERNAL_MANAGED
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/LB_FORWARDING_RULE"
    policyProfile: CONTENT_AUTHZ
    action: CUSTOM
    customProvider:
      authzExtension:
        resources:
        - "projects/PROJECT_ID/locations/LOCATION/authzExtensions/my-authz-ext"
    EOF
    

    Ersetzen Sie Folgendes:

    • PROJECT_ID: die ID Ihres Projekts in Google Cloud .
    • LOCATION: die Google Cloud Region.
    • LB_FORWARDING_RULE: Der Name der Weiterleitungsregel des Load-Balancers.
  4. Erstellen Sie die Autorisierungsrichtlinie, indem Sie die YAML-Datei der Autorisierungsrichtlinie mit dem Befehl gcloud beta network-security authz-policies import importieren.

    gcloud beta network-security authz-policies import my-authz-policy-custom \
      --source=authz-policy-custom.yaml \
      --location=LOCATION
    

    Ersetzen Sie LOCATION durch die Google CloudRegion, in der der Load-Balancer konfiguriert ist.

Autorisierungsentscheidung an Identity-Aware Proxy delegieren

Bei globalen externen Application Load Balancern und regionenübergreifenden internen Application Load Balancern können Sie die Autorisierungsentscheidung nicht über eine Autorisierungserweiterung an IAP delegieren. Bei diesen Load Balancern können Sie die Autorisierungsentscheidung über das Feld customProvider in der Autorisierungsrichtlinienressource an IAP delegieren.

Für regionale externe Application Load Balancer und regionale interne Application Load Balancer können Sie eine Autorisierungsrichtlinie konfigurieren, um die Autorisierungsentscheidung über eine Autorisierungserweiterung an IAP zu delegieren.

Global und regionsübergreifend

Im folgenden Beispiel werden alle Autorisierungsentscheidungen für alle Anfragen, die aus dem IP-Adressblock 10.0.0.0/24 stammen, an IAP delegiert. Wenn Anfragen von einer IP-Adresse außerhalb von 10.0.0.0/24 stammen, entsprechen sie nicht dieser Richtlinie und werden von IAP nicht anhand dieser spezifischen Regel ausgewertet.

  1. Definieren Sie die Autorisierungsrichtlinie in einer YAML-Datei. Die Autorisierungsrichtlinie delegiert die Autorisierung über das Feld customProvider an IAP.

    cat >authz-policy-iap.yaml <<EOF
    name: my-authz-policy-custom
    target:
      loadBalancingScheme: LB_SCHEME
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules/LB_FORWARDING_RULE"
    httpRules:
      - from:
          sources:
          - ipBlock:
            - prefix: "10.0.0.0"
              length: 24
    action: CUSTOM
    customProvider:
      cloudIap: {}
    EOF
    

    Ersetzen Sie Folgendes:

    • LB_SCHEME: Ihr Load-Balancing-Schema. Legen Sie für globale externe Application Load Balancer das Schema auf EXTERNAL_MANAGED fest. Legen Sie für regionenübergreifende interne Application Load Balancer das Schema auf INTERNAL_MANAGED fest.
    • PROJECT_ID: die ID Ihres Projekts in Google Cloud .
    • LB_FORWARDING_RULE: der Name der Weiterleitungsregel des Load Balancers.
  2. Erstellen Sie die Autorisierungsrichtlinie, indem Sie die YAML-Datei der Autorisierungsrichtlinie mit dem Befehl gcloud network-security authz-policies import importieren.

    gcloud network-security authz-policies import my-authz-policy-custom \
        --source=authz-policy-iap.yaml \
        --location=global
    

Regional

Wenn Sie einen regionalen externen oder internen Application Load Balancer verwenden, folgen Sie dieser Anleitung, um die Autorisierungsentscheidung mithilfe einer Autorisierungserweiterung an IAP zu delegieren.

  1. Definieren Sie die Autorisierungserweiterung in einer YAML-Datei. Die Autorisierungserweiterung verweist auf IAP.

    cat >authz-extension.yaml <<EOF
    name: my-authz-ext
    loadBalancingScheme: LB_SCHEME
    service: iap.googleapis.com
    failOpen: false
    EOF
    

    Sie können IAP auch so konfigurieren, dass es im Probelaufmodus ausgeführt wird. So können Sie eine Autorisierungsrichtlinie mit Live-Produktionstraffic testen, ohne sie zu erzwingen. So können Sie Ihre Richtlinie überprüfen und das Risiko minimieren, dass der Traffic aufgrund von Konfigurationsfehlern unterbrochen wird.

    cat >authz-extension.yaml <<EOF
    name: my-authz-ext
    loadBalancingScheme: LB_SCHEME
    service: iap.googleapis.com
    failOpen: false
    metadata:'
      iamEnforcementMode: DRY_RUN
    '
    EOF
    

    Ersetzen Sie Folgendes:

    • LB_SCHEME: Das Load-Balancing-Schema. Legen Sie für regionale externe Application Load Balancer das Schema auf EXTERNAL_MANAGED fest. Legen Sie für regionale interne Application Load Balancer das Schema auf INTERNAL_MANAGED fest.
  2. Erstellen Sie die Autorisierungserweiterung, indem Sie die YAML-Datei für die Autorisierungserweiterung mit dem Befehl gcloud service-extensions authz-extensions import importieren.

    gcloud service-extensions authz-extensions import my-authz-ext \
        --source=authz-extension.yaml \
        --location=LOCATION
    

    Ersetzen Sie LOCATION durch die Google CloudRegion, in der die Autorisierungserweiterung konfiguriert ist.

  3. Definieren Sie die Autorisierungsrichtlinie in einer YAML-Datei. Die Autorisierungsrichtlinie delegiert die Autorisierung an die Autorisierungserweiterung im Feld customProvider.

    cat >authz-policy-custom.yaml <<EOF
    name: my-authz-policy-custom
    target:
      loadBalancingScheme: LB_SCHEME
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/LB_FORWARDING_RULE"
    policyProfile: REQUEST_AUTHZ
    action: CUSTOM
    customProvider:
      authzExtension:
        resources:
        - "projects/PROJECT_ID/locations/LOCATION/authzExtensions/my-authz-ext"
    EOF
    

    Ersetzen Sie Folgendes:

    • LB_SCHEME: Das Load-Balancing-Schema. Legen Sie für regionale externe Application Load Balancer das Schema auf EXTERNAL_MANAGED fest. Legen Sie für regionale interne Application Load Balancer das Schema auf INTERNAL_MANAGED fest.
    • PROJECT_ID: die ID Ihres Projekts in Google Cloud .
    • LOCATION: die Google Cloud Region.
    • LB_FORWARDING_RULE: der Name der Weiterleitungsregel des Load Balancers.
  4. Erstellen Sie die Autorisierungsrichtlinie, indem Sie die YAML-Datei der Autorisierungsrichtlinie mit dem Befehl gcloud network-security authz-policies import importieren.

    gcloud beta network-security authz-policies import my-authz-policy-custom \
        --source=authz-policy-custom.yaml \
        --location=LOCATION
    

    Ersetzen Sie LOCATION durch die Google CloudRegion, in der der Load-Balancer konfiguriert ist.

Logs für Autorisierungsrichtlinien in Cloud Logging

In den folgenden Abschnitten erfahren Sie, wie Autorisierungsrichtlinien protokolliert werden, wenn eine Anfrage zugelassen oder abgelehnt wird.

Die Anfrage entspricht weder der Richtlinie für ALLOW noch der Richtlinie für DENY.

Wenn eine Anfrage weder der ALLOW- noch der DENY-Richtlinie entspricht, wird sie von der DENY-Richtlinie zugelassen und als allowed_as_no_deny_policies_matched_request protokolliert. Die ALLOW-Richtlinie lehnt die Anfrage ab und protokolliert sie als denied_as_no_allow_policies_matched_request. Da eine der Richtlinien die Anfrage ablehnt, wird die Anfrage abgelehnt.

  • Wenn Sie einen globalen externen Application Load Balancer verwenden, wird statusDetails im Log auf denied_by_authz_policy gesetzt. Sehen Sie sich folgendes Beispiel an:

      {
        httpRequest: {8}
        insertId: "example-id"
        jsonPayload: {
          @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
          authzPolicyInfo: {
            policies: [
              0: {
                details: "allowed_as_no_deny_policies_matched_request"
                result: "ALLOWED"
              }
              1: {
                details: "denied_as_no_allow_policies_matched_request"
                result: "DENIED"
              }
            ]
            result: "DENIED"
          }
          backendTargetProjectNumber: "projects/12345567"
          remoteIp: "00.100.11.104"
          statusDetails: "denied_by_authz_policy"
        }
        logName: "projects/example-project/logs/requests"
        receiveTimestamp: "2024-08-28T15:33:56.046651035Z"
        resource: {2}
        severity: "WARNING"
        spanId: "3e1a09a8e5e3e14d"
        timestamp: "2024-08-28T15:33:55.355042Z"
        trace: "projects/example-project/traces/8c8b3dbf9a19c85954d0fa2d958ca509"
      }
    
  • Wenn Sie einen regionalen internen Application Load Balancer, einen regionalen externen Application Load Balancer oder einen regionenübergreifenden internen Application Load Balancer verwenden, wird proxyStatus im Log auf error=\"http_request_error\"; details=\"denied_by_authz_policy\" gesetzt. Sehen Sie sich folgendes Beispiel an:

      {
        httpRequest: {8}
        insertId: "example-id"
        jsonPayload: {
          @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
          authzPolicyInfo: {
            policies: [
              0: {
                details: "allowed_as_no_deny_policies_matched_request"
                result: "ALLOWED"
              }
              1: {
                details: "denied_as_no_allow_policies_matched_request"
                result: "DENIED"
              }
            ]
            result: "DENIED"
          }
          backendTargetProjectNumber: "projects/12345567"
          remoteIp: "00.100.11.104"
          proxyStatus: "error=\"http_request_error\"; details=\"denied_by_authz_policy\""
        }
        logName: "projects/example-project/logs/requests"
        receiveTimestamp: "2024-08-28T15:33:56.046651035Z"
        resource: {2}
        severity: "WARNING"
        spanId: "3e1a09a8e5e3e14d"
        timestamp: "2024-08-28T15:33:55.355042Z"
        trace: "projects/example-project/traces/8c8b3dbf9a19c85954d0fa2d958ca509"
      }
    

Anfrage entspricht der DENY-Richtlinie

Wenn eine Anfrage der DENY-Richtlinie entspricht, wird sie abgelehnt und die Richtlinie, die die Anfrage abgelehnt hat, wird protokolliert.

  • Wenn Sie einen globalen externen Application Load Balancer verwenden, wird statusDetails im Log auf denied_by_authz_policy gesetzt und der Name der Richtlinie, die die Anfrage abgelehnt hat, wird in policies protokolliert. Sehen Sie sich folgendes Beispiel an:

      {
        httpRequest: {8}
        insertId: "example-id"
        jsonPayload: {
          @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
          authzPolicyInfo: {
            policies: [
              0: {
                details: "name: "projects/12345567/locations/global/authzPolicies/deny-authz-policy-test""
                result: "DENIED"
              }
            ]
            result: "DENIED"
          }
          backendTargetProjectNumber: "projects/12345567"
          cacheDecision: [2]
          remoteIp: "00.100.11.104"
          statusDetails: "denied_by_authz_policy"
        }
        logName: "projects/example-project/logs/requests"
        receiveTimestamp: "2024-08-28T15:33:56.046651035Z"
        resource: {2}
        severity: "WARNING"
        spanId: "3e1a09a8e5e3e14d"
        timestamp: "2024-08-28T15:33:55.355042Z"
        trace: "projects/example-project/traces/8c8b3dbf9a19c85954d0fa2d958ca509"
      }
    
  • Wenn Sie einen regionalen internen Application Load Balancer, einen regionalen externen Application Load Balancer oder einen regionenübergreifenden internen Application Load Balancer verwenden, wird proxyStatus auf error=\"http_request_error\"; details=\"denied_by_authz_policy\" gesetzt und der Name der Richtlinie wird in policies protokolliert. Sehen Sie sich folgendes Beispiel an:

      {
        httpRequest: {8}
        insertId: "example-id"
        jsonPayload: {
          @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
          authzPolicyInfo: {
            policies: [
              0: {
                details: "name: "projects/12345567/locations/$REGION/authzPolicies/deny-authz-policy-test""
                result: "DENIED"
              }
            ]
            result: "DENIED"
          }
          backendTargetProjectNumber: "projects/12345567"
          remoteIp: "00.100.11.104"
          proxyStatus: "error=\"http_request_error\"; details=\"denied_by_authz_policy\""
        }
        logName: "projects/example-project/logs/requests"
        receiveTimestamp: "2024-08-28T15:33:56.046651035Z"
        resource: {2}
        severity: "WARNING"
        spanId: "3e1a09a8e5e3e14d"
        timestamp: "2024-08-28T15:33:55.355042Z"
        trace: "projects/example-project/traces/8c8b3dbf9a19c85954d0fa2d958ca509"
      }
    

Die Anfrage entspricht nicht der DENY-Richtlinie, aber der ALLOW-Richtlinie.

Wenn eine Anfrage nicht der DENY-Richtlinie, aber der ALLOW-Richtlinie entspricht, wird sie zugelassen. Im Log wird diese Aktion als allowed_as_no_deny_policies_matched_request für die Richtlinie DENY protokolliert. Die Richtlinie, die die Anfrage zugelassen hat, wird ebenfalls protokolliert.

  • Wenn Sie einen globalen externen Application Load Balancer verwenden, ist statusDetails nicht im Log enthalten. Die Richtlinie, die die Anfrage zugelassen hat, wird auch in policies protokolliert. Sehen Sie sich folgendes Beispiel an:

      {
        httpRequest: {8}
        insertId: "example-id"
        jsonPayload: {
          @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
          authzPolicyInfo: {
            policies: [
              0: {
                details: "allowed_as_no_deny_policies_matched_request"
                result: "ALLOWED"
              }
              1: {
                details: "name: "projects/12345567/locations/global/authzPolicies/allow-authz-policy-test""
                result: "ALLOWED"
              }
            ]
            result: "ALLOWED"
          }
          backendTargetProjectNumber: "projects/12345567"
          cacheDecision: [2]
          remoteIp: "00.100.11.104"
        }
        logName: "projects/example-project/logs/requests"
        receiveTimestamp: "2024-08-28T15:33:56.046651035Z"
        resource: {2}
        severity: "WARNING"
        spanId: "3e1a09a8e5e3e14d"
        timestamp: "2024-08-28T15:33:55.355042Z"
        trace: "projects/example-project/traces/8c8b3dbf9a19c85954d0fa2d958ca509"
      }
    
  • Wenn Sie einen regionalen internen Application Load Balancer, einen regionalen externen Application Load Balancer oder einen regionenübergreifenden internen Application Load Balancer verwenden, ist im Log kein proxyStatus-Feld vorhanden. Die Richtlinie, die die Anfrage zugelassen hat, wird auch in policies protokolliert. Sehen Sie sich folgendes Beispiel an:

      {
        httpRequest: {8}
        insertId: "example-id"
        jsonPayload: {
          @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
          authzPolicyInfo: {
            policies: [
              0: {
                details: "allowed_as_no_deny_policies_matched_request"
                result: "ALLOWED"
              }
              1: {
                details: "name: "projects/12345567/locations/$REGION/authzPolicies/allow-authz-policy-test""
                result: "ALLOWED"
              }
            ]
            result: "ALLOWED"
          }
          backendTargetProjectNumber: "projects/12345567"
          cacheDecision: [2]
          remoteIp: "00.100.11.104"
        }
        logName: "projects/example-project/logs/requests"
        receiveTimestamp: "2024-08-28T15:33:56.046651035Z"
        resource: {2}
        severity: "WARNING"
        spanId: "3e1a09a8e5e3e14d"
        timestamp: "2024-08-28T15:33:55.355042Z"
        trace: "projects/example-project/traces/8c8b3dbf9a19c85954d0fa2d958ca509"
      }
    

Nächste Schritte