Recolha registos de auditoria do CircleCI
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:
- Aceda a Definições do SIEM > Feeds.
- Clique em Adicionar novo feed.
- Na página seguinte, clique em Configurar um único feed.
- No campo Nome do feed, introduza um nome para o feed (por exemplo, Registos do CircleCI).
- Selecione Webhook como o Tipo de origem.
- Selecione CircleCI como o Tipo de registo.
- Clicar em Seguinte.
- 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.
- Delimitador de divisão: o delimitador usado para separar linhas de registo, como
- Clicar em Seguinte.
- Reveja a configuração do feed no ecrã Finalizar e, de seguida, clique em Enviar.
- Clique em Gerar chave secreta para gerar uma chave secreta para autenticar este feed.
- 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.
- 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.
- Clique em Concluído.
Crie uma chave da API para o feed de webhook
Aceda à Google Cloud consola > Credenciais.
Clique em Criar credenciais e, de seguida, selecione Chave de API.
Restrinja o acesso da chave de API à API Google Security Operations.
Especifique o URL do ponto final
- Na aplicação cliente, especifique o URL do ponto final HTTPS fornecido no feed do webhook.
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.
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
- Inicie sessão na interface Web do CircleCI.
- Selecione o projeto a partir do qual quer carregar os registos.
- Clique em Definições do projeto.
- Selecione Webhooks.
- Clique em Adicionar webhook.
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).
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.