Coletar registros do Google Cloud Compute
Neste documento, explicamos como configurar a exportação de registros do Compute para o Google Security Operations usando o Cloud Storage. Google Cloud 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 ocorrência de segurança. Ele processa vários formatos de registro, incluindo mensagens semelhantes ao syslog e pares de chave-valor, e categoriza eventos com base em campos extraídos, como type e action.
Antes de começar
Verifique se você atende aos seguintes pré-requisitos:
- Instância do Google SecOps.
- O Compute está configurado e ativo no seu ambiente Google Cloud .
- Acesso privilegiado ao Google Cloud.
Crie um bucket do Google Cloud Storage
- Faça login no console doGoogle Cloud .
Acesse a página Buckets do Cloud Storage.
Clique em Criar.
Na página Criar um bucket, insira as informações do seu bucket. Após cada uma das etapas a seguir, clique em Continuar para prosseguir para a próxima etapa:
Na seção Começar, faça o seguinte:
- Insira um nome exclusivo que atenda aos requisitos de nome de bucket. Por exemplo, compute-logs.
Para ativar o namespace hierárquico, clique na seta de expansão para abrir a seção Otimizar para cargas de trabalho orientadas a arquivos e com uso intensivo de dados e selecione Ativar namespace hierárquico neste bucket.
- Para adicionar um rótulo de bucket, clique na seta de expansão para abrir a seção Rótulos.
- Clique em Adicionar rótulo e especifique uma chave e um valor para o rótulo.
Na seção Escolha onde armazenar seus dados, faça o seguinte:
Selecione um tipo de local.
- Use o menu do tipo de local para selecionar um Local em que os dados de objetos no bucket serão armazenados permanentemente.
- Para configurar a replicação entre buckets, abra a seção Configurar a replicação entre buckets.
Na seção Escolha uma classe de armazenamento para seus dados, selecione uma classe de armazenamento padrão para o bucket ou selecione Classe automática para gerenciamento automático da classe de armazenamento dos dados do bucket.
Na seçã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 controle de acesso para os objetos do bucket.
Na seção Escolha como proteger os dados do objeto, faça o seguinte:
- Selecione qualquer uma das opções em Proteção de dados que você quer definir para o bucket.
- Para escolher como os dados do objeto serão criptografados, clique na seta de expansão identificada como Criptografia de dados e selecione um Método de criptografia de dados.
Clique em Criar.
Configurar Google Cloud a exportação de registros de computação
- No Google Cloud console, acesse Logging > Roteador de registros.
- Clique em Criar coletor.
Forneça os seguintes detalhes:
- Nome do coletor: forneça um nome significativo, por exemplo, Compute-Logs-Sink.
- Destino do coletor: selecione Cloud Storage .
- Destino do coletor: selecione "Cloud Storage" e insira o URI do bucket. Por exemplo,
gs://<your-bucket-name>/compute-logs
. Filtro de registros: defina filtros para capturar registros do Google Cloud Compute da seguinte maneira:
Nome e tipo do registro:
logName="*compute*"
Campos relacionados à rede (como endereços IP, 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 à segurança:
jsonPayload.rule_details.action="ALLOW" OR jsonPayload.rule_details.action="BLOCK"
Clique em Criar.
Configurar permissões do Cloud Storage
- Acesse 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.
- Forneça a função roles/storage.admin no bucket.
Configurar feeds
Há dois pontos de entrada diferentes para configurar feeds na plataforma do Google SecOps:
- Configurações do SIEM > Feeds > Adicionar novo
- Central de conteúdo > Pacotes de conteúdo > Começar
Como configurar o feed de computação Google Cloud
- Clique no pacote Plataforma de computação do Google Cloud.
- Localize o tipo de registro GCP Compute Feed e clique em Adicionar novo feed.
Especifique valores para os seguintes campos:
- Tipo de origem: Google Cloud Storage V2.
- URI do bucket de armazenamento: URL do bucket do Cloud Storage. Por exemplo,
gs://compute-context-logs
. - Opção de exclusão da fonte: selecione a opção de exclusão de acordo com sua preferência.
- Idade máxima do arquivo: inclui arquivos modificados nos últimos dias. O padrão é de 180 dias.
- Conta de serviço do Chronicle: copie a conta de serviço. Você vai precisar dele para adicionar permissões no bucket para que essa conta de serviço permita que o Google SecOps leia ou exclua dados no bucket.
Opções avançadas
- Nome do feed: um valor pré-preenchido que identifica o feed.
- Namespace do recurso: namespace associado ao feed.
- Rótulos de ingestão: rótulos aplicados a todos os eventos deste feed.
- Clique em Criar feed.
Para mais informações sobre como configurar vários feeds para diferentes tipos de registros nessa família de produtos, consulte Configurar feeds por produto.
Tabela de mapeamento do UDM
Campo de registro | Mapeamento da UDM | Lógica |
---|---|---|
addr | read_only_udm.principal.ip | Mesclado na lista de endereços IP principais se o campo não estiver vazio ou for "?". |
jsonPayload.connection.dest_ip | read_only_udm.target.ip | Será mesclado na lista de endereços IP de destino se o campo existir. |
jsonPayload.connection.dest_port | read_only_udm.target.port | Convertido para string, depois para 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 depois em número inteiro. Usado para determinar o protocolo IP (TCP, UDP etc.) usando uma tabela de pesquisa e mapeado se não ocorrerem erros durante a conversão. |
jsonPayload.connection.src_ip | read_only_udm.principal.ip | Unidos à lista de endereços IP principais se o campo existir. |
jsonPayload.connection.src_port | read_only_udm.principal.port | Convertido para string, depois para 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 uma 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 (ALLOW/BLOCK) 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 para string e mapeado se nenhum erro ocorrer durante a conversão. |
jsonPayload.rule_details.reference | read_only_udm.security_result.rule_labels.value | Mapeado para o valor do rótulo 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 uma 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", ele será 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. |
tipo | 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 de acordo. |
read_only_udm.metadata.event_type | A lógica define o tipo de evento com base no campo "type" e em outras condições. Se nenhuma correspondência específica for encontrada, o padrão será "GENERIC_EVENT". | |
read_only_udm.metadata.log_type | Valor da 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 "Referência". | |
read_only_udm.target.cloud.vpc.resource_type | Definido condicionalmente como "VPC_NETWORK" se jsonPayload.instance.project_id ou jsonPayload.dest_vpc.project_id existir. | |
read_only_udm.target.resource.attribute.cloud.environment | Definido condicionalmente 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 do campo "Domínio da conta" extraído do campo "kv_data". | |
read_only_udm.principal.user.user_display_name | Mapeado do campo "Nome da conta" extraído do campo "kv_data". | |
read_only_udm.target.resource.name | Mapeado do campo "Nome do objeto" extraído do campo "kv_data". | |
read_only_udm.target.resource.type | Mapeado do campo "Tipo de objeto" extraído do campo "kv_data". | |
read_only_udm.principal.process.pid | Mapeado do campo "ID do processo" extraído do campo "kv_data". | |
read_only_udm.target.user.windows_sid | Mapeado do campo "ID de segurança" extraído do campo "kv_data". | |
read_only_udm.network.session_id | Mapeado do campo "auid". |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.