Recolha Google Cloud registos do Compute
Este documento explica como configurar a Google Cloud exportação de registos de computação para o Google Security Operations através do Cloud Storage. O analisador extrai campos, normaliza o campo de mensagem e mapeia os dados extraídos para o esquema do modelo de dados unificado (UDM) para uma representação consistente de eventos de segurança. Processa vários formatos de registos, incluindo mensagens semelhantes a syslog e pares de chave-valor, e categoriza eventos com base em campos extraídos, como type e action.
Antes de começar
Certifique-se de que tem os seguintes pré-requisitos:
- Instância do Google SecOps.
- O Compute está configurado e ativo no seu Google Cloud ambiente.
- Acesso privilegiado a Google Cloud.
Crie um contentor do Google Cloud Storage
- Inicie sessão na Google Cloud consola.
Aceda à página Contentores do Cloud Storage.
Clique em Criar.
Na página Criar um depósito, introduza as informações do depósito. 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 exclusivo que cumpra os requisitos de nome do contentor; por exemplo, compute-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.
Na secção Escolha onde quer armazenar os seus dados, faça o seguinte:
Selecione um Tipo de localização.
- Use o menu de 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 a Google Cloud exportação de registos do Compute
- Na Google Cloud Console, aceda a Logging > Router de registos.
- Clique em Criar destino.
- Indique os seguintes detalhes de configuração:
- Nome do destino: introduza um nome significativo (por exemplo,
Compute-Logs-Sink
). - Destino da sincronização: selecione Cloud Storage.
- Contentor do Cloud Storage: introduza o URI do contentor (por exemplo,
gs://compute-logs/compute-logs/
).
- Nome do destino: introduza um nome significativo (por exemplo,
Na secção Criar filtro de inclusão, configure o filtro de registo para capturar registos do Google Cloud Compute através de um ou mais dos seguintes padrões:
Filtro de tipo de recurso (obrigatório – escolha um):
Para registos de instâncias de VM apenas:
resource.type="gce_instance"
Para todos os recursos relacionados com o GCE (instâncias de VM, sub-redes e firewalls):
resource.type=("gce_instance" OR "gce_subnetwork" OR "gce_network" OR "gce_firewall_rule")
Tipos de registos específicos (opcional: adicione conforme necessário):
Para registos de auditoria (operações de instâncias, alterações de configuração):
resource.type="gce_instance" logName:"cloudaudit.googleapis.com/activity"
Para os registos de fluxo da VPC (tráfego de rede):
resource.type="gce_subnetwork" logName:"vpc_flows"
Para registos de firewall (ligações permitidas/recusadas):
resource.type="gce_subnetwork" logName:"compute.googleapis.com/firewall"
Para registos da consola série:
resource.type="gce_instance" logName:"serialconsole.googleapis.com"
Filtros relacionados com a rede (opcional: adicione conforme necessário):
Filtre por detalhes da ligação (IPs de origem/destino, portas):
jsonPayload.connection.dest_ip:* OR jsonPayload.connection.src_ip:*
Filtre por detalhes da instância:
jsonPayload.dest_instance.project_id:* OR jsonPayload.src_instance.project_id:*
Filtre por ações de segurança:
jsonPayload.rule_details.action=("ALLOW" OR "BLOCK")
Exemplo: filtro completo para registo abrangente de computação:
(resource.type="gce_instance" OR resource.type="gce_subnetwork") AND ( logName:"cloudaudit.googleapis.com/activity" OR logName:"vpc_flows" OR logName:"compute.googleapis.com/firewall" OR jsonPayload.connection.dest_ip:* OR jsonPayload.connection.src_ip:* )
Clique em Criar destino.
Configure autorizações para o Cloud Storage
- Aceda a IAM > IAM e administrador > Contas de serviço.
- Encontre a conta de serviço do Cloud Logging; por exemplo, service-account@logging.iam.gserviceaccount.com.
- Atribua-lhe a função roles/storage.admin no contentor.
Configure feeds
Existem dois pontos de entrada diferentes para configurar feeds na plataforma Google SecOps:
- Definições do SIEM > Feeds > Adicionar novo
- Content Hub > Pacotes de conteúdo > Começar
Como configurar o Google Cloud feed de cálculo
- Clique no pacote Google Cloud Compute platform.
- Localize o tipo de registo GCP Compute Feed e clique em Adicionar novo feed.
Especifique valores para os seguintes campos:
- Tipo de origem: Google Cloud Storage V2.
- URI do contentor de armazenamento: URL do contentor do Cloud Storage; por exemplo,
gs://compute-context-logs/
. Este URL tem de terminar com uma barra invertida (/). Opção de eliminação da origem: selecione a opção de eliminação de acordo com a sua preferência.
Idade máxima do ficheiro: inclua ficheiros modificados no número de dias mais recente. A predefinição é 180 dias.
Conta de serviço do Chronicle: copie a conta de serviço. Precisa desta conta para adicionar autorizações no contentor para que o Google SecOps possa ler ou eliminar dados no contentor.
Opções avançadas
- Nome do feed: um valor pré-preenchido que identifica o feed.
- Espaço de nomes do recurso: espaço de nomes associado ao feed.
- Etiquetas de carregamento: etiquetas aplicadas a todos os eventos deste feed.
Clique em Criar feed.
Para mais informações sobre a configuração de vários feeds para diferentes tipos de registos nesta família de produtos, consulte o artigo Configure feeds por produto.
Tabela de mapeamento da UDM
Campo de registo | Mapeamento do UDM | Lógica |
---|---|---|
addr | read_only_udm.principal.ip | Unido à lista de endereços IP principal se o campo não estiver vazio ou for "?". |
jsonPayload.connection.dest_ip | read_only_udm.target.ip | Unido à lista de endereços IP de destino, se o campo existir. |
jsonPayload.connection.dest_port | read_only_udm.target.port | Convertido em string e, em seguida, em número inteiro e mapeado se não ocorrerem erros durante a conversão. |
jsonPayload.connection.protocol | read_only_udm.network.ip_protocol | Convertido em string e, em seguida, em número inteiro. Usado para determinar o protocolo IP (TCP, UDP, etc.) através de uma tabela de pesquisa e mapeado se não ocorrerem erros durante a conversão. |
jsonPayload.connection.src_ip | read_only_udm.principal.ip | Unido à lista de endereços IP principal, se o campo existir. |
jsonPayload.connection.src_port | read_only_udm.principal.port | Convertido em string e, em seguida, em número inteiro e mapeado se não ocorrerem erros durante a conversão. |
jsonPayload.dest_instance.project_id | read_only_udm.target.resource.product_object_id | Mapeado condicionalmente se jsonPayload.dest_vpc.project_id existir. |
jsonPayload.dest_instance.region | read_only_udm.target.location.name | Mapeado condicionalmente se jsonPayload.dest_vpc.project_id existir. |
jsonPayload.dest_instance.vm_name | read_only_udm.target.resource.attribute.cloud.project.name | Mapeado condicionalmente se jsonPayload.dest_vpc.project_id existir. |
jsonPayload.dest_instance.zone | read_only_udm.target.resource.attribute.cloud.availability_zone | Mapeado condicionalmente se jsonPayload.dest_vpc.project_id existir. |
jsonPayload.dest_vpc.project_id | read_only_udm.target.cloud.vpc.product_object_id | Usado como condição para mapear campos relacionados. |
jsonPayload.dest_vpc.subnetwork_name | read_only_udm.target.cloud.vpc.name | Mapeado condicionalmente se jsonPayload.dest_vpc.project_id existir. |
jsonPayload.instance.project_id | read_only_udm.target.resource.product_object_id | Mapeado condicionalmente se jsonPayload.instance.project_id existir. |
jsonPayload.instance.region | read_only_udm.target.location.name | Mapeado condicionalmente se jsonPayload.instance.project_id existir. |
jsonPayload.instance.vm_name | read_only_udm.target.resource.attribute.cloud.project.name | Mapeado condicionalmente se jsonPayload.instance.project_id existir. |
jsonPayload.instance.zone | read_only_udm.target.resource.attribute.cloud.availability_zone | Mapeado condicionalmente se jsonPayload.instance.project_id existir. |
jsonPayload.message | read_only_udm.metadata.product_event_type, read_only_udm.principal.application, read_only_udm.target.process.pid, read_only_udm.target.user.userid, read_only_udm.principal.hostname, read_only_udm.target.process.command_line, read_only_udm.security_result.description, read_only_udm.principal.process.file.full_path | Analisados e mapeados para diferentes campos com base em padrões grok e lógica condicional. |
jsonPayload.rule_details.action | read_only_udm.security_result.action | Usado para determinar a ação do resultado de segurança (PERMITIR/BLOQUEAR) e mapeado. |
jsonPayload.rule_details.direction | read_only_udm.network.direction | Usado para determinar a direção da rede (INBOUND/OUTBOUND/UNKNOWN_DIRECTION) e mapeado. |
jsonPayload.rule_details.priority | read_only_udm.security_result.priority_details | Convertido em string e mapeado se não ocorrerem erros durante a conversão. |
jsonPayload.rule_details.reference | read_only_udm.security_result.rule_labels.value | Mapeado para o valor da etiqueta da regra. |
jsonPayload.src_instance.project_id | read_only_udm.principal.resource.product_object_id | Mapeado condicionalmente se jsonPayload.src_vpc.project_id existir. |
jsonPayload.src_instance.region | read_only_udm.principal.location.name | Mapeado condicionalmente se jsonPayload.src_vpc.project_id existir. |
jsonPayload.src_instance.vm_name | read_only_udm.principal.resource.attribute.cloud.project.name | Mapeado condicionalmente se jsonPayload.src_vpc.project_id existir. |
jsonPayload.src_instance.zone | read_only_udm.principal.resource.attribute.cloud.availability_zone | Mapeado condicionalmente se jsonPayload.src_vpc.project_id existir. |
jsonPayload.src_vpc.project_id | read_only_udm.principal.cloud.vpc.product_object_id | Usado como condição para mapear campos relacionados. |
jsonPayload.src_vpc.subnetwork_name | read_only_udm.principal.cloud.vpc.name | Mapeado condicionalmente se jsonPayload.src_vpc.project_id existir. |
jsonPayload.vpc.project_id | read_only_udm.target.cloud.vpc.product_object_id | Mapeado condicionalmente se jsonPayload.vpc.project_id existir. |
jsonPayload.vpc.subnetwork_name | read_only_udm.target.cloud.vpc.name | Mapeado condicionalmente se jsonPayload.vpc.project_id existir. |
logName | read_only_udm.security_result.category_details | Mapeado diretamente. |
resource.labels.instance_id | read_only_udm.principal.resource.product_object_id, read_only_udm.principal.asset_id | Mapeado condicionalmente. Se o tipo for "PROCTITLE", é usado para criar o ID do recurso. |
resource.labels.location | read_only_udm.principal.location.name | Mapeado condicionalmente se o campo existir. |
resource.labels.project_id | read_only_udm.metadata.product_deployment_id | Mapeado condicionalmente se o campo existir. |
resource.labels.zone | read_only_udm.principal.resource.attribute.cloud.availability_zone | Mapeado condicionalmente se o campo existir. |
resource.type | read_only_udm.metadata.event_type | Usado para determinar o tipo de evento e mapeado. |
timestamp | read_only_udm.metadata.event_timestamp | Mapeado diretamente. |
escrever | read_only_udm.metadata.product_event_type, read_only_udm.metadata.event_type, read_only_udm.extensions.auth.type | Usado para determinar o tipo de evento, o tipo de evento do produto e o tipo de autenticação, e mapeado em conformidade. |
read_only_udm.metadata.event_type | A lógica define o tipo de evento com base no campo "tipo" e noutras condições. Se não for encontrada nenhuma correspondência específica, a predefinição é "GENERIC_EVENT". | |
read_only_udm.metadata.log_type | Valor constante "GCP_COMPUTE". | |
read_only_udm.metadata.vendor_name | Valor constante "Google Cloud Platform". | |
read_only_udm.metadata.product_name | Valor constante "Google Cloud Platform". | |
read_only_udm.security_result.rule_labels.key | Valor constante "Reference". | |
read_only_udm.target.cloud.vpc.resource_type | Condicionalmente definido como "VPC_NETWORK" se jsonPayload.instance.project_id ou jsonPayload.dest_vpc.project_id existir. | |
read_only_udm.target.resource.attribute.cloud.environment | Condicionalmente definido como "GOOGLE_CLOUD_PLATFORM" se jsonPayload.instance.project_id, jsonPayload.dest_vpc.project_id ou jsonPayload.src_vpc.project_id existir. | |
read_only_udm.principal.administrative_domain | Mapeado a partir do campo "Domínio da conta" extraído do campo "kv_data". | |
read_only_udm.principal.user.user_display_name | Mapeado a partir do campo "Nome da conta" extraído do campo "kv_data". | |
read_only_udm.target.resource.name | Mapeado a partir do campo "Nome do objeto" extraído do campo "kv_data". | |
read_only_udm.target.resource.type | Mapeado a partir do campo "Tipo de objeto" extraído do campo "kv_data". | |
read_only_udm.principal.process.pid | Mapeado a partir do campo "Process ID" extraído do campo "kv_data". | |
read_only_udm.target.user.windows_sid | Mapeado a partir do campo "ID de segurança" extraído do campo "kv_data". | |
read_only_udm.network.session_id | Mapeado a partir do campo "auid". |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais da Google SecOps.