Trivy를 사용하여 Docker 이미지 스캔

내 워크플로우



Docker는 현재 DevOps 도메인의 주요 도구 중 하나입니다. 매일 여러 개의 Docker 이미지를 처리해야 할 수도 있습니다. 틀림없이.
과거에는 Docker 이미지를 내 PC에서 수동으로 생성하고 게시했지만 이제 Github Actions를 사용하면 내 업무가 매우 빠르고 쉽게 모든 것을 Github에 맡깁니다.

예를 들어 my repository (Memcached-Admin)을 보십시오. Memcached 서버를 관리하기 위한 Dockerized PHP 웹 애플리케이션입니다. 이 프로젝트를 사용하려면 다음 단계를 통과해야 합니다.
  • 빌드 이미지
  • 보안 취약점 확인 및 스캔
  • Dockerhub에 푸시
  • 다른 Docker 레지스트리로 푸시

  • 이러한 작업을 일반적으로 수행하면 시간이 낭비되며 이미지를 구축하는 데 필요한 사항을 계획한 후에도 보안 및 보안 버그가 없는지 확인해야 합니다. 여기에 최고의 도구 중 하나가 있습니다 ... Trivy 💪. CI에 적합한 컨테이너 및 기타 아티팩트를 위한 간단하고 포괄적인 취약성 스캐너입니다.

    Github Action 덕분에 이제 모든 것을 하나로 모을 수 있습니다.

    전체 프로세스를 처리하기 위해 간단한 워크플로우를 작성했습니다.


    하타미아라쉬7 / Memcached-관리자


    도커용 Memcached 관리자





    Memcached 관리자



    이 프로그램을 사용하면 서버 시작부터 실시간(top-like)으로 get, set, delete, increment, decrement, evictions, reclaimed, cas 명령에 대한 통계와 서버 통계(네트워크, 항목 , 서버 버전) googlecharts 및 서버 내부 구성 포함
    더 나아가 각 서버 슬래브, 점유, 낭비된 메모리 및 항목(키 및 값)을 볼 수 있습니다.
    다른 부분은 모든 memcached 서버에 대한 명령을 실행할 수 있습니다: get, set, delete, flush_all 뿐만 아니라 telnet으로 모든 명령(통계와 같은)을 실행할 수 있습니다.

    통계


  • 각각 또는 모든 memcached 서버, 항목, 제거됨, 회수된 항목에 대한 통계...
  • 모든 명령에 대한 통계: set, get, delete, incr, decr, cas ...
  • 석판 통계(메모리, 페이지, 메모리 낭비, 항목)
  • 아이템 통계(슬래브에서 아이템을 본 다음 각 키에 대한 데이터)
  • 네트워크 통계(트래픽, 대역폭)

  • 명령


  • 실행 명령: 관리 또는 디버깅을 위해 서버에서 get, set, delete, flush_all 실행
  • 데이터 가져오기…


  • View on GitHub

    제출 카테고리:



    메인테이너 머스트해브

    Yaml 파일 또는 코드 링크




    name: Docker Image CI
    
    on:
      push:
        branches: [master]
      pull_request:
        branches: [master]
    
    jobs:
      build:
        name: Build
        runs-on: ubuntu-latest
        steps:
          - name: Checkout code
            uses: actions/checkout@v2
    
          - name: Build the Docker image
            run: docker build -t memcached-admin:${{ github.sha }} .
    
          - name: Run Trivy vulnerability scanner
            uses: aquasecurity/trivy-action@master
            with:
              image-ref: "memcached-admin:${{ github.sha }}"
              exit-code: "1"
              ignore-unfixed: true
              vuln-type: "os,library"
              severity: "CRITICAL,HIGH"
              format: "template"
              template: "@/contrib/sarif.tpl"
              output: "trivy-results.sarif"
    
          - name: Upload Trivy scan results to GitHub Security tab
            uses: github/codeql-action/upload-sarif@v1
            with:
              sarif_file: "trivy-results.sarif"
    


    이 워크플로우에는 4개의 간단한 단계가 있습니다.
  • 내 코드 확인
  • Docker 이미지 빌드
  • Trivy를 사용하여 스캔
  • GitHub Code scanning에 결과 업로드

  • 내 프로젝트의 Security tab에서 결과를 볼 수 있습니다.



    이제 다른 워크플로를 사용하여 내 이미지를 Dockerhub에 푸시할 수 있습니다.

    name: Publish Dockerhub
    
    on:
      schedule:
        - cron: "0 2 * * *"
      push:
        branches: [master]
      pull_request:
        branches: [master]
    
    env:
      REGISTRY: docker.io
      IMAGE_NAME: hatamiarash7/memcached-admin
    
    jobs:
      build:
        runs-on: ubuntu-latest
        permissions:
          contents: read
          packages: write
    
        steps:
          - name: Checkout repository
            uses: actions/checkout@v2
    
          - name: Log into registry ${{ env.REGISTRY }}
            if: github.event_name != 'pull_request'
            uses: docker/login-action@28218f9b04b4f3f62068d7b6ce6ca5b26e35336c
            with:
              registry: ${{ env.REGISTRY }}
              username: ${{ github.actor }}
              password: ${{ secrets.DOCKERHUB_TOKEN }}
    
          - name: Extract Docker metadata
            id: meta
            uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38
            with:
              images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
    
          - name: Build and push Docker image
            uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc
            with:
              context: .
              push: ${{ github.event_name != 'pull_request' }}
              tags: ${{ steps.meta.outputs.tags }}
              labels: ${{ steps.meta.outputs.labels }}
    


    Github Action의 또 다른 놀라운 기능은 작업 흐름을 실행하도록 예약할 수 있다는 것입니다. 예를 들어 매일 02:00에 이미지를 푸시합니다.

    ...
    
    on:
      schedule:
        - cron: "0 2 * * *"
    
    ...
    


    이제 모든 것이 자동으로 완료되며 변경 사항을 저장소에 푸시하기만 하면 됩니다 😍

    추가 리소스/정보



    이 작업을 사용했습니다. aquasecurity/trivy-action

    좋은 웹페이지 즐겨찾기