Autorisierungserweiterung konfigurieren

Mit Service Extensions können Application Load Balancer Callouts an Backend-Dienste senden, um benutzerdefinierte Verarbeitung in den Verarbeitungspfad einzufügen. Autorisierungserweiterungen werden im Verarbeitungspfad für Anfragen ausgeführt, wenn der Load Balancer Anfrageheader empfängt und nachdem der URL-Zuordnung den Backend- Dienst ausgewählt hat. Auf dieser Seite wird beschrieben, wie Sie Autorisierungserweiterungen so konfigurieren, dass sie eine benutzerdefinierte Autorisierungs-Engine verwenden, die in einer Autorisierungsrichtlinie definiert ist.

Eine Übersicht über Application Load Balancer-Erweiterungen finden Sie unter Übersicht über Cloud Load Balancing-Erweiterungen.

Einführung

Mit Cloud Load Balancing können Sie Autorisierungsrichtlinien konfigurieren, mit denen die Zugriffssteuerung für Traffic erzwungen wird, der in Load Balancer eingeht. Manchmal lassen sich komplexe Autorisierungsentscheidungen nicht einfach mit einer Autorisierungsrichtlinie ausdrücken.

Sie können Autorisierungsrichtlinien mit Autorisierungserweiterungen konfigurieren, um Autorisierungsentscheidungen an benutzerdefinierte Autorisierungs-Engines zu delegieren. Im Datenpfad werden Autorisierungserweiterungen nach Routenerweiterungen, aber vor Trafficerweiterungen ausgeführt. Weitere Informationen zu Autorisierungsrichtlinien finden Sie unter Autorisierungsrichtlinien – Übersicht.

Für jede Autorisierungsanfrage leitet der Proxy die Anfrageheader an die Erweiterung weiter. Je nach Antwort des Anbieters leitet der Proxy die Anfrage weiter oder lehnt sie ab.

In Vorschau können Sie für regionale externe Application Load Balancer und regionale interne Application Load Balancer Autorisierungserweiterungen separat für Autorisierungsrichtlinien für Anfragen und Autorisierungsrichtlinien für Inhalte konfigurieren. Erweiterungen, die auf Autorisierungsrichtlinien für Anfragen basieren, werden so konfiguriert, dass sie vor Erweiterungen ausgeführt werden, die auf Autorisierungsrichtlinien für Inhalte basieren.

Informationen zu den Limits für Application Load Balancer-Erweiterungen, finden Sie auf der Seite Kontingente und Limits.

Einfache Autorisierungserweiterung konfigurieren

Im folgenden Beispiel wird gezeigt, wie Sie eine Autorisierungserweiterung (my-authz-ext) mit einer Autorisierungsrichtlinie konfigurieren, um Autorisierungsentscheidungen für einen globalen externen Application Load Balancer zu delegieren.

gcloud

  1. Erstellen Sie die erforderlichen Ressourcen, wie unter Callout-Backend-Dienst konfigurieren beschrieben.

    Erstellen Sie für diese Übung einen globalen externen Application Load Balancer. Nennen Sie den Dienst authz-service und die Weiterleitungsregel fr1.

  2. Konfigurieren Sie die Autorisierungserweiterung.

    1. Definieren Sie die Erweiterung in einer YAML-Datei, die sie dem Backend-Dienst authz-service zuordnet. Verwenden Sie die Beispielwerte.

      cat >authz-extension.yaml <<EOF
          name: my-authz-ext
          authority: ext11.com
          loadBalancingScheme: EXTERNAL_MANAGED
          service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/authz-service
          forwardHeaders:
            - Authorization
          failOpen: false
          timeout: "0.1s"
          forwardAttributes:
          - request.mcp_param
          - connection.client_cert_leaf
      EOF
      

      Ersetzen Sie PROJECT_ID durch die Projekt-ID.

      Weitere Informationen zu den Feldern in der YAML-Datei finden Sie in der API-Dokumentation unter ExtensionChain. Informationen zu unterstützten Attributen, siehe Unterstützte Attribute.

    2. Importieren Sie die Autorisierungserweiterung. Verwenden Sie den gcloud service-extensions authz-extensions import Befehl mit den folgenden Beispielwerten.

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

      Wenn Sie das Protokoll auf ext_authz festlegen möchten, verwenden Sie stattdessen den gcloud beta service-extensions authz-extensions import Befehl.

  3. Konfigurieren Sie eine Autorisierungsrichtlinie mit der Erweiterung.

    1. Definieren Sie eine Autorisierungsrichtlinie, die die Erweiterung my-authz-ext der Weiterleitungsregel fr1 zuordnet. Verwenden Sie die Beispielwerte. Die Aktion CUSTOM gibt an, dass eine Erweiterung verwendet wird.

      cat >authz-policy.yaml <<EOF
          name: my-authz-policy
          target:
            loadBalancingScheme: EXTERNAL_MANAGED
            resources:
              - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules/fr1"
          action: CUSTOM
          customProvider:
            authzExtension:
              resources:
                - "projects/PROJECT_ID/locations/global/authzExtensions/my-authz-ext"
      EOF
      
    2. Importieren Sie die Autorisierungsrichtlinie in das Projekt. Verwenden Sie den gcloud network-security authz-policies import Befehl mit den folgenden Beispielwerten.

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

Autorisierungserweiterungen basierend auf Profilen konfigurieren

Sie können Autorisierungserweiterungen separat für Autorisierungsrichtlinien für Anfragen und Autorisierungsrichtlinien für Inhalte konfigurieren.

Für eine Autorisierungsrichtlinie für Anfragen

Im folgenden Beispiel wird gezeigt, wie Sie eine Autorisierungserweiterung konfigurieren, die eine Autorisierungsrichtlinie für Anfragen auf eine Weiterleitungsregel in us-west1 anwendet. Die Richtlinie erfordert, dass der Traffic die gegenseitige TLS-Authentifizierung von einem bestimmten Prinzipal besteht, bevor er das Ziel example.com/mcp erreichen darf.

gcloud

  1. Konfigurieren Sie einen Callout-Backend-Dienst namens lb-request-authz-service in us-west1 mit einer Weiterleitungsregel namens fr2.

    Richten Sie für den Dienst einen regionalen externen Application Load Balancer mit VM-Instanzgruppen-Backends ein.

  2. Konfigurieren Sie die Autorisierungserweiterung.

    1. Definieren Sie die Erweiterung in einer YAML-Datei, die sie dem Backend-Dienst lb-request-authz-service zuordnet. Verwenden Sie die Beispielwerte.

      cat >lb-request-authz-extension.yaml <<EOF
      name: my-lb-request-authz-ext
      authority: ext11.com
      loadBalancingScheme: INTERNAL_MANAGED
      service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/lb-authz-request-service
      forwardHeaders:
        - Authorization
      failOpen: false
      timeout: "0.1s"
      wireFormat: EXT_AUTHZ_GRPC
      EOF
      

      Ersetzen Sie PROJECT_ID durch die Projekt-ID.

      Die Erweiterung muss sich in derselben Region wie Ihr Backend-Dienst befinden.

      Standardmäßig verwenden alle Service Extensions-Callouts das Envoy External Processing- oder ext_proc-Protokoll. Bei Autorisierungs-Callouts wird in ext_authz Vorschauauch das External Authorization- oder Protokoll unterstützt. Wenn die Option wireFormat auf EXT_AUTHZ_GRPC festgelegt ist, verwendet der Callout das ext_authz-Protokoll. Wenn die Option nicht angegeben ist, verwendet der Callout das ext_proc-Protokoll.

      Für Autorisierungsrichtlinien für Anfragen kann der Wert von wireFormat EXT_AUTHZ_GRPC sein, sodass der Callout das ext_authz-Protokoll verwendet, obwohl auch das ext_proc-Protokoll unterstützt wird.

      Standardmäßig ist failOpen auf false festgelegt. Wenn die Erweiterung eine Zeitüberschreitung verursacht oder fehlschlägt, wird die Verarbeitung der Anfrage beendet. Diese Standardoption wird bevorzugt, wenn Sicherheit oder Integrität Vorrang vor Verfügbarkeit haben.

    2. Importieren Sie die Autorisierungserweiterung. Verwenden Sie den gcloud beta service-extensions authz-extensions import Befehl mit den folgenden Beispielwerten.

      gcloud beta service-extensions authz-extensions import my-lb-request-authz-ext \
          --source=lb-request-authz-extension.yaml \
          --location=us-west1
      
  3. Konfigurieren Sie im selben Projekt eine Autorisierungsrichtlinie mit der Erweiterung.

    Für jede Anfrage an example.com/mcp erfordert die Richtlinie die gegenseitige TLS-Authentifizierung von einem bestimmten Prinzipal und delegiert die Autorisierungsentscheidung weiter an die Autorisierungserweiterung my-lb-authz-request-ext.

    1. Definieren Sie eine Autorisierungsrichtlinie, die die Erweiterung my-lb-request-authz-ext der Weiterleitungsregel fr2 zuordnet. Verwenden Sie die Beispielwerte.

      cat >lb-request-authz-policy.yaml <<EOF
      name: my-lb-request-authz-policy
      target:
        resources:
          - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules/fr2"
      policyProfile: REQUEST_AUTHZ
      httpRules:
      - to:
          operations:
          - hosts:
            - exact: "example.com"
          - paths:
            - prefix: "/mcp"
        from:
          sources:
          - principals:
            - principal_selector: CLIENT_CERT_DNS_NAME_SANS
              principal:
                exact: "spiffe://p.global.123.workload.id.goog/ns/ns1/sa/hellomcp"
      action: CUSTOM
      customProvider:
        authzExtension:
          resources:
            - "projects/PROJECT_ID/locations/us-west1/authzExtensions/my-lb-request-authz-ext"
      EOF
      

      Für Autorisierungsrichtlinien für Anfragen muss der Wert von policyProfile REQUEST_AUTHZ sein. Dieser Wert gibt an, dass der benutzerdefinierte Richtlinienanbieter auf Anfragen reagiert, um Traffic zuzulassen oder abzulehnen.

      Die Aktion CUSTOM gibt an, dass eine Erweiterung mit dem Proxy verknüpft ist.

      Weitere Informationen zu einer Autorisierungsrichtlinienressource finden Sie in der authzPolicy Referenzdokumentation.

    2. Importieren Sie die Autorisierungsrichtlinie in das Projekt. Verwenden Sie den gcloud beta network-security authz-policies import Befehl mit den folgenden Beispielwerten.

      gcloud beta network-security authz-policies import my-lb-request-authz-policy \
          --source=lb-request-authz-policy.yaml \
          --location=us-west1
      

Für eine Autorisierungsrichtlinie für Inhalte

Im folgenden Beispiel wird gezeigt, wie Sie eine Autorisierungserweiterung konfigurieren, die eine Autorisierungsrichtlinie für Inhalte auf eine Weiterleitungsregel in us-west1 anwendet. Die Richtlinie erfordert, dass ein Dienst zur Bereinigung von Inhalten eine detaillierte Überprüfung der Nutzlasten Ihrer Anwendung durchführt, um Anfragen zuzulassen oder abzulehnen oder die Anfragen und Antworten nach Bedarf zu ändern.

gcloud

  1. Konfigurieren Sie einen Callout-Backend-Dienst namens lb-content-authz-service in us-west1 mit einer Weiterleitungsregel namens fr3.

    Richten Sie für den Dienst einen regionalen externen Application Load Balancer mit VM-Instanzgruppen-Backends ein.

    Konfigurieren Sie den Erweiterungsserver mit dem ext_proc -Protokoll im FULL_DUPLEX_STREAMED -Modus für die Verarbeitung des Texts und mit Unterstützung für alle Ereignisse.

  2. Konfigurieren Sie die Autorisierungserweiterung.

    1. Definieren Sie die Erweiterung in einer YAML-Datei, die sie dem Backend-Dienst lb-content-authz-service zuordnet. Verwenden Sie die Beispielwerte.

      cat >lb-content-authz-extension.yaml <<EOF
      name: my-lb-content-authz-ext
      authority: ext11.com
      loadBalancingScheme: INTERNAL_MANAGED
      service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/lb-authz-sdp-service
      failOpen: false
      timeout: "0.1s"
      EOF
      

      Für Autorisierungsrichtlinien für Inhalte muss der Wert von policyProfile CONTENT_AUTHZ sein.

      Für CONTENT_AUTHZ-Richtlinien muss der Wert von wireFormat nicht explizit auf EXT_PROC_GRPC festgelegt werden. Standardmäßig verwendet der Callout das ext_proc-Protokoll.

    2. Importieren Sie die Autorisierungserweiterung. Verwenden Sie den gcloud beta service-extensions authz-extensions import Befehl mit den folgenden Beispielwerten.

      gcloud beta service-extensions authz-extensions import my-lb-content-authz-ext \
          --source=lb-content-authz-extension.yaml \
          --location=us-west1
      
  3. Konfigurieren Sie eine Autorisierungsrichtlinie mit der Erweiterung.

    1. Definieren Sie eine Autorisierungsrichtlinie, die die Erweiterung my-lb-content-authz-ext der Weiterleitungsregel fr3 zuordnet. Verwenden Sie die Beispielwerte.

      cat >lb-content-authz-policy.yaml <<EOF
      name: lb-content-authz-policy
      target:
        resources:
          - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules/fr3"
      policyProfile: CONTENT_AUTHZ
      httpRules:
      - to:
          operations:
          - hosts:
            - exact: "example.com"
          - paths:
            - prefix: "/sensitive-stuff"
      action: CUSTOM
      customProvider:
        authzExtension:
          resources:
            - "projects/PROJECT_ID/locations/us-west1/authzExtensions/my-lb-authz-content-ext"
      EOF
      

      Der Wert von policyProfile muss CONTENT_AUTHZ sein.

    2. Importieren Sie die Autorisierungsrichtlinie in das Projekt. Verwenden Sie den gcloud beta network-security authz-policies import Befehl mit den folgenden Beispielwerten.

      gcloud beta network-security authz-policies import my-lb-content-authz-policy \
          --source=lb-content-authz-policy.yaml \
          --location=us-west1
      

Einschränkungen für Autorisierungserweiterungen

Im Folgenden sind einige Einschränkungen für Autorisierungserweiterungen aufgeführt:

  • Eine Autorisierungsrichtlinie kann nur eine Autorisierungserweiterung haben.
  • Eine Weiterleitungsregel kann mit mehreren Autorisierungsrichtlinien verwendet werden, von denen nur eine eine benutzerdefinierte Autorisierungsrichtlinie sein kann.

Informationen zu Einschränkungen, die für alle Erweiterungen gelten, finden Sie unter Einschränkungen für Erweiterungen.

Nächste Schritte