Coletar registros dos serviços do F5 Distributed Cloud

Versão do analisador:6.0

Compatível com:

Este documento explica como ingerir registros dos serviços F5 Distributed Cloud Services no Google Security Operations usando o Google Cloud Storage V2.

O F5 Distributed Cloud Services é uma plataforma de segurança, rede e gerenciamento de aplicativos baseada em SaaS que oferece infraestrutura em nuvem distribuída, entrega de aplicativos, segurança de API e recursos de firewall de aplicativos da Web em locais multicloud e de borda.

Antes de começar

Verifique se você tem os pré-requisitos a seguir:

  • Uma instância do Google SecOps
  • Um projeto na nuvem do Google Cloud com a API Storage ativada
  • Permissões para criar e gerenciar intervalos do GCS
  • Permissões para gerenciar políticas do IAM em buckets do GCS
  • Acesso privilegiado ao console do F5 Distributed Cloud
  • Permissões para criar objetos de receptor de registros globais no F5 Distributed Cloud

Criar um bucket do Google Cloud Storage

  1. Acesse o Console do Google Cloud.
  2. Selecione ou crie um projeto.
  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 globalmente exclusivo, por exemplo, f5-dcs-logs.
    Tipo de local Escolha de acordo com 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.

Configurar o F5 Distributed Cloud para exportar para o GCS

Adicionar bucket do GCS à lista de permissões do firewall

  1. O receptor de registros global do F5 Distributed Cloud exige que os seguintes intervalos de endereços IP sejam adicionados à lista de permissões do firewall:

    • 193.16.236.64/29
    • 185.160.8.152/29
  2. Se o bucket do GCS usar o VPC Service Controls ou regras de firewall, adicione esses intervalos de IP à lista de permissões.

Criar uma conta de serviço do Google Cloud para o F5 Distributed Cloud

  1. No console do Google Cloud, acesse IAM e administrador > Contas de serviço.
  2. Clique em Criar conta de serviço.
  3. Informe os seguintes detalhes de configuração:

    • Nome da conta de serviço: insira f5-dcs-log-writer (ou um nome descritivo).
    • Descrição da conta de serviço: insira Service account for F5 Distributed Cloud to write logs to GCS
  4. Clique em Criar e continuar.

  5. Na seção Conceder acesso a essa conta de serviço ao projeto:

    1. Clique em Selecionar papel.
    2. Pesquise e selecione Administrador de objetos do Storage.
  6. Clique em Continuar.

  7. Clique em Concluído.

Criar uma chave de conta de serviço

  1. Na lista Contas de serviço, clique na conta de serviço que você criou (por exemplo, f5-dcs-log-writer).
  2. Acesse a guia Chaves.
  3. Clique em Adicionar chave > Criar nova chave.
  4. Selecione JSON como o tipo de chave.
  5. Clique em Criar.
  6. O arquivo de chave JSON é baixado no seu computador.
  7. Salve esse arquivo com segurança. Você vai precisar dele nas próximas etapas.

Conceder permissões do IAM no bucket do GCS

  1. Acesse Cloud Storage > Buckets.
  2. Clique no nome do bucket (por exemplo, f5-dcs-logs).
  3. Acesse a guia Permissões.
  4. Clique em Conceder acesso.
  5. Informe os seguintes detalhes de configuração:
    • Adicionar principais: insira o e-mail da conta de serviço (por exemplo, f5-dcs-log-writer@PROJECT_ID.iam.gserviceaccount.com).
    • Atribuir papéis: selecione Administrador de objetos do Storage.
  6. Clique em Salvar.

Criar credenciais do Google Cloud no console do F5 Distributed Cloud

  1. Faça login no console do F5 Distributed Cloud em https://<tenant>.console.ves.volterra.io.
  2. Selecione o serviço Multi-Cloud Network Connect na página inicial.
  3. Acesse Gerenciar > Gerenciamento de sites > Credenciais da nuvem.
  4. Clique em Adicionar credenciais da nuvem.
  5. Na seção Metadados:
    • Nome: insira um nome descritivo (por exemplo, gcp-chronicle-logs).
    • Descrição (opcional): insira Cloud Storage credentials for Google SecOps log export
  6. Na seção Tipo de credenciais da nuvem, selecione Credenciais do GCP.
  7. Clique em Configurar no campo Credenciais do GCP.
  8. No menu suspenso Tipo de credencial, selecione Arquivo de credenciais da conta de serviço.
  9. Clique em Fazer upload do arquivo e selecione o arquivo da chave JSON baixado nas etapas anteriores.
  10. Clique em Aplicar.
  11. Clique em Salvar e sair.

Criar um receptor de registros global

  1. No console do F5 Distributed Cloud, verifique se você está no serviço Multi-Cloud Network Connect.
  2. Acesse Gerenciar > Gerenciamento de registros > Receptor global de registros.
  3. Clique em Adicionar receptor de registros global.
  4. Na seção Metadados:

    • Nome: insira um nome descritivo (por exemplo, chronicle-gcs-receiver).
    • Descrição (opcional): insira Global log receiver for Google SecOps SIEM
  5. No menu suspenso Tipo de registro, selecione os tipos de registro que você quer exportar:

    • Registros de solicitações: registros de solicitação/resposta HTTP com usuário, caminho, método e códigos de resposta.
    • Eventos de segurança: eventos de WAF, DDoS, proteção de API e defesa contra bots
    • Registros de auditoria: mudanças de configuração por APIs públicas
    • Registros de solicitações DNS: registros de consultas DNS
  6. No menu suspenso Seleção de mensagens de registro, escolha uma das seguintes opções:

    • Selecionar registros do namespace atual: envia registros apenas do namespace atual.
    • Selecionar registros de todos os namespaces: envia registros de todos os namespaces (recomendado para visibilidade abrangente).
    • Selecionar registros em namespaces específicos: envia registros de namespaces especificados. Clique em Adicionar item para adicionar nomes de namespaces.
  7. No menu suspenso Configuração do receptor, selecione Receptor do bucket do GCP.

  8. No campo Nome do bucket do GCP, insira o nome do bucket do GCS (por exemplo, f5-dcs-logs).

  9. No menu suspenso Credenciais da nuvem do GCP, selecione as credenciais da nuvem que você criou anteriormente (por exemplo, gcp-chronicle-logs).

  10. Opcional: expanda Mostrar campos avançados para configurar opções de lote:

    • Opções de tempo limite em lote: selecione Segundos de tempo limite e insira um valor (padrão: 300 segundos).
    • Máximo de eventos em lote: selecione Máximo de eventos e insira um valor entre 32 e 2.000 (deixe em branco para não ter limite).
    • Bytes do lote: selecione Bytes máximos e insira um valor entre 4096 e 1048576 (padrão: 10485760 bytes / 10 MB)
  11. Clique em Salvar e sair.

Testar a conexão

  1. Na lista Receptor de registros global, localize o receptor que você criou (por exemplo, chronicle-gcs-receiver).
  2. Clique nos três pontos (...) na coluna Ações.
  3. Selecione Testar conexão.
  4. Aguarde a conclusão do teste.
  5. Uma mensagem indicando que a conexão foi estabelecida vai aparecer.

Verificar os registros no bucket do GCS

  1. Acesse Cloud Storage > Buckets no console do GCP.
  2. Clique no nome do bucket (por exemplo, f5-dcs-logs).
  3. Verifique se os arquivos de registro estão sendo criados no bucket.
  4. O F5 Distributed Cloud organiza os registros na seguinte estrutura de pastas:

    YYYY/MM/DD/HH/
    
    • Uma pasta é criada para cada dia (AAAA/MM/DD)
    • Dentro de cada pasta de dia, uma subpasta é criada para cada hora (HH).
    • A cada 5 minutos, novos arquivos gzip compactados são gravados na subpasta horária.
    • Os arquivos estão no formato NDJSON (JSON delimitado por nova linha).
  5. Clique em um arquivo gzip para baixar e inspecionar o formato do registro.

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.

Receber o e-mail da conta de serviço

  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, F5 DCS Logs).
  5. Selecione Google Cloud Storage V2 como o Tipo de origem.
  6. Selecione Serviços de nuvem distribuída F5 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:

      gs://f5-dcs-logs/
      

      Substitua f5-dcs-logs pelo nome do seu 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.
      • Excluir arquivos transferidos e diretórios vazios: exclui arquivos e diretórios vazios após a transferência.

    • Idade máxima do arquivo: inclua arquivos modificados no último número de dias (o padrão é 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 Leitor de objetos do Storage no seu bucket do GCS.

  1. Acesse Cloud Storage > Buckets.
  2. Clique no nome do bucket (por exemplo, f5-dcs-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 do Google SecOps.
    • Atribuir papéis: selecione Leitor de objetos do Storage.
  6. Clique em Salvar.

Tabela de mapeamento de UDM

Campo de registro Mapeamento do UDM Lógica
_id metadata.product_log_id Valor copiado diretamente
src principal.namespace Valor copiado diretamente
kubernetes_labels_app target.resource.attribute.labels Mesclado de app_label (derivado de kubernetes_labels_app)
kubernetes_host target.hostname Valor copiado diretamente
kubernetes_container_name target.resource.product_object_id Valor copiado diretamente
bot_info.classification security_result.detection_fields Mesclado de bot_info_classification_label (derivado de bot_info.classification)
bot_info.name security_result.detection_fields Mesclado de bot_info_name_label (derivado de bot_info.name)
bot_info.type security_result.detection_fields Mesclado de bot_info_type_label (derivado de bot_info.type)
timestamp @timestamp Analisado usando o filtro de data com RFC 3339, UNIX, ISO8601
visitor_id security_result.detection_fields Unido de visitor_id_label (derivado de visitor_id)
tag security_result.detection_fields Mesclado de tag_label (derivado de tag)
ação security_result.action Definido como ALLOW se houver correspondência com permissão, BLOCK se houver correspondência com negação
gravidade, security_result.severity Definido como "ALTA" se houver erro/aviso; "CRÍTICA" se for crítica; "MÉDIA" se for um aviso; "BAIXA" se for uma informação.
gravidade, security_result.severity_details Valor copiado diretamente
api_endpoint target.labels Mesclado de api_endpoint_label (derivado de api_endpoint)
app_firewall_name principal.process.command_line Valor copiado diretamente
app_type security_result.detection_fields Mesclado de about_app_type (derivado de app_type)
as_org security_result.detection_fields Mesclado de about_as_org (derivado de as_org)
asn security_result.detection_fields Mesclado de about_asn (derivado de asn)
kubernetes.pod_id security_result.detection_fields Mesclado de about_pod_id (derivado de kubernetes.pod_id)
kubernetes.pod_name security_result.detection_fields Mesclado de about_pod_name (derivado de kubernetes.pod_name)
latitude principal.location.region_latitude Convertido em ponto flutuante
longitude principal.location.region_longitude Convertido em ponto flutuante
req_params additional.fields Mesclado de about_req_params (derivado de req_params)
as_number additional.fields Mesclado de about_as_number (convertido para string de as_number)
x_forwarded_for intermediary.ip Unidos se o IP for válido
x_forwarded_for security_result.about.resource.attribute.labels Unido de x_forwarded_for_label se não for IP
policy_hit.malicious_user_mitigate_action security_result.detection_fields Mesclado de malicious_user_label (derivado de policy_hit.malicious_user_mitigate_action)
policy_hit.policy security_result.about.resource.attribute.labels Unido de policy_label (derivado de policy_hit.policy)
policy_hit.policy_namespace additional.fields Unido de "policy_namespace_label" (derivado de "policy_hit.policy_namespace")
policy_hit.policy_rule security_result.rule_name Valor copiado diretamente
policy_hit.policy_rule_description security_result.description Valor copiado diretamente
policy_hit.policy_set target.resource.name Valor copiado diretamente
policy_hit.result additional.fields Combinado de result_label (derivado de policy_hit.result)
vhost_id security_result.detection_fields Mesclado de vhostlabel (derivado de vhost_id)
ID da mensagem security_result.detection_fields Mesclado de messageid_label (derivado de messageid)
sec_event_name security_result.detection_fields Mesclado de sec_event_name_label (derivado de sec_event_name)
sec_event_type security_result.detection_fields Mesclado de "sec_event_type_label" (derivado de "sec_event_type")
vh_name security_result.detection_fields Unido de vhost_name_label (derivado de vh_name)
tls_fingerprint security_result.detection_fields Mesclado de tls_fingerprint_label (derivado de tls_fingerprint)
tempo additional.fields Mesclado de time_label (derivado de time)
kubernetes.namespace_name additional.fields Mesclado de namespace_name_label (derivado de kubernetes.namespace_name)
src_instance additional.fields Mesclado de src_instance_label (derivado de src_instance)
violation_rating additional.fields Mesclado de "violation_rating_label" (derivado de "violation_rating")
req_size additional.fields Unido de req_size_label (convertido para string de req_size)
rsp_code additional.fields Mesclado de rsp_code_label (convertido para string de rsp_code)
rsp_code_class additional.fields Mesclado de rsp_code_class_label (convertido para string de rsp_code_class)
rsp_size additional.fields Mesclado de rsp_size_label (convertido para string de rsp_size)
original_path additional.fields Mesclado de "original_path_label" (derivado de "original_path")
req_path target.url Valor copiado diretamente
req_headers_size additional.fields Mesclado de "req_headers_size_label" (derivado de "req_headers_size")
recommended_action additional.fields Unido de "recommended_action_label" (derivado de "recommended_action")
enforcement_mode additional.fields Mesclado de "enforcement_mode_label" (derivado de "enforcement_mode")
src_ip principal.ip, principal.asset.ip Unidas se corresponderem à regex IPv4
host principal.ip, principal.asset.ip Unidas se corresponderem à regex IPv4
nome do host principal.hostname, principal.asset.hostname Valor copiado diretamente se não estiver vazio ou -
http_version network.application_protocol_version Valor copiado diretamente
http_version network.application_protocol Definido como HTTP se contiver HTTP, HTTPS se contiver HTTPS
rede principal.nat_ip Unidas se corresponderem à regex IPv4
dst_ip target.ip, target.asset.ip Unidas se corresponderem à regex IPv4
dst_port target.port Convertido para número inteiro
src_port principal.port Convertido para número inteiro
src_site additional.fields Mesclado de src_site_field (derivado de src_site)
site additional.fields Mesclado de site_field (derivado de site)
cluster_name additional.fields Unido de "cluster_name_field" (derivado de "cluster_name")
domínio principal.administrative_domain Valor copiado diretamente
método network.http.method O valor é copiado diretamente se não estiver vazio ou N/A
namespace target.namespace Valor copiado diretamente
cidade principal.location.city Valor copiado diretamente
stream security_result.detection_fields Unido de "stream_label" (derivado de "stream")
região principal.location.country_or_region Valor copiado diretamente
usuário principal.user.userid Extraído do usuário usando o padrão grok para user_id
user_ip target.ip, target.asset.ip Unido de user_ip extraído
Cookie additional.fields Unido do cookie (derivado de "Cookie" em "req_headers")
X-F5-Request-Id security_result.detection_fields Unido de x_f5_request_id (derivado de X-F5-Request-Id em req_headers)
X-Request-Id security_result.detection_fields Unido de request_id (derivado de X-Request-Id em req_headers)
security_result security_result Mesclado diretamente
has_network, has_principal, has_target metadata.event_type Definido como NETWORK_CONNECTION se tudo for verdadeiro; STATUS_UPDATE se has_principal for verdadeiro; caso contrário, GENERIC_EVENT
metadata.vendor_name Definido como "F5_DCS"
metadata.product_name Defina como "F5 DCS"
intermediário intermediário Mesclado diretamente
rsp_size event.idm.read_only_udm.network.received_bytes Mapeado do registro de mudanças
dst event.idm.read_only_udm.target.ip e event.idm.read_only_udm.target.asset.ip Mapeado do registro de mudanças
has_sec_event event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
app event.idm.read_only_udm.target.application Mapeado do registro de mudanças
node_id event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
sample_rate event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
time_to_first_downstream_tx_byte event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
time_to_first_upstream_rx_byte event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
time_to_first_upstream_tx_byte event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
time_to_last_downstream_tx_byte event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
time_to_last_rx_byte event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
time_to_last_upstream_rx_byte event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
time_to_last_upstream_tx_byte event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
timeseries_enabled event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
sni event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
terminated_time event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
rtt_downstream_seconds event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
rtt_upstream_seconds event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
rsp_code_details event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
authority event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
connected_time event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
req_id event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
proxy_type event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
vh_type event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
dst_instance event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
lb_port event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
mtls event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
ja4_tls_fingerprint event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
duration_with_data_tx_delay event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
dst_site event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
protocol and scheme event.idm.read_only_udm.network.application_protocol Mapeado do registro de mudanças
referer event.idm.read_only_udm.network.http.referral_url Mapeado do registro de mudanças
tls_cipher_suite event.idm.read_only_udm.network.tls.cipher Mapeado do registro de mudanças
tls_version event.idm.read_only_udm.network.tls.version Mapeado do registro de mudanças
user_agent event.idm.read_only_udm.network.http.user_agent Mapeado do registro de mudanças
user_agent event.idm.read_only_udm.network.http.parsed_user_agent Mapeado do registro de mudanças
browser_type event.idm.read_only_udm.principal.browser.browser_type Mapeado do registro de mudanças
content-type event.idm.read_only_udm.principal.process.file.mime_type Mapeado do registro de mudanças
response_flags security_result.detection_fields Mapeado do registro de mudanças
original_authority event.idm.read_only_udm.target.administrative_domain Mapeado do registro de mudanças
country event.idm.read_only_udm.principal.location.country_or_region Mapeado do registro de mudanças

Registro de alterações

Ver o registro de alterações deste analisador

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