컨테이너 보안
컨테이너 런타임
CIS Docker Benchmark 리뷰 - https://www.cisecurity.org/benchmark/docker
리소스 정리
{ docker container rm $(docker container ls -aq) --force docker volume prune --force docker image prune --all --force }Docker Bench for Security 다운로드
{ cd ~/environment git clone https://github.com/docker/docker-bench-security.git cd docker-bench-security }Docker Bench for Security 실행
sudo sh docker-bench-security.sh컨테이너 실행
docker run --name nginx -d nginxDocker Bench for Security 실행
sudo sh docker-bench-security.sh해결 방안 출력
sudo sh docker-bench-security.sh -p리소스 정리
{ 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 }
컨테이너 이미지
해당 컨테이너 이미지에 대한 보안 취약점에 대한 정보를 Docker Hub에서 확인
Trivy 설치
curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sudo sh -s -- -b /usr/local/bin v0.18.3Trivy 설치 확인
trivy --version컨테이너 이미지 스캔
trivy image youngwjung/nginx스캔 결과를 간소화
trivy image --light=true youngwjung/nginx심각도가 높은 취약점만 출력
trivy image --light=true --severity="HIGH,CRITICAL" youngwjung/nginx새로운 컨테이너 이미지 빌드
cat <<EOF | docker image build -t nginx:updated - FROM youngwjung/nginx RUN apt update && apt upgrade -y EOF새로 생성한 컨테이너 이미지 스캔
trivy image --light=true --severity="HIGH,CRITICAL" nginx:updated리소스 정리
docker image prune --all --force
권한 최소화
컨테이너 생성
docker container run --name nginx -d nginxNGINX 컨테이너에서 실행중인 프로세스 목록 확인
docker container top nginx컨테이너 이미지 상세 내용 확인
docker image history nginx --format '{{.CreatedBy}}' --no-truncNGINX 컨테이너 재생성하고 nginx 유저로 프로세스 실행
{ docker container rm nginx --force docker container run --name nginx -d -u nginx nginx }컨테이너 로그 확인
docker container logs nginx새로운 컨테이너 이미지 빌드
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 EOFNGINX 컨테이너 재생성
{ docker container rm nginx --force docker container run --name nginx -d nginx:unprivileged }NGINX 컨테이너에서 실행중인 프로세스 목록 확인
docker container top nginx리소스 정리
{ docker container rm $(docker container ls -aq) --force docker image prune --all --force }
OPA
컨테이너 생성
docker container run --name nginx -d nginxDocker 데몬 로그 확인
journalctl -u docker -n 3 --no-pagerDocker 데몬 로그 레벨 변경
cat <<EOF | sudo tee /etc/docker/daemon.json { "debug": true } EOFDocker 데몬 재기동
{ sudo systemctl daemon-reload sudo systemctl restart docker }컨테이너 재생성
{ docker container rm nginx --force docker container run --name nginx -d nginx }Docker 데몬 로그 확인
journalctl -u docker -n 100 --no-pager컨테이너 삭제
docker container rm nginx --forceOPA 정책 파일을 저장할 디렉토리 생성
sudo mkdir -p /etc/docker/opa-policyOPA 정책 파일 생성
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") } EOFopa-docker-authz 플러그인 설치
docker plugin install openpolicyagent/opa-docker-authz-v2:0.8 opa-args="-policy-file /opa/opa-policy/authz.rego"설치된 플러그인 목록 확인
docker plugin lsDocker 데몬 설정 파일 생성
cat <<EOF | sudo tee /etc/docker/daemon.json { "authorization-plugins": ["openpolicyagent/opa-docker-authz-v2:0.8"] } EOFDocker 데몬 재기동
{ sudo systemctl daemon-reload sudo systemctl restart docker }컨테이너 생성 시도
docker container run --name nginx -d nginxDocker 데몬 로그 확인
journalctl -u docker -n 10 --no-pager | grep containers/createOPA 플레이 그라운드에서 정책 검증 - https://play.openpolicyagent.org/
컨테이너 생성 시도
docker container run --name nginx -d youngwjung/nginx컨테이너 생성 확인
docker container lsDocker 데몬 로그 확인
journalctl -u docker -n 10 --no-pager | grep containers/createOPA 플레이 그라운드에서 정책 검증 - https://play.openpolicyagent.org/
리소스 정리
{ 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