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 librarylibgccshared 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:
- Shell Script Wrapper (
collect-evidence): Interface tradicional de script bash que oferece compatibilidade com versões anteriores - 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-typeO ID da ferramenta que fornece dados de evidência. Por exemplo: "owasp-zap-ui", "cra"--evidence-typeO ID do tipo de prova. Por exemplo:com.ibm.image_vulnerability_scan,com.ibm.unit_tests--asset-keyA chave em ativos de pipelinectl. Para os seguintes comandosload_artifact <key>ouload_repo <key>--asset-typeO tipo de ativo a partir de pipelinectl e pode ser um dos seguintes tipos:repo,artifact--statusO status da evidência pode ser um dos seguintes:success,pending,failure--assetsEspecifique 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-type2Se você usar essa opção, não especifique asset-key e asset-type separadamente.
O parâmetro a seguir é opcional:
--attachmentO 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.--metaMetadados 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-commentO 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_testscom.ibm.detect_secretscom.ibm.branch_protectioncom.ibm.static_scancom.ibm.code_vulnerability_scancom.ibm.code_bom_checkcom.ibm.code_cis_checkcom.ibm.cloud.image_vulnerability_scancom.ibm.cloud.image_signingcom.ibm.dynamic_scancom.ibm.cloud.image_signingcom.ibm.acceptance_testscom.ibm.prod_change_requestcom.ibm.close_change_reques
Coleta de tipos de evidências e mapeamento de ferramentas
| 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:
urlO repositório URL.commitO 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:
nameO nome do artefato Por exemplo, para uma imagem, inclua o registro, o namespace e a imagem (exemplo:us.icr.io/team-images/service).digestO 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-typeeupload-logssã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.