Coletar registros de auditoria do CircleCI

Compatível com:

Esse analisador extrai campos dos registros de auditoria do CircleCI nos formatos CSV e JSON, transformando-os no modelo de dados unificado (UDM, na sigla em inglês). Ele processa os dois formatos, realiza transformações e enriquecimentos de dados e mapeia os campos extraídos para os campos UDM correspondentes no objeto event. Ele se concentra em ações do usuário, acesso a recursos e eventos de atualização, categorizando-os e preenchendo campos relevantes do UDM, como principal, alvo, rede e metadados.

Antes de começar

  • Verifique se você tem uma instância do Google SecOps.
  • Verifique se você tem acesso privilegiado ao CircleCI.

Configurar um feed no Google SecOps para ingerir os registros do CircleCI

  1. Acesse Configurações do SIEM > Feeds.
  2. Clique em Adicionar novo.
  3. No campo Nome do feed, insira um nome para o feed (por exemplo, CircleCI Logs).
  4. Selecione Webhook como o Tipo de origem.
  5. Selecione CircleCI como o Tipo de registro.
  6. Clique em Próxima.
  7. Opcional: especifique valores para os seguintes parâmetros de entrada:
    • Delimitador de divisão: o delimitador usado para separar linhas de registro, como \n.
    • Namespace de recursos: o namespace de recursos.
    • Rótulos de ingestão: o rótulo aplicado aos eventos desse feed.
  8. Clique em Próxima.
  9. Revise a configuração do feed na tela Finalizar e clique em Enviar.
  10. Clique em Gerar chave secreta para gerar uma chave secreta para autenticar esse feed.
  11. Copie e armazene a chave secreta. Não é possível acessar essa chave secreta novamente. Se necessário, você pode gerar uma nova chave secreta, mas essa ação torna a chave secreta anterior obsoleta.
  12. Na guia Detalhes, copie o URL do endpoint do feed no campo Informações do endpoint. É necessário especificar esse URL de endpoint no aplicativo cliente.
  13. Clique em Concluído.

Criar uma chave de API para o feed de webhook

  1. Acesse o console do Google Cloud > Credenciais.

    Ir para Credenciais

  2. Clique em Criar credenciais e, em seguida, selecione Chave de API.

  3. Restrinja o acesso da chave de API à API Google Security Operations.

Especificar o URL do endpoint

  1. No aplicativo cliente, especifique o URL do endpoint HTTPS fornecido no feed de webhook.
  2. Ative a autenticação especificando a chave de API e a chave secreta como parte do cabeçalho personalizado no seguinte formato:

    X-goog-api-key = API_KEY
    X-Webhook-Access-Key = SECRET
    

    Recomendação: especifique a chave de API como um cabeçalho em vez de especificar no URL.

  3. Se o cliente do webhook não tiver suporte a cabeçalhos personalizados, especifique a chave de API e a chave secreta usando parâmetros de consulta no seguinte formato:

    ENDPOINT_URL?key=API_KEY&secret=SECRET
    

    Substitua:

    • ENDPOINT_URL: o URL do endpoint do feed.
    • API_KEY: a chave de API para autenticação no Google SecOps.
    • SECRET: a chave secreta gerada para autenticar o feed.

Como configurar um webhook no CircleCI

  1. Faça login na interface da Web do CircleCI.
  2. Selecione o projeto de onde você quer importar os registros.
  3. Clique em Configurações do projeto.
  4. Selecione Webhooks.
  5. Clique em Adicionar webhook.
  6. Especifique valores para os seguintes parâmetros de entrada:

    • Nome do webhook: insira um nome descritivo (por exemplo, Google SecOps).
    • URL do endpoint: insira o <ENDPOINT_URL> do endpoint de API Google SecOps.
    • Eventos:selecione os eventos do CircleCI que vão acionar o webhook. Por exemplo, selecione workflow-completed para enviar dados após a conclusão de um fluxo de trabalho.
  7. Clique em Salvar para criar o webhook.

Tabela de mapeamento do UDM

Campo de registro Mapeamento do UDM Lógica
account.id read_only_udm.about.resource.attribute.labels.value O valor de account.id do registro bruto é atribuído ao campo UDM read_only_udm.about.resource.attribute.labels.value, em que a chave correspondente é account_id.
ação read_only_udm.metadata.product_event_type O valor de ação do registro bruto é atribuído ao campo UDM read_only_udm.metadata.product_event_type.
actor.id read_only_udm.principal.user.product_object_id O valor de actor.id do registro bruto é atribuído ao campo UDM read_only_udm.principal.user.product_object_id.
actor.name read_only_udm.principal.user.userid O prefixo "github: " é removido do campo actor.name no registro bruto. O valor restante é atribuído ao campo UDM read_only_udm.principal.user.userid. Se actor.name existir no registro bruto, o valor USER_RESOURCE_UPDATE_CONTENT será atribuído a read_only_udm.metadata.event_type. Caso contrário, USER_RESOURCE_ACCESS será atribuído.
id read_only_udm.metadata.product_log_id O valor de id do registro bruto é atribuído ao campo UDM read_only_udm.metadata.product_log_id. O analisador define read_only_udm.metadata.log_type como CIRCLECI. O analisador define read_only_udm.metadata.product_name como CIRCLECI. O analisador define read_only_udm.metadata.vendor_name como CIRCLECI.
occurred_at read_only_udm.metadata.event_timestamp O valor de occurred_at do registro bruto é analisado como um carimbo de data/hora e atribuído ao campo UDM read_only_udm.metadata.event_timestamp.
organization.name read_only_udm.target.administrative_domain O prefixo "github: " é removido do campo organization.name no registro bruto. O valor restante é atribuído ao campo UDM read_only_udm.target.administrative_domain.
payload.job.id read_only_udm.about.resource.attribute.labels.value O valor de payload.job.id do registro bruto é atribuído ao campo UDM read_only_udm.about.resource.attribute.labels.value, em que a chave correspondente é job_id.
payload.job.job_name read_only_udm.about.resource.attribute.labels.value O valor de payload.job.job_name do registro bruto é atribuído ao campo UDM read_only_udm.about.resource.attribute.labels.value, em que a chave correspondente é job_name.
payload.job.job_status read_only_udm.about.resource.attribute.labels.value O valor de payload.job.job_status do registro bruto é atribuído ao campo UDM read_only_udm.about.resource.attribute.labels.value, em que a chave correspondente é job_status.
payload.workflow.id read_only_udm.about.resource.attribute.labels.value O valor de payload.workflow.id do registro bruto é atribuído ao campo UDM read_only_udm.about.resource.attribute.labels.value, em que a chave correspondente é workflow_id.
request.id read_only_udm.network.session_id O valor de request.id do registro bruto é atribuído ao campo UDM read_only_udm.network.session_id.
scope.id read_only_udm.about.resource.attribute.labels.value O valor de scope.id do registro bruto é atribuído ao campo UDM read_only_udm.about.resource.attribute.labels.value, em que a chave correspondente é scope_id. O analisador inicialmente define sec_action como BLOCK. Se o campo success no registro bruto for verdadeiro, sec_action será alterado para ALLOW. O valor de sec_action é atribuído ao campo UDM read_only_udm.security_result.action.
target.id read_only_udm.target.resource.product_object_id O valor de target.id do registro bruto é atribuído ao campo UDM read_only_udm.target.resource.product_object_id.
target.name read_only_udm.target.resource.name O prefixo "github: " é removido do campo target.name no registro bruto. O valor restante é atribuído ao campo UDM read_only_udm.target.resource.name. O analisador define read_only_udm.target.resource.resource_type como STORAGE_OBJECT.
version read_only_udm.target.resource.attribute.labels.value O valor de version do registro bruto é convertido em uma string e atribuído ao campo UDM read_only_udm.target.resource.attribute.labels.value, em que a chave correspondente é version.

Alterações

2023-03-09

  • Parser recém-criado.