Adicionar o step na pipeline
O Security Gate é um template de steps do Azure DevOps. Ele roda logo depois do scan, no mesmo job, e antes do push da imagem e do deploy. Assim, no modo fail, uma imagem fora do prazo não chega ao registry.
1. Gerar o template
Seção intitulada “1. Gerar o template”No Workspace: AppSec → Config Stack → Pipeline → aba Security Gate.
| Campo | Para que serve | Padrão |
|---|---|---|
| Application name | Nome da aplicação. Vira o parâmetro appName e aparece no nome do step: [<appName>] Leavory Security Gate. |
my-application |
| Trivy report source | De onde o step lê o relatório (ver abaixo). | Leavory Trivy manifest |
| Trivy JSON report path | Só na opção Custom. Caminho do JSON no agente. Aceita vários arquivos separados por vírgula. | $(Build.ArtifactStagingDirectory)/trivy.json |
| Max days for CRITICAL | Limite em dias para CRITICAL. -1 desliga. |
7 |
| Max days for HIGH | Limite em dias para HIGH. -1 desliga. |
30 |
| When over the limit | Fail the pipeline para o build. Warn only deixa o build amarelo (Succeeded with issues). | Fail the pipeline |
| Only count vulnerabilities with a fix available | Ignora o que ainda não tem versão corrigida. | Desmarcado |
Trivy report source:
| Opção | Quando usar |
|---|---|
| Leavory Trivy manifest (same job) | Você usa os steps de scan gerados na aba Manifest generator. O Security Gate encontra os relatórios sozinho, pelo mesmo appName. |
| Custom path to a Trivy JSON report | Você já gera o relatório JSON de outra forma. Informe o caminho do arquivo. |
Clique em Download .yml (ou Copy) para baixar o security-gate-steps.yml.
2. Salvar no repositório
Seção intitulada “2. Salvar no repositório”Coloque o arquivo no repositório da aplicação, por exemplo em templates/security-gate-steps.yml, e confirme que a
variável secreta LEAVORY_TOKEN existe na pipeline.
3. Chamar o template
Seção intitulada “3. Chamar o template”Com o manifest de scan do Leavory:
steps: # ... build e scan da imagem - template: templates/security-gate-steps.yml parameters: appName: 'minha-aplicacao' # o mesmo appName do template de scan # depois: push da imagem, deploy...Com um relatório JSON que a sua pipeline já gera:
steps: # ... o step que gera $(Build.ArtifactStagingDirectory)/trivy.json - template: templates/security-gate-steps.yml parameters: appName: 'minha-aplicacao' trivyReport: '$(Build.ArtifactStagingDirectory)/trivy.json'Parâmetros do template
Seção intitulada “Parâmetros do template”Qualquer parâmetro pode ser trocado na chamada, sem gerar o arquivo de novo.
| Parâmetro | O que é |
|---|---|
appName |
Nome da aplicação |
trivyReport |
Só na opção Custom: caminho(s) do relatório JSON |
maxDaysCritical / maxDaysHigh |
Limites em dias (-1 desliga) |
mode |
fail ou warn |
onlyWithFix |
true para contar só o que tem correção |
image |
Imagem do Security Gate. latest é sempre a mais nova; use uma tag de versão (ex.: v20261013.2) para fixar |
Regra diferente só para uma pipeline:
- template: templates/security-gate-steps.yml parameters: appName: 'minha-aplicacao' maxDaysCritical: 3 maxDaysHigh: 15 mode: warnQuando a checagem é pulada
Seção intitulada “Quando a checagem é pulada”Nesses casos o step mostra um aviso e o build continua:
| Aviso | Causa |
|---|---|
LEAVORY_TOKEN secret variable not set, check skipped. |
A variável não existe ou não é secreta com esse nome |
no Trivy JSON report found, check skipped. |
O relatório não foi gerado ou o caminho está errado |
could not run the check (exit 2), skipped. |
Token recusado (inválido ou revogado) ou base indisponível |
could not run the check (exit 125), skipped. |
O agente não conseguiu baixar ou iniciar a imagem |