Terrascan

Azure YAML

trigger: none
pr: none

pool:
  vmImage: 'ubuntu-latest'

stages:
- stage: QualityCheckStage
  displayName: Quality Check Stage
  jobs:
    - job: TerraScanJob
      displayName: Run TerraScan Scan
      steps:
      - script: | 
          mkdir TerraScanReport
          docker pull accurics/terrascan
          docker run \
            --rm \
            --volume $(System.DefaultWorkingDirectory)/Infrastructure-Source-Code/terraform/azure:/iac \
            --workdir /iac \
            accurics/terrascan:latest scan \
              --iac-type terraform \
              --policy-type all \
              --verbose \
              --output xml > $(System.DefaultWorkingDirectory)/TerraScanReport/TerraScan-Report.xml
          
          docker run \
            --rm \
            --volume $(System.DefaultWorkingDirectory)/Infrastructure-Source-Code/terraform/azure:/iac \
            --workdir /iac \
            accurics/terrascan:latest scan \
              --iac-type terraform \
              --policy-type all \
              --verbose
        displayName: 'Accurics TerraScan Code Analysis'
      
      - script: |
          cd $(System.DefaultWorkingDirectory)/TerraScanReport
          ls -la
        displayName: 'DIR Contents'
        condition: always()
      
      # Publish the TerraScan report as an artifact to Azure Pipelines
      - task: PublishBuildArtifacts@1
        displayName: 'Publish Artifact: Terrascan Report'
        condition: succeededOrFailed()
        inputs:
          PathtoPublish: '$(System.DefaultWorkingDirectory)/TerraScanReport'
          ArtifactName: TerrascanReport

      - task: PublishTestResults@2
        displayName: Publish Terrascan Test Results
        condition: succeededOrFailed()
        inputs:
          testResultsFormat: 'JUnit' # Options JUnit, NUnit, VSTest, xUnit, cTest
          testResultsFiles: '**/*TerraScan-Report.xml'
          searchFolder: '$(System.DefaultWorkingDirectory)/TerraScanReport'
          mergeTestResults: false
          testRunTitle: Terrascan Scan
          failTaskOnFailedTests: false
          publishRunAttachments: true

GitHub Workflow;

name: INFA - IaC - TerraScan

on:
  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

jobs:
  terrascan_job:
    runs-on: ubuntu-latest
    name: TerraScan-Action
    steps:
    - name: Checkout repository
      uses: actions/checkout@v2

    - name: Run Terrascan IaC Scanner
      id: terrascan
      uses: accurics/terrascan-action@main
      with:
        iac_type: 'terraform' #Required (helm, k8s, kustomize, terraform)
        iac_version: 'v14' #(helm: v3, k8s: v1, kustomize: v3, terraform: v12, v14)
        policy_type: 'all' #optional (all, aws, azure, gcp, github, k8s) (default all)
        only_warn: false #optional (the action will only warn and not error when violations are found)
        sarif_upload: true
        #non_recursive:
        iac_dir: ./Infrastructure-Source-Code/terraform/azure/ #optional, default is .
        #policy_path: #optional (policy path directory for custom policies)
        #skip_rules: #optional (one or more rules to skip while scanning (example: "ruleID1,ruleID2")
        #config_path:
        #webhook_url:
        #webhook_token:
        verbose: true #optional (scan will show violations with additional details (Rule Name/ID, Resource Name/Type, Violation Category))

    - name: Upload SARIF file
      uses: github/codeql-action/upload-sarif@v1
      with:
        sarif_file: terrascan.sarif

Last updated