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)