Coletar registros de auditoria do CircleCI
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
- Acesse Configurações do SIEM > Feeds.
- Clique em Adicionar novo.
- No campo Nome do feed, insira um nome para o feed (por exemplo, CircleCI Logs).
- Selecione Webhook como o Tipo de origem.
- Selecione CircleCI como o Tipo de registro.
- Clique em Próxima.
- 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.
- Delimitador de divisão: o delimitador usado para separar linhas de registro, como
- Clique em Próxima.
- Revise a configuração do feed na tela Finalizar e clique em Enviar.
- Clique em Gerar chave secreta para gerar uma chave secreta para autenticar esse feed.
- 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.
- 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.
- Clique em Concluído.
Criar uma chave de API para o feed de webhook
Acesse o console do Google Cloud > Credenciais.
Clique em Criar credenciais e, em seguida, selecione Chave de API.
Restrinja o acesso da chave de API à API Google Security Operations.
Especificar o URL do endpoint
- No aplicativo cliente, especifique o URL do endpoint HTTPS fornecido no feed de webhook.
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.
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
- Faça login na interface da Web do CircleCI.
- Selecione o projeto de onde você quer importar os registros.
- Clique em Configurações do projeto.
- Selecione Webhooks.
- Clique em Adicionar webhook.
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.
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.