Snyk 컨테이너별 CI/CD 전략

파이프라인에서 Snyk Container을 구현하는 가장 적절한 시기는 컨테이너 이미지가 빌드된 후인데, 즉, docker build와 동등한 작업을 수행한 후, 이미지를 레지스트리에 푸시(docker push)하거나 실행 중인 인프라에 배포하기(helm install, kubectl apply 등) 전에 해당합니다.

일반적으로 컨테이너 빌드-테스트-배포 파이프라인을 실행하는 방법은 빌드 에이전트에서 Docker 데몬을 사용할 수 있는지 여부에 따라 다릅니다.

Docker 데몬을 사용할 수 있는 경우 파이프라인 실행

다음 상황이 존재하는 경우 Snyk이 도움을 줄 수 있습니다:

  • Jenkins와 같은 빌드 도구를 직접 설치된 Docker를 사용할 수 있는 호스트에서 실행 중인 경우.

  • Docker 소켓[/var/run/docker.sock]이 호스트에 바인드 마운트된 컨테이너 내에서 파이프라인 작업이 실행 중인 경우.

  • Docker 내에서 Docker를 실행 중인 경우.

Snyk은 다음과 같은 도움을 제공할 수 있습니다:

  • snyk container test $IMAGE_NAME를 실행할 때, 이미지를 로컬 데몬 저장소에서 찾고, 이미지가 없는 경우 docker pull의 동등 작업을 사용하여 이미지를 업스트림 레지스트리에서 다운로드합니다.

  • 레지스트리 인증에 대해 Snyk은 이미 docker login과 같이 구성된 자격 증명을 사용합니다.

  • 명령줄에서 --file=Dockerfile을 지정하여 이미지 취약점 결과와 이미지를 빌드한 Dockerfile을 연결하여 인라인 수정 안내 및 대체 베이스 이미지 제안을 받을 수 있습니다.

Docker 데몬을 사용할 수 없는 경우 파이프라인 실행

다음 상황이 존재하는 경우 Snyk이 도움을 줄 수 있습니다:

  • 각 빌드 작업을 컨테이너화하지만 보안 및 성능 이유로 Docker 소켓을 마운트하지 않는 경우.

  • 파이프라인 작업이 여러 호스트 또는 클러스터에 분산되어 있고 아티팩트가 중앙 볼륨이나 중간 레지스트리/객체 스토어를 통해 전달될 때.

  • OCI 호환 컨테이너 이미지만 사용하는 생태계에서 전용으로 작업하는 경우.

Snyk은 다음과 같은 도움을 제공할 수 있습니다:

  • snyk container test docker-archive:archive.tar 또는 snyk container test oci-archive:archive.tar 중 하나를 실행하여 Docker 또는 OCI 형식의 tar 포맷의 컨테이너 이미지에 대한 Snyk 취약점 결과를 받을 수 있습니다. Docker 데몬에 의존하지 않고 작동합니다.

  • tar 아카이브는 빌드 프로세스에서 docker save와 동등한 작업을 사용하여 생성되고 공유 볼륨이나 객체 저장소에 저장됩니다. 빌드 에이전트 컨테이너에서 Snyk 이진 파일을 실행하면 다른 종속성이 필요하지 않습니다.

컨테이너 이미지 통합을 위한 권장 사항

  • CI 중 컨테이너 이미지와 통합하는 방법에 상관없이, 취약점 일부 렌더링을 위해 Snyk Open Source (애플리케이션 SCA) 테스트와 분리된 빌드 단계로 Snyk container스캔을 실행하세요. 이를 통해 빌드 실패를 컨테이너/OS 레이어 또는 애플리케이션 레이어의 취약점으로 분리할 수 있습니다. 또한 더 쉽게 컨테이너화된 빌드 작업을 가능하게 합니다.

  • 빌드 작업에 대한 실패 상태를 사용자 정의하기 위해 --fail-on, --severity-threshold와 같은 CLI 플래그를 사용하세요. 더 고급 사용에 대해 --json을 사용하여 전체 취약점 보고서가 포함된 JSON 파일을 생성하고 JSON 데이터를 기반으로 자체 빌드 실패 상태를 설정할 수 있습니다.

  • --exclude-base-image-vulns를 전달하여 사용자 레이어에서 도입된 취약점만 보고하고, Dockerfile의 FROM 라인에 지정된 베이스 이미지에서 나오는 취약점을 보고하지 않도록 합니다.

  • snyk container test 후에 snyk container monitor를 실행하거나 플러그인 설정에서 Monitor 상자를 확인하여 Snyk UI 내에서 컨테이너의 재료 요약을 유지하고 매일 새 취약점을 지속적으로 모니터링하세요. 이는 새 릴리스를 프로덕션 환경에 푸시할 때 유용합니다. --project-name을 사용하여 릴리스를 식별하는 고유 식별자를 지정하여 프로덕션 컨테이너가 빌드 프로세스에서 다른 컨테이너와 별도로 추적되도록 합니다.

Last updated