[docker] ENV 노출

이승규·2023년 11월 19일
1

방금 너무 킹받는 일이 있어서 포스팅합니다.

사건 개요

제가 서버에 docker로 올려놓은 테스트 db가 있습니다.

FROM node:20 AS builder

WORKDIR /app
ENV DATABASE_URL mysql://root:1234@223.130.147.11:3306/algocean
COPY . .
RUN yarn set version berry
RUN yarn install
RUN yarn prisma generate
RUN yarn build

FROM node:20-slim

#TODO: 이미지 최적화 필요
WORKDIR /app
ENV NODE_ENV production
ENV DATABASE_URL mysql://root:1234@223.130.147.11:3306/algocean
RUN apt-get update -y && apt-get install -y openssl
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/yarn.lock ./yarn.lock
COPY --from=builder /app/package.json ./package.json
COPY --from=builder /app/.yarn ./.yarn
COPY --from=builder /app/.yarnrc.yml ./.yarnrc.yml
COPY --from=builder /app/prisma ./prisma
RUN yarn set version berry
RUN yarn workspaces focus --all --production
COPY --from=builder /app/node_modules/.prisma/client ./node_modules/.prisma/client
EXPOSE 3000

CMD ["yarn","start:prod"]

도커파일은 이런식으로 구성했습니다. 저는 이미지를 docker hub에 올리면 image layer를 통해 ENV값이 다 보이는 줄 몰랐습니다..

사실 github에도 dockerfile을 올리는 바람에 여기서 db주소, 비밀번호를 알아내지 않았나 싶습니다.

이것도 모르고 docker hub에 해당 이미지를 당당하게 올리게 됩니다.
저는 이를 모른체 API 테스트 중에 갑자기 500 응답이 날라오기 시작하자 mysql이 아예 꺼진 줄 알았죠.

누군가의 db 접속

하지만 확인해보자 어떤 사람이 제 db의 테이블을 모두 삭제하고 README 라는 테이블을 만들고 row 하나를 적어놨더라구요. 읽으면 너무 열받을거 같아서 바로 삭제해버렸는데 지금 생각해보면 캡쳐해서 공유해드릴 걸 그랬네요.

다행히도 백업이 있어서 db는 전부 복구할 수 있었지만 너무 분하더라구요ㅋㅋ

이번 사건은 테스트 db라서 조금 허술하게 관리한 측면이 있긴합니다만, 실제 배포 단계에서 이런일이 일어났다고 생각하면 조금 아찔하네요. 모두 secret값 인터넷에 노출하지 않게 조심합시다!!

profile
백엔드 개발자

2개의 댓글

comment-user-thumbnail
2023년 12월 13일

ㅋㅋㅋ 진짜 킹받네요. 고생하셨습니다 👍

1개의 답글