컨테이너 보안
컨테이너 런타임
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 nginx
Docker 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.3
Trivy 설치 확인
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 nginx
NGINX 컨테이너에서 실행중인 프로세스 목록 확인
docker container top nginx
컨테이너 이미지 상세 내용 확인
docker image history nginx --format '{{.CreatedBy}}' --no-trunc
NGINX 컨테이너 재생성하고 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 EOF
NGINX 컨테이너 재생성
{ 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 nginx
Docker 데몬 로그 확인
journalctl -u docker -n 3 --no-pager
Docker 데몬 로그 레벨 변경
cat <<EOF | sudo tee /etc/docker/daemon.json { "debug": true } EOF
Docker 데몬 재기동
{ 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 --force
OPA 정책 파일을 저장할 디렉토리 생성
sudo mkdir -p /etc/docker/opa-policy
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
opa-docker-authz 플러그인 설치
docker plugin install openpolicyagent/opa-docker-authz-v2:0.8 opa-args="-policy-file /opa/opa-policy/authz.rego"
설치된 플러그인 목록 확인
docker plugin ls
Docker 데몬 설정 파일 생성
cat <<EOF | sudo tee /etc/docker/daemon.json { "authorization-plugins": ["openpolicyagent/opa-docker-authz-v2:0.8"] } EOF
Docker 데몬 재기동
{ sudo systemctl daemon-reload sudo systemctl restart docker }
컨테이너 생성 시도
docker container run --name nginx -d nginx
Docker 데몬 로그 확인
journalctl -u docker -n 10 --no-pager | grep containers/create
OPA 플레이 그라운드에서 정책 검증 - https://play.openpolicyagent.org/
컨테이너 생성 시도
docker container run --name nginx -d youngwjung/nginx
컨테이너 생성 확인
docker container ls
Docker 데몬 로그 확인
journalctl -u docker -n 10 --no-pager | grep containers/create
OPA 플레이 그라운드에서 정책 검증 - 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