취약성을 해결하기 위해 sbt-native packager의 기본 이미지에서 amazon corretto를 지정합니다.

sbt-native-packager는 sbt의 docker pluggin입니다.기본 이미지에 지정된 방법amazoncorretto을 설명합니다.

기본 기본 이미지


sbt-native packager의 기본 이미지는 openjdk입니다.sbt docker:publishlocal[1]를 수행할 때 작성된 Docker file은 다음과 같습니다openjdk:8.
target/docker/stage/Dockerfile
FROM openjdk:8 as stage0
LABEL snp-multi-stage="intermediate"
LABEL snp-multi-stage-id="8687b11c-7c87-4353-a395-44203cd4de23"
WORKDIR /opt/docker
COPY 1/opt /1/opt
COPY 2/opt /2/opt
USER root
RUN ["chmod", "-R", "u=rX,g=rX", "/1/opt/docker"]
RUN ["chmod", "-R", "u=rX,g=rX", "/2/opt/docker"]
RUN ["chmod", "u+x,g+x", "/1/opt/docker/bin/main"]

FROM openjdk:8 as mainstage
USER root
RUN id -u demiourgos728 1>/dev/null 2>&1 || (( getent group 0 1>/dev/null 2>&1 || ( type groupadd 1>/dev/null 2>&1 && groupadd -g 0 root || addgroup -g 0 -S root )) && ( type useradd 1>/dev/null 2>&1 && useradd --system --create-home --uid 1001 --gid 0 demiourgos728 || adduser -S -u 1001 -G root demiourgos728 ))
WORKDIR /opt/docker
COPY --from=stage0 --chown=demiourgos728:root /1/opt/docker /opt/docker
COPY --from=stage0 --chown=demiourgos728:root /2/opt/docker /opt/docker
USER 1001:0
ENTRYPOINT ["/opt/docker/bin/main"]
CMD []
이 Docker Image PUSH[2]를 ECR에서 스캔하면 취약성을 확인할 수 있습니다.

amazon corretto 사용


그렇다면 기본적인 인상에서 지목amazoncorretto해 취약성을 해결하자.

기본 이미지 지정


build.sbtdockerBaseImage[3]에서 지정amazoncorretto:11-alpine-jdk.
build.sbt
val main = (project in file("main"))
  .settings(commonSettings)
  .settings(
    name := "main",
    dockerBaseImage := "amazoncorretto:11-alpine-jdk"
  )
  .enablePlugins(DockerPlugin)
sbt docker:publishLocal에서 제작된 Docker file을 확인한 후 데이텀 이미지가 변경되었는지 확인할 수 있습니다.
target/docker/stage/Dockerfile
FROM amazoncorretto:11-alpine-jdk as stage0
LABEL snp-multi-stage="intermediate"
LABEL snp-multi-stage-id="a53b83a6-f6c8-4add-a5d1-9a04110d2d1d"
WORKDIR /opt/docker
COPY 1/opt /1/opt
COPY 2/opt /2/opt
USER root
RUN ["chmod", "-R", "u=rX,g=rX", "/1/opt/docker"]
RUN ["chmod", "-R", "u=rX,g=rX", "/2/opt/docker"]
RUN ["chmod", "u+x,g+x", "/1/opt/docker/bin/main"]

FROM amazoncorretto:11-alpine-jdk as mainstage
USER root
RUN id -u demiourgos728 1>/dev/null 2>&1 || (( getent group 0 1>/dev/null 2>&1 || ( type groupadd 1>/dev/null 2>&1 && groupadd -g 0 root || addgroup -g 0 -S root )) && ( type useradd 1>/dev/null 2>&1 && useradd --system --create-home --uid 1001 --gid 0 demiourgos728 || adduser -S -u 1001 -G root demiourgos728 ))
WORKDIR /opt/docker
COPY --from=stage0 --chown=demiourgos728:root /1/opt/docker /opt/docker
COPY --from=stage0 --chown=demiourgos728:root /2/opt/docker /opt/docker
USER 1001:0
ENTRYPOINT ["/opt/docker/bin/main"]
CMD []

변경 후 확인


마찬가지로 ECR을 스캔하면 다음과 같은 취약성이 해결되었음을 확인할 수 있다.컨테이너 사이즈도 경량화돼 일석이조다.

이렇게 하면 안심하고 개발에 집중할 수 있다.

끝맺다


각주
https://sbt-native-packager.readthedocs.io/en/latest/formats/docker.html#build ↩︎
https://docs.aws.amazon.com/AmazonECR/latest/userguide/getting-started-cli.html ↩︎
https://sbt-native-packager.readthedocs.io/en/latest/formats/docker.html#environment-settings ↩︎

좋은 웹페이지 즐겨찾기