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
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-serviceund die Weiterleitungsregelfr1.Konfigurieren Sie die Autorisierungserweiterung.
Definieren Sie die Erweiterung in einer YAML-Datei, die sie dem Backend-Dienst
authz-servicezuordnet. 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 EOFErsetzen Sie
PROJECT_IDdurch 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.
Importieren Sie die Autorisierungserweiterung. Verwenden Sie den
gcloud service-extensions authz-extensions importBefehl mit den folgenden Beispielwerten.gcloud service-extensions authz-extensions import my-authz-ext \ --source=authz-extension.yaml \ --location=globalWenn Sie das Protokoll auf
ext_authzfestlegen möchten, verwenden Sie stattdessen dengcloud beta service-extensions authz-extensions importBefehl.
Konfigurieren Sie eine Autorisierungsrichtlinie mit der Erweiterung.
Definieren Sie eine Autorisierungsrichtlinie, die die Erweiterung
my-authz-extder Weiterleitungsregelfr1zuordnet. Verwenden Sie die Beispielwerte. Die AktionCUSTOMgibt 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" EOFImportieren Sie die Autorisierungsrichtlinie in das Projekt. Verwenden Sie den
gcloud network-security authz-policies importBefehl 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
Konfigurieren Sie einen Callout-Backend-Dienst namens
lb-request-authz-serviceinus-west1mit einer Weiterleitungsregel namensfr2.Richten Sie für den Dienst einen regionalen externen Application Load Balancer mit VM-Instanzgruppen-Backends ein.
Konfigurieren Sie die Autorisierungserweiterung.
Definieren Sie die Erweiterung in einer YAML-Datei, die sie dem Backend-Dienst
lb-request-authz-servicezuordnet. 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 EOFErsetzen Sie
PROJECT_IDdurch 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 inext_authzVorschauauch das External Authorization- oder Protokoll unterstützt. Wenn die OptionwireFormataufEXT_AUTHZ_GRPCfestgelegt ist, verwendet der Callout dasext_authz-Protokoll. Wenn die Option nicht angegeben ist, verwendet der Callout dasext_proc-Protokoll.Für Autorisierungsrichtlinien für Anfragen kann der Wert von
wireFormatEXT_AUTHZ_GRPCsein, sodass der Callout dasext_authz-Protokoll verwendet, obwohl auch dasext_proc-Protokoll unterstützt wird.Standardmäßig ist
failOpenauffalsefestgelegt. 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.Importieren Sie die Autorisierungserweiterung. Verwenden Sie den
gcloud beta service-extensions authz-extensions importBefehl 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
Konfigurieren Sie im selben Projekt eine Autorisierungsrichtlinie mit der Erweiterung.
Für jede Anfrage an
example.com/mcperfordert die Richtlinie die gegenseitige TLS-Authentifizierung von einem bestimmten Prinzipal und delegiert die Autorisierungsentscheidung weiter an die Autorisierungserweiterungmy-lb-authz-request-ext.Definieren Sie eine Autorisierungsrichtlinie, die die Erweiterung
my-lb-request-authz-extder Weiterleitungsregelfr2zuordnet. 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" EOFFür Autorisierungsrichtlinien für Anfragen muss der Wert von
policyProfileREQUEST_AUTHZsein. Dieser Wert gibt an, dass der benutzerdefinierte Richtlinienanbieter auf Anfragen reagiert, um Traffic zuzulassen oder abzulehnen.Die Aktion
CUSTOMgibt an, dass eine Erweiterung mit dem Proxy verknüpft ist.Weitere Informationen zu einer Autorisierungsrichtlinienressource finden Sie in der
authzPolicyReferenzdokumentation.Importieren Sie die Autorisierungsrichtlinie in das Projekt. Verwenden Sie den
gcloud beta network-security authz-policies importBefehl 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
Konfigurieren Sie einen Callout-Backend-Dienst namens
lb-content-authz-serviceinus-west1mit einer Weiterleitungsregel namensfr3.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 imFULL_DUPLEX_STREAMED-Modus für die Verarbeitung des Texts und mit Unterstützung für alle Ereignisse.Konfigurieren Sie die Autorisierungserweiterung.
Definieren Sie die Erweiterung in einer YAML-Datei, die sie dem Backend-Dienst
lb-content-authz-servicezuordnet. 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" EOFFür Autorisierungsrichtlinien für Inhalte muss der Wert von
policyProfileCONTENT_AUTHZsein.Für
CONTENT_AUTHZ-Richtlinien muss der Wert vonwireFormatnicht explizit aufEXT_PROC_GRPCfestgelegt werden. Standardmäßig verwendet der Callout dasext_proc-Protokoll.Importieren Sie die Autorisierungserweiterung. Verwenden Sie den
gcloud beta service-extensions authz-extensions importBefehl 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
Konfigurieren Sie eine Autorisierungsrichtlinie mit der Erweiterung.
Definieren Sie eine Autorisierungsrichtlinie, die die Erweiterung
my-lb-content-authz-extder Weiterleitungsregelfr3zuordnet. 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" EOFDer Wert von
policyProfilemussCONTENT_AUTHZsein.Importieren Sie die Autorisierungsrichtlinie in das Projekt. Verwenden Sie den
gcloud beta network-security authz-policies importBefehl 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
- Beispiele für
ext_authzundext_proc-Server in Python und Go finden Sie im GitHub-Repository für Diensterweiterungen. - Routenerweiterung konfigurieren
- Trafficerweiterung konfigurieren
- Erweiterungen verwalten