HomeAbout
[DevOps] DevSecOps 파이프라인: Jenkins에 Anchore를 활용한 Docker 이미지 스캔 Test 통합 Build 자동화
DevOps
[DevOps] DevSecOps 파이프라인: Jenkins에 Anchore를 활용한 Docker 이미지 스캔 Test 통합 Build 자동화
NASA1515
NASA1515
August 10, 2021
1 min

사용 할 툴은 다음과 같습니다.

  • Jenkins
  • Anchore

✔ Anchore ??


  • Docker Image의 취약점을 스캔하는 스캐너라고 생각하면 됩니다. Anchore 오픈 소스 버전은 다음에서 참고할 수 있습니다.
    https://anchore.com/opensource/


기능


이미지 분석

  • 컨테이너 이미지의 심층 검사를 수행하여 모든 OS의 패키지, 파일 및 소프트웨어 아티팩트 (Ruby GEMs, JARs, Node Modules) Cataloging화 한다.

정책 관리

  • 보안 모범 사례를 기반으로 정책을 정의하고 적용하여 위험한 빌드가 완료되지 않고 문제가 있는 이미지가 배포되지 않도록 한다.

Continuous Monitoring

  • 이미지가 업데이트되거나 CVE가 추가 또는 제거되거나 새로운 모범 사례가 설정 될 때 생성 된 문제를 파악하기 위해 정책을 지속적으로 관리한다.

CI / CD 통합

  • Anchore Engine을 CI/CD 파이프 라인에 통합하여 이미지가 사용자 지정 보안 및 요구 사항을 충족할 때만 성공적으로 빌드되도록한다.

커스터마이징

  • 이미지 내부 Package, Whitelists, Blacklists, 설정파일, 보안, Manifest, 포트 등에 대한 취약점을 점검하기 정책을 유연하게 정의할 수 있다.

Anchore 설치 (Docker)


  • Anchore 설치와 Jenkins와 연동은 이미 많은 분들이 포스트하셨습니다. 따라서 제 포스트에서는 간단하게 명령어로만 정리하였습니다.

설치 명령어

$ curl https://docs.anchore.com/current/docs/engine/quickstart/docker-compose.yaml > docker-compose.yaml
$ docker-compose up -d

$ yum install epel-release
$ yum install python-pip
$ pip install anchorecli

추가적으로 anchore를 jenkins에서 사용하기 위해서는 plugin을 설치해야 합니다. 링크 - plugin

  • plugin설치가 완료된후 jenkins의 configuration system 메뉴에서 Anchore Container Image Scanner 설정을 추가합니다. (아래사진)

Jenkins에서 동작하는 Anchore는 다음과 같은 WorkFlow를 가집니다.



GCP 방화벽 설정

  • GCP 기반의 Infra이기 때문에 GCP의 VPN에서 설치 할 때 설정해줬던 Anchore의 Service Port를 허용해줘야만 Jenkins에서 연동이 가능합니다.

다음과 같이 Jenkins-환경설정에서 Anchore Container Image Scanner 설정의 Servic Port를 Anchore와 GCP에서 Allow 해준 Port를 기입하면 됩니다.

캡처22


Jenkins Pipeline Script 수정

  • 위에 있는 연동을 위한 환경설정들이 모두 마무리 되었으면 아래처럼 파이프라인 스크립트내에 Anchore의 Analyse부분을 추가해줍니다.

스크립트

        stage('Anchore analyse') {  
            steps {  
                catchError(buildResult: 'SUCCESS', stageResult: 'SUCCESS') {
                writeFile file: 'anchore_images', text: '34.64.237.112/nasa1515/wonseok'  
                anchore name: 'anchore_images'  
                }
            }
        }

파이프라인 실행 결과

  • 제대로 연동되었다면 파이프라인이 종료된 뒤 가시적인 로그를 볼 수 있습니다.

Anchore 스캐닝 리포트


정상 스캐닝 여부 확인

  • Anchore의 리포트는 확인 할 수 있지만 정말 정확한 스캐닝을하는 건지 잘 모르겠습니다. 그래서 나온 ERROR 중 일부를 수정해서 결과가 반영되는지를 확인해보죠

Anchore의 리포트를 보니 아래와 같은 이슈가 있었습니다.

  • 로그확인을 해보니 - Oracle MySQL 5.7.14 이상으로 버전 업그레이드 필요하다는 로그였네요

바로 관련된 소스를 수정합니다!

  • 간단하게 연결되어있는 DVWA 앱의 pom.xml의 소스를 수정해서 반영시켜봤습니다.

수정해서 파이프라인을 동작시키니 정상적으로 스캐닝 하고있음을 확인했습니다.


Anchore 리포트 로그의 MYSQL 항목을 더 이상 찾을 수 없습니다.


가시적인 그래프가 줄어 들었음을 확인 할 수 있습니다.

  • 다음과 같이 마지막 Build에서 그래프가 꺾여 내려갑니다.

Tags

#DevOps#Jenkins
NASA1515

NASA1515

Data Engineer

Hello I'M Wonseok aka NASA1515

Expertise

Public Cloud
k8s/Docker
Python

Social Media

instagramwebsitelinkedingithub

Related Posts

[DevOps] Maven을 사용한 Java Application 빌드 및 배포 & DevSecOps Pipeline 통합 및 자동화 고도화
[DevOps] Maven을 사용한 Java Application 빌드 및 배포 & DevSecOps Pipeline 통합 및 자동화 고도화
2021-08-20
1 min

Topics

CloudDevelop

Social Media