Esta página mostra como configurar políticas de autorização para balanceadores de carga de aplicativo.
Antes de começar
- Familiarize-se com a visão geral da política de autorização.
-
- API de segurança de rede
- API Network Services
Configurar o balanceador de carga
Se você não criou um balanceador de carga, consulte as páginas a seguir para configurar o balanceador de carga de aplicativo preferido:
- Para criar um balanceador de carga de aplicativo externo global, consulte Configurar um balanceador de carga de aplicativo externo global com back-ends de grupos de instâncias de VM.
Para criar um balanceador de carga de aplicativo externo regional, consulte Configurar um balanceador de carga de aplicativo externo regional com back-ends de grupos de instâncias de VM.
Para criar um balanceador de carga de aplicativo interno regional, consulte Configurar um balanceador de carga de aplicativo interno regional com back-ends de grupos de instâncias de VM.
- Para criar um balanceador de carga de aplicativo interno entre regiões, consulte Configurar um balanceador de carga de aplicativo interno entre regiões com back-ends de grupo de instâncias de VM.
Criar uma política de autorização
Para criar uma política de autorização, crie um arquivo YAML que defina o destino e as regras e importe o arquivo usando o comando gcloud network-security authz-policies.
Nesta seção, fornecemos instruções para criar políticas de autorização anexadas à regra de encaminhamento dos balanceadores de carga de aplicativo.
Para saber como criar uma política de autorização para um Gateway de Agente que delega a autorização usando as Extensões de Serviço, consulte Delegar autorização com as Extensões de Serviço.
Para saber como criar uma política de autorização para um Secure Web Proxy, consulte Configurar políticas de autorização para o Secure Web Proxy.
Política de autorização para negar solicitações
Nesta seção, apresentamos exemplos de políticas de autorização que negam solicitações com base em determinados atributos de solicitação.
Negar solicitações com base em intervalos de endereços IP
Nesta seção, mostramos um exemplo de política de autorização que nega solicitações com base em solicitações originadas de intervalos de endereços IP específicos.
Global e entre regiões
Defina a política de autorização em um arquivo YAML.
O exemplo a seguir cria um arquivo
authz-policy-deny.yamlpara a regra de encaminhamentoLB_FORWARDING_RULEno localglobal. A política nega o acesso ao caminho do URL/api/paymentspara clientes com endereços IP no intervalo10.0.0.0/24.cat >authz-policy-deny.yaml <<EOF name: my-authz-policy-deny target: loadBalancingScheme: LB_SCHEME resources: - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules/LB_FORWARDING_RULE" httpRules: - from: sources: - ipBlocks: - prefix: "10.0.0.0" length: "24" - to: operations: - paths: - prefix: "/api/payments" action: DENY EOFSubstitua:
LB_SCHEME: o esquema de balanceamento de carga. Para balanceadores de carga de aplicativo externos globais, defina o esquema comoEXTERNAL_MANAGED. Para balanceadores de carga de aplicativo internos entre regiões, defina o esquema comoINTERNAL_MANAGED.PROJECT_ID: o ID do seu projeto do Google Cloud .LB_FORWARDING_RULE: nome da regra de encaminhamento do balanceador de carga.
Crie a política de autorização importando o arquivo YAML da política de autorização usando o comando gcloud network-security authz-policies import.
gcloud network-security authz-policies import my-authz-policy-deny \ --source=authz-policy-deny.yaml \ --location=global
Regional
Defina a política de autorização em um arquivo YAML.
O exemplo a seguir cria um arquivo
authz-policy-deny.yamlpara a regra de encaminhamentoLB_FORWARDING_RULEem uma regiãoGoogle Cloud . A política nega o acesso ao caminho do URL/api/paymentspara clientes com endereços IP no intervalo10.0.0.0/24.cat >authz-policy-deny.yaml <<EOF name: my-authz-policy-deny target: loadBalancingScheme: LB_SCHEME resources: - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/LB_FORWARDING_RULE" httpRules: - from: sources: - ipBlocks: - prefix: "10.0.0.0" length: "24" - to: operations: - paths: - prefix: "/api/payments" action: DENY EOFSubstitua:
LB_SCHEME: o esquema de balanceamento de carga. Para balanceadores de carga de aplicativo externos regionais, defina o esquema comoEXTERNAL_MANAGED. Para balanceadores de carga de aplicativo internos regionais, defina o esquema comoINTERNAL_MANAGED.PROJECT_ID: o ID do seu projeto do Google Cloud .LOCATION: sua região do Google Cloud .LB_FORWARDING_RULE: nome da regra de encaminhamento do balanceador de carga.
Crie a política de autorização importando o arquivo YAML da política de autorização usando o comando gcloud network-security authz-policies import.
gcloud network-security authz-policies import my-authz-policy-deny \ --source=authz-policy-deny.yaml \ --location=LOCATION
Negar solicitações com base em principais de certificado do cliente
Nesta seção, mostramos um exemplo de política de autorização que nega solicitações com base em principais de certificado do cliente.
Global e entre regiões
Defina a política de autorização em um arquivo YAML.
O exemplo a seguir cria um arquivo
authz-policy-deny.yamlpara a regra de encaminhamentoLB_FORWARDING_RULEno localglobal. A política nega o acesso ao caminho do URL/api/paymentsa clientes que têmwww.example.comnos SANs de nome DNS do certificado do cliente.cat >authz-policy-deny.yaml <<EOF name: my-authz-policy-deny target: loadBalancingScheme: LB_SCHEME resources: - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules/LB_FORWARDING_RULE" httpRules: - from: sources: - principals: - principalSelector: CLIENT_CERT_DNS_NAME_SAN principal: exact: "www.example.com" to: operations: - paths: - prefix: "/api/payments" action: DENY EOFSubstitua:
LB_SCHEME: o esquema de balanceamento de carga. Para balanceadores de carga de aplicativo externos globais, defina o esquema comoEXTERNAL_MANAGED. Para balanceadores de carga de aplicativo internos entre regiões, defina o esquema comoINTERNAL_MANAGED.PROJECT_ID: o ID do seu projeto do Google Cloud .LB_FORWARDING_RULE: nome da regra de encaminhamento do balanceador de carga.
Crie a política de autorização importando o arquivo YAML da política de autorização usando o comando gcloud network-security authz-policies import.
gcloud network-security authz-policies import my-authz-policy-deny \ --source=authz-policy-deny.yaml \ --location=global
Regional
Defina a política de autorização em um arquivo YAML.
O exemplo a seguir cria um arquivo
authz-policy-deny.yamlpara a regra de encaminhamentoLB_FORWARDING_RULEem uma regiãoGoogle Cloud . A política nega o acesso ao caminho do URL/api/paymentspara clientes que têmwww.example.comnos SANs de nome DNS do certificado do cliente.cat >authz-policy-deny.yaml <<EOF name: my-authz-policy-deny target: loadBalancingScheme: LB_SCHEME resources: - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/LB_FORWARDING_RULE" policyProfile: REQUEST_AUTHZ httpRules: - from: sources: - principals: - principalSelector: CLIENT_CERT_DNS_NAME_SAN principal: exact: "www.example.com" to: operations: - paths: - prefix: "/api/payments" action: DENY EOFSubstitua:
LB_SCHEME: o esquema de balanceamento de carga. Para balanceadores de carga de aplicativo externos regionais, defina o esquema comoEXTERNAL_MANAGED. Para balanceadores de carga de aplicativo internos regionais, defina o esquema comoINTERNAL_MANAGED.PROJECT_ID: o ID do seu projeto do Google Cloud .LOCATION: sua região do Google Cloud .LB_FORWARDING_RULE: nome da regra de encaminhamento do balanceador de carga.
Crie a política de autorização importando o arquivo YAML da política de autorização usando o comando gcloud network-security authz-policies import.
gcloud network-security authz-policies import my-authz-policy-deny \ --source=authz-policy-deny.yaml \ --location=LOCATION
Política de autorização para permitir solicitações
Nesta seção, mostramos um exemplo de política de autorização que permite solicitações originadas de intervalos de endereços IP específicos.
Global e entre regiões
Se você estiver usando um balanceador de carga de aplicativo externo global ou um balanceador de carga de aplicativo interno entre regiões, siga estas etapas para criar uma política de autorização:
Defina a política de autorização em um arquivo YAML.
O exemplo a seguir cria um arquivo
authz-policy-allow.yamlpara a regra de encaminhamentoLB_FORWARDING_RULEno localglobal. A política permite que clientes com endereços IP no intervalo10.0.0.0/24acessem o caminho do URL/api/payments.cat >authz-policy-allow.yaml <<EOF name: my-authz-policy-allow target: loadBalancingScheme: LB_SCHEME resources: - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules/LB_FORWARDING_RULE" httpRules: - from: sources: - ipBlocks: - prefix: "10.0.0.0" length: "24" to: operations: - paths: - exact: "/api/payments" action: ALLOW EOFSubstitua:
LB_SCHEME: o esquema de balanceamento de carga. Para balanceadores de carga de aplicativo externos globais, defina o esquema comoEXTERNAL_MANAGED. Para balanceadores de carga de aplicativo internos entre regiões, defina o esquema comoINTERNAL_MANAGED.PROJECT_ID: o ID do seu projeto do Google Cloud .LB_FORWARDING_RULE: nome da regra de encaminhamento do balanceador de carga.
Crie a política de autorização importando o arquivo YAML da política de autorização usando o comando gcloud network-security authz-policies import.
gcloud network-security authz-policies import my-authz-policy-allow \ --source=authz-policy-allow.yaml \ --location=global
Regional
Se você estiver usando um balanceador de carga de aplicativo externo regional ou um balanceador de carga de aplicativo interno regional, siga estas etapas para criar e importar uma política de autorização:
Defina a política de autorização em um arquivo YAML.
O exemplo a seguir cria um arquivo
authz-policy-allow.yamlpara a regra de encaminhamentoLB_FORWARDING_RULEem uma região específica do Google Cloud . A política permite que clientes com endereços IP no intervalo10.0.0.0/24acessem o caminho do URL/api/payments.cat >authz-policy-allow.yaml <<EOF name: my-authz-policy-allow target: loadBalancingScheme: LB_SCHEME resources: - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/LB_FORWARDING_RULE" policyProfile: REQUEST_AUTHZ httpRules: - from: sources: - ipBlocks: - prefix: "10.0.0.0" length: "24" to: operations: - paths: - exact: "/api/payments" action: ALLOW EOFSubstitua:
LB_SCHEME: o esquema de balanceamento de carga. Para balanceadores de carga de aplicativo externos regionais, defina o esquema comoEXTERNAL_MANAGED. Para balanceadores de carga de aplicativo internos regionais, defina o esquema comoINTERNAL_MANAGED.PROJECT_ID: o ID do seu projeto do Google Cloud .LOCATION: sua região do Google Cloud .LB_FORWARDING_RULE: nome da regra de encaminhamento do balanceador de carga.
Crie a política de autorização importando o arquivo YAML da política de autorização usando o comando gcloud network-security authz-policies import.
gcloud network-security authz-policies import my-authz-policy-allow \ --source=authz-policy-allow.yaml \ --location=LOCATION
Política de autorização com base em contas de serviço ou tags
É possível aplicar uma política de autorização com base em contas de serviço ou tags seguras anexadas a vários recursos do Google Cloud .
Este exemplo pressupõe que você já:
criou uma conta de serviço e a anexou a um recurso do Google Cloud .
criou uma tag segura e a anexou a um recurso do Google Cloud como um par de chave-valor. Ao criar uma tag, defina a flag
--purposecomoGCE_FIREWALL. As políticas de autorização exigem a finalidadeGCE_FIREWALLpara aplicar a tag.
Conta de serviço
Defina a política de autorização em um arquivo YAML.
O exemplo a seguir cria um arquivo
authz-policy-deny.yamlpara a regra de encaminhamentoLB_FORWARDING_RULEde um balanceador de carga de aplicativo interno regional. A política é configurada para negar solicitações de um recurso do Google Cloud , como uma VM do Compute Engine, com a conta de serviçomy-sa-123@PROJECT_ID.iam.gserviceaccount.compara alcançar o caminho/api/payments.cat >authz-policy-deny.yaml <<EOF name: my-authz-policy-deny target: loadBalancingScheme: LB_SCHEME resources: - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/LB_FORWARDING_RULE" policyProfile: REQUEST_AUTHZ httpRules: - from: sources: - resources: - iamServiceAccount: exact: "my-sa-123@PROJECT_ID.iam.gserviceaccount.com" to: operations: - paths: - prefix: "/api/payments" action: DENY EOFSubstitua:
LB_SCHEME: o esquema de balanceamento de carga. Para balanceadores de carga de aplicativo internos regionais e entre regiões, defina o esquema comoINTERNAL_MANAGED.PROJECT_ID: o ID do seu projeto do Google Cloud .LOCATION: sua região do Google Cloud .LB_FORWARDING_RULE: nome da regra de encaminhamento do balanceador de carga.
Crie a política de autorização importando o arquivo YAML da política de autorização usando o comando gcloud network-security authz-policies import.
gcloud network-security authz-policies import my-authz-policy-deny \ --source=authz-policy-deny.yaml \ --location=LOCATIONSubstitua
LOCATIONpela região do Google Cloud .
Tag
Defina a política de autorização em um arquivo YAML.
O exemplo a seguir cria um arquivo
authz-policy-allow.yamlpara a regra de encaminhamentoLB_FORWARDING_RULEde um balanceador de carga de aplicativo interno regional. A política só permite que solicitações originadas de um recurso do Google Cloud , como uma VM do Compute Engine, com um valor de tag seguraTAG_VALUE_PERMANENT_IDacessem o caminho do URL/api/payments.cat >authz-policy-allow.yaml <<EOF name: my-authz-policy-allow target: loadBalancingScheme: LB_SCHEME resources: - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/LB_FORWARDING_RULE" policyProfile: REQUEST_AUTHZ httpRules: - from: sources: resources: - tagValueIdSet: - ids: "TAG_VALUE_PERMANENT_ID" to: operations: - paths: - exact: "/api/payments" action: ALLOW EOFSubstitua:
LB_SCHEME: o esquema de balanceamento de carga. Para balanceadores de carga de aplicativo internos regionais e entre regiões, defina o esquema comoINTERNAL_MANAGED.PROJECT_ID: o ID do seu projeto do Google Cloud .LOCATION: sua região do Google Cloud .LB_FORWARDING_RULE: o nome da regra de encaminhamento do balanceador de carga.TAG_VALUE_PERMANENT_ID: o ID permanente de um valor de tag.
Crie a política de autorização importando o arquivo YAML da política de autorização usando o comando gcloud network-security authz-policies import.
gcloud network-security authz-policies import my-authz-policy-allow \ --source=authz-policy-allow.yaml \ --location=LOCATIONSubstitua:
LOCATION: sua região do Google Cloud .
Política de autorização para delegar decisões de autorização
Os exemplos nesta seção criam uma política de autorização que delega decisões de autorização aos seguintes serviços por meio de extensões de serviço:
- Serviço gerenciado pelo usuário
- Serviço gerenciado pelo Google
Delegar a decisão de autorização a um serviço gerenciado pelo usuário
É possível configurar uma política de autorização para delegar a decisão de autorização a um serviço gerenciado pelo usuário por meio de extensões de serviço, especificamente uma extensão de autorização.
Para balanceadores de carga globais e entre regiões, a extensão de autorização pode ser executada em um serviço de back-end Google Cloud gerenciado pelo usuário.
Para balanceadores de carga regionais, a extensão de autorização pode ser executada em um serviço de back-end gerenciado pelo usuário do Google Cloud e em um serviço baseado em FQDN.
Este exemplo de configuração pressupõe
que você tenha criado um serviço de back-end Google Cloud gerenciado pelo usuário,
também conhecido como serviço de back-end de chamada, chamado authz-service.
Para saber como criar um, consulte
Configurar um serviço de back-end de chamada gerenciado pelo usuário.
Para um serviço baseado em FQDN, este exemplo de configuração pressupõe que o serviço personalizado esteja
implantado na sua própria VPC, seja compatível com o protocolo ext_authz e
seja acessível pelo nome de domínio totalmente qualificado
mycustomauthz.internal.net.
Global e entre regiões
Se você estiver usando um balanceador de carga de aplicativo externo global ou um balanceador de carga de aplicativo interno entre regiões, siga estas etapas para delegar a decisão de autorização ao serviço gerenciado pelo usuário.
Defina a extensão de autorização em um arquivo YAML. A extensão de autorização é executada em um serviço de back-end (
authz-service) e é compatível com o protocoloext_authz.cat >authz-extension.yaml <<EOF name: my-authz-ext authority: ext11.com loadBalancingScheme: LB_SCHEME service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/authz-service forwardHeaders: - Authorization failOpen: false timeout: "0.1s" wireFormat: EXT_AUTHZ_GRPC EOFCrie a extensão de autorização importando o arquivo YAML da extensão de autorização usando o comando
gcloud service-extensions authz-extensions import.gcloud service-extensions authz-extensions import my-authz-ext \ --source=authz-extension.yaml \ --location=globalSubstitua:
LB_SCHEME: o esquema de balanceamento de carga. Para balanceadores de carga de aplicativo externos globais, defina o esquema comoEXTERNAL_MANAGED. Para balanceadores de carga de aplicativo internos entre regiões, defina o esquema comoINTERNAL_MANAGED.PROJECT_ID: o ID do seu projeto do Google Cloud .
Defina a política de autorização em um arquivo YAML. A política de autorização delega a autorização à extensão de autorização no campo
customProvider.A política chama a extensão de autorização
my-authz-extpara todo o tráfego no caminho do URLexample.com/api/paymentsquando a solicitação contém um cabeçalhoAuthorizationnão vazio.cat >authz-policy-custom.yaml <<EOF name: my-authz-policy-custom target: loadBalancingScheme: LB_SCHEME resources: - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules/LB_FORWARDING_RULE" httpRules: - to: operations: - hosts: - exact: "example.com" - paths: - exact: "/api/payments" when: 'request.headers["Authorization"] != ""' action: CUSTOM customProvider: authzExtension: resources: - "projects/PROJECT_ID/locations/global/authzExtensions/my-authz-ext" EOFSubstitua:
LB_SCHEME: o esquema de balanceamento de carga. Para balanceadores de carga de aplicativo externos globais, defina o esquema comoEXTERNAL_MANAGED. Para balanceadores de carga de aplicativo internos entre regiões, defina o esquema comoINTERNAL_MANAGED.PROJECT_ID: o ID do seu projeto do Google Cloud .LB_FORWARDING_RULE: nome da regra de encaminhamento do balanceador de carga.
Crie a política de autorização importando o arquivo YAML da política de autorização usando o comando
gcloud network-security authz-policies import.gcloud network-security authz-policies import my-authz-policy-custom \ --source=authz-policy-custom.yaml \ --location=global
Regional
Se você estiver usando um balanceador de carga de aplicativo externo regional ou um balanceador de carga de aplicativo interno regional, siga estas etapas para delegar a decisão de autorização a um serviço gerenciado pelo usuário.
Defina a extensão de autorização em um arquivo YAML. A extensão de autorização pode ser executada em um serviço de back-end ou em um serviço baseado em FQDN.
cat >authz-extension.yaml <<EOF name: my-authz-ext authority: ext11.com loadBalancingScheme: LB_SCHEME service: BACKEND_SERVICE_URI_OR_FQDN forwardHeaders: - Authorization failOpen: false timeout: "0.1s" wireFormat: EXT_AUTHZ_GRPC EOFSubstitua:
LB_SCHEME: o esquema de balanceamento de carga. Para balanceadores de carga de aplicativo externos regionais, defina o esquema comoEXTERNAL_MANAGED. Para balanceadores de carga de aplicativo internos regionais, defina o esquema comoINTERNAL_MANAGED.BACKEND_SERVICE_URI_OR_FQDN: o serviço pode ser uma das seguintes opções:- um URI de recurso de serviço de back-end regional no formato
https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/backendServices/authz-service. - um nome de domínio totalmente qualificado
(por exemplo,
mycustomauthz.extension.net) que pode ser resolvido pelo Cloud DNS.
- um URI de recurso de serviço de back-end regional no formato
Crie a extensão de autorização importando o arquivo YAML da extensão de autorização usando o comando
gcloud service-extensions authz-extensions import.gcloud service-extensions authz-extensions import my-authz-ext \ --source=authz-extension.yaml \ --location=LOCATIONSubstitua LOCATION pela região do Google Cloud em que o serviço de back-end de chamada está configurado.
Defina a política de autorização em um arquivo YAML. A política de autorização delega a autorização à extensão de autorização no campo
customProvider.A política chama a extensão de autorização
my-authz-extpara todo o tráfego no caminho do URLexample.com/api/paymentsquando a solicitação contém um cabeçalhoAuthorizationnão vazio.cat >authz-policy-custom.yaml <<EOF name: my-authz-policy-custom target: loadBalancingScheme: LB_SCHEME resources: - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/LB_FORWARDING_RULE" policyProfile: REQUEST_AUTHZ httpRules: - to: operations: - paths: - exact: "/api/payments" when: 'request.headers["Authorization"] != ""' action: CUSTOM customProvider: authzExtension: resources: - "projects/PROJECT_ID/locations/LOCATION/authzExtensions/my-authz-ext" EOFSubstitua:
LB_SCHEME: o esquema de balanceamento de carga. Para balanceadores de carga de aplicativo externos regionais, defina o esquema comoEXTERNAL_MANAGED. Para balanceadores de carga de aplicativo internos regionais, defina o esquema comoINTERNAL_MANAGED.PROJECT_ID: o ID do seu projeto do Google Cloud .LOCATION: a região do Google Cloud .LB_FORWARDING_RULE: nome da regra de encaminhamento do balanceador de carga.
Crie a política de autorização importando o arquivo YAML da política de autorização usando o comando
gcloud network-security authz-policies import.gcloud network-security authz-policies import my-authz-policy-custom \ --source=authz-policy-custom.yaml \ --location=LOCATIONSubstitua LOCATION pela região do Google Cloud em que o balanceador de carga está configurado.
Para mais informações sobre extensões de autorização, consulte Configurar uma extensão de autorização.
Delegar a decisão de autorização ao Model Armor
É possível configurar uma política de autorização para delegar a decisão de autorização ao Model Armor.
Antes de começar, crie um modelo do Model Armor. Neste exemplo de configuração, a política de autorização aponta para uma extensão de autorização, que, por sua vez, aponta para o Model Armor.
Se você estiver usando um balanceador de carga de aplicativo externo regional ou um balanceador de carga de aplicativo interno regional, siga estas etapas para delegar a decisão de autorização ao Model Armor.
Regional
Defina a extensão de autorização em um arquivo YAML. A extensão de autorização aponta para os modelos de solicitação e resposta do Model Armor.
cat >authz-extension.yaml <<EOF name: my-authz-extension loadBalancingScheme: INTERNAL_MANAGED service: modelarmor.LOCATION.rep.googleapis.com metadata: model_armor_settings: '[ { "response_template_id": "projects/PROJECT_ID/locations/LOCATION/templates/RESPONSE_TEMPLATE_ID", "request_template_id": "projects/PROJECT_ID/locations/LOCATION/templates/REQUEST_TEMPLATE_ID" } ]' failOpen: true EOFSubstitua:
- LOCATION: o local do modelo.
- PROJECT_ID: o ID do projeto ao qual o modelo pertence.
- RESPONSE_TEMPLATE_ID: ID do modelo de resposta.
- REQUEST_TEMPLATE_ID: o ID do modelo de solicitação.
Crie a extensão de autorização importando o arquivo YAML da extensão de autorização usando o comando
gcloud service-extensions authz-extensions import.gcloud service-extensions authz-extensions import my-authz-ext \ --source=authz-extension.yaml \ --location=LOCATION
Substitua LOCATION pela região do Google Cloud em que o balanceador de carga está localizado.
Defina a política de autorização em um arquivo YAML. A política de autorização delega a autorização à extensão de autorização no campo
customProvider.O valor de
policyProfileéCONTENT_AUTHZ.cat >authz-policy-custom.yaml <<EOF name: my-authz-policy-custom target: loadBalancingScheme: INTERNAL_MANAGED resources: - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/LB_FORWARDING_RULE" policyProfile: CONTENT_AUTHZ action: CUSTOM customProvider: authzExtension: resources: - "projects/PROJECT_ID/locations/LOCATION/authzExtensions/my-authz-ext" EOFSubstitua:
PROJECT_ID: o ID do seu projeto do Google Cloud .LOCATION: a região do Google Cloud .LB_FORWARDING_RULE: o nome da regra de encaminhamento do balanceador de carga.
Crie a política de autorização importando o arquivo YAML da política de autorização usando o comando
gcloud network-security authz-policies import.gcloud network-security authz-policies import my-authz-policy-custom \ --source=authz-policy-custom.yaml \ --location=LOCATION
Substitua LOCATION pela região do Google Cloud em que o balanceador de carga está configurado.
Delegar a decisão de autorização ao Identity-Aware Proxy
Para balanceadores de carga de aplicativo externos globais e balanceadores de carga de aplicativo internos entre regiões, não é possível delegar
a decisão de autorização ao IAP por meio de uma extensão de
autorização. Para esses balanceadores de carga, é possível delegar a decisão de autorização ao
IAP usando o campo customProvider no recurso de política de
autorização.
Para balanceadores de carga de aplicativo externos regionais e balanceadores de carga de aplicativo internos regionais, é possível configurar uma política de autorização para delegar a decisão de autorização ao IAP por meio de uma extensão de autorização.
Global e entre regiões
No exemplo a seguir, todas as decisões de autorização são delegadas ao
IAP para todas as solicitações originadas do bloco de endereços IP
10.0.0.0/24. Se as solicitações forem originadas de qualquer endereço IP fora de
10.0.0.0/24, elas não vão corresponder a essa política e não serão
avaliadas pelo IAP de acordo com essa regra específica.
Defina a política de autorização em um arquivo YAML. A política de autorização delega a autorização ao IAP pelo campo
customProvider.cat >authz-policy-iap.yaml <<EOF name: my-authz-policy-custom target: loadBalancingScheme: LB_SCHEME resources: - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules/LB_FORWARDING_RULE" httpRules: - from: sources: - ipBlock: - prefix: "10.0.0.0" length: 24 action: CUSTOM customProvider: cloudIap: {} EOFSubstitua:
LB_SCHEME: o esquema de balanceamento de carga. Para balanceadores de carga de aplicativo externos globais, defina o esquema comoEXTERNAL_MANAGED. Para balanceadores de carga de aplicativo internos entre regiões, defina o esquema comoINTERNAL_MANAGED.PROJECT_ID: o ID do seu projeto do Google Cloud .LB_FORWARDING_RULE: nome da regra de encaminhamento do balanceador de carga.
Crie a política de autorização importando o arquivo YAML da política de autorização usando o comando
gcloud network-security authz-policies import.gcloud network-security authz-policies import my-authz-policy-custom \ --source=authz-policy-iap.yaml \ --location=global
Regional
Se você estiver usando um balanceador de carga de aplicativo externo regional ou um balanceador de carga de aplicativo interno regional, siga estas etapas para delegar a decisão de autorização ao IAP usando uma extensão de autorização.
Defina a extensão de autorização em um arquivo YAML. A extensão de autorização aponta para o IAP.
cat >authz-extension.yaml <<EOF name: my-authz-ext loadBalancingScheme: LB_SCHEME service: iap.googleapis.com failOpen: false EOFSubstitua:
- LB_SCHEME: o esquema de balanceamento de carga.
Para balanceadores de carga de aplicativo externos regionais, defina o esquema como
EXTERNAL_MANAGED. Para balanceadores de carga de aplicativo internos regionais, defina o esquema comoINTERNAL_MANAGED.
- LB_SCHEME: o esquema de balanceamento de carga.
Para balanceadores de carga de aplicativo externos regionais, defina o esquema como
Crie a extensão de autorização importando o arquivo YAML da extensão de autorização usando o comando
gcloud service-extensions authz-extensions import.gcloud service-extensions authz-extensions import my-authz-ext \ --source=authz-extension.yaml \ --location=LOCATIONSubstitua LOCATION pela região do Google Cloud em que a extensão de autorização está configurada.
Defina a política de autorização em um arquivo YAML. A política de autorização delega a autorização à extensão de autorização no campo
customProvider.cat >authz-policy-custom.yaml <<EOF name: my-authz-policy-custom target: loadBalancingScheme: LB_SCHEME resources: - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/LB_FORWARDING_RULE" policyProfile: REQUEST_AUTHZ action: CUSTOM customProvider: authzExtension: resources: - "projects/PROJECT_ID/locations/LOCATION/authzExtensions/my-authz-ext" EOFSubstitua:
LB_SCHEME: o esquema de balanceamento de carga. Para balanceadores de carga de aplicativo externos regionais, defina o esquema comoEXTERNAL_MANAGED. Para balanceadores de carga de aplicativo internos regionais, defina o esquema comoINTERNAL_MANAGED.PROJECT_ID: o ID do seu projeto do Google Cloud .LOCATION: a região do Google Cloud .LB_FORWARDING_RULE: nome da regra de encaminhamento do balanceador de carga.
Crie a política de autorização importando o arquivo YAML da política de autorização usando o comando
gcloud network-security authz-policies import.gcloud network-security authz-policies import my-authz-policy-custom \ --source=authz-policy-custom.yaml \ --location=LOCATIONSubstitua LOCATION pela região do Google Cloud em que o balanceador de carga está configurado.
Entender os registros de políticas de autorização no Cloud Logging
Para entender como as políticas de autorização são registradas quando uma solicitação é permitida ou negada, consulte as seções a seguir.
A solicitação não corresponde às políticas ALLOW ou DENY
Quando uma solicitação não corresponde às políticas ALLOW ou DENY, a política DENY
permite e registra a solicitação como
allowed_as_no_deny_policies_matched_request. Por outro lado, a política ALLOW
rejeita a solicitação e a registra como
denied_as_no_allow_policies_matched_request. Como uma das políticas nega a solicitação, ela é negada.
Se você estiver usando um balanceador de carga de aplicativo externo global,
statusDetailsserá definido comodenied_by_authz_policyno registro. Veja o exemplo a seguir:{ httpRequest: {8} insertId: "example-id" jsonPayload: { @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry" authzPolicyInfo: { policies: [ 0: { details: "allowed_as_no_deny_policies_matched_request" result: "ALLOWED" } 1: { details: "denied_as_no_allow_policies_matched_request" result: "DENIED" } ] result: "DENIED" } backendTargetProjectNumber: "projects/12345567" remoteIp: "00.100.11.104" statusDetails: "denied_by_authz_policy" } logName: "projects/example-project/logs/requests" receiveTimestamp: "2024-08-28T15:33:56.046651035Z" resource: {2} severity: "WARNING" spanId: "3e1a09a8e5e3e14d" timestamp: "2024-08-28T15:33:55.355042Z" trace: "projects/example-project/traces/8c8b3dbf9a19c85954d0fa2d958ca509" }Se você estiver usando um balanceador de carga de aplicativo interno regional, um balanceador de carga de aplicativo externo regional ou um balanceador de carga de aplicativo interno entre regiões,
proxyStatusserá definido comoerror=\"http_request_error\"; details=\"denied_by_authz_policy\"no registro. Veja o exemplo a seguir:{ httpRequest: {8} insertId: "example-id" jsonPayload: { @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry" authzPolicyInfo: { policies: [ 0: { details: "allowed_as_no_deny_policies_matched_request" result: "ALLOWED" } 1: { details: "denied_as_no_allow_policies_matched_request" result: "DENIED" } ] result: "DENIED" } backendTargetProjectNumber: "projects/12345567" remoteIp: "00.100.11.104" proxyStatus: "error=\"http_request_error\"; details=\"denied_by_authz_policy\"" } logName: "projects/example-project/logs/requests" receiveTimestamp: "2024-08-28T15:33:56.046651035Z" resource: {2} severity: "WARNING" spanId: "3e1a09a8e5e3e14d" timestamp: "2024-08-28T15:33:55.355042Z" trace: "projects/example-project/traces/8c8b3dbf9a19c85954d0fa2d958ca509" }
A solicitação corresponde à política DENY
Quando uma solicitação corresponde à política DENY, ela é negada, e a política que
negou a solicitação é registrada.
Se você estiver usando um balanceador de carga de aplicativo externo global,
statusDetailsserá definido comodenied_by_authz_policyno registro, e o nome da política que negou a solicitação será registrado empolicies. Veja o exemplo a seguir:{ httpRequest: {8} insertId: "example-id" jsonPayload: { @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry" authzPolicyInfo: { policies: [ 0: { details: "name: "projects/12345567/locations/global/authzPolicies/deny-authz-policy-test"" result: "DENIED" } ] result: "DENIED" } backendTargetProjectNumber: "projects/12345567" cacheDecision: [2] remoteIp: "00.100.11.104" statusDetails: "denied_by_authz_policy" } logName: "projects/example-project/logs/requests" receiveTimestamp: "2024-08-28T15:33:56.046651035Z" resource: {2} severity: "WARNING" spanId: "3e1a09a8e5e3e14d" timestamp: "2024-08-28T15:33:55.355042Z" trace: "projects/example-project/traces/8c8b3dbf9a19c85954d0fa2d958ca509" }Se você estiver usando um balanceador de carga de aplicativo interno regional, um balanceador de carga de aplicativo externo regional ou um balanceador de carga de aplicativo interno entre regiões,
proxyStatusserá definido comoerror=\"http_request_error\"; details=\"denied_by_authz_policy\"e o nome da política será registrado empolicies. Veja o exemplo a seguir:{ httpRequest: {8} insertId: "example-id" jsonPayload: { @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry" authzPolicyInfo: { policies: [ 0: { details: "name: "projects/12345567/locations/$REGION/authzPolicies/deny-authz-policy-test"" result: "DENIED" } ] result: "DENIED" } backendTargetProjectNumber: "projects/12345567" remoteIp: "00.100.11.104" proxyStatus: "error=\"http_request_error\"; details=\"denied_by_authz_policy\"" } logName: "projects/example-project/logs/requests" receiveTimestamp: "2024-08-28T15:33:56.046651035Z" resource: {2} severity: "WARNING" spanId: "3e1a09a8e5e3e14d" timestamp: "2024-08-28T15:33:55.355042Z" trace: "projects/example-project/traces/8c8b3dbf9a19c85954d0fa2d958ca509" }
A solicitação não corresponde à política DENY, mas corresponde à política ALLOW
Quando uma solicitação não corresponde à política DENY, mas corresponde à política
ALLOW, a solicitação é permitida. No registro, essa ação é registrada como
allowed_as_no_deny_policies_matched_request para a política DENY. A política
que permitiu a solicitação também é registrada.
Se você estiver usando um balanceador de carga de aplicativo externo global, não haverá
statusDetailsno registro. A política que permitiu a solicitação também é registrada empolicies. Confira o exemplo a seguir:{ httpRequest: {8} insertId: "example-id" jsonPayload: { @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry" authzPolicyInfo: { policies: [ 0: { details: "allowed_as_no_deny_policies_matched_request" result: "ALLOWED" } 1: { details: "name: "projects/12345567/locations/global/authzPolicies/allow-authz-policy-test"" result: "ALLOWED" } ] result: "ALLOWED" } backendTargetProjectNumber: "projects/12345567" cacheDecision: [2] remoteIp: "00.100.11.104" } logName: "projects/example-project/logs/requests" receiveTimestamp: "2024-08-28T15:33:56.046651035Z" resource: {2} severity: "WARNING" spanId: "3e1a09a8e5e3e14d" timestamp: "2024-08-28T15:33:55.355042Z" trace: "projects/example-project/traces/8c8b3dbf9a19c85954d0fa2d958ca509" }Se você estiver usando um balanceador de carga de aplicativo interno regional, um balanceador de carga de aplicativo externo regional ou um balanceador de carga de aplicativo interno entre regiões, não haverá um campo
proxyStatusno registro. A política que permitiu a solicitação também é registrada empolicies. Confira o exemplo a seguir:{ httpRequest: {8} insertId: "example-id" jsonPayload: { @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry" authzPolicyInfo: { policies: [ 0: { details: "allowed_as_no_deny_policies_matched_request" result: "ALLOWED" } 1: { details: "name: "projects/12345567/locations/$REGION/authzPolicies/allow-authz-policy-test"" result: "ALLOWED" } ] result: "ALLOWED" } backendTargetProjectNumber: "projects/12345567" cacheDecision: [2] remoteIp: "00.100.11.104" } logName: "projects/example-project/logs/requests" receiveTimestamp: "2024-08-28T15:33:56.046651035Z" resource: {2} severity: "WARNING" spanId: "3e1a09a8e5e3e14d" timestamp: "2024-08-28T15:33:55.355042Z" trace: "projects/example-project/traces/8c8b3dbf9a19c85954d0fa2d958ca509" }