Les extensions de service permettent aux équilibreurs de charge d'application d'envoyer des appels à des services de backend pour insérer un traitement personnalisé dans le chemin de traitement. Les extensions d'autorisation s'exécutent dans le chemin de traitement des requêtes lorsque l'équilibreur de charge reçoit des en-têtes de requête et après que le mappage d'URL a choisi le service de backend. Cette page explique comment configurer des extensions d'autorisation pour utiliser un moteur d'autorisation personnalisé défini dans une règle d'autorisation.
Pour obtenir une présentation des extensions d'équilibreur de charge d'application, consultez la page Présentation des extensions Cloud Load Balancing.
Introduction
Cloud Load Balancing vous permet de configurer des règles d'autorisation qui appliquent le contrôle des accès au trafic entrant dans les équilibreurs de charge. Parfois, les décisions d'autorisation complexes ne peuvent pas être facilement exprimées à l'aide d'une règle d'autorisation.
Vous pouvez configurer des règles d'autorisation avec des extensions d'autorisation pour déléguer les décisions d'autorisation à des moteurs d'autorisation personnalisés. Dans le chemin d'accès aux données, les extensions d'autorisation sont exécutées après les extensions de routage, mais avant les extensions de trafic. Pour en savoir plus sur les règles d'autorisation, consultez la page Présentation des règles d'autorisation.
Pour chaque requête d'autorisation, le proxy transfère les en-têtes de requête à l'extension. En fonction de la réponse du fournisseur, le proxy transfère ou rejette la requête.
Dans la version preview, pour les équilibreurs de charge d'application externes régionaux et les équilibreurs de charge d'application internes régionaux, vous pouvez configurer des extensions d'autorisation séparément pour les règles d'autorisation des requêtes et les règles d'autorisation du contenu. Les extensions basées sur des règles d'autorisation des requêtes sont configurées pour s'exécuter avant celles basées sur des règles d'autorisation du contenu.
Pour en savoir plus sur les limites liées aux extensions d'équilibreur de charge d'application, consultez la page Quotas et limites.
Configurer une extension d'autorisation de base
L'exemple suivant montre comment configurer une extension d'autorisation, my-authz-ext, avec une règle d'autorisation pour déléguer les décisions d'autorisation pour un équilibreur de charge d'application externe global.
gcloud
Créez les ressources requises comme décrit dans Configurer un service de backend d'appel.
Pour cet exercice, créez un équilibreur de charge d'application externe global. Nommez le service
authz-serviceet la règle de transfertfr1.Configurez l'extension d'autorisation.
Définissez l'extension dans un fichier YAML qui l'associe au service de backend,
authz-service. Utilisez les exemples de valeurs fournis.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 EOFRemplacez
PROJECT_IDpar l' ID du projet.Pour en savoir plus sur les champs du fichier YAML, consultez la section ExtensionChain dans la documentation de l'API. Pour en savoir plus sur les attributs compatibles, consultez la section Attributs compatibles.
Importez l'extension d'autorisation. Utilisez la
gcloud service-extensions authz-extensions importcommande avec les exemples de valeurs suivants.gcloud service-extensions authz-extensions import my-authz-ext \ --source=authz-extension.yaml \ --location=globalSi vous souhaitez définir le protocole sur
ext_authz, utilisez plutôt lagcloud beta service-extensions authz-extensions importcommande.
Configurez une règle d'autorisation avec l'extension.
Définissez une règle d'autorisation qui associe l'extension
my-authz-extà la règle de transfertfr1. Utilisez les exemples de valeurs fournis. L'actionCUSTOMindique qu'une extension est utilisée.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" EOFImportez la règle d'autorisation dans le projet. Utilisez la
gcloud network-security authz-policies importcommande avec les exemples de valeurs suivants.gcloud network-security authz-policies import my-authz-policy \ --source=authz-policy.yaml \ --location=global
Configurer des extensions d'autorisation en fonction de profils
Vous pouvez configurer des extensions d'autorisation séparément pour les règles d'autorisation des requêtes et les règles d'autorisation du contenu.
Pour une règle d'autorisation des requêtes
L'exemple suivant montre comment configurer une extension d'autorisation qui applique une règle d'autorisation des requêtes à une règle de transfert dans us-west1. La règle exige que le trafic passe l'authentification TLS mutuelle à partir d'un principal spécifique avant d'être autorisé à atteindre la destination, example.com/mcp.
gcloud
Configurez un service de backend d'appel nommé
lb-request-authz-servicedansus-west1avec une règle de transfert nomméefr2.Pour le service, configurez un équilibreur de charge d'application externe régional avec des backends de groupes d'instances de VM.
Configurez l'extension d'autorisation.
Définissez l'extension dans un fichier YAML qui l'associe au service de backend,
lb-request-authz-service. Utilisez les exemples de valeurs fournis.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 EOFRemplacez
PROJECT_IDpar l' ID du projet.L'extension doit se trouver dans la même région que votre service de backend.
Par défaut, tous les appels de Service Extensions utilisent le protocole Envoy External Processing ou
ext_proc. Dans le cas des appels d'autorisation, le protocole External Authorization ouext_authzest également compatible avec la version preview. Lorsque l'optionwireFormatest définie surEXT_AUTHZ_GRPC, l'appel utilise le protocoleext_authz. Si l'option n'est pas spécifiée, l'appel utilise le protocoleext_proc.Pour les règles d'autorisation des requêtes, la valeur
wireFormatpeut êtreEXT_AUTHZ_GRPCafin que l'appel utilise le protocoleext_authz, bien que le protocoleext_procsoit également compatible.Par défaut,
failOpenest défini surfalse. Si l'extension expire ou échoue, le traitement des requêtes s'arrête. Cette option par défaut est préférable lorsque la sécurité ou l'intégrité est prioritaire par rapport à la disponibilité.Importez l'extension d'autorisation. Utilisez la
gcloud beta service-extensions authz-extensions importcommande avec les exemples de valeurs suivants.gcloud beta service-extensions authz-extensions import my-lb-request-authz-ext \ --source=lb-request-authz-extension.yaml \ --location=us-west1
Dans le même projet, configurez une règle d'autorisation avec l'extension.
Pour toute requête adressée à
example.com/mcp, la règle exige une authentification TLS mutuelle à partir d'un principal spécifique et délègue ensuite la décision d'autorisation à l'extension d'autorisation,my-lb-authz-request-ext.Définissez une règle d'autorisation qui associe l'extension
my-lb-request-authz-extà la règle de transfertfr2. Utilisez les exemples de valeurs fournis.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" EOFPour les règles d'autorisation des requêtes, la valeur de
policyProfiledoit êtreREQUEST_AUTHZ. Cette valeur indique que le fournisseur de règles personnalisé agit sur les requêtes pour autoriser ou refuser le trafic.L'action
CUSTOMindique qu'une extension est associée au proxy.Pour en savoir plus sur une ressource de règle d'autorisation, consultez la
authzPolicydocumentation de référence.Importez la règle d'autorisation dans le projet. Utilisez la
gcloud beta network-security authz-policies importcommande avec les exemples de valeurs suivants.gcloud beta network-security authz-policies import my-lb-request-authz-policy \ --source=lb-request-authz-policy.yaml \ --location=us-west1
Pour une règle d'autorisation du contenu
L'exemple suivant montre comment configurer une extension d'autorisation qui applique une règle d'autorisation du contenu à une règle de transfert dans us-west1. La règle exige qu'un service de nettoyage de contenu effectue une inspection approfondie des charges utiles de votre application pour autoriser ou refuser les requêtes, ou pour modifier les requêtes et les réponses, selon les besoins.
gcloud
Configurez un service de backend d'appel nommé
lb-content-authz-servicedansus-west1avec une règle de transfert nomméefr3.Pour le service, configurez un équilibreur de charge d'application externe régional avec des backends de groupes d'instances de VM.
Configurez le serveur d'extension avec le
ext_procprotocole enFULL_DUPLEX_STREAMEDmode de traitement du corps et en acceptant tous les événements.Configurez l'extension d'autorisation.
Définissez l'extension dans un fichier YAML qui l'associe au service de backend,
lb-content-authz-service. Utilisez les exemples de valeurs fournis.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" EOFPour les règles d'autorisation du contenu, la valeur de
policyProfiledoit êtreCONTENT_AUTHZ.Pour les règles
CONTENT_AUTHZ, la valeurwireFormatn'a pas besoin d'être définie explicitement commeEXT_PROC_GRPC. Par défaut, l'appel utilise le protocoleext_proc.Importez l'extension d'autorisation. Utilisez la
gcloud beta service-extensions authz-extensions importcommande avec les exemples de valeurs suivants.gcloud beta service-extensions authz-extensions import my-lb-content-authz-ext \ --source=lb-content-authz-extension.yaml \ --location=us-west1
Configurez une règle d'autorisation avec l'extension.
Définissez une règle d'autorisation qui associe l'extension
my-lb-content-authz-extà la règle de transfertfr3. Utilisez les exemples de valeurs fournis.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" EOFLa valeur de
policyProfiledoit êtreCONTENT_AUTHZ.Importez la règle d'autorisation dans le projet. Utilisez la
gcloud beta network-security authz-policies importcommande avec les exemples de valeurs suivants.gcloud beta network-security authz-policies import my-lb-content-authz-policy \ --source=lb-content-authz-policy.yaml \ --location=us-west1
Limites des extensions d'autorisation
Voici quelques limites des extensions d'autorisation :
- Une règle d'autorisation ne peut comporter qu'une seule extension d'autorisation.
- Une règle de transfert peut être utilisée avec plusieurs règles d'autorisation, dont une seule peut être une règle d'autorisation personnalisée.
Pour connaître les limites applicables à toutes les extensions, consultez la section Limites des extensions.
Étape suivante
- Consultez les exemples Python et Go des serveurs
ext_authzetext_procdans le dépôt GitHub Service Extensions. - Configurer une extension de routage
- Configurer une extension de trafic
- Gérer les extensions