Vamos organizar esse projeto em duas partes, sendo a primeira os requisitos e a segunda o processo de fato.
Para a pipeline em si, estou utilizando uma imagem Windows e criei um grupo de variáveis onde armazenei as duas credenciais de API, pode saber mais sobre elas aqui, utilizando os nomes padrões veracode_api_key_id e veracode_api_key_secret:
trigger: - main variables: - group: Veracode-DAST - name: veracodeAppName value: MSDN.Gruyere pool: vmImage: windows-latest Na variável veracodeAppName, colocamos o nome do perfil de aplicação onde vinculamos o resultado do DAST
Para os requisitos, precisamos ter o HTTPIE e o autenticador da Veracode, podemos instalar eles via CLI:
steps: - task: PowerShell@2 inputs: targetType: 'inline' script: | pip install httpie pip install veracode-api-signing displayName: 'Install Requirements' Para receber os resultados, vamos utilizar uma combinação de chamadas de API com o HTTPIE e o tratamento das informações via Powershell. O nosso fluxo é:
- Recebemos o nome do perfil
- Usamos ele para obter o código da aplicação/GUID
- Filtramos a ultima analise DAST completa
- Validamos se nela existem falhas, e caso existam, exibimos elas
Traduzindo para o Powershell, criamos um script chamado DAST-Resultados.ps1 com os seguintes comandos:
[CmdletBinding()] param ( [Parameter()] $veracodeAppName ) # Recebe os detalhes do perfil de App $infosApp = http --auth-type=veracode_hmac GET "https://api.veracode.com/appsec/v1/applications/?name=$veracodeAppName" | ConvertFrom-Json $guidApp = $infosApp._embedded.applications.guid # Recebe os scans DAST $historicoDAST = http --auth-type=veracode_hmac GET "https://api.veracode.com/appsec/v2/applications/$guidApp/findings?scan_type=DYNAMIC&violates_policy=TRUE" | ConvertFrom-Json $falhasDAST = $historicoDAST._embedded.findings # Valida se existe alguma falha que viola a politica $totalFalhas = $falhasDAST.count if ($totalFalhas -gt 0) { Write-Host "Foram encontradas falhas nesse scan" $falhasDAST Write-Error -Message "Total de Falhas: $totalFalhas" -Category SecurityError } No meu caso, salvei ele dentro da raiz do repositório.
Voltando ao nosso pipeline, podemos iniciar o script dessa forma:
- task: PowerShell@2 inputs: filePath: 'DAST-Resultados.ps1' arguments: '$(veracodeAppName)' displayName: 'Resultados DAST' No final, nosso script completo fica:
# O script PS1 está na seção de SOs/Windows trigger: - main variables: - group: Veracode-DAST - name: veracodeAppName value: MSDN.Gruyere pool: vmImage: windows-latest steps: - task: PowerShell@2 inputs: targetType: 'inline' script: | pip install httpie pip install veracode-api-signing displayName: 'Install Requirements' - task: PowerShell@2 inputs: filePath: 'DAST-Resultados.ps1' arguments: '$(veracodeAppName)' displayName: 'Resultados DAST'
Top comments (0)