Configurar políticas de autorização para balanceadores de carga de aplicativo

Esta página mostra como configurar políticas de autorização para balanceadores de carga de aplicativo.

Antes de começar

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:

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

  1. Defina a política de autorização em um arquivo YAML.

    O exemplo a seguir cria um arquivo authz-policy-deny.yaml para a regra de encaminhamento LB_FORWARDING_RULE no local global. A política nega o acesso ao caminho do URL /api/payments para clientes com endereços IP no intervalo 10.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
    EOF
    

    Substitua:

    • LB_SCHEME: o esquema de balanceamento de carga. Para balanceadores de carga de aplicativo externos globais, defina o esquema como EXTERNAL_MANAGED. Para balanceadores de carga de aplicativo internos entre regiões, defina o esquema como INTERNAL_MANAGED.
    • PROJECT_ID: o ID do seu projeto do Google Cloud .
    • LB_FORWARDING_RULE: nome da regra de encaminhamento do balanceador de carga.
  2. 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

  1. Defina a política de autorização em um arquivo YAML.

    O exemplo a seguir cria um arquivo authz-policy-deny.yaml para a regra de encaminhamento LB_FORWARDING_RULE em uma regiãoGoogle Cloud . A política nega o acesso ao caminho do URL /api/payments para clientes com endereços IP no intervalo 10.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
    EOF
    

    Substitua:

    • 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 como INTERNAL_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.
  2. 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

  1. Defina a política de autorização em um arquivo YAML.

    O exemplo a seguir cria um arquivo authz-policy-deny.yaml para a regra de encaminhamento LB_FORWARDING_RULE no local global. A política nega o acesso ao caminho do URL /api/payments a clientes que têm www.example.com nos 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
    EOF
    

    Substitua:

    • LB_SCHEME: o esquema de balanceamento de carga. Para balanceadores de carga de aplicativo externos globais, defina o esquema como EXTERNAL_MANAGED. Para balanceadores de carga de aplicativo internos entre regiões, defina o esquema como INTERNAL_MANAGED.
    • PROJECT_ID: o ID do seu projeto do Google Cloud .
    • LB_FORWARDING_RULE: nome da regra de encaminhamento do balanceador de carga.
  2. 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

  1. Defina a política de autorização em um arquivo YAML.

    O exemplo a seguir cria um arquivo authz-policy-deny.yaml para a regra de encaminhamento LB_FORWARDING_RULE em uma regiãoGoogle Cloud . A política nega o acesso ao caminho do URL /api/payments para clientes que têm www.example.com nos 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
    EOF
    

    Substitua:

    • 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 como INTERNAL_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.
  2. 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:

  1. Defina a política de autorização em um arquivo YAML.

    O exemplo a seguir cria um arquivo authz-policy-allow.yaml para a regra de encaminhamento LB_FORWARDING_RULE no local global. A política permite que clientes com endereços IP no intervalo 10.0.0.0/24 acessem 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
    EOF
    

    Substitua:

    • LB_SCHEME: o esquema de balanceamento de carga. Para balanceadores de carga de aplicativo externos globais, defina o esquema como EXTERNAL_MANAGED. Para balanceadores de carga de aplicativo internos entre regiões, defina o esquema como INTERNAL_MANAGED.
    • PROJECT_ID: o ID do seu projeto do Google Cloud .
    • LB_FORWARDING_RULE: nome da regra de encaminhamento do balanceador de carga.
  2. 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:

  1. Defina a política de autorização em um arquivo YAML.

    O exemplo a seguir cria um arquivo authz-policy-allow.yaml para a regra de encaminhamento LB_FORWARDING_RULE em uma região específica do Google Cloud . A política permite que clientes com endereços IP no intervalo 10.0.0.0/24 acessem 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
    EOF
    

    Substitua:

    • 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 como INTERNAL_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.
  2. 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á:

Conta de serviço

  1. Defina a política de autorização em um arquivo YAML.

    O exemplo a seguir cria um arquivo authz-policy-deny.yaml para a regra de encaminhamento LB_FORWARDING_RULE de 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ço my-sa-123@PROJECT_ID.iam.gserviceaccount.com para 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
    EOF
    

    Substitua:

    • LB_SCHEME: o esquema de balanceamento de carga. Para balanceadores de carga de aplicativo internos regionais e entre regiões, defina o esquema como INTERNAL_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.
  2. 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
    

    Substitua LOCATION pela região do Google Cloud .

Tag

  1. Defina a política de autorização em um arquivo YAML.

    O exemplo a seguir cria um arquivo authz-policy-allow.yaml para a regra de encaminhamento LB_FORWARDING_RULE de 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 segura TAG_VALUE_PERMANENT_ID acessem 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
    EOF
    

    Substitua:

    • LB_SCHEME: o esquema de balanceamento de carga. Para balanceadores de carga de aplicativo internos regionais e entre regiões, defina o esquema como INTERNAL_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.
  2. 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
    

    Substitua:

    • 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:

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.

  1. 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 protocolo ext_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
    EOF
    
  2. 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=global
    

    Substitua:

    • LB_SCHEME: o esquema de balanceamento de carga. Para balanceadores de carga de aplicativo externos globais, defina o esquema como EXTERNAL_MANAGED. Para balanceadores de carga de aplicativo internos entre regiões, defina o esquema como INTERNAL_MANAGED.
    • PROJECT_ID: o ID do seu projeto do Google Cloud .
  3. 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-ext para todo o tráfego no caminho do URL example.com/api/payments quando a solicitação contém um cabeçalho Authorization nã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"
    EOF
    

    Substitua:

    • LB_SCHEME: o esquema de balanceamento de carga. Para balanceadores de carga de aplicativo externos globais, defina o esquema como EXTERNAL_MANAGED. Para balanceadores de carga de aplicativo internos entre regiões, defina o esquema como INTERNAL_MANAGED.
    • PROJECT_ID: o ID do seu projeto do Google Cloud .
    • LB_FORWARDING_RULE: nome da regra de encaminhamento do balanceador de carga.
  4. 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.

  1. 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
    EOF
    

    Substitua:

    • 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 como INTERNAL_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.
  2. 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 serviço de back-end de chamada está configurado.

  3. 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-ext para todo o tráfego no caminho do URL example.com/api/payments quando a solicitação contém um cabeçalho Authorization nã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"
    EOF
    

    Substitua:

    • 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 como INTERNAL_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.
  4. 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.

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

  1. 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
    EOF
    

    Substitua:

    • 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.
  2. 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.

  3. 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"
    EOF
    

    Substitua:

    • 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.
  4. 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.

  1. 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: {}
    EOF
    

    Substitua:

    • LB_SCHEME: o esquema de balanceamento de carga. Para balanceadores de carga de aplicativo externos globais, defina o esquema como EXTERNAL_MANAGED. Para balanceadores de carga de aplicativo internos entre regiões, defina o esquema como INTERNAL_MANAGED.
    • PROJECT_ID: o ID do seu projeto do Google Cloud .
    • LB_FORWARDING_RULE: nome da regra de encaminhamento do balanceador de carga.
  2. 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.

  1. 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
    EOF
    

    Substitua:

    • 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 como INTERNAL_MANAGED.
  2. 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 a extensão de autorização está configurada.

  3. 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"
    EOF
    

    Substitua:

    • 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 como INTERNAL_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.
  4. 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.

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, statusDetails será definido como 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"
          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, proxyStatus será definido como error=\"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, statusDetails será definido como denied_by_authz_policy no registro, e o nome da política que negou a solicitação será registrado em policies. 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, proxyStatus será definido como error=\"http_request_error\"; details=\"denied_by_authz_policy\" e o nome da política será registrado em policies. 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á statusDetails no registro. A política que permitiu a solicitação também é registrada em policies. 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 proxyStatus no registro. A política que permitiu a solicitação também é registrada em policies. 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"
      }
    

A seguir