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
- Central de conteúdo > Pacotes de conteúdo
Configure feeds em "Configurações do SIEM" > "Feeds".
Para configurar um feed, siga estas etapas:
- Acesse Configurações do SIEM > Feeds.
- Clique em Adicionar novo feed.
- Na próxima página, clique em Configurar um único feed.
- No campo Nome do feed, insira um nome para o feed, por exemplo, Google Cloud Registros do Compute.
- Selecione Google Cloud Storage como o Tipo de origem.
- Selecione GCP Compute como o Tipo de registro.
- Clique em Receber conta de serviço como a Conta de serviço do Chronicle.
- Clique em Próxima.
Especifique valores para os seguintes parâmetros de entrada:
- URI do bucket de armazenamento: Google Cloud URL do bucket de armazenamento no formato
gs://my-bucket/<value>
. - URI Is A: selecione Directory which includes subdirectories.
Opções de exclusão de fontes: selecione a opção de exclusão de acordo com sua preferência.
- URI do bucket de armazenamento: Google Cloud URL do bucket de armazenamento no formato
Clique em Próxima.
Revise a nova configuração do feed na tela Finalizar e clique em Enviar.
Configurar feeds na Central de conteúdo
Especifique valores para os seguintes campos:
- URI do bucket de armazenamento: Google Cloud URL do bucket de armazenamento no formato
gs://my-bucket/<value>
. - URI Is A: selecione Directory which includes subdirectories.
- Opções de exclusão de fontes: selecione a opção de exclusão de acordo com sua preferência.
Opções avançadas
- Nome do feed: um valor pré-preenchido que identifica o feed.
- Tipo de origem: método usado para coletar registros no Google SecOps.
- Namespace do recurso: namespace associado ao feed.
- Rótulos de ingestão: rótulos aplicados a todos os eventos deste feed.
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.