Para construirmos um pipeline de validação no Azure, vamos precisar inicialmente ter em mãos as credenciais necessárias, pode saber como obtê-las aqui.
Pensando no fluxo que vamos adotar, começamos com o empacotamento dos arquivos necessários para a análise, conforme o guia de empacotamento. Isso varia de acordo com a linguagem do projeto que vamos analisar.
Ao iniciar o nosso fluxo, vamos criar um pacote zipando os arquivos necessários e atribuindo um nome qualquer, sendo que em nosso exemplo vamos utilizar o número de build:
- task: ArchiveFiles@2 inputs: rootFolderOrFile: "$(Agent.BuildDirectory)" includeRootFolder: true archiveType: "zip" archiveFile: "$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip" replaceExistingArchive: true displayName: "Criando pacote para análise"
Nosso próximo passo é adicionar o SCA em nossa análise.
Um ponto interessante dele, é que não é preciso aguardar o build completar para utilizá-lo, como vai ser preciso no Pipeline Scan, então caso o projeto seja feito com uma linguagem compilada, pode paralelizar essa etapa com a de build.
Para implementar o SCA, vamos precisar receber a variável com a credencial e rodar o agente na pasta onde tem o arquivo com as informações dos componentes de terceiros, isso é algo que varia conforme a linguagem e pode consultar os detalhes aqui.
Em YAML, podemos fazer dessa forma:
- bash: | cd $(Pasta_Projeto) export SRCCLR_API_TOKEN=$(SRCCLR_API_TOKEN) curl -sSL https://download.sourceclear.com/ci.sh | bash -s – scan --update-advisor --allow-dirty displayName: "Veracode SCA"
Caso queira consultar todos os parâmetros disponíveis, consulte essa documentação.
Depois da configuração do SCA, precisamos configurar o Pipeline Scan. O processo é basicamente fazer o download de um zip com ele do site da Veracode e então descompactar:
- bash: | apt-get install unzip curl -O -L https://downloads.veracode.com/securityscan/pipeline-scan-LATEST.zip && unzip pipeline-scan-LATEST.zip -d $(Build.ArtifactStagingDirectory) displayName: "Download Veracode Pipeline Scanner"
Após esse download, podemos utilizá-lo. Em nosso desenho, vamos utilizar como validador uma política que criamos dentro do Portal da Veracode, então antes do scan de fato, vamos fazer o download desse arquivo e política e passar ele como um parâmetro para a análise.
As credenciais que obtemos vão ser utilizadas dentro de duas variáveis, Veracode ID e Veracode Key.
Em YAML ficará assim:
- bash: | export VERACODE_ID=$(VERACODE_ID) export VERACODE_KEY=$(VERACODE_KEY) echo "Downloading policy from Veracode" java -jar $(Build.ArtifactStagingDirectory)/pipeline-scan.jar --veracode_api_id $(VERACODE_ID) --veracode_api_key $(VERACODE_KEY) --request_policy="Veracode Recommended Very High + SCA" echo "Running Veracode Scan" java -jar $(Build.ArtifactStagingDirectory)/pipeline-scan.jar --veracode_api_id $(VERACODE_ID) --veracode_api_key $(VERACODE_KEY) --file "$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip" --issue_details true --policy_file="Veracode_Recommended_Very_High_+_SCA.json" echo "Save Veracode results" mkdir results_veracode mv results.json results_veracode/results.json mv filtered_results.json results_veracode/filtered_results.json displayName: "Run Veracode Pipeline Scan"
Por fim, vamos publicar os resultados obtidos criando um artefato com eles. Assim ao final de cada execução vamos ter um relatório sendo gerado:
- task: PublishPipelineArtifact@1 displayName: "Publicando Resultados Veracode" inputs: targetPath: '$(Build.SourcesDirectory)/results_veracode' artifact: 'Veracode Analysis' publishLocation: 'pipeline'
Top comments (0)