Amazon ECS 작업 및 컨테이너 보안 모범 사례
Amazon ECS 작업 및 컨테이너 보안 모범 사례
공격에 대한 첫 번째 방어선으로 컨테이너 이미지를 고려해야 해요. 안전하지 않고 제대로 구성되지 않은 이미지는 공격자가 컨테이너 경계를 벗어나 호스트에 접근할 수 있게 할 수 있어요.
출처: 문서
본문
공격에 대한 첫 번째 방어선으로 컨테이너 이미지를 고려해야 합니다. 안전하지 않고 제대로 구성되지 않은 이미지는 공격자가 컨테이너 경계를 벗어나 호스트에 접근할 수 있게 할 수 있습니다. 작업과 컨테이너를 설정할 때 다음을 수행할 것을 권장합니다.
최소 이미지 또는 distroless 이미지 만들기
먼저 컨테이너 이미지에서 불필요한 바이너리를 모두 제거하세요. Amazon ECR Public Gallery의 익숙하지 않은 이미지를 사용하고 있다면 컨테이너의 각 레이어 내용을 참조하기 위해 이미지를 검사하세요. Dive 같은 애플리케이션을 사용해 이를 수행할 수 있습니다.
또는 애플리케이션과 런타임 의존성만 포함하는 distroless 이미지를 사용할 수 있습니다. distroless 이미지에는 패키지 관리자나 셸이 없습니다. distroless 이미지는 "스캐너의 신호 대 잡음을 개선하고 필요한 것만 입증(provenance)을 확립하는 부담을 줄입니다." 자세한 내용은 GitHub의 distroless 문서를 참고하세요.
Docker에는 scratch로 알려진 예약된 최소 이미지에서 이미지를 만드는 메커니즘이 있습니다. 자세한 내용은 Docker 문서의 Creating a simple parent image using scratch를 참고하세요. Go 같은 언어를 사용하면 정적 연결 바이너리를 만들어 Dockerfile에서 참조할 수 있습니다. 다음 예시는 이를 수행하는 방법을 보여줍니다.
############################
# STEP 1 build executable binary
############################
FROM golang:alpine AS builder
# Install git.
# Git is required for fetching the dependencies.
RUN apk update && apk add --no-cache git
WORKDIR $GOPATH/src/mypackage/myapp/
COPY . .
# Fetch dependencies.
# Using go get.
RUN go get -d -v
# Build the binary.
RUN go build -o /go/bin/hello
############################
# STEP 2 build a small image
############################
FROM scratch
# Copy our static executable.
COPY --from=builder /go/bin/hello /go/bin/hello
# Run the hello binary.
ENTRYPOINT ["/go/bin/hello"]
이는 애플리케이션과 그 외 아무것도 포함하지 않는 컨테이너 이미지를 만들어 매우 안전하게 합니다. 이전 예시는 또한 다단계 빌드(multi-stage build)의 예시입니다. 이러한 유형의 빌드는 최종 이미지의 크기를 최소화하기 위해 사용할 수 있으므로 보안 관점에서 매력적입니다. 빌드 도구와 기타 불필요한 바이너리가 없는 컨테이너 이미지는 공격 표면을 줄여 보안 태세를 개선합니다. 다단계 빌드에 대한 자세한 내용은 Docker 문서의 Multi-stage builds를 참고하세요.
취약점에 대해 이미지 스캔
가상 머신과 유사하게 컨테이너 이미지에는 취약점이 있거나 시간이 지남에 따라 취약점이 발생할 수 있는 바이너리와 애플리케이션 라이브러리가 포함될 수 있습니다. 악용으로부터 보호하는 가장 좋은 방법은 이미지 스캐너로 이미지를 정기적으로 스캔하는 것입니다.
Amazon ECR은 CVE(Common Vulnerabilities and Exposures) 데이터베이스를 사용하는 두 가지 버전의 기본 스캔을 제공합니다.
- AWS 네이티브 기본 스캔 – 이제 GA이며 권장되는 AWS 네이티브 기술을 사용합니다. 이 개선된 기본 스캔은 널리 사용되는 운영 체제 전반에서 더 나은 스캔 결과와 취약점 탐지를 제공하도록 설계되었습니다. 이를 통해 고객은 컨테이너 이미지의 보안을 더욱 강화할 수 있습니다. 모든 신규 고객 레지스트리는 기본적으로 이 개선된 버전에 옵트인됩니다.
- Clair 기본 스캔 – 오픈 소스 Clair 프로젝트를 사용하는 이전 기본 스캔 버전이며 더 이상 사용되지 않습니다.