Recolha Google Cloud registos de computação
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 sintático 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 consola, aceda a Registo > Router de registos.
- Clique em Criar destino.
Forneça os seguintes detalhes:
- Nome do destino: indique um nome significativo; por exemplo, Compute-Logs-Sink.
- Destino da sincronização: selecione Cloud Storage .
- Destino da sincronização: selecione Cloud Storage e introduza o URI do contentor; por exemplo,
gs://<your-bucket-name>/compute-logs
. Filtro de registo: defina filtros para capturar Google Cloud registos de computação da seguinte forma:
Nome e tipo do registo:
logName="*compute*"
Campos relacionados com a rede (como endereços IP e portas):
jsonPayload.connection.dest_ip="*" OR jsonPayload.connection.src_ip="*"
Detalhes da instância:
jsonPayload.dest_instance.project_id="*" jsonPayload.src_instance.project_id="*"
Detalhes relacionados com a segurança:
jsonPayload.rule_details.action="ALLOW" OR jsonPayload.rule_details.action="BLOCK"
Clique em Criar.
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 computação
- 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
. - 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 | Unidos na 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 "Object Name" 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.