Recolha registos de auditoria do CircleCI

Compatível com:

Este analisador extrai campos dos registos de auditoria do CircleCI nos formatos CSV e JSON, transformando-os no modelo de dados unificado (UDM). Processa ambos os formatos, realiza transformações e enriquecimentos de dados e mapeia os campos extraídos para os respetivos campos da UDM no objeto event. Centra-se nas ações do utilizador, no acesso aos recursos e nos eventos de atualização, categorizando-os e preenchendo os campos UDM relevantes, como principal, target, network e metadata.

Antes de começar

Certifique-se de que tem os seguintes pré-requisitos:

  • Instância do Google SecOps.
  • Acesso privilegiado ao CircleCI.

Configure feeds

Para configurar um feed, siga estes passos:

  1. Aceda a Definições do SIEM > Feeds.
  2. Clique em Adicionar novo feed.
  3. Na página seguinte, clique em Configurar um único feed.
  4. No campo Nome do feed, introduza um nome para o feed (por exemplo, Registos do CircleCI).
  5. Selecione Webhook como o Tipo de origem.
  6. Selecione CircleCI como o Tipo de registo.
  7. Clicar em Seguinte.
  8. Opcional: especifique valores para os seguintes parâmetros de entrada:
    • Delimitador de divisão: o delimitador usado para separar linhas de registo, como \n.
    • Espaço de nomes do recurso: o espaço de nomes do recurso.
    • Etiquetas de carregamento: a etiqueta aplicada aos eventos deste feed.
  9. Clicar em Seguinte.
  10. Reveja a configuração do feed no ecrã Finalizar e, de seguida, clique em Enviar.
  11. Clique em Gerar chave secreta para gerar uma chave secreta para autenticar este feed.
  12. Copie e armazene a chave secreta. Não pode ver esta chave secreta novamente. Se necessário, pode regenerar uma nova chave secreta, mas esta ação torna a chave secreta anterior obsoleta.
  13. No separador Detalhes, copie o URL do ponto final do feed do campo Informações do ponto final. Tem de especificar este URL do ponto final na sua aplicação cliente.
  14. Clique em Concluído.

Crie uma chave da API para o feed de webhook

  1. Aceda à Google Cloud consola > Credenciais.

    Aceder a Credenciais

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

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

Especifique o URL do ponto final

  1. Na aplicação cliente, especifique o URL do ponto final HTTPS fornecido no feed do webhook.
  2. Ative a autenticação especificando a chave da 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 da API como um cabeçalho em vez de a especificar no URL.

  3. Se o seu cliente de webhook não suportar cabeçalhos personalizados, pode especificar a chave da API e a chave secreta através de parâmetros de consulta no seguinte formato:

    ENDPOINT_URL?key=API_KEY&secret=SECRET
    

    Substitua o seguinte:

    • ENDPOINT_URL: o URL do ponto final do feed.
    • API_KEY: a chave da API para autenticar no Google SecOps.
    • SECRET: a chave secreta que gerou para autenticar o feed.

Configurar um webhook no CircleCI

  1. Inicie sessão na interface Web do CircleCI.
  2. Selecione o projeto a partir do qual quer carregar os registos.
  3. Clique em Definições do projeto.
  4. Selecione Webhooks.
  5. Clique em Adicionar webhook.
  6. Especifique valores para os seguintes parâmetros de entrada:

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

Tabela de mapeamento da UDM

Campo de registo Mapeamento de UDM Lógica
account.id read_only_udm.about.resource.attribute.labels.value O valor de account.id do registo não processado é 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 action do registo não processado é 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 registo não processado é 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 registo não processado. O valor restante é atribuído ao campo UDM read_only_udm.principal.user.userid. Se actor.name existir no registo não processado, o valor USER_RESOURCE_UPDATE_CONTENT é atribuído a read_only_udm.metadata.event_type. Caso contrário, é atribuído USER_RESOURCE_ACCESS.
id read_only_udm.metadata.product_log_id O valor de id do registo não processado é atribuído ao campo UDM read_only_udm.metadata.product_log_id. O analisador sintático 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 registo não processado é analisado como uma 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 registo não processado. 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 registo não processado é 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 registo não processado é 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 registo não processado é 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 registo não processado é 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 registo não processado é 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 registo não processado é atribuído ao campo UDM read_only_udm.about.resource.attribute.labels.value, em que a chave correspondente é scope_id. Inicialmente, o analisador define sec_action como BLOCK. Se o campo success no registo não processado for verdadeiro, sec_action é alterado para ALLOW. O valor de sec_action é, em seguida, 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 registo não processado é 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 registo não processado. 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.
versão read_only_udm.target.resource.attribute.labels.value O valor de version do registo não processado é convertido numa string e atribuído ao campo UDM read_only_udm.target.resource.attribute.labels.value, em que a chave correspondente é version.

Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais da Google SecOps.