그 컨테이너는 정말 안전한가요? GCP Container Registry의 컨테이너 취약성 검사 시도

Google Cloud Platform의 Container Registry는 이름에서 알 수 있듯이 Docker 이미지의 리포지토리 서비스입니다. 이 서비스는 이미지 취약점을 스캔하는 기능을 활용할 수 있습니다 (단,이 기사를 작성한 시점에서는 α 버전입니다).

보안은 다양한 관점에서 지켜야 합니다만, 이러한 툴을 적재 적소에서 사용해 가는 것으로 보안 테이 리스크를 경감할 수 있습니다.

여기에서는 간단한 Flask 웹 앱의 컨테이너 이미지를 만듭니다. 취약점이 있는지 확인하기 전에 일련의 흐름을 설명합니다.

Container Registry의 취약성 검색 기능 사용



다음 두 가지 설정을 활성화해야 합니다.
  • Container Analysis API
  • 취약성 스캔

  • 설정 방법은 공식 문서의 Container Registry 취약성 스캔을 참조하십시오.

    Docker 이미지 빌드



    여기에서 Cloud Shell에서 작업합니다. Cloud Shell은 관리 콘솔의 오른쪽 상단에 있는 아이콘에서 시작할 수 있습니다. Cloud Shell을 사용하면 브라우저의 터미널에서 다양한 작업을 수행할 수 있습니다.



    "app.py""Dockerfile"을 다음과 같이 만듭니다.

    app.py
    from flask import Flask
    app = Flask(__name__)
    
    @app.route("/")
    def hello():
        return "Hello World!"
    

    Dockerfile
    FROM debian
    RUN apt-get -qq update; \
        apt-get -qq -y upgrade; \
        apt-get -qq -y install \
            python \
            python-pip; \
        pip install flask
    WORKDIR /src
    EXPOSE 8080
    COPY app.py /src
    ENV FLASK_APP=app.py
    CMD ["flask", "run", "--host=0.0.0.0", "--port=8080"]
    

    이미지를 빌드합니다.
    $ docker build -t vulnerabilities-test .
    

    이미지 동작 확인



    이미지의 동작을 확인하기 위해 컨테이너를 시작합니다.
    $ docker run -d -p 8080:8080 vulnerabilities-test
    

    Cloud Shell 터미널의 오른쪽 상단에 웹에서 미리보기 버튼이 있습니다.



    클릭하고 표시된 웹 페이지에 "Hello World!"가 표시되면 이미지 빌드가 성공합니다.

    이미지를 Container Registry로 push



    다음 흐름에서 이미지를 Container Registry로 푸시합니다.
    # 環境変数にプロジェクトIDを格納
    $ export PROJECT_ID=$(gcloud config list project --format "value(core.project)")
    
    # イメージに所定の命名規則で別名をつける
    $ docker tag vulnerabilities-test gcr.io/$PROJECT_ID/vulnerabilities-test
    
    # Container Registry に push
    $ gcloud docker -- push gcr.io/$PROJECT_ID/vulnerabilities-test
    

    스캔 결과 확인



    [Container Registry] → [이미지 이름]으로 전환하면 다음 화면이 표시됩니다. 취약점 열은 검색 결과의 요약입니다. 뭔가 가득합니다.



    취약점 열(4 심각도 + 246 기타로 작성됨)을 클릭하면 취약점별로 한 줄씩 표시되고 개요를 볼 수 있습니다.



    마지막으로



    취약점의 스캐닝 자체는 기능을 활성화하기 때문에 간단했습니다. 그리고 생각보다 취약성이 감지되어 놀랐습니다.

    보안에의 대응은 계획적으로 개발, 운용 프로세스에 짜넣을 필요가 있습니다만, 이러한 툴도 있다고 하는 것으로 소개하였습니다. 참고까지.

    기타 참고가 될 것 같은 문헌에의 링크



    컨테이너 보안과 관련하여 다양한 문헌이 있습니다. 마음대로 유용하다고 생각한 것을 소개하겠습니다.

    · Google Cloud Platform Japan Blog
    컨테이너 보안(첫 번째): 세 가지 주요 영역
    컨테이너 보안(제2회): 노드 이미지와 컨테이너 이미지
    컨테이너 보안(제3회): Grafeas에서 관리하는 컨테이너 이미지 메타데이터

    ・JAWS Days에 등단된 분의 자료
    컨테이너를 보호하는 기술

    좋은 웹페이지 즐겨찾기