Coletar registros do Cloud Run
Este guia explica como exportar registros do Cloud Run para o Google Security Operations usando o Cloud Storage. O analisador extrai campos de registros JSON, transformando-os no modelo de dados unificado (UDM, na sigla em inglês). Ele processa vários formatos de registro, incluindo dados de solicitação HTTP e registros de auditoria do sistema, mapeando campos relevantes para o UDM e enriquecendo os dados com rótulos e metadados específicos do Cloud Run.
Antes de começar
- Verifique se você tem uma instância do Google SecOps.
- Verifique se o Cloud Run está configurado e ativado no ambiente Google Cloud .
- Verifique se você tem acesso privilegiado a Google Cloud.
Crie um bucket do Google Cloud Storage
- Faça login no console do Google 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:
Na seção Começar, faça o seguinte:
- Insira um nome exclusivo que atenda aos requisitos de nome de bucket. Por exemplo, cloudrun-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 a exportação de registros no Cloud Run
- Na página Google Cloud Welcome, clique no ícone Cloud Run.
- Pesquise Registro na barra de pesquisa na parte de cima e clique em Enter.
- No Análise de registros, filtre os registros escolhendo Cloud Run em Nome do registro e clique em Aplicar.
- Clique em Mais ações > Criar coletor no menu.
- Forneça as seguintes configurações:
- Detalhes do coletor: insira um nome e uma descrição.
- Clique em Próxima.
- Destino do coletor: selecione Bucket do Cloud Storage.
- Bucket do Cloud Storage: selecione o bucket criado anteriormente ou crie um novo.
- Clique em Próxima.
- Escolher os registros a serem incluídos no coletor: um registro padrão é preenchido quando você seleciona uma opção no bucket do Cloud Storage.
- Clique em Próxima.
- Opcional: Escolher registros para excluir do coletor: selecione os registros que você não quer enviar para o coletor.
- Clique em Criar coletor.
Configurar um feed no Google SecOps para processar registros do Cloud Run
- Acesse Configurações do SIEM > Feeds.
- Clique em Adicionar novo.
- No campo Nome do feed, insira um nome para o feed, por exemplo, Logs do Cloud Run.
- Selecione Google Cloud Storage como o Tipo de origem.
- Selecione GCP Cloud Run como o Tipo de registro.
- Clique em Pegar 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 do Cloud Storage: Google Cloud URL do bucket do Cloud Storage no formato
gs://my-bucket/<value>
. - URI Is A: selecione Directory which includes subdirectories.
Opções de exclusão da origem: selecione a opção de exclusão de acordo com sua preferência.
Namespace de recursos: o namespace de recursos.
Rótulos de ingestão: o rótulo aplicado aos eventos desse feed.
- URI do bucket do Cloud Storage: Google Cloud URL do bucket do Cloud Storage no formato
Clique em Próxima.
Revise a configuração do novo feed na tela Finalizar e clique em Enviar.
Tabela de mapeamento do UDM
Campo de registro | Mapeamento do UDM | Lógica |
---|---|---|
httpRequest.latency |
target.resource.attribute.labels.[] |
O valor de httpRequest.latency do registro bruto é usado como o valor de um rótulo com a chave http_request_latency em target.resource.attribute.labels . |
httpRequest.protocol |
network.application_protocol |
Se httpRequest.protocol contiver HTTP , o campo UDM será definido como HTTP . |
httpRequest.remoteIp |
principal.asset.ip |
O valor de httpRequest.remoteIp do registro bruto é usado. |
httpRequest.remoteIp |
principal.ip |
O valor de httpRequest.remoteIp do registro bruto é usado. |
httpRequest.requestMethod |
network.http.method |
O valor de httpRequest.requestMethod do registro bruto é usado. |
httpRequest.requestSize |
network.sent_bytes |
O valor de httpRequest.requestSize do registro bruto é convertido em um número inteiro sem sinal e usado. |
httpRequest.requestUrl |
target.url |
O valor de httpRequest.requestUrl do registro bruto é usado. |
httpRequest.responseSize |
network.received_bytes |
O valor de httpRequest.responseSize do registro bruto é convertido em um número inteiro sem sinal e usado. |
httpRequest.serverIp |
target.asset.ip |
O valor de httpRequest.serverIp do registro bruto é usado. |
httpRequest.serverIp |
target.ip |
O valor de httpRequest.serverIp do registro bruto é usado. |
httpRequest.status |
network.http.response_code |
O valor de httpRequest.status do registro bruto é convertido em um número inteiro e usado. |
httpRequest.userAgent |
network.http.parsed_user_agent |
O valor de httpRequest.userAgent do registro bruto é analisado como uma string de user agent. |
httpRequest.userAgent |
network.http.user_agent |
O valor de httpRequest.userAgent do registro bruto é usado. |
insertId |
metadata.product_log_id |
O valor de insertId do registro bruto é usado. |
labels.instanceId |
additional.fields.[] |
O valor de labels.instanceId é usado como o valor de um rótulo com a chave instanceId em additional.fields . |
labels.run.googleapis.com_execution_name |
additional.fields.[] |
O valor de labels.run.googleapis.com_execution_name é usado como o valor de um rótulo com a chave execution_name em additional.fields . |
labels.run.googleapis.com_task_attempt |
additional.fields.[] |
O valor de labels.run.googleapis.com_task_attempt é usado como o valor de um rótulo com a chave task_attempt em additional.fields . |
labels.run.googleapis.com_task_index |
additional.fields.[] |
O valor de labels.run.googleapis.com_task_index é usado como o valor de um rótulo com a chave task_index em additional.fields . |
logName |
metadata.product_event_type |
O valor de logName do registro bruto é usado. |
resource.labels.configuration_name |
target.resource.attribute.labels.[] |
O valor de resource.labels.configuration_name é usado como o valor de um rótulo com a chave configuration_name em target.resource.attribute.labels . |
resource.labels.job_name |
additional.fields.[] |
O valor de resource.labels.job_name é usado como o valor de um rótulo com a chave job_name em additional.fields . |
resource.labels.location |
target.location.name |
O valor de resource.labels.location do registro bruto é usado. |
resource.labels.project_id |
target.resource.attribute.labels.[] |
O valor de resource.labels.project_id é usado como o valor de um rótulo com a chave project_id em target.resource.attribute.labels . |
resource.labels.revision_name |
target.resource.attribute.labels.[] |
O valor de resource.labels.revision_name é usado como o valor de um rótulo com a chave revision_name em target.resource.attribute.labels . |
resource.labels.service_name |
target.resource.attribute.labels.[] |
O valor de resource.labels.service_name é usado como o valor de um rótulo com a chave service_name em target.resource.attribute.labels . |
resource.type |
target.resource.resource_subtype |
O valor de resource.type do registro bruto é usado. |
severity |
security_result.severity |
Se o valor de severity corresponder a Info (sem diferenciação entre maiúsculas e minúsculas), o campo do UDM será definido como INFORMATIONAL . |
textPayload |
additional.fields.[] |
O valor de textPayload é usado como o valor de um rótulo com a chave Textpayload em additional.fields . |
timestamp |
metadata.event_timestamp |
O valor de timestamp do registro bruto é analisado como um carimbo de data/hora. |
timestamp |
timestamp |
O valor de timestamp do registro bruto é analisado como um carimbo de data/hora. Determinado pela lógica do analisador com base na presença de determinados campos. O padrão é GENERIC_EVENT . Se has_principal_ip , has_target_ip e httpRequest.protocol corresponderem a HTTP , o valor será definido como NETWORK_HTTP . Fixado em GCP_RUN . Fixado em GCP_RUN . Fixado em Google Cloud Platform . Fixado em GOOGLE_CLOUD_PLATFORM . |
Alterações
2024-01-22
Melhoria:
- Mapeamento adicionado para registros em que logName é
projects/1234/logs/run.googleapis.com%2Fstderr
,projects/1234/logs/run.googleapis.com%2Fstdout
,projects/1234/logs/run.googleapis.com%2Frequests
eprojects/1234/logs/run.googleapis.com%2Fvarlog%2Fsystem
. httpRequest.latency
foi mapeado paratarget.resource.attribute.labels
.resource.labels.configuration_name
foi mapeado paratarget.resource.attribute.labels
.resource.labels.revision_name
foi mapeado paratarget.resource.attribute.labels
.resource.labels.service_name
foi mapeado paratarget.resource.attribute.labels
.httpRequest.protocol
foi mapeado paranetwork.application_protocol
.httpRequest.requestMethod
foi mapeado paranetwork.http.method
.httpRequest.requestSize
foi mapeado paranetwork.sent_bytes
.httpRequest.requestUrl
foi mapeado paratarget.url
.httpRequest.responseSize
foi mapeado paranetwork.received_bytes
.- Mapeamento de
httpRequest.remoteIp
paraprincipal.ip
eprincipal.asset.ip
. httpRequest.serverIp
foi mapeado para target.ipand
target.asset.ip.httpRequest.status
foi mapeado paranetwork.http.response_code
.httpRequest.userAgent
foi mapeado paranetwork.http.user_agent
.logName
foi mapeado parametadata.product_event_type
.textPayload
foi mapeado paraadditional.fields
.labels.run.googleapis.com_execution_name
foi mapeado paraadditional.fields
.labels.run.googleapis.com_task_attempt
foi mapeado paraadditional.fields
.labels.run.googleapis.com_task_index
foi mapeado paraadditional.fields
.labels.instanceId
foi mapeado paraadditional.fields
.resource.labels.job_name
foi mapeado paraadditional.fields
.
2023-04-13
Melhoria:
- Defina
target.resource.attribute.cloud.environment
comoGOOGLE_CLOUD_PLATFORM
. - Defina
target.resource.name
como o valor do nome completo do recurso.
2022-07-13
- Analisador criado recentemente.
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.