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 Network Security
- 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.
Esta seção fornece 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 Service Extensions, consulte Delegar autorização com Service Extensions.
Para saber mais sobre 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
Esta seção fornece 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
Esta seção fornece 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: o nome da regra de encaminhamento do balanceador de carga.
Crie a política de autorização importando o arquivo YAML 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 .LB_FORWARDING_RULE: o nome da regra de encaminhamento do balanceador de carga.
Crie a política de autorização importando o arquivo YAML 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
Negar solicitações com base nos principais do certificado do cliente
Esta seção apresenta um exemplo de política de autorização que nega solicitações com base nos principais do 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/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/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 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 Google Cloud região.LB_FORWARDING_RULE: nome da regra de encaminhamento do balanceador de carga.
Crie a política de autorização importando o arquivo YAML usando o comando gcloud network-security authz-policies import.
gcloud beta 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, apresentamos 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 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 Google Cloud específica. 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 Google Cloud região.LB_FORWARDING_RULE: nome da regra de encaminhamento do balanceador de carga.
Crie a política de autorização importando o arquivo YAML usando o comando gcloud network-security authz-policies import.
gcloud beta network-security authz-policies import my-authz-policy-allow \ --source=authz-policy-allow.yaml \ --location=LOCATION
Política de autorização baseada 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á fez o seguinte:
criou uma conta de serviço e a anexou a um Google Cloud recurso.
criou uma tag segura e a anexou a um recurso 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 está configurada para negar solicitações de um recurso 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 Google Cloud região.LB_FORWARDING_RULE: nome da regra de encaminhamento do balanceador de carga.
Crie a política de autorização importando o arquivo YAML usando o comando gcloud network-security authz-policies import.
gcloud beta network-security authz-policies import my-authz-policy-deny \ --source=authz-policy-deny.yaml \ --location=LOCATIONSubstitua
LOCATIONpela sua Google Cloud região.
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 permite apenas solicitações originadas de um recurso Google Cloud , como uma VM do Compute Engine, com um valor de tag seguroTAG_VALUE_PERMANENT_IDpara acessar 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 Google Cloud região.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 usando o comando gcloud network-security authz-policies import.
gcloud beta network-security authz-policies import my-authz-policy-allow \ --source=authz-policy-allow.yaml \ --location=LOCATIONSubstitua:
LOCATION: sua Google Cloud região.
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 Service Extensions:
- 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 usando 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 Google Cloud gerenciado pelo usuário e em um serviço baseado em FQDN.
Este exemplo de configuração pressupõe
que você criou um serviço de back-end Google Cloud gerenciado pelo usuário,
também chamado de serviço de back-end de callout, chamado authz-service.
Para saber como criar um, consulte
Configurar um serviço de back-end de callout gerenciado pelo usuário.
Para um serviço baseado em FQDN, este exemplo de configuração pressupõe que o serviço personalizado seja
implantado na sua própria VPC, ofereça suporte ao 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 oferece suporte ao 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 do formulário
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 do formulário
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 Google Cloud em que o serviço de back-end de callout 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 Google Cloud região.LB_FORWARDING_RULE: o nome da regra de encaminhamento do balanceador de carga.
Crie a política de autorização importando o arquivo YAML dela usando o comando
gcloud network-security authz-policies import.gcloud beta network-security authz-policies import my-authz-policy-custom \ --source=authz-policy-custom.yaml \ --location=LOCATIONSubstitua LOCATION pela região Google Cloudem 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 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 a que 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 beta service-extensions authz-extensions import.gcloud beta service-extensions authz-extensions import my-authz-ext \ --source=authz-extension.yaml \ --location=LOCATION
Substitua LOCATION pela região Google Cloudem 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 Google Cloud região.LB_FORWARDING_RULE: o nome da regra de encaminhamento do balanceador de carga.
Crie a política de autorização importando o arquivo YAML dela usando o comando
gcloud beta network-security authz-policies import.gcloud beta network-security authz-policies import my-authz-policy-custom \ --source=authz-policy-custom.yaml \ --location=LOCATION
Substitua LOCATION pela região Google Cloudem 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 uma extensão
de autorização. Para esses balanceadores de carga, é possível delegar a decisão de autorização à
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 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 à
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 um 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 pela 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 Google Cloudem 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 Google Cloud região.LB_FORWARDING_RULE: nome da regra de encaminhamento do balanceador de carga.
Crie a política de autorização importando o arquivo YAML dela usando o comando
gcloud network-security authz-policies import.gcloud beta network-security authz-policies import my-authz-policy-custom \ --source=authz-policy-custom.yaml \ --location=LOCATIONSubstitua LOCATION pela região Google Cloudem 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 nem 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" }