Node.js용 Docker 이미지를 안전하게 빌드하는 방법

최소 권한 사용자 사용



a Dockerfile 가 a USER 를 지정하지 않으면 기본적으로 루트 사용자를 사용하여 컨테이너를 실행합니다. 실제로 컨테이너가 루트 권한을 가져야 하는 이유는 거의 없습니다.

Docker는 기본적으로 루트 사용자를 사용하여 컨테이너를 실행합니다. 그런 다음 해당 네임스페이스가 실행 중인 컨테이너의 루트 사용자에 매핑되면 컨테이너가 잠재적으로 Docker 호스트에 대한 루트 액세스 권한을 갖는다는 의미입니다.

컨테이너에서 루트 사용자로 애플리케이션을 실행하면 공격 표면이 더욱 넓어지고 애플리케이션 자체가 악용에 취약한 경우 쉽게 권한 에스컬레이션 경로를 사용할 수 있습니다.

노출을 최소화하려면 애플리케이션의 Docker 이미지에서 전용 사용자 및 전용 그룹을 생성하도록 옵트인합니다. USERDockerfile 지시문을 사용하여 컨테이너가 가능한 최소 권한 액세스로 애플리케이션을 실행하도록 합니다.

이미지에 특정 사용자가 없을 수 있습니다. Dockerfile의 지침을 사용하여 해당 사용자를 만듭니다.

다음은 일반 Ubuntu 이미지에 대해 이 작업을 수행하는 방법에 대한 전체 예를 보여줍니다.

FROM ubuntu
RUN mkdir /app
RUN groupadd -r lirantal && useradd -r -s /bin/false -g lirantal lirantal
RUN chown -R lirantal:lirantal /app
WORKDIR /app
COPY . /app
USER lirantal
CMD node index.js


위의 예:
  • 암호, 홈 디렉토리 설정 및 셸 없이 시스템 사용자(-r)를 생성합니다
  • .
  • 미리 생성한 기존 그룹에 생성한 사용자를 추가합니다(groupadd 사용)
  • 생성한 그룹
  • 과 관련하여 생성하려는 사용자 이름에 설정된 최종 인수를 추가합니다.

    Node.js 및 알파인 이미지의 팬이라면 이미 node라는 일반 사용자를 번들로 제공합니다. 다음은 일반 노드 사용자를 사용하는 Node.js 예제입니다.

    FROM node:10-alpine 
    RUN mkdir /app
    COPY . /app
    RUN chown -R node:node /app
    USER node
    CMD [“node”, “index.js”]
    


    Node.js 애플리케이션을 개발 중이라면 공식Docker and Node.js Best Practices과 상담하는 것이 좋습니다.

    이 게시물은 귀하가 채택해야 하는 10 Docker image security best practices의 일부입니다. 읽어주셔서 감사합니다.

    원본 블로그 게시물에는 아래에 표시된 스니펫과 같은 인쇄 가능한 고해상도 PDF가 포함되어 있습니다. Check it out

    좋은 웹페이지 즐겨찾기