script de coleta de provas

O collect-evidence script ajuda os adotantes, usuários e colaboradores a enviar seus dados de conformidade para o fluxo de dados de gerenciamento de alterações do DevSecOps.

O script executa as tarefas a seguir:

  • Tenta processar quaisquer anexos como resultados, e cria problemas de incidentes a partir desses resultados. Um número limitado de formatos de saída de ferramentas são suportados.
  • Se forem encontradas questões, o script avalia seus períodos de carência (datas de vencimento) e estados de isenção.
  • Cria um ativo de evidência no armário de provas.
  • Cria a própria evidência, e anexa os problemas e forneceu anexos.

Para um status de success ou failure, se nenhum anexo for passado por dentro collect-evidence, o pipeline-logs para aquela tarefa em particular e o estágio são capturados como um anexo.

O script collect-evidence é fornecido pelo pipeline. Não é necessário instalá-lo. O script possui as seguintes dependências:

  • bash
  • libstdc++ shared library
  • libgcc shared library

Certise-se de que as dependências estão instaladas na imagem base que usa esta ferramenta para relatar evidências.

Arquitetura de comandos da CLI

A funcionalidade do collect-evidence está disponível por meio de duas interfaces:

  1. Shell Script Wrapper (collect-evidence): Interface tradicional de script bash que oferece compatibilidade com versões anteriores
  2. Comando direto da CLI (cocoa locker evidence collect): Interface CLI nativa com acesso a todos os recursos

Alternância de versão

O script de shell collect-evidence oferece suporte a duas versões de implementação que podem ser alternadas usando a propriedade de ambiente collect-evidence-version:

Versão implementação Status Descrição
v1 Anterior Disponível Implementação original baseada em bash com compatibilidade total com versões anteriores
v2 Baseado em CLI Padrão Implementação moderna que envolve o comando cocoa locker evidence collect CLI

Uso

O script collect-evidence requer os seguintes parâmetros:

  • --tool-type O ID da ferramenta que fornece dados de evidência. Por exemplo: "owasp-zap-ui", "cra"
  • --evidence-type O ID do tipo de prova. Por exemplo: com.ibm.image_vulnerability_scan, com.ibm.unit_tests
  • --asset-key A chave em ativos de pipelinectl. Para os seguintes comandos load_artifact <key> ou load_repo <key>
  • --asset-type O tipo de ativo a partir de pipelinectl e pode ser um dos seguintes tipos: repo, artifact
  • --status O status da evidência pode ser um dos seguintes: success, pending, failure
  • --assets Especifique diversos pares de chave de ativo e de tipo de ativo Por exemplo, é possível usar o --assets asset-key1:asset-type1 --assets asset-key2:asset-type2 Se você usar essa opção, não especifique asset-key e asset-type separadamente.

O parâmetro a seguir é opcional:

  • --attachment O arquivo a ser processado como um resultado e anexado à evidência O parâmetro pode ser especificado várias vezes para vários arquivos. Para assinatura de imagem, certifique-se de que o arquivo de assinatura esteja anexado usando o parâmetro --attachment. O arquivo de assinatura deve incluir os detalhes da assinatura, como a ID da chave, o algoritmo e o resumo assinado. Os formatos comuns incluem JSON ou TXT.
  • --meta Metadados arbitrários a serem adicionados às evidências. O parâmetro aceita pares de valor 'key = value' e pode ser especificado várias vezes. Você pode incluir metadados relevantes para o processo de assinatura de imagem, como o ambiente de assinatura ou qualquer configuração específica usada durante a assinatura.
  • --additional-comment O comentário que é incluído em um problema se um pipeline falhou.

Use o comando a seguir para obter ajuda:

collect-evidence --help

Valor de retorno

collect-evidence saídas a string de status de evidência avaliada em STDOUT (uma das success, failure ou pending). Esse valor avaliado depende dos anexos de resultado processado, problemas de incidentes encontrados e possível correção dessas questões, por exemplo, ter um conjunto de data de vencimento ou uma etiqueta isenta. Para obter mais informações, consulte Problemas de Incidente.

# example on how to read the output into a variable in bash
read -r status < <(collect-evidence "${evidence_params[@]}")
echo $status # success

Mudança para v2 (implementação baseada em CLI)

Para usar a nova implementação baseada em CLI, defina a propriedade de ambiente em seu pipeline:

collect-evidence-version=v2

Usando o comando CLI diretamente

cocoa locker evidence collect \
  --tool-type "sonarqube" \
  --evidence-type "com.ibm.static_scan" \
  --assets "app-repo:repo" \
  --status "success" \
  --attachment ./sonarqube-result.json \
  --pipeline-run-id "${PIPELINE_RUN_ID}" \
  --pipeline-namespace "ci" \
  --incident-org "my-org" \
  --incident-repo "compliance-issues"
cocoa locker evidence collect \
  --tool-type "detect-secrets" \
  --evidence-type "com.ibm.detect_secrets" \
  --assets "app-repo:repo" \
  --status "success" \
  --pipeline-run-id "${PIPELINE_RUN_ID}" \
  --pipeline-namespace "ci" \
  --incident-org "my-org" \
  --incident-repo "compliance-issues"
cocoa locker evidence collect \
  --tool-type "va" \
  --evidence-type "com.ibm.cloud.image_vulnerability_scan" \
  --assets "image-0:artifact" \
  --status "success" \
  --pipeline-run-id "${PIPELINE_RUN_ID}" \
  --attachment image-0_va-report.json \
  --pipeline-namespace "ci" \
  --incident-org "my-org" \
  --incident-repo "compliance-issues"

Para obter a referência completa do comando da CLI e todos os parâmetros disponíveis, consulte cocoa locker evidence collect.

Exemplo de uso

collect-evidence \
  --tool-type "sonarqube" \
  --evidence-type "com.ibm.static_scan" \
  --asset-type "repo" \
  --asset-key "app-repo" \
  --status "success" \
  --attachment ./sonarqube-result-1.json \
  --attachment ./sonarqube-result-2.json \
  --meta environment=staging
collect-evidence \
  --tool-type "ciso-code-signing" \
  --evidence-type "com.ibm.cloud.image_signing" \
  --asset-type "artifact" \
  --asset-key "signed-image" \
  --status "success" \
  --attachment ./signature.json \   # The signature details in JSON format
  --attachment "./${artifact}.fingerprint" \ #  The fingerprint is a hash value generated from the artifact, ensuring integrity and authenticity.
  --meta environment=production

Você pode usar o comando cocoa locker evidence collect diretamente:

cocoa locker evidence collect \
  --tool-type "sonarqube" \
  --evidence-type "com.ibm.static_scan" \
  --assets "app-repo:repo" \
  --status "success" \
  --attachment ./sonarqube-result.json \
  --pipeline-run-id "${PIPELINE_RUN_ID}" \
  --pipeline-namespace "ci" \
  --incident-org "my-org" \
  --incident-repo "compliance-issues"

Formatos de ferramentas suportados

A implementação atual suporta atualmente as seguintes ferramentas (fornecidas como o parâmetro --tool-type ):

Nome da ferramenta Descrição
cra IBM Analisador de Riscos de Código
cra-cis IBM Analisador de Riscos de Código CIS
va Vulnerability Advisor para IBM Cloud Container Registry
gosec GoLang Scanner de segurança
xray JFrog Xray - Varredura de vulnerabilidades e segurança de contêineres
owasp-zap OWASP Zed Attack Proxy (ZAP)
owasp-zap-ui Interface do usuário do OWASP Zed Attack Proxy (ZAP UI)
sonarqube SonarQube escaneamento
peer-review Análise de revisão por pares
twistlock TwistLock
cims Multi-Scanner de Imagens de Contêineres (CIMS)
mend Verificação de reparos
mend-sast Verificação do Mend SAST
checkov Varredura Checkov
cra-tf Code Risk Analyzer para Terraform
tfsec Scanner de segurança do Terraform
fips-scanner Scanner FIPS (Padrões Federais de Processamento de Informações)
detect-secrets Detecção de segredos
ciso-code-signing Ferramenta de assinatura de código CISO
sysdig Varredura Sysdig
cyclonedx CycloneDX formato. A detecção de ferramentas para o gerenciamento de problemas será realizada com base nos metadados do site CycloneDX aqui
grype Grype Scan

CycloneDX O Metadata utiliza a detecção de ferramentas para o gerenciamento de problemas.

Se o script collect-evidence for chamado com um tipo de ferramenta que não é suportado, o script não tentem processar os anexos. Adicionalmente, o tratamento de emissão é ignorado, e a coleta de provas não é interrompida.

Se o seu script fornece um anexo a partir de uma ferramenta suportada, mas o anexo não pode ser processado, o tratamento de emissão é ignorado e a coleta de evidências não é interrompida.

Tipo de evidência

Você pode configurar o tipo de evidência usando o parâmetro --evidence-type. Você pode configurar qualquer tipo, mas o IBM Cloud® Compliance Manager suporta os seguintes tipos de evidência:

  • com.ibm.unit_tests
  • com.ibm.detect_secrets
  • com.ibm.branch_protection
  • com.ibm.static_scan
  • com.ibm.code_vulnerability_scan
  • com.ibm.code_bom_check
  • com.ibm.code_cis_check
  • com.ibm.cloud.image_vulnerability_scan
  • com.ibm.cloud.image_signing
  • com.ibm.dynamic_scan
  • com.ibm.cloud.image_signing
  • com.ibm.acceptance_tests
  • com.ibm.prod_change_request
  • com.ibm.close_change_reques

Coleta de tipos de evidências e mapeamento de ferramentas

Ferramenta com suporte para evidências
ID do tipo de evidência Ferramenta padrão suportada Origem Propriedade Ativo recomendado Problemas
com.ibm.branch_protection cocoa-branch-protection IC Plataforma repo Questões não relacionadas a incidentes
com.ibm.unit_tests jest RP/CI Usuário repo Questões não relacionadas a incidentes
com.ibm.detect_secrets detect-secrets RP/CI/CC Plataforma repo Problemas de incidentes/não incidentes
com.ibm.code_vulnerability_scan cra-tf, cra, mend
Para infraestrutura como código: tfsec, checkov
IC Plataforma repo Problemas de incidentes/não incidentes
com.ibm.code_bom_check cra-bom, sbom-utility RP/CI/CC Plataforma repo Problemas de incidentes/não incidentes
com.ibm.code_cis_check cra-cis RP/CI/CC Plataforma repo Questões não relacionadas a incidentes
com.ibm.peer_review peer-review IC Plataforma repo Questões não relacionadas a incidentes
com.ibm.static_scan sonarqube, gosec
Para infraestrutura como código: terraform-fmt, terraform-validate, tflint
CI/CC Plataforma repo Problemas de incidentes/não incidentes
com.ibm.cloud.image_signing artifact-signing IC Plataforma repo Questões não relacionadas a incidentes
com.ibm.acceptance_tests jest IC Usuário artefato Questões não relacionadas a incidentes
com.ibm.dynamic_scan owasp-zap, owasp-zap-ui IC Plataforma artefato Problemas de incidentes/não incidentes
com.ibm.cloud.image_vulnerability_scan va, sysdig, xray CI/CC Plataforma artefato Problemas de incidentes/não incidentes
com.ibm.prod_change_request gitlab CD Plataforma artefato Questões não relacionadas a incidentes
com.ibm.close_change_request gitlab CD Plataforma artefato Questões não relacionadas a incidentes
com.ibm.cloud.slsa tekton-chains IC Plataforma artefato Questões não relacionadas a incidentes
com.ibm.cloud.verify_signature ciso-code-signing CD Plataforma artefato Questões não relacionadas a incidentes
com.ibm.pipeline_logs N/D CI/CD/CC Plataforma N/D N/D
com.ibm.pipeline_run_data N/D CI/CD/CC Plataforma N/D N/D
com.ibm.network_compliance IC Plataforma repo Problemas de incidentes/não incidentes

Quando uma varredura falha ou quando os anexos não podem ser analisados, a ferramenta cria automaticamente um problema não relacionado a incidentes para rastrear a falha.

Requisitos de ativos

As provas que são coletadas com esta ferramenta fazem parte do trabalho de coleta de provas do V2 e das atualizações de armário de provas relacionadas.

Este novo método focaliza-se em evidências baseadas em ativos, significando que as evidências estão conectadas ao artefato e repo através das varreduras e testes que executam sobre esses artefatos ou repos, e produziram resultados para provas. Por exemplo:

  • Um repo com um determinado commit torna-se um ativo commit, que é escaneado, criando evidências para o ativo commit.
  • Usando o mesmo repo e commit, uma imagem é construída. A imagem se torna um ativo que está relacionado com o ativo de origem, o repo e commit.
  • A imagem é escaneada, e evidências são criadas. Todos os resultados da varredura estão conectados através das evidências, seu ativo e os ativos relacionados.

Para fazer todo esse trabalho em conjunto, os ativos que são fornecidos com os parâmetros --asset-type e --asset-key devem obedecer a alguns requisitos:

repo ativos adicionados usando o comando save_repo

Verifique a referência de comandos para obter informações de uso exato.

Campos obrigatórios:

  • url O repositório URL.
  • commit O commit SHA.

artifact ativos adicionados usando o comando save_artifact

Verifique a referência de comandos para obter informações de uso exato.

Campos obrigatórios:

  • name O nome do artefato Por exemplo, para uma imagem, inclua o registro, o namespace e a imagem (exemplo: us.icr.io/team-images/service).
  • digest O resumo do artefato (exemplo: sha256:a2292ed2b82c7a51d7d180c3187dbb0f7cc9ab385a68484c4f117e994acd6192).

Mudanças necessárias em save_artifact para não imagens: a evidência de coleta agora suporta todos os tipos de ativos. Para coletar evidências para trabalhar em qualquer tipo de ativo save_artifact deve salvar explicitamente o arquivo com a extensão “ type ”, por exemplo, zip save_artifact artifact-1 type=zip .... No script de coleta de evidências, o asset-type deve ser um artefato e o tipo é consultado a partir do artefato. Para que esse processo funcione, a inclusão de ativo do bloqueador de cacau foi modificada para incluir ativo de qualquer tipo. Depois de salvo, o script de evidência de coleta pode ser chamado como abaixo:

collect-evidence --tool-type toolType --evidence-type artifact --asset-key artifact-1 ...

Consulte nosso aplicativo de amostra para obter uma implementação de amostra para deployment o tipo https://us-south.git.cloud.ibm.com/open-toolchain/hello-compliance-app

Com essas mudanças, o script collect-evidence processa todos os tipos de artefatos, incluindo artefatos de imagem e não imagem.

Diversos ativos em coletar-evidência

Ao usar a evidência de coleta, é possível configurar a coleção simultânea de evidências para diversos ativos Você inicia a coleção de evidências usando a sinalização --assets, que especifica vários pares de chave de ativo e de tipo de ativo Por exemplo, input --assets asset-key1:asset-type1 --assets asset-key2:asset-type2. Se você escolher essa opção, não indique chave de ativo e tipo de ativo separadamente.

Lembre-se destes pontos-chave sobre a coleção de diversos ativos:

  • status, attachment, tool-type, evidence-type e upload-logs são constantes em todos os ativos.
  • Por padrão, quando você designa diversos ativos, o processamento de evidência segue o fluxo anterior Se você especificar um único ativo, o processamento de evidência ocorrerá por meio de um fluxo específico para a ferramenta ou anexo.
  • No caso de falha, os problemas são criados por ativo Esses problemas são encerrados após uma nova execução bem-sucedida da coleção de evidências O encerramento está correlacionado com os ativos que você especificou.
  • Um arquivo de evidência singular é gerado, que apresenta um ID que abrange todos os ativos combinados.