Coletar registros do F5 Distributed Cloud Services

Versão do analisador: 6.0

Compatível com:

Neste documento, explicamos como ingerir registros do serviço 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 APIs 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 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
  • Acesso privilegiado ao console do F5 Distributed Cloud
  • Permissões para criar objetos do Global Log Receiver no F5 Distributed Cloud

Criar um bucket do Google Cloud Storage

  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 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 o bucket do GCS à lista de permissões do firewall

  1. O receptor de registros global da 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 download do arquivo de chave JSON é feito 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 da nuvem distribuída da F5 em https://<tenant>.console.ves.volterra.io.
  2. Selecione o serviço Multi-Cloud Network Connect na página inicial.
  3. Acesse Gerenciar > Gerenciamento do site > Credenciais do Cloud.
  4. Clique em Adicionar credenciais do Cloud.
  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 do Cloud, 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 de chave JSON que você baixou 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 de registros global.
  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ção: registros de solicitação/resposta HTTP com usuário, caminho, método e códigos de resposta
    • Ocorrências 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ção de DNS: registros de consulta DNS
  6. No menu suspenso Seleção de mensagens de registro, selecione 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 de 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 do GCP Cloud, selecione as credenciais de nuvem que você criou anteriormente (por exemplo, gcp-chronicle-logs).

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

    • Opções de tempo limite do 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 definir um limite).
    • Bytes em lote: selecione Máximo de bytes 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 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 cinco minutos, novos arquivos gzip compactados são gravados na subpasta por hora.
    • Os arquivos estão no formato NDJSON (JSON delimitado por nova linha)
  5. Clique em um arquivo gzip para fazer o download 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 bucket do GCS. É necessário conceder a essa conta de serviço acesso ao bucket.

Encontrar o e-mail da conta de serviço

  1. Acesse Configurações > Gerenciamento de dados > Feeds. Se você estiver em uma plataforma somente SIEM, acesse Configurações > 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 Distributed Cloud da F5 como o Tipo de registro.
  7. Clique em Get Service Account. 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 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 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 nos últimos dias (o padrão é 180 dias).

    • Namespace do recurso: o namespace do recurso

    • Rótulos de ingestão: o rótulo que será aplicado aos eventos desse feed.

  11. Clique em Próxima.

  12. Revise a configuração do novo 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 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 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.

Tabela de mapeamento de UDM

Campo de registro Mapeamento de 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 Merged from bot_info_name_label (derived from 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 Mesclado 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 Defina como ALLOW se corresponder à permissão, BLOCK se corresponder à negação
gravidade, security_result.severity Defina como HIGH se houver erro/aviso, CRITICAL se for crítico, MEDIUM se for um aviso e LOW se for uma informação/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 float
longitude principal.location.region_longitude Convertido em float
req_params additional.fields Mesclado de about_req_params (derivado de req_params)
as_number additional.fields Mesclado de about_as_number (convertido em string de as_number)
x_forwarded_for intermediary.ip Mesclado se o IP for válido
x_forwarded_for security_result.about.resource.attribute.labels Mesclado 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 Mesclado de policy_label (derivado de policy_hit.policy)
policy_hit.policy_namespace additional.fields Mesclado 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 Mesclado 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 Mesclado 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 Mesclado de req_size_label (convertido em string de req_size)
rsp_code additional.fields Mesclado de rsp_code_label (convertido em string de rsp_code)
rsp_code_class additional.fields Mesclado de rsp_code_class_label (convertido em string de rsp_code_class)
rsp_size additional.fields Mesclado de rsp_size_label (convertido em 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 Mesclado 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 Mesclado se corresponder ao regex IPv4
host principal.ip, principal.asset.ip Mesclado se corresponder ao 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 Defina como HTTP se contiver HTTP, HTTPS se contiver HTTPS
rede principal.nat_ip Mesclado se corresponder ao regex IPv4
dst_ip target.ip, target.asset.ip Mesclado se corresponder ao 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 Mesclado de cluster_name_field (derivado de cluster_name)
domínio principal.administrative_domain Valor copiado diretamente
método network.http.method 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 Mesclado 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 Mesclado do user_ip extraído
Cookie additional.fields Mesclado do cookie (derivado do cookie em req_headers)
X-F5-Request-Id security_result.detection_fields Mesclado de x_f5_request_id (derivado de X-F5-Request-Id em req_headers)
X-Request-Id security_result.detection_fields Mesclado 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 Defina como NETWORK_CONNECTION se todos forem verdadeiros; STATUS_UPDATE se has_principal for verdadeiro; caso contrário, GENERIC_EVENT
metadata.vendor_name Defina 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 alterações
dst event.idm.read_only_udm.target.ip e event.idm.read_only_udm.target.asset.ip Mapeado do registro de alterações
has_sec_event event.idm.read_only_udm.additional.fields Mapeado do registro de alterações
app event.idm.read_only_udm.target.application Mapeado do registro de alterações
node_id event.idm.read_only_udm.additional.fields Mapeado do registro de alterações
sample_rate event.idm.read_only_udm.additional.fields Mapeado do registro de alterações
time_to_first_downstream_tx_byte event.idm.read_only_udm.additional.fields Mapeado do registro de alterações
time_to_first_upstream_rx_byte event.idm.read_only_udm.additional.fields Mapeado do registro de alterações
time_to_first_upstream_tx_byte event.idm.read_only_udm.additional.fields Mapeado do registro de alterações
time_to_last_downstream_tx_byte event.idm.read_only_udm.additional.fields Mapeado do registro de alterações
time_to_last_rx_byte event.idm.read_only_udm.additional.fields Mapeado do registro de alterações
time_to_last_upstream_rx_byte event.idm.read_only_udm.additional.fields Mapeado do registro de alterações
time_to_last_upstream_tx_byte event.idm.read_only_udm.additional.fields Mapeado do registro de alterações
timeseries_enabled event.idm.read_only_udm.additional.fields Mapeado do registro de alterações
sni event.idm.read_only_udm.additional.fields Mapeado do registro de alterações
terminated_time event.idm.read_only_udm.additional.fields Mapeado do registro de alterações
rtt_downstream_seconds event.idm.read_only_udm.additional.fields Mapeado do registro de alterações
rtt_upstream_seconds event.idm.read_only_udm.additional.fields Mapeado do registro de alterações
rsp_code_details event.idm.read_only_udm.additional.fields Mapeado do registro de alterações
authority event.idm.read_only_udm.additional.fields Mapeado do registro de alterações
connected_time event.idm.read_only_udm.additional.fields Mapeado do registro de alterações
req_id event.idm.read_only_udm.additional.fields Mapeado do registro de alterações
proxy_type event.idm.read_only_udm.additional.fields Mapeado do registro de alterações
vh_type event.idm.read_only_udm.additional.fields Mapeado do registro de alterações
dst_instance event.idm.read_only_udm.additional.fields Mapeado do registro de alterações
lb_port event.idm.read_only_udm.additional.fields Mapeado do registro de alterações
mtls event.idm.read_only_udm.additional.fields Mapeado do registro de alterações
ja4_tls_fingerprint event.idm.read_only_udm.additional.fields Mapeado do registro de alterações
duration_with_data_tx_delay event.idm.read_only_udm.additional.fields Mapeado do registro de alterações
dst_site event.idm.read_only_udm.additional.fields Mapeado do registro de alterações
protocol and scheme event.idm.read_only_udm.network.application_protocol Mapeado do registro de alterações
referer event.idm.read_only_udm.network.http.referral_url Mapeado do registro de alterações
tls_cipher_suite event.idm.read_only_udm.network.tls.cipher Mapeado do registro de alterações
tls_version event.idm.read_only_udm.network.tls.version Mapeado do registro de alterações
user_agent event.idm.read_only_udm.network.http.user_agent Mapeado do registro de alterações
user_agent event.idm.read_only_udm.network.http.parsed_user_agent Mapeado do registro de alterações
browser_type event.idm.read_only_udm.principal.browser.browser_type Mapeado do registro de alterações
content-type event.idm.read_only_udm.principal.process.file.mime_type Mapeado do registro de alterações
response_flags security_result.detection_fields Mapeado do registro de alterações
original_authority event.idm.read_only_udm.target.administrative_domain Mapeado do registro de alterações
country event.idm.read_only_udm.principal.location.country_or_region Mapeado do registro de alterações

Registro de alterações

Confira o registro de alterações deste analisador

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