Coletar registros do Google Cloud Secure Web Proxy
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
- Acesse o Console do Google Cloud.
- Selecione seu projeto ou crie um novo.
- No menu de navegação, acesse Cloud Storage > Buckets.
- Clique em Criar bucket.
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 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).
- Substitua:
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
- No Console do Google Cloud, acesse Logging > Roteador de registros.
- Clique em Criar coletor.
- 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.
- Nome do coletor: insira um nome descritivo (por exemplo,
- Clique em Próxima.
- 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-logsno menu suspenso.
- Clique em Próxima.
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.
- Substitua
Clique em Próxima.
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.
- Substitua:
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
- Acesse Cloud Storage > Buckets.
- Clique no nome do bucket (
gcp-swp-logs). - Acesse a guia Permissões.
- Clique em Conceder acesso.
- 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.
- Adicionar principais: cole o e-mail da conta de serviço de identidade do gravador de coletor do Cloud Logging (por exemplo,
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.
- Substitua:
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
- Acesse Configurações do SIEM > Feeds.
- Clique em Adicionar novo feed.
- Clique em Configurar um único feed.
- No campo Nome do feed, insira um nome para o feed (por exemplo,
GGoogle CloudCP Secure Web Proxy Logs). - Selecione Google Cloud Storage V2 como o Tipo de origem.
Selecione Proxy da Web seguro do GCP como o Tipo de registro.
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.comCopie esse endereço de e-mail para usar na próxima etapa.
Clique em Próxima.
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.
Clique em Próxima.
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
- Acesse Cloud Storage > Buckets.
- Clique no nome do bucket.
- Acesse a guia Permissões.
- Clique em Conceder acesso.
- 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.
- 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.
- Substitua:
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.