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 von Autorisierungsrichtlinien, die an die Weiterleitungsregel von Application Load Balancers angehängt werden.

Weitere Informationen zum Erstellen einer Autorisierungsrichtlinie für ein Agent Gateway, das die Autorisierung mithilfe von Service Extensions delegiert, finden Sie unter Autorisierung mit Service Extensions delegieren.

Weitere Informationen zum Erstellen einer Autorisierungsrichtlinie für einen Secure Web Proxy finden Sie unter Autorisierungsrichtlinien für Secure Web Proxy einrichten.

Autorisierungsrichtlinie zum Ablehnen von Anfragen

Dieser Abschnitt enthält Beispiele für Autorisierungsrichtlinien, die Anfragen basierend auf bestimmten Anfrageattributen ablehnen.

Anfragen basierend auf IP-Adressbereichen ablehnen

In diesem Abschnitt finden Sie ein Beispiel für eine Autorisierungsrichtlinie, mit der Anfragen abgelehnt werden, die aus bestimmten IP-Adressbereichen stammen.

Global und regionsübergreifend

  1. Definieren Sie die Autorisierungsrichtlinie in einer YAML-Datei.

    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: 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 .
    • 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-deny \
        --source=authz-policy-deny.yaml \
        --location=global
    

Regional

  1. Definieren Sie die Autorisierungsrichtlinie in einer YAML-Datei.

    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 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/regions/LOCATION/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: 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 .
    • 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-deny \
        --source=authz-policy-deny.yaml \
        --location=global
    

Anfragen auf Grundlage von Clientzertifikatsprinzipalen ablehnen

In diesem Abschnitt finden Sie ein Beispiel für eine Autorisierungsrichtlinie, mit der Anfragen basierend auf Clientzertifikathauptkonten abgelehnt werden.

Global und regionsübergreifend

  1. Definieren Sie die Autorisierungsrichtlinie in einer YAML-Datei.

    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 www.example.com in ihren SANs für DNS-Namen des Clientzertifikats 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:
        - 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: 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 .
    • 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-deny \
        --source=authz-policy-deny.yaml \
        --location=global
    

Regional

  1. Definieren Sie die Autorisierungsrichtlinie in einer YAML-Datei.

    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: 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: Ihre Google Cloud Region.
    • 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 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:

  1. Definieren Sie die Autorisierungsrichtlinie in einer YAML-Datei.

    Im folgenden Beispiel wird eine authz-policy-allow.yaml-Datei für die Weiterleitungsregel LB_FORWARDING_RULE am Standort global erstellt. Die Richtlinie ermöglicht 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: 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 .
    • 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-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. Definieren Sie die Autorisierungsrichtlinie in einer YAML-Datei.

    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: 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: Ihre Google Cloud Region.
    • 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 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. Definieren Sie die Autorisierungsrichtlinie in einer YAML-Datei.

    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: Das Load-Balancing-Schema. Legen Sie für regionale interne Application Load Balancer und regionenübergreifende 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 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-deny \
        --source=authz-policy-deny.yaml \
        --location=LOCATION
    

    Ersetzen Sie LOCATION durch Ihre Google Cloud Region.

Tag

  1. Definieren Sie die Autorisierungsrichtlinie in einer YAML-Datei.

    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 regionale interne Application Load Balancer und regionenübergreifende 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.
    • TAG_VALUE_PERMANENT_ID: die permanente ID eines Tag-Werts.
  2. 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-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: 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 Balancers 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 URI für eine regionale Backend-Dienstressource 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 Anforderungsvorlage
  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: 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 .
    • 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
    

    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 mit der ALLOW- noch mit der DENY-Richtlinie übereinstimmt, wird sie von der DENY-Richtlinie zugelassen und als allowed_as_no_deny_policies_matched_request protokolliert. Umgekehrt lehnt die ALLOW-Richtlinie 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 Richtlinie für DENY

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 das Feld proxyStatus 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/$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