Coletar registros do Google Cloud Secure Web Proxy

Compatível com:

Este documento explica como ingerir registros do Google Cloud Secure Web Proxy no Google Security Operations usando o Google Cloud Storage V2.

O proxy da Web seguro é um serviço que prioriza a nuvem e ajuda a proteger o tráfego da Web de saída (HTTP e HTTPS). Ele oferece uma solução de proxy gerenciado que permite políticas flexíveis e granulares com base em identidades de priorização da nuvem e aplicativos da Web. O proxy seguro da Web identifica o tráfego que não está em conformidade com a política e o registra no Cloud Logging. Assim, você pode monitorar o uso da Internet, descobrir ameaças à sua rede e responder a incidentes de segurança.

Antes de começar

Verifique se você atende os seguintes pré-requisitos:

  • Uma instância do Google SecOps
  • Um projeto do Google Cloud com a API Cloud Storage ativada
  • Permissões para criar e gerenciar buckets do GCS
  • Permissões para gerenciar políticas do IAM em buckets do GCS
  • O proxy da Web seguro está ativo e configurado no seu ambiente do Google Cloud
  • Acesso privilegiado ao Google Cloud e permissões adequadas para acessar os registros do Secure Web Proxy
  • Permissões para criar e gerenciar gravadores do Cloud Logging

Criar um bucket do Google Cloud Storage

Usando o console do Google Cloud

  1. Acesse o Console do Google Cloud.
  2. Selecione seu projeto ou crie um novo.
  3. No menu de navegação, acesse Cloud Storage > Buckets.
  4. Clique em Criar bucket.
  5. Informe os seguintes detalhes de configuração:

    Configuração Valor
    Nomeie seu bucket Insira um nome exclusivo globalmente, por exemplo, Google Cloud-swp-logs.
    Tipo de local Escolha com base nas suas necessidades (região, birregional, multirregional)
    Local Selecione o local (por exemplo, us-central1).
    Classe de armazenamento Padrão (recomendado para registros acessados com frequência)
    Controle de acesso Uniforme (recomendado)
    Ferramentas de proteção Opcional: ativar o controle de versões de objetos ou a política de retenção
  6. Clique em Criar.

Como usar a ferramenta de linha de comando gcloud

  • Como alternativa, crie um bucket usando o comando gcloud:

    gcloud storage buckets create gs://gcp-swp-logs \
        --location=us-central1 \
        --default-storage-class=STANDARD
    
    • Substitua:
      • gcp-swp-logs: o nome de bucket desejado (globalmente exclusivo).
      • us-central1: sua região preferida (por exemplo, us-central1, europe-west1).

Configurar o Cloud Logging para exportar registros do proxy seguro da Web para o GCS

O proxy seguro da Web registra automaticamente os registros de transações de proxy no Cloud Logging. Para exportar esses registros para o Cloud Storage, crie um coletor do Cloud Logging.

Usando o console do Google Cloud

  1. No Console do Google Cloud, acesse Logging > Roteador de registros.
  2. Clique em Criar coletor.
  3. Informe os seguintes detalhes de configuração:
    • Nome do coletor: insira um nome descritivo (por exemplo, swp-export-sink).
    • Descrição do coletor: descrição opcional.
  4. Clique em Próxima.
  5. Na seção Selecionar serviço do coletor:
    • Serviço de coletor: selecione Bucket do Cloud Storage.
    • Selecionar bucket do Cloud Storage: selecione gcp-swp-logs no menu suspenso.
  6. Clique em Próxima.
  7. Na seção Escolher registros para incluir no coletor, insira a seguinte consulta de filtro:

    logName="projects/<YOUR_PROJECT_ID>/logs/networkservices.googleapis.com/gateway_requests"
    
    • Substitua <YOUR_PROJECT_ID> pelo ID do projeto do Google Cloud.
  8. Clique em Próxima.

  9. Revise a configuração e clique em Criar coletor.

Depois de criar o coletor, o Cloud Logging vai mostrar a identidade do gravador (um e-mail de conta de serviço). Copie o e-mail da conta de serviço para a próxima etapa.

Como usar a ferramenta de linha de comando gcloud

  • Outra opção é criar um coletor usando o comando gcloud:

    gcloud logging sinks create swp-export-sink \
        storage.googleapis.com/gcp-swp-logs \
        --log-filter='logName="projects/<YOUR_PROJECT_ID>/logs/networkservices.googleapis.com/gateway_requests"'
    
    • Substitua:
      • swp-export-sink: o nome desejado do coletor.
      • gcp-swp-logs: o nome do bucket do GCS.
      • <YOUR_PROJECT_ID> pelo ID do projeto no Google Cloud.

Conceder permissões à conta de serviço do Cloud Logging

A conta de serviço de identidade do gravador de coletor do Cloud Logging precisa de permissões para gravar registros no bucket do GCS.

Usando o console do Google Cloud

  1. Acesse Cloud Storage > Buckets.
  2. Clique no nome do bucket (gcp-swp-logs).
  3. Acesse a guia Permissões.
  4. Clique em Conceder acesso.
  5. Informe os seguintes detalhes de configuração:
    • Adicionar principais: cole o e-mail da conta de serviço de identidade do gravador de coletor do Cloud Logging (por exemplo, serviceAccount:service-123456789@gcp-sa-logging.iam.gserviceaccount.com).
    • Atribuir papéis: selecione Administrador de objetos do Storage.
  6. Clique em Salvar.

Como usar a ferramenta de linha de comando gcloud

  • Outra opção é conceder permissões usando o comando gcloud:

    gcloud storage buckets add-iam-policy-binding gs://gcp-swp-logs \
        --member="serviceAccount:<LOGGING_SERVICE_ACCOUNT_EMAIL>" \
        --role="roles/storage.objectAdmin"
    
    • Substitua:
      • gcp-swp-logs: o nome do bucket.
      • <LOGGING_SERVICE_ACCOUNT_EMAIL>: o e-mail da conta de serviço da identidade do gravador de sinks do Cloud Logging.

Como usar a ferramenta de linha de comando gsutil (legado)

  • Atribua o papel de administrador de objetos à sua conta de serviço de geração de registros:

    gsutil iam ch serviceAccount:<LOGGING_SERVICE_ACCOUNT_EMAIL>:objectAdmin \
        gs://gcp-swp-logs
    

Verifique as permissões

  • Para verificar se as permissões foram concedidas corretamente:

    gcloud storage buckets get-iam-policy gs://gcp-swp-logs \
        --flatten="bindings[].members" \
        --filter="bindings.role:roles/storage.objectAdmin"
    

O e-mail da conta de serviço do Cloud Logging vai aparecer na saída.

Recuperar a conta de serviço do Google SecOps

O Google SecOps usa uma conta de serviço exclusiva para ler dados do seu bucket do GCS. Você precisa conceder a essa conta de serviço acesso ao seu bucket.

Configurar um feed no Google SecOps para ingerir registros do proxy seguro da Web do GCP

  1. Acesse Configurações do SIEM > Feeds.
  2. Clique em Adicionar novo feed.
  3. Clique em Configurar um único feed.
  4. No campo Nome do feed, insira um nome para o feed (por exemplo, GGoogle CloudCP Secure Web Proxy Logs).
  5. Selecione Google Cloud Storage V2 como o Tipo de origem.
  6. Selecione Proxy da Web seguro do GCP como o Tipo de registro.

  7. Clique em Receber conta de serviço. Um e-mail exclusivo da conta de serviço será exibido, por exemplo:

    chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com
    
  8. Copie esse endereço de e-mail para usar na próxima etapa.

  9. Clique em Próxima.

  10. Especifique valores para os seguintes parâmetros de entrada:

    • URL do bucket de armazenamento: insira o URI do bucket do GCS com o caminho do prefixo:
    gs://gcp-swp-logs/
    
    • Substitua:
      • gcp-swp-logs: o nome do bucket do GCS.
    • Opção de exclusão da fonte: selecione a opção de exclusão de acordo com sua preferência:

      • Nunca: nunca exclui arquivos após as transferências (recomendado para testes).
      • Excluir arquivos transferidos: exclui os arquivos após a transferência bem-sucedida.
      • Excluir arquivos transferidos e diretórios vazios: exclui arquivos e diretórios vazios após a transferência bem-sucedida.

    • Idade máxima do arquivo: inclui arquivos modificados no último número de dias. O padrão é de 180 dias.

    • Namespace do recurso: o namespace do recurso.

    • Rótulos de ingestão: o rótulo a ser aplicado aos eventos deste feed.

  11. Clique em Próxima.

  12. Revise a nova configuração do feed na tela Finalizar e clique em Enviar.

Conceder permissões do IAM à conta de serviço do Google SecOps

A conta de serviço do Google SecOps precisa do papel de Leitor de objetos do Storage no seu bucket do GCS.

Usando o console do Google Cloud

  1. Acesse Cloud Storage > Buckets.
  2. Clique no nome do bucket.
  3. Acesse a guia Permissões.
  4. Clique em Conceder acesso.
  5. Informe os seguintes detalhes de configuração:
    • Adicionar participantes: cole o e-mail da conta de serviço do Google SecOps.
    • Atribuir papéis: selecione Leitor de objetos do Storage.
  6. Clique em Salvar.

Como usar a ferramenta de linha de comando gcloud

  • Outra opção é conceder permissões usando o comando gcloud:

    gcloud storage buckets add-iam-policy-binding gs://gcp-swp-logs \
        --member="serviceAccount:<SECOPS_SERVICE_ACCOUNT_EMAIL>" \
        --role="roles/storage.objectViewer"
    
    • Substitua:
      • gcp-swp-logs: o nome do bucket.
      • <SECOPS_SERVICE_ACCOUNT_EMAIL>: o e-mail da conta de serviço do Google SecOps.

Como usar a ferramenta de linha de comando gsutil (legado)

  • Execute o comando a seguir para conceder à conta de serviço da SecOps permissões de leitor de objetos:

    gsutil iam ch serviceAccount:<SECOPS_SERVICE_ACCOUNT_EMAIL>:objectViewer \
        gs://gcp-swp-logs
    

Verifique as permissões

  • Para verificar se as permissões foram concedidas corretamente:

    gcloud storage buckets get-iam-policy gs://gcp-swp-logs \
        --flatten="bindings[].members" \
        --filter="bindings.role:roles/storage.objectViewer"
    

O e-mail da conta de serviço do Google SecOps vai aparecer na saída.

Tabela de mapeamento do UDM

Campo de registro Mapeamento do UDM Lógica
httpRequest.latency, jsonPayload.@type, logName additional.fields Mesclado com latency_label (chave "Latência de HTTPRequest", valor de latência), type_label (chave "Tipo de registro", valor de @type), logname (chave "Nome do registro", valor de logName)
receiveTimestamp metadata.collected_timestamp Analisado como carimbo de data/hora RFC3339
metadata.event_type Definido como NETWORK_HTTP se has_principal for true, has_target for true, protocol corresponder a (?i)http; NETWORK_CONNECTION se has_principal for true, has_target for true, network != ""; USER_LOGIN se has_principal for true, has_target for true, has_principal_user for true; STATUS_UPDATE se has_principal for true; GENERIC_EVENT caso contrário
insertId metadata.product_log_id Valor copiado diretamente
httpRequest.protocol network.application_protocol Protocolo extraído usando o padrão grok %{DATA:protocol}/%{INT:http_version}, definido se estiver em ["HTTP","HTTPS"]
httpRequest.protocol network.application_protocol_version Extraiu http_version usando o padrão grok %{DATA:protocol}/%{INT:http_version}
httpRequest.requestMethod network.http.method Valor copiado diretamente
httpRequest.userAgent network.http.parsed_user_agent Valor copiado diretamente, convertido em parseduseragent
httpRequest.status network.http.response_code Convertido para string e depois para número inteiro
httpRequest.userAgent network.http.user_agent Valor copiado diretamente
httpRequest.responseSize network.received_bytes Valor copiado diretamente, convertido em uinteger
httpRequest.requestSize network.sent_bytes Valor copiado diretamente, convertido em uinteger
httpRequest.serverIp principal.asset.ip IP extraído usando o padrão grok %{IP:server_ip}, definido se não estiver vazio
httpRequest.serverIp principal.ip IP extraído usando o padrão grok %{IP:server_ip}, definido se não estiver vazio
jsonPayload.enforcedGatewaySecurityPolicy.matchedRules[].action security_result.action Definido como ALLOW se rule.action == ALLOW, BLOCK se rule.action == DENIED
jsonPayload.enforcedGatewaySecurityPolicy.matchedRules[].action security_result.action_details Valor copiado diretamente de "rule.action"
jsonPayload.enforcedGatewaySecurityPolicy.requestWasTlsIntercepted, resource.labels.gateway_name, resource.labels.resource_container, resource.labels.gateway_type security_result.detection_fields Mesclado com tls_intercepted_label (chave "requestWasTlsIntercepted", valor de requestWasTlsIntercepted), gateway_name_label (chave "gateway-name", valor de gateway_name), resource_container_label (chave "resource_container", valor de resource_container), gateway_type_label (chave "gateway-type", valor de gateway_type)
jsonPayload.enforcedGatewaySecurityPolicy.matchedRules[].name security_result.rule_name Valor copiado diretamente
gravidade, security_result.severity Definido como CRITICAL se severity == CRITICAL; ERROR se severity == ERROR; HIGH se severity in [ALERT, EMERGENCY]; INFORMATIONAL se severity in [INFO, NOTICE]; LOW se severity == DEBUG; MEDIUM se severity == WARNING; UNKNOWN_SEVERITY else
jsonPayload.enforcedGatewaySecurityPolicy.hostname target.asset.hostname Valor copiado diretamente
httpRequest.remoteIp target.asset.ip IP extraído usando o padrão grok %{IP:remote_ip}, definido se não estiver vazio
jsonPayload.enforcedGatewaySecurityPolicy.hostname target.hostname Valor copiado diretamente
httpRequest.remoteIp target.ip IP extraído usando o padrão grok %{IP:remote_ip}, definido se não estiver vazio
resource.labels.location target.resource.attribute.cloud.availability_zone Valor copiado diretamente
resource.labels.network_name, resource.type target.resource.attribute.labels Mesclado com rc_network_name_label (chave "rc_network_name", valor de network_name), resource_type (chave "Resource Type", valor de resource.type)
httpRequest.requestUrl target.url Valor copiado diretamente

Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.