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.

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

  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: o nome da regra de encaminhamento do balanceador de carga.
  2. 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

  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 .
    • LB_FORWARDING_RULE: o nome da regra de encaminhamento do balanceador de carga.
  2. 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

  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 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 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 Google Cloud região.
    • LB_FORWARDING_RULE: nome da regra de encaminhamento do balanceador de carga.
  2. 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:

  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 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 Google Cloud específica. 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 Google Cloud região.
    • LB_FORWARDING_RULE: nome da regra de encaminhamento do balanceador de carga.
  2. 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:

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 está configurada para negar solicitações de um recurso 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 Google Cloud região.
    • LB_FORWARDING_RULE: nome da regra de encaminhamento do balanceador de carga.
  2. 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
    

    Substitua LOCATION pela sua Google Cloud região.

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 permite apenas solicitações originadas de um recurso Google Cloud , como uma VM do Compute Engine, com um valor de tag seguroTAG_VALUE_PERMANENT_ID para 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
    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 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.
  2. 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
    

    Substitua:

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

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.

  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 oferece suporte ao 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 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.
  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 Google Cloud em que o serviço de back-end de callout 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 Google Cloud região.
    • 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 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=LOCATION
    

    Substitua 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

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

    Substitua:

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

  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 Google Cloud região.
    • 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 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.

  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 Google Cloudem 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 Google Cloud região.
    • LB_FORWARDING_RULE: nome da regra de encaminhamento do balanceador de carga.
  4. 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=LOCATION
    

    Substitua 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, 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