1. 문제 상황
https://studying404.tistory.com/79
[AWS] EC2 to ECS 마이그레이션 (Spring 프로젝트, https)
0. ECS로의 마이그레이션0.1 ECS로의 마이그레이션이 필요한 경우ECS는 AWS의 컨테이너 오케스트레이션 서비스로, Docker 컨테이너의 배포, 관리, 확장을 손쉽게 할 수 있도록 해주는 서비스이다.컨테
studying404.tistory.com
지난 EC2 -> ECS 마이그레이션을 진행하면서, 로컬의 환경을 그대로 ECS에 올리기 위해 Dockerfile을 작성해 이미지를 생성했었다.
하지만, 프로젝트를 진행하면서 Dockerfile에서 USER 미지정되어 있어
컨테이너 내에서 기본 사용자가 root로 실행될 수 있는 위험이 존재한다는 정적 취약점 분석 결과를 알게 되었다.
왜 이런 문제가 발생하는걸까?
기본적으로 amazoncorretto:17-alpine 이미지는 root 사용자로 실행되기 때문에,
비루트(non-root) 사용자를 지정하는 게 권장된다.
2. 현재 Dockerfile
FROM amazoncorretto:17-alpine
WORKDIR /app
COPY build/libs/*.jar app.jar
ENTRYPOINT ["java", "-jar", "app.jar"]
위 Dockerfile은 root 사용자로 실행되기 때문에 문제가 발생한다.
FROM amazoncorretto:17-alpine
WORKDIR /app
# 1. 비루트 사용자 생성 (예: appuser)
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
COPY build/libs/*.jar app.jar
# 2. 권한 변경: appuser가 읽고 실행할 수 있도록
RUN chown appuser:appgroup app.jar
# 3. 사용자 변경
USER appuser
ENTRYPOINT ["java", "-jar", "app.jar"]
따라서 기존 코드에, 다음 3줄의 코드를 추가하여 비루트 사용자를 추가하고, 전환시킬 수 있다.
3. 검증
잘 적용되었는지 확인해보자.
# 도커 이미지 빌드
docker build -t my-backend .
# 백그라운드로 실행 (환경변수 필요없으면 --env-file .env 제외)
docker run -d --env-file .env -p 8080:8080 my-backend
# 현재 실행중인 Container ID 확인
docker ps
# 해당 컨테이너에 접속
docker exec -it [Container ID] sh
# 컨테이너 내부에서 사용자 확인
whoami
잘 적용되었다면, whoami를 했을 때 비루트 사용자의 이름이 출력된다.
'AWS' 카테고리의 다른 글
[AWS] EC2에 CloudWatch Agent 설정하기 (0) | 2025.08.22 |
---|---|
[AWS] CloudFront HTTP 보안 헤더 적용 (4) | 2025.08.12 |
[AWS][트러블슈팅] CodeDeploy 오류 해결 (ResourceInitializationError, Only target group in ECS deployment group) (1) | 2025.08.06 |
[AWS][트러블슈팅] 프론트 -> 백엔드 API 요청 막힘 문제 해결 (2) | 2025.08.06 |
[AWS] EC2 to ECS 마이그레이션 (Spring 프로젝트, https) (3) | 2025.08.04 |