【레포트】거기 Dockerfile 작성하고 있는 분 잠깐만요, 그 컨테이너는 안전한가요? DEV-01 #AWSSummit

2022.05.30

안녕하세요, 서은우입니다.

2022년 5월25 - 26일, 2일간 진행된 AWS Summit Online 2022 의 세션 리포트입니다. 일본에서 진행된 Summit Online은 어떤 세션이 있는지 한국분들과 공유하기 위해서 작성을 해보았습니다. 관련 세션은 링크를 통해 확인할 수 있기에 일본어로 진행되지만 관심이 있으신 분들은 보셔도 좋을 것 같습니다.

세션 개요

컨테이너 이미지 작성 시 과제나 보다 안전한 컨테이너 이미지 작성을 위한 포인트, 컨테이너 이미지 작성 보조 도구에 대해 Demo를 통해 알아가봅시다.

발표자

  • AWS Cloud Application Architect 杉田 想土
  • AWS Cloud Application Architect 高橋 たま

세션 레벨

Level 200: 초급자

레포트

고객의 요구

  • Amazon ECS on Fargate를 사용하여 웹 서비스를 출시하고 싶습니다.
  • 컨테이너 개발 경험이 없기 때문에 특히 보안 및 Docker 파일을 만드는 데 걱정됩니다.

가지고 있는 과제

  • 컨테이너 보안의 전반적인 모습을 잘 모른다
  • 기반 팀, 개발 팀 등 Docker 파일의 책임의 소재가 모호하다
  • Docker 파일 개선

컨테이너 보안의 전체 이미지

  • 컨테이너 보안의 전반적인 이미지는 NIST SP800-190을 참고하면 이해할 수 있습니다.

Docker 파일의 책임 위치가 모호하다

  • Docker 파일, ECS 작업 정의, ECS 서비스 정의와 관련하여 책임의 범위를 명확히해야합니다

Docker 파일 개선

  • 보다 안전한 컨테이너 이미지
    • 필요한 최소한의 구성 요소
    • 필요한 최소 권한
    • 취약한 구성 요소를 정기적으로 확인
  • 「The Twelve俺たちのDockerfuleベストプラクティス」를 참고

Docker 파일 개선 Demo

  • Cloud9에서 데모 진행
  • Docker image 빌드
  • 프리뷰 기능으로 만든 이미지를 확인
  • 상대 경로
    • WORKDIR에서 작업할 위치를 명시하기
  •  최소 레이어
    • RUN 정리하기
    • yum clean all 하기
  •  COPY 와 ADD 명령
    • COPY: 그냥 복사만
    • ADD : 다른 파일을 확장하고 원격으로 파일을 가져옵니다.
  • 테스트 환경과 프로덕션 환경은 동일한 이미지를 사용해도 괜찮음
    • 애플리케이션 종속성에 유의해야합니다.
  • 권한은 최소화
    • USER에서 루트가 아닌 사용자를 지정

기본 이미지 OS 선택

  • 요구 사항에 따라 선택
  • 언어 런타임 도입 방법
    •  a. 스스로 도입
      •  이미지를 완전히 제어 가능
    •  b. 언어 런타임 도입된 이미지 선택
      • 전문가에 의해 최적화된 이미지를 사용 가능

이미지 변경 Demo

  • 이미지 태그 지정
  • ECR First
    • 공식 이미지를 ECR에서 다운로드할 수 있으면 그쪽을 우선한다

컨테이너 이미지 생성 보조 도구

  • hadolint
    • Dockerfile의 정적 분석
  •  Dockle
    • 컨테이너 이미지의 정적 분석

컨테이너 이미지의 취약성 스캔 도구

  • Trivy
    • OS 패키지 및 언어별 종속성에 대한 스캔
    • Dockerfile을 포함한 IaC의 정적 분석
  •  Amazon ECR - 이미지 스캔 기능
    • 이미지를 push한 타이밍이나 수동으로 OSS의 CoreOS Clair project를 사용한 스캔 (Basic scanning)
    • Amazon Inspector에서 프로그래밍 언어 패키지를 포함한 스캔 (Enhanced scanning)

Dockerfile을 사용하지 않는 이미지 작성 방법

  • Cloud native Buildpacks(CNB)
    • 애플리케이션 소스 코드를 OCI 호환 컨테이너 이미지로 변환 가능
  •  Jib
    • Maven 또는 Gradle 플러그인
  •  AWS App2Container
    • Dockerfile를 포함한 일련의 아티팩트 출력
  •  AWS App Runner
    • 컨테이너화된 웹 앱과 API를 쉽고 빠르게 배포

마지막으로

저도 컨테이너에 대한 지식이 없었기 때문에 매우 도움이되었습니다.

특히 Demo도 함께 했으므로 설명하기 쉬웠고, 관련 툴도 소개되고 있어 개발시 도움이 될 것 같습니다.

일본어로 진행되어서 제약이 있다고 생각이 되지만, 컨테이너 초보자가 참고하기에 많은 도움이 되는 세션이라고 생각합니다.