Docker Scout 빠른 시작
Docker Scout 빠른 시작 (quickstart)
Docker Scout는 이미지 내용을 분석하고 감지한 패키지와 취약점의 상세 보고서를 생성해요. 이미지 분석으로 발견된 이슈를 시정하는 방법에 대한 제안도 제공할 수 있어요.
이 가이드는 취약한 컨테이너 이미지를 가져와 Docker Scout로 취약점을 식별·수정하고, 시간에 따른 이미지 버전을 비교하고, 결과를 팀과 공유하는 방법을 보여 줘요.
1단계: 설정 (Setup)
이 예시 프로젝트는 따라 할 수 있는 취약한 Node.js 애플리케이션을 포함해요.
-
저장소를 클론하세요.
$ git clone https://github.com/docker/scout-demo-service.git -
디렉토리로 이동하세요.
$ cd scout-demo-service -
docker login명령을 실행하거나 Docker Desktop으로 로그인해 Docker 계정에 로그인했는지 확인하세요. -
이미지를 빌드하고
<ORG_NAME>/scout-demo:v1로 push하세요.<ORG_NAME>은 push하는 Docker Hub 네임스페이스예요.$ docker build --push -t <ORG_NAME>/scout-demo:v1 .
2단계: Docker Scout 활성화
Docker Scout는 기본적으로 모든 로컬 이미지를 분석해요. 원격 저장소의 이미지를 분석하려면 먼저 활성화해야 해요. Docker Hub, Docker Scout Dashboard, CLI에서 할 수 있어요. 개요 가이드에서 방법을 알아보세요.
-
docker login명령으로 Docker 계정에 로그인하거나 Docker Desktop의 Sign in 버튼을 사용하세요. -
다음으로
docker scout enroll명령으로 조직을 Docker Scout에 등록하세요.$ docker scout enroll <ORG_NAME> -
docker scout repo enable명령으로 이미지 저장소에 Docker Scout를 활성화하세요.$ docker scout repo enable --org <ORG_NAME> <ORG_NAME>/scout-demo
3단계: 이미지 취약점 분석
빌드 후 docker scout CLI 명령으로 Docker Scout가 감지한 취약점을 확인하세요.
이 가이드의 예시 애플리케이션은 취약한 버전의 Express를 사용해요. 다음 명령은 방금 빌드한 이미지에서 Express에 영향을 주는 모든 CVE를 보여 줘요.
$ docker scout cves --only-package express
Docker Scout는 기본적으로 가장 최근에 빌드한 이미지를 분석하므로 이 경우 이미지 이름을 지정할 필요가 없어요.
docker scout cves 명령에 대해 더 알아보려면 CLI 참조 문서를 참고하세요.
4단계: 애플리케이션 취약점 수정
Docker Scout 분석 후 오래된 버전의 express 패키지로 인한 high 취약점 CVE-2022-24999가 발견됐어요.
express 패키지의 4.17.3 버전이 취약점을 수정해요. 따라서 package.json 파일을 새 버전으로 갱신하세요.
"dependencies": {
- "express": "4.17.1"
+ "express": "4.17.3"
}
새 태그로 이미지를 다시 빌드하고 Docker Hub 저장소로 push하세요.
$ docker build --push -t <ORG_NAME>/scout-demo:v2 .
docker scout 명령을 다시 실행하고 HIGH CVE-2022-24999가 더 이상 존재하지 않는지 확인하세요.
$ docker scout cves --only-package express
✓ Provenance obtained from attestation
✓ Image stored for indexing
✓ Indexed 79 packages
✓ No vulnerable package detected
## Overview
│ Analyzed Image
────────────────────┼───────────────────────────────────────────────────
Target │ mobywhale/scout-demo:v2
digest │ ef68417b2866
platform │ linux/arm64
provenance │ https://github.com/docker/scout-demo-service.git
│ 7c3a06793fc8f97961b4a40c73e0f7ed85501857
vulnerabilities │ 0C 0H 0M 0L
size │ 19 MB
packages │ 1
## Packages and Vulnerabilities
No vulnerable packages detected
5단계: 정책 준수 평가
특정 패키지에 기반한 취약점 검사는 유용할 수 있지만, 공급망 관리(conduct)를 개선하는 가장 효과적인 방법은 아니에요.
Docker Scout는 정책 평가도 지원하는데, 이는 이미지의 이슈를 감지·수정하기 위한 더 높은 수준의 개념이에요. 정책은 조직이 이미지가 공급망 요구사항에 부합하는지 추적하게 하는 사용자 지정 가능한 규칙 집합이에요.
정책 규칙은 조직마다 다르기 때문에 어떤 조직의 정책에 대해 평가할지 지정해야 해요. docker scout config 명령으로 Docker 조직을 구성하세요.
$ docker scout config organization <ORG_NAME>
✓ Successfully set organization to <ORG_NAME>
이제 quickview 명령을 실행해 방금 빌드한 이미지의 준수 상태 개요를 얻을 수 있어요. 이미지는 기본 정책 구성에 대해 평가돼요. 다음과 유사한 출력이 보일 거예요.
$ docker scout quickview
...
Policy status FAILED (2/6 policies met, 2 missing data)
Status │ Policy │ Results
─────────┼──────────────────────────────────────────────┼──────────────────────────────
✓ │ No copyleft licenses │ 0 packages
! │ Default non-root user │
! │ No fixable critical or high vulnerabilities │ 2C 16H 0M 0L
✓ │ No high-profile vulnerabilities │ 0C 0H 0M 0L
? │ No outdated base images │ No data
? │ Supply chain attestations │ No data
상태 열의 느낌표(!)는 위반된 정책을 나타내요. 물음표(?)는 평가를 완료할 메타데이터가 충분하지 않다는 뜻이에요. 체크 표시(✓)는 준수를 나타내요.
6단계: 준수 개선
quickview 명령의 출력은 개선할 여지가 있음을 보여 줘요. 이미지에 provenance와 SBOM 인증이 없어 일부 정책(No data)은 성공적으로 평가할 수 없었어요. 이미지는 몇 가지 평가에서도 실패했어요.
정책 평가는 취약점 검사 그 이상을 해요. Default non-root user 정책을 예로 들어 볼게요. 이 정책은 이미지가 기본적으로 root 슈퍼유저로 실행되도록 설정되지 않도록 보장해 런타임 보안을 강화하는 데 도움을 줘요.
이 정책 위반을 해결하려면 Dockerfile을 편집해 USER 명령을 추가해 비-루트 사용자를 지정하세요.
CMD ["node","/app/app.js"]
EXPOSE 3000
+ USER appuser
또한 더 완전한 정책 평가 결과를 얻으려면 이미지에 SBOM과 provenance 인증을 첨부해야 해요. Docker Scout는 provenance 인증을 사용해 이미지가 어떻게 빌드됐는지 결정해 더 나은 평가 결과를 제공해요.
인증으로 이미지를 빌드하려면 먼저 containerd 이미지 저장소를 활성화해야 해요 (또는 docker-container 드라이버로 사용자 지정 빌더를 만드세요). 클래식 이미지 저장소는 provenance 인증이 이미지에 첨부되는 방식인 매니페스트 목록을 지원하지 않아요.
Docker Desktop에서 Settings를 여세요. General 섹션에서 Use containerd for pulling and storing images 옵션이 체크되어 있는지 확인하고 Apply를 선택하세요. 이미지 저장소를 바꾸면 비활성화된 이미지 저장소의 이미지와 컨테이너가 다시 전환할 때까지 일시적으로 숨겨진다는 점에 유의하세요.
containerd 이미지 저장소를 활성화한 상태에서 새 v3 태그로 이미지를 다시 빌드하세요. 이번에는 --provenance=true와 --sbom=true 플래그를 추가하세요.
$ docker build --provenance=true --sbom=true --push -t <ORG_NAME>/scout-demo:v3 .
7단계: Dashboard에서 보기
인증이 있는 갱신된 이미지를 push한 후 다른 렌즈인 Docker Scout Dashboard로 결과를 볼 차례예요.
- Docker Scout Dashboard를 여세요.
- Docker 계정으로 로그인하세요.
- 왼쪽 내비게이션에서 Images를 선택하세요.
images 페이지는 Scout 활성화 저장소를 나열해요.
링크가 아닌 행의 아무 곳이나, 보려는 이미지의 행을 선택하면 Image details 사이드바가 열려요.
사이드바는 저장소의 마지막으로 push된 태그에 대한 준수 개요를 보여 줘요.
[!NOTE]
정책 결과가 아직 나타나지 않았다면 페이지를 새로고침해 보세요. Docker Scout Dashboard를 처음 사용한다면 결과가 나타나기까지 몇 분 걸릴 수 있어요.
이미지 목록으로 돌아가 Most recent image 열의 이미지 버전을 선택하세요. 그런 다음 페이지 오른쪽 위의 Update base image 버튼을 선택해 정책을 검사하세요.
이 정책은 사용하는 베이스 이미지가 최신인지 확인해요. 예시 이미지가 오래된 버전의 alpine을 베이스 이미지로 사용하므로 현재 비준수 상태예요.
Recommended fixes for base image 모달을 닫으세요. 정책 목록에서 정책 이름 옆의 View fixes 버튼을 선택해 위반에 대한 세부 정보와 해결 권장사항을 보세요.
이 경우 권장 조치는 베이스 이미지를 더 새 버전으로 갱신하는 거예요. GitHub Dependabot을 package-ecosystem: "docker"와 함께 사용해 베이스 이미지 갱신을 자동화할 수 있어요.
요약 (Summary)
이 빠른 시작 가이드는 Docker Scout가 소프트웨어 공급망 관리를 지원하는 몇 가지 방법의 표면을 긁었어요.
- 저장소에 Docker Scout를 활성화하는 방법
- 취약점에 대한 이미지 분석
- 정책과 준수
- 취약점 수정과 준수 개선
다음 단계 (What's next?)
타사 통합부터 정책 사용자 지정, 실시간 런타임 환경 모니터링까지 발견할 것이 훨씬 많아요.
다음 섹션을 확인해 보세요.