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/). Este URL tem de terminar com uma barra invertida (/). - 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 o seu contentor do S3 está localizado.
- 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_NAMESubstitua o seguinte:BUCKET_NAME: o nome do segmento.
- O URI é um: selecione o TIPO DE URI de acordo com a configuração da stream de registos: Ficheiro único | Diretório | 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.
- 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 como "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.