Snyk 컨테이너 특정 CI/CD 전략
파이프라인에 Snyk 컨테이너를 구현하기 가장 좋은 시기는 컨테이너 이미지가 빌드된 후, 즉 docker build와 동등한 작업을 실행한 후이며, 이미지가 레지스트리(docker push)로 푸시되거나 실행 중인 인프라(helm install, kubectl apply 등)에 배포되기 전입니다.
일반적으로 컨테이너 빌드-테스트-배포 파이프라인을 실행하는 방법은 빌드 에이전트에서 Docker 데몬을 사용할 수 있는지 여부에 따라 달라집니다.
Docker 데몬을 사용할 수 있는 경우 파이프라인 실행
다음과 같은 상황에서 Snyk이 도움이 될 수 있습니다.
Jenkins와 같은 빌드 도구를 Docker가 기본적으로 설치된 호스트에서 직접 실행하고 있습니다.
파이프라인 작업이 Docker 소켓
[/var/run/docker.sock]이 호스트에 바인딩 마운트된 컨테이너 내에서 실행됩니다.Docker-inside-Docker 설정을 실행하고 있습니다.
Snyk은 다음과 같이 도움을 줄 수 있습니다.
snyk container test $IMAGE_NAME을 실행하면 Snyk은 로컬 데몬 저장소에서 해당 이미지를 찾고, 이미지가 없으면 업스트림 레지스트리에서 이미지를 다운로드하기 위해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 데몬에 의존하지 않고 Docker 또는 OCI 형식으로 tar 형식 컨테이너 이미지에 대한 Snyk 취약점 결과를 얻습니다.tar 아카이브는 빌드 프로세스에서
docker save와 동등한 작업을 사용하여 생성하여 공유 볼륨 또는 객체 저장소에 저장할 수 있습니다. 이는 다른 종속성 없이 Snyk 바이너리를 실행하는 빌드 에이전트 컨테이너에서 액세스할 수 있습니다.
컨테이너 이미지 통합을 위한 권장 사항
CI 중에 컨테이너 이미지와 통합하는 방법에 관계없이 Snyk 오픈소스(애플리케이션 SCA) 테스트와 별도의 빌드 단계로 Snyk 컨테이너 스캔을 실행하십시오. 이렇게 하면 빌드 실패를 컨테이너 또는 OS 계층 또는 애플리케이션 계층 내의 취약점으로 격리할 수 있습니다. 또한 컨테이너화된 빌드 작업을 더 쉽게 수행할 수 있습니다.
--fail-on및--severity-threshold와 같은 CLI 옵션을 사용하여 빌드 작업의 실패 상태를 사용자 지정하십시오. 더 고급 테스트의 경우--json을 사용하여 전체 취약점 보고서를 포함하는 JSON 파일을 생성하고 JSON 데이터를 기반으로 자체 빌드 실패 상태를 설정할 수 있습니다.--exclude-base-image-vulns를 전달하여 컨테이너의 기본 이미지(즉, Dockerfile의FROM줄에 지정한 이미지)에서 발생하는 취약점이 아닌 사용자 계층에서 도입된 취약점만 보고하십시오.snyk container test다음에snyk container monitor를 실행하거나 플러그인 설정에서 모니터 확인란을 선택하여 Snyk UI 내에서 컨테이너의 자재 명세서 기록을 유지하고 매일 새로운 취약점을 사전에 모니터링하십시오. 이는 새 릴리스를 프로덕션 환경으로 푸시할 때 유용합니다.--project-name을 사용하여 릴리스에 대한 고유 식별자를 지정하여 프로덕션 컨테이너가 빌드 프로세스의 다른 컨테이너와 별도로 추적되도록 할 수 있습니다.
Last updated