Recolha registos do WAF da Akamai
Este documento explica como exportar e carregar registos do WAF da Akamai para o
Google Security Operations através do Google Cloud armazenamento ou do AWS S3.
O analisador processa os registos, suportando os formatos syslog e CEF. Extrai campos como endereços IP, URLs, métodos HTTP, códigos de resposta, agentes do utilizador e informações de regras de segurança, mapeando-os para o modelo de dados unificado (UDM) para uma representação consistente. O analisador também processa campos específicos da Akamai, como attackData
e clientReputation
, realizando as transformações de dados necessárias e enriquecendo a saída do UDM.
Antes de começar
Certifique-se de que tem os seguintes pré-requisitos:
- Instância do Google SecOps
- Acesso privilegiado ao Google Cloud ou à AWS
- Acesso privilegiado à Akamai
Exportar e carregar registos do WAF da Akamai a partir do Cloud Storage
Esta secção descreve o passo inicial do processo: configurar o armazenamento necessário para os registos da WAF da Akamai.
Crie um Google Cloud contentor de armazenamento
- Inicie sessão na Google Cloud consola.
Aceda à página Contentores do Cloud Storage.
Clique em Criar.
Na página Criar um contentor, introduza as informações do contentor. Após cada um dos passos seguintes, clique em Continuar para avançar para o passo seguinte:
Na secção Começar, faça o seguinte:
- Introduza um nome único que cumpra os requisitos do nome do contentor (por exemplo,
akamai-waf-logs
). - Para ativar o espaço de nomes hierárquico, clique na seta de expansão para expandir a secção Otimizar para cargas de trabalho orientadas para ficheiros e com grande volume de dados e, de seguida, selecione Ativar espaço de nomes hierárquico neste contentor.
- Para adicionar uma etiqueta de grupo, clique na seta de expansão para expandir a secção Etiquetas.
- Clique em Adicionar etiqueta e especifique uma chave e um valor para a etiqueta.
- Introduza um nome único que cumpra os requisitos do nome do contentor (por exemplo,
Na secção Escolha onde quer armazenar os seus dados, faça o seguinte:
- Selecione um Tipo de localização.
- Use o menu pendente do tipo de localização para selecionar uma Localização onde os dados de objetos no seu contentor vão ser armazenados permanentemente.
- Para configurar a replicação entre contentores, expanda a secção Configurar replicação entre contentores.
Na secção Escolha uma classe de armazenamento para os seus dados, selecione uma classe de armazenamento predefinida para o contentor ou selecione Autoclass para a gestão automática da classe de armazenamento dos dados do seu contentor.
Na secção Escolha como controlar o acesso a objetos, selecione não para aplicar a prevenção de acesso público e selecione um modelo de controlo de acesso para os objetos do seu contentor.
Na secção Escolha como proteger os dados de objetos, faça o seguinte:
- Selecione qualquer uma das opções em Proteção de dados que quer definir para o seu contentor.
- Para escolher como os dados de objetos vão ser encriptados, clique na seta de expansão com a etiqueta Encriptação de dados e selecione um Método de encriptação de dados.
Clique em Criar.
Configure autorizações para o Cloud Storage
Aceda à página Criar conta de serviço.
Selecione um projeto do Google Cloud.
Introduza um nome da conta de serviço a apresentar na Google Cloud consola.
Clique em Criar e continuar.
Conceda a função roles/storage.admin no contentor.
Clique em Concluído para terminar de criar a conta de serviço.
Crie e transfira o Google Cloud ficheiro de chave da conta de serviço
Aceda à página Contas de serviço.
Selecione um projeto Google Cloud.
Clique no endereço de email da conta de serviço recém-criada.
Clique no separador Chaves.
Clique no menu Adicionar chave e, de seguida, selecione Criar nova chave.
Selecione JSON como o tipo de chave e clique em Criar.
- Se clicar em Criar, transfere um ficheiro de chave da conta de serviço. Depois de transferir o ficheiro de chave, não o pode transferir novamente.
- A chave transferida tem o seguinte formato, em que
PRIVATE_KEY
é a parte privada do par de chaves pública/privada.
Configure o WAF da Akamai para enviar registos para o Cloud Storage
- Inicie sessão no Akamai Control Center.
- Aceda à secção Segurança.
- Selecione Registos.
- Configure um novo envio de registos:
- Origem do registo: selecione a configuração da WAF.
- Destino: selecione Google Cloud Storage.
- Nome a apresentar: introduza uma descrição do nome exclusivo.
- Contentor: especifique o nome do contentor do Cloud Storage que criou (por exemplo,
gs://akamai-waf-logs
). - ID do projeto: introduza o ID exclusivo do seu Google Cloud projeto.
- Nome da conta de serviço: introduza o nome da conta de serviço que criou anteriormente.
- Chave privada: introduza o valor private_key da chave JSON que gerou e transferiu anteriormente. (Deve introduzir a chave privada no formato PEM com símbolos de quebra (\n), por exemplo,
-----BEGIN PRIVATE KEY-----\nprivate_key\n-----END PRIVATE KEY-----\n
) - Formato do registo: escolha o formato do registo pretendido (por exemplo, JSON).
- Frequência de envio: selecione a frequência pretendida para a entrega de registos (por exemplo,
every 60 seconds
).
Clique em Validar e guardar para validar a ligação ao destino e guardar os detalhes que indicou.
Clique em Seguinte para aceder ao separador Resumo.
Configure feeds
Para configurar um feed, siga estes passos:
- Aceda a Definições do SIEM > Feeds.
- Clique em Adicionar novo feed.
- Na página seguinte, clique em Configurar um único feed.
- No campo Nome do feed, introduza um nome para o feed (por exemplo, Registos da WAF da Akamai).
- Selecione Google Cloud Storage como o Tipo de origem.
- Selecione Akamai WAF como o Tipo de registo.
- Clique em Obter conta de serviço como a conta de serviço do Chronicle.
- Clicar em Seguinte.
Especifique valores para os seguintes parâmetros de entrada:
- URI do contentor de armazenamento: Google Cloud URL do contentor de armazenamento (por exemplo,
gs://akamai-waf-logs
). - O URI é um: selecione Diretório que inclui subdiretórios.
- Opções de eliminação de origens: selecione a opção de eliminação de acordo com a sua preferência.
- URI do contentor de armazenamento: Google Cloud URL do contentor de armazenamento (por exemplo,
Clicar em Seguinte.
Reveja a nova configuração do feed no ecrã Finalizar e, de seguida, clique em Enviar.
Exporte e carregue registos do WAF da Akamai a partir do AWS S3
Esta secção explica os passos iniciais da configuração do seu contentor do Amazon S3 para receber e armazenar registos do Akamai WAF.
Configure o contentor do Amazon S3
- Crie um contentor do Amazon S3 seguindo este manual do utilizador: Criar um contentor.
- Guarde o Nome e a Região do contentor para referência futura.
- Crie um utilizador seguindo este guia do utilizador: criar um utilizador do IAM.
- Selecione o utilizador criado.
- Selecione o separador Credenciais de segurança.
- Clique em Criar chave de acesso na secção Chaves de acesso.
- Selecione Serviço de terceiros como Exemplo de utilização.
- Clicar em Seguinte.
- Opcional: adicione a etiqueta de descrição.
- Clique em Criar chave de acesso.
- Clique em Transferir ficheiro CSV para guardar a chave de acesso e a chave de acesso secreta para referência futura.
- Clique em Concluído.
- Selecione o separador Autorizações.
- Clique em Adicionar autorizações na secção Políticas de autorizações.
- Selecione Adicionar autorizações.
- Selecione Anexar políticas diretamente.
- Pesquise a política AmazonS3FullAccess.
- Selecione a política.
- Clicar em Seguinte.
- Clique em Adicionar autorizações.
Configure o Akamai WAF para enviar registos para o Amazon S3
- Inicie sessão no Akamai Control Center.
- Aceda à secção Segurança.
- Selecione Registos.
Configure uma nova entrega de registos:
- Origem do registo: selecione a configuração da WAF.
- Destino: escolha Amazon S3.
- Contentor do S3: especifique o nome do contentor do S3 que criou.
- Região: selecione a região da AWS onde se encontra o seu contentor do S3.
- ID da chave de acesso e chave de acesso secreta: faculte as credenciais que gerou.
- Formato do registo: escolha o formato do registo pretendido (por exemplo, JSON).
Frequência de entrega: selecione a frequência pretendida para a entrega de registos (por exemplo, a cada 5 minutos).
Valide a entrega de registos:
- Após configurar o LDS, monitorize o contentor S3 para ficheiros de registo recebidos.
Configure feeds a partir de Definições de SIEM > Feeds através do AWS S3
Para configurar um feed, siga estes passos:
- Aceda a Definições do SIEM > Feeds.
- Clique em Adicionar novo feed.
- Na página seguinte, clique em Configurar um único feed.
- No campo Nome do feed, introduza um nome para o feed (por exemplo, Registos da WAF da Akamai).
- Selecione Amazon S3 como o Tipo de origem.
- Selecione Akamai WAF como o Tipo de registo.
- Clicar em Seguinte.
Especifique valores para os seguintes parâmetros de entrada:
- Região: a região onde o contentor do Amazon S3 está localizado.
- URI do S3: o URI do contentor.
s3:/BUCKET_NAME
Substitua o seguinte:BUCKET_NAME
: o nome do segmento.
- URI is a: selecione URI TYPE de acordo com a configuração da stream de registos: Single file | Directory | Directory which includes subdirectories.
- Opções de eliminação de origens: selecione a opção de eliminação de acordo com a sua preferência.
- ID da chave de acesso: a chave de acesso do utilizador com acesso ao contentor do S3.
- Chave de acesso secreta: a chave secreta do utilizador com acesso ao contentor do S3.
Clicar em Seguinte.
Reveja a nova configuração do feed no ecrã Finalizar e, de seguida, clique em Enviar.
Tabela de mapeamento do UDM
Campo de registo (ascendente) | Mapeamento de UDM | Lógica |
---|---|---|
attackData.clientIP |
principal.ip , principal.asset.ip |
Endereço IP do cliente que inicia o pedido. Extraído do campo attackData.clientIP nos registos akamai_siem. |
attackData.configId |
metadata.product_log_id |
ID de configuração de segurança. Extraído do campo attackData.configId nos registos akamai_siem. Também adicionado como detection_field no objeto security_result. |
attackData.policyId |
N/A | Usado na lógica do analisador para preencher security_result.summary com o valor PolicyId:[value] . |
attackData.ruleActions |
security_result.action , security_result.action_details |
Ações realizadas com base na regra acionada. Extraído do campo attackData.ruleActions nos registos akamai_siem. "deny" é mapeado para BLOCK. Os outros valores ("alert", "monitor", "allow", "tarpit") são mapeados para ALLOW. O valor original também é armazenado em action_details . |
attackData.ruleData |
security_result.detection_fields |
Dados associados à regra acionada. Extraído do campo attackData.ruleData nos registos akamai_siem. Foi adicionado a security_result.detection_fields com a chave "RuleData". |
attackData.ruleMessages |
security_result.threat_name |
Mensagens associadas à regra acionada. Extraído do campo attackData.ruleMessages nos registos akamai_siem. |
attackData.ruleSelectors |
security_result.detection_fields |
Seletores associados à regra acionada. Extraído do campo attackData.ruleSelectors nos registos akamai_siem. Foi adicionado a security_result.detection_fields com a chave "RuleSelector". |
attackData.ruleTags |
security_result.category_details |
Etiquetas associadas à regra acionada. Extraído do campo attackData.ruleTags nos registos akamai_siem. |
attackData.ruleVersions |
security_result.detection_fields |
Versões das regras acionadas. Extraído do campo attackData.ruleVersions nos registos akamai_siem. Adicionado a security_result.detection_fields com a chave "Rule Version". |
clientReputation |
principal.labels |
Informações de reputação do cliente. Extraído do campo clientReputation nos registos akamai_siem. Adicionado como uma etiqueta ao principal com a chave "reputation". |
cliIP , cli_ip , principal_ip |
principal.ip , principal.asset.ip |
Endereço IP do cliente. Extraído de cliIP , cli_ip ou principal_ip , consoante o formato do registo. |
cp |
additional.fields |
Código de CP. Extraído do campo cp . Adicionado a additional.fields com a chave "cp". |
eventId |
metadata.product_log_id |
ID do evento. Extraído do campo eventId . |
eventTime , log_date |
metadata.event_timestamp |
Data/hora do evento. Extraído de eventTime ou analisado a partir de log_date , consoante o formato do registo. |
eventType.eventDefinition.eventDefinitionId |
target.resource.product_object_id |
ID da definição do evento. Extraído de eventType.eventDefinition.eventDefinitionId . |
eventType.eventDefinition.eventDescription |
metadata.description |
Descrição do evento. Extraído de eventType.eventDefinition.eventDescription . |
eventType.eventDefinition.eventName |
metadata.product_event_type |
Nome do evento. Extraído de eventType.eventDefinition.eventName . |
eventType.eventTypeId |
additional.fields |
ID do tipo de evento. Extraído de eventType.eventTypeId . Adicionado a additional.fields com a chave "eventTypeId". |
eventType.eventTypeName |
additional.fields |
Nome do tipo de evento. Extraído de eventType.eventTypeName . Adicionado a additional.fields com a chave "eventTypeName". |
format |
N/A | Usado pelo analisador para determinar o formato do registo. |
geo.asn |
principal.location.name |
Número do sistema autónomo (ASN). Extraído de geo.asn ou AkamaiSiemASN , consoante o formato do registo. O valor tem o prefixo "ASN ". |
geo.city |
principal.location.city |
Cidade. Extraído de geo.city ou AkamaiSiemCity , consoante o formato do registo. |
geo.country |
principal.location.country_or_region |
País. Extraído de geo.country ou AkamaiSiemContinent , consoante o formato do registo. |
httpMessage.bytes |
network.sent_bytes |
Bytes enviados na mensagem HTTP. Extraído de httpMessage.bytes . |
httpMessage.host |
target.hostname , target.asset.hostname |
Nome do anfitrião. Extraído de httpMessage.host ou reqHost , consoante o formato do registo. |
httpMessage.method |
network.http.method |
Método HTTP. Extraído de httpMessage.method , network_http_method ou reqMethod , consoante o formato do registo. Convertido em maiúsculas. |
httpMessage.path |
target.url |
Caminho do pedido. Extraído de httpMessage.path , target_url ou reqPath , consoante o formato do registo. Se httpMessage.query estiver presente, é anexado ao caminho com um separador "?". |
httpMessage.port |
target.port |
Port. Extraído de httpMessage.port ou reqPort , consoante o formato do registo. |
httpMessage.protocol |
N/A | Usado pelo analisador para determinar o protocolo. |
httpMessage.query |
N/A | Usado na lógica do analisador para anexar a httpMessage.path , se estiver presente. |
httpMessage.requestId |
network.session_id |
ID do pedido. Extraído de httpMessage.requestId ou reqId , consoante o formato do registo. |
httpMessage.requestHeaders , AkamaiSiemRequestHeaders |
additional.fields |
Cabeçalhos dos pedidos. Extraído de httpMessage.requestHeaders ou AkamaiSiemRequestHeaders , consoante o formato do registo. Adicionado a additional.fields com a chave "AkamaiSiemRequestHeaders". |
httpMessage.responseHeaders , AkamaiSiemResponseHeaders |
additional.fields |
Cabeçalhos das respostas. Extraído de httpMessage.responseHeaders ou AkamaiSiemResponseHeaders , consoante o formato do registo. Adicionado a additional.fields com a chave "AkamaiSiemResponseHeaders". |
httpMessage.status , AkamaiSiemResponseStatus , network_http_response_code , statusCode |
network.http.response_code |
Código da resposta HTTP. Extraído de httpMessage.status ou AkamaiSiemResponseStatus ou network_http_response_code ou statusCode , consoante o formato do registo. |
httpMessage.tls , AkamaiSiemTLSVersion , tlsVersion |
network.tls.version |
Versão de TLS. Extraído de httpMessage.tls , AkamaiSiemTLSVersion ou tlsVersion , consoante o formato do registo. |
httpMessage.useragent , network_http_user_agent , UA , useragent |
network.http.user_agent |
Agente do utilizador. Extraído de httpMessage.useragent ou network_http_user_agent ou UA ou useragent , consoante o formato do registo. |
log_description |
metadata.description |
Descrição do registo. Extraído de log_description . |
log_rule |
security_result.rule_name |
Regra de registo. Extraído de log_rule . |
message |
N/A | A mensagem de registo não processada. Usado pelo analisador para várias extrações. |
network_http_referral_url |
network.http.referral_url |
URL de referência HTTP. Extraído de network_http_referral_url . |
proto |
N/A | Usado na lógica do analisador para preencher security_result.summary se attackData.policyId não estiver presente. |
reqHost |
target.hostname , target.asset.hostname |
Pedir anfitrião. Extraído de reqHost . |
reqId |
metadata.product_log_id , network.session_id |
ID do pedido. Extraído de reqId . |
reqMethod |
network.http.method |
Método de pedido. Extraído de reqMethod . |
reqPath |
target.url |
Caminho do pedido. Extraído de reqPath . |
reqPort |
target.port |
Peça a portabilidade. Extraído de reqPort . |
rspContentType |
target.file.mime_type |
Tipo de conteúdo da resposta. Extraído de rspContentType . |
securityRules |
security_result.rule_name , security_result.about.resource.attribute.labels |
Regras de segurança. Extraído de securityRules . A primeira parte é mapeada para rule_name e o resto é adicionado como etiquetas com as chaves "non_deny_rules" e "deny_rule_format". |
statusCode |
network.http.response_code |
Código de estado. Extraído de statusCode . |
state |
principal.location.state , target.user.personal_address.state |
Estado. Extraído de state . |
tlsVersion |
network.tls.version |
Versão de TLS. Extraído de tlsVersion . |
type |
metadata.product_event_type |
Tipo de evento. Extraído de type . |
UA |
network.http.user_agent |
Agente do utilizador. Extraído de UA . |
version |
metadata.product_version , principal.asset.software.version |
Versão. Extraído de version . |
N/A | metadata.event_timestamp |
A data/hora do evento é derivada do campo _ts nos registos akamai_lds, do campo httpMessage.start nos registos akamai_siem ou do campo log_date noutros formatos. |
N/A | metadata.vendor_name |
Codificado de forma rígida para "Akamai". |
N/A | metadata.product_name |
Codificado de forma rígida para "Kona". |
N/A | metadata.log_type |
Codificado de forma rígida para "AKAMAI_WAF". |
N/A | network.application_protocol |
Definido como "HTTP" para registos akamai_siem e akamai_lds, ou "DNS" para outros formatos. |
N/A | security_result.severity |
Defina como MÉDIO para a ação "alerta", CRÍTICO para a ação "recusar" e ALTO para outras ações. |
N/A | event.idm.read_only_udm.metadata.event_type |
Definido como "NETWORK_HTTP" para a maioria dos formatos de registo, "GENERIC_EVENT" para eventos com campos eventId ou eventData , ou "STATUS_UPDATE" para eventos com cli_ip ou p_ip , mas sem reqHost . |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais da Google SecOps.