デビルス+ACR+トリヴィ

7756 ワード

挨拶私の仲間の技術擁護者と専門家.
この記事では、Aquure Devopsパイプラインを使用してAquasec TrivyとAzureコンテナレジストリでDocker画像をスキャンする方法を示します
要件
  • Azureコンテナレジストリ
  • Azureストレージアカウント
  • Azureリソースマネージャサービス接続
  • Dockerレジストリ( Azureコンテナレジストリ)サービス接続
  • Dockerfile
  • サンプルHTMLファイル
  • Azure devopsパイプライン( YAML )
  • トリヴィはファイルを無視します
    パイプラインはどうしますか?
    #
    パイプラインタスク
    1 .
    をビルドし、イメージをACRでプッシュ
    2 .
    アクアシートリヴィのダウンロードとインストール
    3 .
    トリビュートスキャンを実行し、スキャン結果をコピーする
    4 .
    工芸品を発行する
    5 .
    発表された成果物をダウンロードしてください
    6 .
    日付タイムスタンプディレクトリでBlobストレージコンテナにAquaSecトリヴィスキャンレポートをコピーする
    trivyはなぜファイルを無視するのですか?
    画像のスキャン後、低、中、高、重要な脆弱性を識別します.CVE(一般的な脆弱性と露出)は、レポートに記載されています.いくつかの理由のために、アプリケーションチームは、リスクを受け入れて、スキャンレポートから低いと媒体の脆弱点をスキップしたいと思います.ファイルをスキャンして再度パイプラインを実行します.リストされたCvesはもはやスキャンレポートにありません.
    コードリポジトリ

    アーリンダム0310018 / トリプル



    以下にDockerファイルの内容を示します.
    FROM nginx:1.15.9-alpine
    COPY . /usr/share/nginx/html
    
    以下にHTMLファイルの内容を示します.
    <html>
    <head>
        <title>TEST - ARINDAM MITRA</title>
    </head>
    
    </style>
    <body>
        <h1 style="font-size:50px; color:#000000; text-align: center">TEST - ARINDAM MITRA</h1>
    </body>
    </html>
    
    以下はYAMLファイルの内容です.
    trigger:
      none
    
    resources:
    - repo: self
    
    ###############################################
    # All Declared Variables are listed below:-
    ###############################################
    variables:
      dockerRegistryServiceConnection: '52409f6c-7855-4be2-a142-7192521b3e3f'
      imageRepository: 'amimagescantrivy'
      containerRegistry: 'ampocapplacr.azurecr.io'
      storageaccount: 'am4prodvs4core4shell'
      resourcegroup: 'Demo-Blog-RG'
      sacontainername: 'trivy-scan-reports'
      serviceconn: 'amcloud-cicd-service-connection' 
      dockerfilePath: '$(Build.SourcesDirectory)/ACR+Trivy/Dockerfile'
      target: $(build.artifactstagingdirectory)
      artifact: AM
      tag: '$(Build.BuildId)'
    
      vmImageName: 'ubuntu-latest'
    
    stages:
    - stage: BUILD
      displayName: Build and Push Stage
      jobs:
      - job: BUILD_JOB
        displayName: BUILD IMAGE
        pool:
          vmImage: $(vmImageName)
        steps:
    
    #####################################
    # Build and Push the Image to ACR:-
    #####################################    
        - task: Docker@2
          displayName: BUILD AND PUSH IMAGE TO ACR
          inputs:
            command: buildAndPush
            repository: $(imageRepository)
            dockerfile: $(dockerfilePath)
            containerRegistry: $(dockerRegistryServiceConnection)
            tags: |
              $(tag)
    
    #######################################
    # Download and Install Aquasec Trivy:-
    #######################################
        - task: CmdLine@2
          displayName: DOWNLOAD AND INSTALL AQUASEC TRIVY
          inputs:
            script: |
             sudo apt-get install wget apt-transport-https gnupg lsb-release
             wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | sudo apt-key add -
             echo deb https://aquasecurity.github.io/trivy-repo/deb $(lsb_release -sc) main | sudo tee -a /etc/apt/sources.list.d/trivy.list
             sudo apt-get update
             sudo apt-get install trivy
             trivy -v
             pwd
    
    ##################################################################################
    # Execute Trivy Scan and Copy the Scan Results in Artifacts Staging Directory:-
    ##################################################################################
        - task: CmdLine@2
          displayName: RUN AQUASEC TRIVY SCAN AND COPY TO ARTIFACTS STAGING DIRECTORY
          inputs:
            script: |
              trivy image --exit-code 0 --severity LOW,MEDIUM $(containerRegistry)/$(imageRepository):$(tag) > low-med.txt
              trivy image --exit-code 1 --severity HIGH,CRITICAL $(containerRegistry)/$(imageRepository):$(tag) > high-critical.txt
              ls -l
              cp -rvf *.txt $(target)
    
    ##########################
    # Publish the Artifacts:-
    ##########################
        - task: PublishBuildArtifacts@1
          displayName: PUBLISH ARTIFACTS
          inputs:
            targetPath: '$(target)'
            artifactName: '$(artifact)'
    
    ######################################
    # Download the Published Artifacts:-
    ######################################
        - task: DownloadBuildArtifacts@1
          displayName: DOWNLOAD ARTIFACTS
          inputs:
            buildType: 'current'
            downloadType: 'single'
            downloadPath: '$(System.ArtifactsDirectory)'
    
    #########################################################
    # The Below Code Snippet did not work because it is 
    # only supported by "Windows" Build Agent
    #########################################################    
        # - task: AzureFileCopy@4
        #   displayName: COPY AQUASEC TRIVY SCAN REPORTS TO BLOB STORAGE
        #   inputs:
        #     SourcePath: '$(System.ArtifactsDirectory)'
        #     azureSubscription: 'amcloud-cicd-service-connection'
        #     Destination: 'AzureBlob'
        #     storage: '$(storageaccount)'
        #     ContainerName: '$(sacontainername)/$(Date)'
    
    ###################################################################################
    # Cmd in Line 118 - It works on Linux Build Agent because of the Date Format
    # Cmd in Line 119 - It works on Windows Build Agent because of the Date Format
    ###################################################################################
        - task: AzureCLI@1
          displayName: COPY AQUASEC TRIVY SCAN REPORTS TO BLOB STORAGE
          inputs:
            azureSubscription: '$(serviceconn)'
            scriptType: ps
            scriptLocation: inlineScript
            inlineScript: |
              az storage blob upload-batch -d $(sacontainername)/$(date "+%d-%m-%Y_%H-%M-%S") --account-name $(storageaccount) --account-key $(az storage account keys list -g $(resourcegroup) -n $(storageaccount) --query [0].value -o tsv) -s $(System.ArtifactsDirectory)/AM
    #         az storage blob upload-batch -d trivy-scan-reports/$(Get-Date -Format dd-MM-yyyy_HH-mm) --account-name $(storageaccount) --account-key $(az storage account keys list -g $(resourcegroup) -n $(storageaccount) --query [0].value -o tsv) -s $(System.ArtifactsDirectory)/AM
    
    
    以下の内容は以下のように無視されます.
    # All LOW and MEDIUM Vulnerabilities has been ignored (Except 2)!!!
    #CVE-2018-5711
    #CVE-2018-14048
    CVE-2018-14498
    CVE-2019-1547
    CVE-2019-1549
    CVE-2019-1551
    CVE-2019-1563
    CVE-2019-7317
    CVE-2019-11038
    CVE-2019-12904
    CVE-2019-13627
    CVE-2020-1971
    CVE-2020-14155
    CVE-2020-15999
    CVE-2020-24977
    CVE-2020-28928
    CVE-2021-3449
    CVE-2021-23841
    CVE-2021-23839
    
    パイプラインの結果

    アーティファクト掲載


    日付時刻スタンプディレクトリの下に保存コンテナ内に格納されたイメージスキャンレポート


    どのようにイメージのスキャンレポートのようになります
    高および重大な脆弱性イメージスキャンレポート:

    低および中の脆弱性イメージスキャン報告:-

    注意-重大度媒体を持つ2つのCvesを見る唯一の理由は、彼らがコメントアウトされているからです.trivyignore file