Mit Service Extensions können Application Load Balancer Callouts an Backend-Dienste senden, um benutzerdefinierte Verarbeitung in den Verarbeitungspfad einzufügen. Autorisierungserweiterungen werden im Anfrageverarbeitungspfad ausgeführt, wenn der Load Balancer Anfrageheader empfängt und nachdem der Backend-Dienst über die URL-Zuordnung ausgewählt wurde. Auf dieser Seite wird beschrieben, wie Sie Autorisierungserweiterungen so konfigurieren, dass eine benutzerdefinierte Autorisierungs-Engine verwendet wird, 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, der in Load Balancer gelangt, erzwungen wird. Manchmal lassen sich komplexe Autorisierungsentscheidungen nicht ohne Weiteres in 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 Traffic-Erweiterungen ausgeführt. Weitere Informationen zu Autorisierungsrichtlinien finden Sie unter Autorisierungsrichtlinien – Übersicht.
Bei jeder Autorisierungsanfrage leitet der Proxy die Anfrageheader an die Erweiterung weiter. Je nach Antwort des Anbieters leitet der Proxy die Anfrage entweder weiter oder lehnt sie ab.
In der Vorschau können Sie für regionale externe Application Load Balancer und regionale interne Application Load Balancer Autorisierungserweiterungen separat für Richtlinien zur Anforderungsautorisierung und Richtlinien zur Inhaltsautorisierung konfigurieren. Erweiterungen, die auf Richtlinien zur Autorisierung von Anfragen basieren, werden vor Erweiterungen ausgeführt, die auf Richtlinien zur Autorisierung von Inhalten 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. Geben Sie dem Dienst den Namen
authz-serviceund der Weiterleitungsregel den Namenfr1.Konfigurieren Sie die Autorisierungserweiterung.
Definieren Sie die Erweiterung in einer YAML-Datei, die sie dem Backend-Dienst
authz-servicezuordnet. Verwenden Sie die angegebenen 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.
Im Feld
forwardAttributeskönnen Sie die Anfrage-, Verbindungs- und Standortattribute angeben, die an Ihren Autorisierungsdienst weitergeleitet werden sollen. Sie können maximal 16 Attribute für jede Erweiterung konfigurieren. Weitere Informationen zu unterstützten Attributen finden Sie unter Unterstützte Attribute.Importieren Sie die Autorisierungserweiterung. Verwenden Sie den Befehl
gcloud service-extensions authz-extensions importmit den folgenden Beispielwerten.gcloud service-extensions authz-extensions import my-authz-ext \ --source=authz-extension.yaml \ --location=global
Konfigurieren Sie eine Autorisierungsrichtlinie mit der Erweiterung.
Definieren Sie eine Autorisierungsrichtlinie, die die Erweiterung
my-authz-extmit der Weiterleitungsregelfr1verknüpft. Verwenden Sie die angegebenen 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 Befehl
gcloud network-security authz-policies importmit 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 Richtlinien zur Anforderungs- und Inhaltsautorisierung konfigurieren.
Für eine Richtlinie zur Autorisierung von Anfragen
Das folgende Beispiel zeigt, wie Sie eine Autorisierungserweiterung konfigurieren, die eine Richtlinie zur Autorisierung von Anfragen auf eine Weiterleitungsregel in us-west1 anwendet. Gemäß der Richtlinie muss der Traffic die gegenseitige TLS-Authentifizierung von einem bestimmten Prinzipal bestehen, bevor er das Ziel example.com/mcp erreichen darf.
gcloud
Konfigurieren Sie einen Callout-Backend-Dienst mit dem Namen
lb-request-authz-serviceinus-west1mit einer Weiterleitungsregel mit dem Namenfr2.Konfigurieren Sie die Autorisierungserweiterung.
Definieren Sie die Erweiterung in einer YAML-Datei, die die Erweiterung mit dem Backend-Dienst
lb-request-authz-serviceverknüpft. Verwenden Sie die bereitgestellten 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 Autorisierungsaufrufen wird das Protokoll „Externe Autorisierung“ oderext_authzauch in der Vorschau unterstützt. Wenn die OptionwireFormataufEXT_AUTHZ_GRPCfestgelegt ist, wird für den Callout dasext_authz-Protokoll verwendet. Wenn die Option nicht angegeben ist, verwendet der Callout dasext_proc-Protokoll.Bei Richtlinien für die Anforderungsautorisierung kann der Wert
wireFormatEXT_AUTHZ_GRPCsein, sodass für den Callout dasext_authz-Protokoll verwendet wird. Dasext_proc-Protokoll wird jedoch auch unterstützt.Standardmäßig ist
failOpenauffalsefestgelegt. Wenn für die Erweiterung ein Zeitlimit überschritten wird oder sie fehlschlägt, wird die Verarbeitung der Anfrage beendet. Diese Standardoption ist vorzuziehen, wenn Sicherheit oder Integrität wichtiger als Verfügbarkeit sind.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
Konfigurieren Sie im selben Projekt eine Autorisierungsrichtlinie mit der Erweiterung.
Für jede Anfrage an
example.com/mcpist gemäß der Richtlinie eine gegenseitige TLS-Authentifizierung von einem bestimmten Hauptkonto erforderlich. Die Autorisierungsentscheidung wird an die Autorisierungserweiterungmy-lb-authz-request-extdelegiert.Definieren Sie eine Autorisierungsrichtlinie, die die
my-lb-request-authz-ext-Erweiterung mit der Weiterleitungsregelfr2verknüpft. Verwenden Sie die angegebenen 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" EOFBei Autorisierungsrichtlinien für Anfragen muss der Wert von
policyProfileREQUEST_AUTHZsein. Dieser Wert gibt an, dass der Anbieter der benutzerdefinierten Richtlinie 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 Referenzdokumentation zu
authzPolicy.Importieren Sie die Autorisierungsrichtlinie in das Projekt. Verwenden Sie den Befehl
gcloud beta network-security authz-policies importmit 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 Richtlinie zur Inhaltsautorisierung
Das folgende Beispiel zeigt, wie Sie eine Autorisierungserweiterung konfigurieren, die eine Inhaltsautorisierungsrichtlinie auf eine Weiterleitungsregel in us-west1 anwendet. Gemäß der Richtlinie ist ein Dienst zur Bereinigung von Inhalten erforderlich, um die Nutzlasten Ihrer Anwendung gründlich zu prüfen und Anfragen zuzulassen oder abzulehnen oder die Anfragen und Antworten nach Bedarf zu ändern.
gcloud
Konfigurieren Sie einen Callout-Backend-Dienst mit dem Namen
lb-content-authz-serviceinus-west1mit einer Weiterleitungsregel mit dem Namenfr3.Konfigurieren Sie den Erweiterungsserver mit dem Protokoll
ext_procimFULL_DUPLEX_STREAMED-Body-Verarbeitungsmodus und unterstützen Sie alle Ereignisse.Konfigurieren Sie die Autorisierungserweiterung.
Definieren Sie die Erweiterung in einer YAML-Datei, die die Erweiterung mit dem Backend-Dienst
lb-content-authz-serviceverknüpft. Verwenden Sie die bereitgestellten 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" EOFBei Richtlinien zur Inhaltsautorisierung muss der Wert von
policyProfileCONTENT_AUTHZsein.Bei
CONTENT_AUTHZ-Richtlinien muss der WertwireFormatnicht explizit alsEXT_PROC_GRPCfestgelegt werden. Standardmäßig verwendet der Callout dasext_proc-Protokoll.Importieren Sie die Autorisierungserweiterung. Verwenden Sie den Befehl
gcloud beta service-extensions authz-extensions importmit 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-extmit der Weiterleitungsregelfr3verknüpft. Verwenden Sie die bereitgestellten 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 Befehl
gcloud beta network-security authz-policies importmit 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 finden Sie einige Einschränkungen von Autorisierungserweiterungen:
- Eine Autorisierungsrichtlinie kann nur eine Autorisierungserweiterung haben.
- Eine Weiterleitungsregel kann mit mehreren Autorisierungsrichtlinien verwendet werden, von denen nur eine eine benutzerdefinierte Autorisierungsrichtlinie sein kann.
Einschränkungen, die für alle Erweiterungen gelten, finden Sie unter Einschränkungen für Erweiterungen.
Nächste Schritte
- Beispiele für
ext_authz- undext_proc-Server in Python und Go finden Sie im GitHub-Repository für Service Extensions. - Routenerweiterung konfigurieren
- Traffic-Erweiterung konfigurieren
- Erweiterungen verwalten