컨테이너 보안

컨테이너 런타임

  1. CIS Docker Benchmark 리뷰 - https://www.cisecurity.org/benchmark/docker

  2. 리소스 정리

    {
        docker container rm $(docker container ls -aq) --force
        docker volume prune --force
        docker image prune --all --force
    }
  3. Docker Bench for Security 다운로드

    {
        cd ~/environment
        git clone https://github.com/docker/docker-bench-security.git
        cd docker-bench-security
    }
  4. Docker Bench for Security 실행

    sudo sh docker-bench-security.sh
  5. 컨테이너 실행

    docker run --name nginx -d nginx
  6. Docker Bench for Security 실행

    sudo sh docker-bench-security.sh
  7. 해결 방안 출력

    sudo sh docker-bench-security.sh -p
  8. 리소스 정리

    {
        docker container rm $(docker container ls -aq) --force
        docker volume prune --force
        docker image prune --all --force
        cd ~/environment
        sudo rm -rf docker-bench-security
    }

컨테이너 이미지

  1. 해당 컨테이너 이미지에 대한 보안 취약점에 대한 정보를 Docker Hub에서 확인

  2. Trivy 설치

    curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sudo sh -s -- -b /usr/local/bin v0.18.3
  3. Trivy 설치 확인

    trivy --version
  4. 컨테이너 이미지 스캔

    trivy image youngwjung/nginx
  5. 스캔 결과를 간소화

    trivy image --light=true youngwjung/nginx
  6. 심각도가 높은 취약점만 출력

    trivy image --light=true --severity="HIGH,CRITICAL" youngwjung/nginx
  7. 새로운 컨테이너 이미지 빌드

    cat <<EOF | docker image build -t nginx:updated -
    FROM youngwjung/nginx
    RUN apt update && apt upgrade -y
    EOF
  8. 새로 생성한 컨테이너 이미지 스캔

    trivy image --light=true --severity="HIGH,CRITICAL" nginx:updated
  9. 리소스 정리

    docker image prune --all --force

권한 최소화

  1. 컨테이너 생성

    docker container run --name nginx -d nginx 
  2. NGINX 컨테이너에서 실행중인 프로세스 목록 확인

    docker container top nginx
  3. 컨테이너 이미지 상세 내용 확인

    docker image history nginx --format '{{.CreatedBy}}' --no-trunc
  4. NGINX 컨테이너 재생성하고 nginx 유저로 프로세스 실행

    {
        docker container rm nginx --force
        docker container run --name nginx -d -u nginx nginx
    }
  5. 컨테이너 로그 확인

    docker container logs nginx
  6. 새로운 컨테이너 이미지 빌드

    cat <<EOF | docker image build -t nginx:unprivileged -
    FROM nginx
    RUN chown -R nginx:nginx /var/cache/nginx && \
        chown -R nginx:nginx /var/log/nginx && \
        chown -R nginx:nginx /etc/nginx/conf.d
    RUN touch /var/run/nginx.pid && \
        chown -R nginx:nginx /var/run/nginx.pid
    USER nginx
    EOF
  7. NGINX 컨테이너 재생성

    {
        docker container rm nginx --force
        docker container run --name nginx -d nginx:unprivileged
    }
  8. NGINX 컨테이너에서 실행중인 프로세스 목록 확인

    docker container top nginx
  9. 리소스 정리

    {
        docker container rm $(docker container ls -aq) --force
        docker image prune --all --force
    }

OPA

  1. 컨테이너 생성

    docker container run --name nginx -d nginx
  2. Docker 데몬 로그 확인

    journalctl -u docker -n 3 --no-pager
  3. Docker 데몬 로그 레벨 변경

    cat <<EOF | sudo tee /etc/docker/daemon.json
    {
        "debug": true
    }
    EOF
  4. Docker 데몬 재기동

    {
        sudo systemctl daemon-reload
        sudo systemctl restart docker
    }
  5. 컨테이너 재생성

    {
        docker container rm nginx --force
        docker container run --name nginx -d nginx
    }
  6. Docker 데몬 로그 확인

    journalctl -u docker -n 100 --no-pager
  7. 컨테이너 삭제

    docker container rm nginx --force
  8. OPA 정책 파일을 저장할 디렉토리 생성

    sudo mkdir -p /etc/docker/opa-policy
  9. OPA 정책 파일 생성

    cat <<EOF | sudo tee /etc/docker/opa-policy/authz.rego
    package docker.authz
    
    default allow = false
    
    allow {
        not deny
    }
    
    deny {
        imagename := input.Body.Image
        not startswith(imagename, "youngwjung/")
        input.Method = "POST"
        contains(input.Path, "containers/create")
    }
    EOF
  10. opa-docker-authz 플러그인 설치

    docker plugin install openpolicyagent/opa-docker-authz-v2:0.8 opa-args="-policy-file /opa/opa-policy/authz.rego"
  11. 설치된 플러그인 목록 확인

    docker plugin ls
  12. Docker 데몬 설정 파일 생성

    cat <<EOF | sudo tee /etc/docker/daemon.json
    {
        "authorization-plugins": ["openpolicyagent/opa-docker-authz-v2:0.8"]
    }
    EOF
  13. Docker 데몬 재기동

    {
        sudo systemctl daemon-reload
        sudo systemctl restart docker
    }
  14. 컨테이너 생성 시도

    docker container run --name nginx -d nginx
  15. Docker 데몬 로그 확인

    journalctl -u docker -n 10 --no-pager | grep containers/create
  16. OPA 플레이 그라운드에서 정책 검증 - https://play.openpolicyagent.org/

  17. 컨테이너 생성 시도

    docker container run --name nginx -d youngwjung/nginx
  18. 컨테이너 생성 확인

    docker container ls
  19. Docker 데몬 로그 확인

    journalctl -u docker -n 10 --no-pager | grep containers/create
  20. OPA 플레이 그라운드에서 정책 검증 - https://play.openpolicyagent.org/

  21. 리소스 정리

    {
        docker container rm $(docker container ls -aq) --force
        docker image prune --all --force
        docker plugin disable openpolicyagent/opa-docker-authz-v2:0.8 
        docker plugin rm openpolicyagent/opa-docker-authz-v2:0.8
        sudo rm /etc/docker/daemon.json
        sudo rm -rf /etc/docker/opa-policy
        sudo systemctl daemon-reload
        sudo systemctl restart docker
    }

Last updated