Docker 보안 향상을 위한 5가지 팁
Docker 이미지는 주로 다른 이미지 위에 구축되어 있으며, 이것은 하나의 이미지에 있는 빈틈도 모든 이미지에 존재한다는 것을 의미한다.Docker의 광범위한 사용은 대가가 있다. 빈틈이 광범위하게 퍼지고 큰 영향을 미칠 수 있다.
우리는 누군가가 이용할 수 있는 용기에서 운행할 위험을 낮추기 위해 많은 조치를 취할 수 있다.
올바른 기본 이미지 선택
이 도전에 대응하는 유행 방법 중 하나는 두 가지 기본 이미지를 사용하는 것이다. 하나는 개발과 단원 테스트에 사용되고, 다른 하나는 후기 테스트와 생산에 사용된다.후기 테스트와 생산에서 이미지는 컴파일러(예를 들어 Javac)나 시스템 구축(예를 들어 Maven이나 npm) 등 구축 도구나 디버깅 도구가 필요하지 않다.사실 제작 중에 당신의 이미지는 베이스도 필요 없어요.
우리는 기본 운영체제 이미지와 서로 다른 변체 간의 커다란 차이를 보았다.대부분의 경우 전체 운영 체제 이미지가 필요하지 않습니다.
Split 버전 또는 Linux 릴리스 중 하나를 선택하면 취약점 수를 줄일 수 있습니다.Alpine base 이미지를 검색할 때는 Alpine Linux 기반 최소 5MB Docker 이미지를 사용해야 합니다.알프스산은 아주 작고 간결한 기초 이미지를 바탕으로 세운 좋은 예이다.
Dockerfile에서 자체 이미지를 만들 때 필요한 것보다 더 큰 이미지에 의존하지 않도록 합니다.이것은 그림의 크기를 줄이고 의존 관계를 통해 도입된 빈틈의 수를 최소화합니다.
Snyk 사용자가 실행한 스캔에 의하면, 44%의 docker 이미지 스캔은 이미 알고 있는 빈틈이 있으며, 그 중에서 업데이트되고 더욱 안전한 기초 이미지가 사용할 수 있음을 발견하였다.업데이트된 이미지 또는 더 나은 기본 이미지를 자동으로 검색하여 이를 경고하는 프로세스를 모범 사례로 삼을 수 있습니다.
다단계 구성 사용
Docker 17.05 이상 버전을 사용할 경우 여러 단계로 구성할 수 있습니다.이러한 유형의 구축은 읽기 및 유지보수가 용이한 최적화된 Dockerfile을 만들기 위한 것입니다.
다단계 구축을 통해 여러 개의 이미지를 사용할 수 있고 특정한 이미지만 복사하는 데 필요한 작업만 선택할 수 있습니다.Dockerfile에서 여러 개의
FROM
문장을 사용할 수 있으며, 각각의 FROM
기본 이미지를 사용하여 작업을 한 단계에서 다음 단계로 복사할 수 있습니다.너는 네가 필요로 하지 않는 인공 제품을 남겨서, 결국에는 간결한 최종 이미지를 얻을 수 있다.이런 미세한 이미지를 만드는 방법은 복잡성을 현저히 낮출 수 있을 뿐만 아니라 이미지에서 공격을 받기 쉬운 부품의 실현 방식도 바꿀 수 있다.따라서 다른 이미지에 구축된 이미지와 달리 다단계 구축을 통해 사용자가 의존하는 기초 이미지의 빈틈을 계승하지 않고 작업을 선택할 수 있습니다.다단계 구축에 대한 자세한 내용은 Docker docs를 참조하십시오.
이미지 재구성
각 Docker 이미지는 Dockerfile에서 생성됩니다.Docker Hub의 Docker 이미지에 대한 Docker 파일은 GitHub에서 공개적으로 가져올 수 있습니다.Dockerfile에는 일반적으로 수동으로 이미지를 만드는 단계를 자동으로 수행할 수 있는 명령 세트가 있습니다.이 밖에 일부 라이브러리를 가져와 사용자 정의 소프트웨어를 설치할 수도 있다.Dockerfile에 설명되어 있습니다.많은 경우, 빈틈은 간단한 이미지 재구성을 통해 해결할 수 있다.
당신의 이미지를 구축하는 것은 기본적으로 그 순간의 스냅숏이다.만약 엄격하게 표시되지 않은 기초 이미지에 의존한다면, 재건이 완료될 때마다 기초 이미지가 다를 수 있습니다.패키지 설치 프로그램을 사용하여 패키지를 설치할 때 재구축이 이미지를 변경할 수 있습니다.
다음 컨텐트를 포함하는 Dockerfile은 재구성할 때마다 다른 바이너리 파일을 사용할 수 있습니다.
FROM ubuntu:latest
RUN apt-get -y update && apt-get install -y python
모든 Docker 이미지는 이미지에서 해결된 알려진 빈틈을 방지하기 위해 정기적으로 재구성되어야 합니다.캐시 적중을 방지하고 새 다운로드를 확인하려면 캐시 없음 옵션--no-cache
을 사용하십시오.예를 들면 다음과 같습니다.
docker build --no-cache -t myImage:myTag myPath/
어쨌든 이미지를 재구성할 때는 다음 Best Practice를 따르십시오.이렇게 하면 이미지를 양호하고 깨끗하며 안전하게 유지할 수 있다.
현상 과정 중 이미지 스캔
Dockerfile에서 이미지를 만들거나 이미지를 재구성하면 시스템에 새 취약점이 추가됩니다.우리는 사용자가 개발자가 용기 안전에 대해 상당히 큰 책임을 져야 한다고 생각하는 것을 안다.개발 과정에서 docker 이미지를 스캔하는 것은 가능한 한 빨리 빈틈을 발견할 수 있도록 작업 절차의 일부분이어야 한다.
보안을 왼쪽으로 옮기는 것을 고려할 때 개발자는 Dockerfile을 저장소에 제출하거나 파이프를 구축하기 전에 로컬 기기에서 Dockerfile과 이미지를 스캔하는 것이 좋습니다.
이것은 CI 파이프 스캐너를 로컬 스캐너로 대체해야 한다는 뜻이 아니라, 개발된 모든 단계에서 스캐너를 하는 것이 가장 좋고, 스캐너는 자동화되는 것이 가장 좋다는 뜻이다.
이미지를 레지스트리로 푸시하고 프로덕션 환경으로 푸시하기 전에 구축하는 동안 자동 스캔을 고려하십시오.자동 스캔으로 새로운 빈틈이 발견돼 등록표에 그림을 넣지 않거나 생산 시스템에 들어가는 것을 거부하는 것이 최선의 방법으로 여겨져야 한다.
Snyk’s container vulnerability management 이미지에 설치된 각 운영체제 패키지를 Docker 빈틈 데이터베이스와 비교하여 Docker 이미지를 스캔합니다.이외에도 이미지에 설치된 관건적인 바이너리 파일을 스캔하는 것도 중요하다.Snyk는 일반적으로 OS 패키지 관리자(dpkg, RPM, APK)가 설치하는 핵심 바이너리 파일이 아닌 명령 실행 등 다른 방법으로 설치하는 스캔도 지원한다.
개발자가 로컬 시스템에서 개발할 때 DockerFile과 이미지를 스캔하는 도구를 제공할 때 다른 보호 층을 만들어 개발자가 더욱 안전한 시스템에 적극적으로 기여할 수 있도록 한다
생산 과정 중 용기를 스캔하다
이것은 대부분의 개발자들이 생산할 때 도커 이미지를 스캔하지 않게 한다.새로운 빈틈이 발견되고 생산 시스템이 위험에 직면할 수 있을 때 용기를 주동적으로 검사하면 많은 번거로움을 줄일 수 있습니다.
컨테이너의 Snyk 모니터 기능을 사용하면 정기적으로 (예를 들어 매일) 도커 이미지를 스캔할 수 있다.Snyk 는 지속적인 모니터링을 위해 이미지 종속성 스냅샷을 생성합니다.
운행 시 모니터링도 활성화해야 한다.런타임에 사용되지 않는 모듈과 패키지를 스캔하면 이미지를 축소하는 방법에 대해 자세히 알 수 있습니다.사용하지 않은 구성 요소를 삭제하면 불필요한 빈틈이 시스템 라이브러리와 응용 프로그램 라이브러리에 들어가는 것을 방지할 수 있습니다.이것 또한 이미지를 더욱 쉽게 유지보수할 수 있게 한다.
Reference
이 문제에 관하여(Docker 보안 향상을 위한 5가지 팁), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/brianverm/5-tips-to-improve-your-docker-security-4i49텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)