Com o Service Extensions, os balanceadores de carga de aplicativo podem enviar chamadas para serviços de back-end e inserir processamento personalizado no caminho de processamento. As extensões de autorização são executadas no caminho de processamento de solicitações quando o balanceador de carga recebe cabeçalhos de solicitação e depois que o mapa de URL escolhe o serviço de back-end. Nesta página, descrevemos como configurar extensões de autorização para usar um mecanismo de autorização personalizado definido em uma política de autorização.
Para uma visão geral das extensões do balanceador de carga de aplicativo, consulte Visão geral das extensões do Cloud Load Balancing.
Introdução
Com o Cloud Load Balancing, é possível configurar políticas de autorização que aplicam o controle de acesso ao tráfego que entra nos balanceadores de carga. Às vezes, decisões complexas de autorização não podem ser expressas facilmente usando uma política de autorização.
É possível configurar políticas de autorização com extensões para delegar decisões de autorização a mecanismos personalizados. No caminho de dados, as extensões de autorização são executadas após as extensões de rota, mas antes das extensões de tráfego. Para mais informações sobre políticas de autorização, consulte Visão geral da política de autorização.
Para cada solicitação de autorização, o proxy encaminha os cabeçalhos de solicitação para a extensão. Dependendo da resposta do provedor, o proxy encaminha ou rejeita a solicitação.
No pré-lançamento, para balanceadores de carga de aplicativo externos regionais e balanceadores de carga de aplicativo internos regionais, é possível configurar extensões de autorização separadamente para políticas de autorização de solicitação e políticas de autorização de conteúdo. As extensões baseadas em políticas de autorização de solicitação são configuradas para serem executadas antes daquelas baseadas em políticas de autorização de conteúdo.
Para informações sobre os limites relacionados às extensões do balanceador de carga de aplicativo, consulte a página Cotas e limites.
Configurar uma extensão de autorização básica
O exemplo a seguir mostra como configurar uma extensão de autorização,
my-authz-ext, com uma política de autorização para delegar decisões de autorização
para um balanceador de carga de aplicativo externo global.
gcloud
Crie os recursos necessários, conforme descrito em Configurar um serviço de back-end de callout.
Para este exercício, crie um balanceador de carga de aplicativo externo global. Nomeie o serviço como
authz-servicee a regra de encaminhamento comofr1.Configure a extensão de autorização.
Defina a extensão em um arquivo YAML que a associa ao serviço de back-end,
authz-service. Use os valores de amostra fornecidos.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 EOFSubstitua
PROJECT_IDpelo ID do projeto.Para mais informações sobre os campos no arquivo YAML, consulte ExtensionChain na documentação da API. Para informações sobre atributos compatíveis, consulte Atributos compatíveis.
Importe a extensão de autorização. Use o comando
gcloud service-extensions authz-extensions importcom os seguintes valores de exemplo.gcloud service-extensions authz-extensions import my-authz-ext \ --source=authz-extension.yaml \ --location=globalSe você quiser definir o protocolo como
ext_authz, use o comandogcloud beta service-extensions authz-extensions import.
Configure uma política de autorização com a extensão.
Defina uma política de autorização que associe a extensão
my-authz-extà regra de encaminhamentofr1. Use os valores de amostra fornecidos. A açãoCUSTOMindica que uma extensão está sendo usada.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" EOFImporte a política de autorização para o projeto. Use o comando
gcloud network-security authz-policies importcom os seguintes valores de exemplo.gcloud network-security authz-policies import my-authz-policy \ --source=authz-policy.yaml \ --location=global
Configurar extensões de autorização com base em perfis
É possível configurar extensões de autorização separadamente para políticas de autorização de solicitação e de conteúdo.
Para uma política de autorização de solicitação
O exemplo a seguir mostra como configurar uma extensão de autorização que
aplica uma política de autorização de solicitação a uma regra de encaminhamento em us-west1. A política exige que o tráfego passe pela autenticação TLS mútua de um principal específico antes de chegar ao destino, example.com/mcp.
gcloud
Configure um serviço de back-end de callout chamado
lb-request-authz-serviceemus-west1com uma regra de encaminhamento chamadafr2.Para o serviço, configure um balanceador de carga de aplicativo externo regional com back-ends de grupos de instâncias de VM.
Configure a extensão de autorização.
Defina a extensão em um arquivo YAML que associa a extensão ao serviço de back-end,
lb-request-authz-service. Use os valores de amostra fornecidos.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 EOFSubstitua
PROJECT_IDpelo ID do projeto.A extensão precisa estar na mesma região do seu serviço de back-end.
Por padrão, todas as chamadas de Service Extensions usam o protocolo Envoy External Processing ou
ext_proc. No caso de callouts de autorização, o protocolo de autorização externa ouext_authztambém é compatível com o Pré-lançamento. Quando a opçãowireFormaté definida comoEXT_AUTHZ_GRPC, a callout usa o protocoloext_authz. Se a opção não for especificada, a nota explicativa vai usar o protocoloext_proc.Para políticas de autorização de solicitação, o valor
wireFormatpode serEXT_AUTHZ_GRPCpara que a callout use o protocoloext_authz, embora o protocoloext_proctambém seja compatível.Por padrão,
failOpené definido comofalse. Se a extensão atingir o tempo limite ou falhar, o processamento da solicitação será interrompido. Essa opção padrão é preferível quando a prioridade é a segurança ou a integridade em vez da disponibilidade.Importe a extensão de autorização. Use o comando
gcloud beta service-extensions authz-extensions importcom os seguintes valores de amostra.gcloud beta service-extensions authz-extensions import my-lb-request-authz-ext \ --source=lb-request-authz-extension.yaml \ --location=us-west1
No mesmo projeto, configure uma política de autorização com a extensão.
Para qualquer solicitação a
example.com/mcp, a política exige autenticação TLS mútua de uma principal específica e delega ainda mais a decisão de autorização à extensão de autorização,my-lb-authz-request-ext.Defina uma política de autorização que associe a extensão
my-lb-request-authz-extà regra de encaminhamentofr2. Use os valores de amostra fornecidos.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" EOFPara políticas de autorização de solicitação, o valor de
policyProfileprecisa serREQUEST_AUTHZ. Esse valor indica que o provedor de política personalizada age em solicitações para permitir ou negar tráfego.A ação
CUSTOMindica que uma extensão está associada ao proxy.Para mais informações sobre um recurso de política de autorização, consulte a documentação de referência do
authzPolicy.Importe a política de autorização para o projeto. Use o comando
gcloud beta network-security authz-policies importcom os seguintes valores de exemplo.gcloud beta network-security authz-policies import my-lb-request-authz-policy \ --source=lb-request-authz-policy.yaml \ --location=us-west1
Para uma política de autorização de conteúdo
O exemplo a seguir mostra como configurar uma extensão de autorização que
aplica uma política de autorização de conteúdo a uma regra de encaminhamento em
us-west1. A política exige um serviço de limpeza de conteúdo para realizar uma inspeção detalhada dos payloads de aplicativos e permitir ou negar solicitações ou alterar as solicitações e respostas, conforme necessário.
gcloud
Configure um serviço de back-end de callout chamado
lb-content-authz-serviceemus-west1com uma regra de encaminhamento chamadafr3.Para o serviço, configure um balanceador de carga de aplicativo externo regional com back-ends de grupos de instâncias de VM.
Configure o servidor de extensão com o protocolo
ext_procnoFULL_DUPLEX_STREAMEDmodo de processamento de corpo e compatível com todos os eventos.Configure a extensão de autorização.
Defina a extensão em um arquivo YAML que associa a extensão ao serviço de back-end,
lb-content-authz-service. Use os valores de amostra fornecidos.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" EOFPara políticas de autorização de conteúdo, o valor de
policyProfileprecisa serCONTENT_AUTHZ.Para políticas de
CONTENT_AUTHZ, o valor dewireFormatnão precisa ser definido explicitamente comoEXT_PROC_GRPC. Por padrão, a callout usa o protocoloext_proc.Importe a extensão de autorização. Use o comando
gcloud beta service-extensions authz-extensions importcom os seguintes valores de exemplo.gcloud beta service-extensions authz-extensions import my-lb-content-authz-ext \ --source=lb-content-authz-extension.yaml \ --location=us-west1
Configure uma política de autorização com a extensão.
Defina uma política de autorização que associe a extensão
my-lb-content-authz-extà regra de encaminhamento,fr3. Use os valores de amostra fornecidos.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" EOFO valor de
policyProfileprecisa serCONTENT_AUTHZ.Importe a política de autorização para o projeto. Use o comando
gcloud beta network-security authz-policies importcom os seguintes valores de exemplo.gcloud beta network-security authz-policies import my-lb-content-authz-policy \ --source=lb-content-authz-policy.yaml \ --location=us-west1
Limitações para extensões de autorização
Confira algumas limitações das extensões de autorização:
- Uma política de autorização pode ter apenas uma extensão de autorização.
- Uma regra de encaminhamento pode ser usada com várias políticas de autorização, mas apenas uma delas pode ser personalizada.
Para limitações aplicáveis a todas as extensões, consulte Limitações das extensões.
A seguir
- Confira exemplos em Python e Go dos servidores
ext_authzeext_procno repositório do GitHub do Service Extensions. - Configurar uma extensão de rota
- Configurar uma extensão de tráfego
- Gerenciar extensões