이미지 분석
- 컨테이너 이미지의 심층 검사를 수행하여 모든 OS의 패키지, 파일 및 소프트웨어 아티팩트 (Ruby GEMs, JARs, Node Modules) Cataloging화 한다.
정책 관리
- 보안 모범 사례를 기반으로 정책을 정의하고 적용하여 위험한 빌드가 완료되지 않고 문제가 있는 이미지가 배포되지 않도록 한다.
Continuous Monitoring
- 이미지가 업데이트되거나 CVE가 추가 또는 제거되거나 새로운 모범 사례가 설정 될 때 생성 된 문제를 파악하기 위해 정책을 지속적으로 관리한다.
CI / CD 통합
- Anchore Engine을 CI/CD 파이프 라인에 통합하여 이미지가 사용자 지정 보안 및 요구 사항을 충족할 때만 성공적으로 빌드되도록한다.
커스터마이징
- 이미지 내부 Package, Whitelists, Blacklists, 설정 파일, 보안, Manifest, 포트 등에 대한 취약점을 점검하기 정책을 유연하게 정의할 수 있다.
- 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 기반의 Infra이기 때문에 GCP의 VPN에서 설치 할 때 설정해줬던 Anchore의 Service Port를 허용해줘야만 Jenkins에서 연동이 가능합니다.
다음과 같이 Jenkins-환경설정에서 Anchore Container Image Scanner 설정의 Servic Port를 Anchore와 GCP에서 Allow 해준 Port를 기입하면 됩니다.
- 위에 있는 연동을 위한 환경설정들이 모두 마무리 되었으면 아래처럼 파이프라인 스크립트내에 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에서 그래프가 꺾여 내려갑니다.