가상머신(VM)과 달리 컨테이너는 호스트의 운영체제 커널을 공유하기 때문에 격리성 측면에서 보안 취약점이 존재할 수 있습니다. 이를 방어하기 위한 강력한 수단들을 적용해야 합니다.
AppArmor(Application Armor)는 프로그램이나 컨테이너가 접근할 수 있는 파일, 네트워크, 권한을 강제로 제한하는 리눅스 커널 보안 모듈입니다.
root 권한을 탈취당할 경우, 컨테이너 탈옥(Container Breakout)을 통해 호스트 시스템 전체가 장악될 위험이 있습니다.docker-default라는 자체 AppArmor 프로파일을 적용하여, 컨테이너 내부에서 커널 수정이나 디바이스 노드 마운트와 같은 치명적인 행위를 차단합니다.# 1. 호스트 커널에 AppArmor 프로파일 로드
sudo apparmor_parser -r -W my-custom-profile
# 2. 해당 프로파일을 지정하여 컨테이너 실행
docker run --rm -it --security-opt apparmor=my-custom-profile hello-worldDB 접속 비밀번호나 API 키 같은 민감한 정보(Credentials)를 하드코딩하거나 런타임 명령어에 직접 노출하는 것은 해킹의 주된 표적이 됩니다.
[위험한 방식]
명령어 이력(History)에 평문으로 남기 때문에 절대 사용해서는 안 됩니다.
docker run -e DB_PASSWORD=mySecret123 my_app[안전한 방식]
--env-file)
보안이 유지되는 공간에 .env 파일을 작성하고 주입합니다.
docker run --env-file ./secure_envset.env my_app/run/secrets/)에만 주입되도록 구성합니다.
# 1. 평문 노출 없이 안전하게 시크릿 생성
echo "mySecret123" | docker secret create db_password -
# 2. 서비스를 띄우며 시크릿 주입
docker service create --name my_db --secret db_password mysql:latest