실행 중인 컨테이너 보안
사용자 권한과 리소스 제한을 포함하여 실행 중인 컨테이너를 보호하기 위한 모범 사례를 적용하세요.
실행 중인 컨테이너 보안은(는) CoddyKit의 무료 DevOps Bootcamp 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 DevOps Bootcamp 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. DevOps Bootcamp 강의에는 총 4개의 강의가 포함되어 있습니다.
런타임 보안의 핵심
런타임 컨테이너 보안에 오신 것을 환영합니다! 안전한 이미지를 빌드하는 것도 중요하지만, 컨테이너가 실행된 후에는 어떤 일이 일어날까요?
이 수업에서는 애플리케이션이 활성 상태로 실행되는 동안 애플리케이션을 보호하여 취약점이나 공격으로 인한 잠재적 피해를 제한하는 모범 사례를 다룹니다.

최소 권한 원칙
보안의 기본 개념 중 하나는 최소 권한 원칙입니다. 이는 엔터티(예: 컨테이너 또는 사용자)에게 해당 기능을 수행하는 데 반드시 필요한 권한만 부여하고 그 이상은 부여하지 않는다는 의미입니다.
이 원칙을 적용하면 공격 표면을 줄이고 컨테이너가 침해되었을 때의 영향을 제한할 수 있습니다.
root로 실행하지 않기
기본적으로 Docker 컨테이너 내부의 프로세스는 컨테이너 내에서 모든 관리자 권한을 가진 root 사용자로 실행됩니다.
- 위험: 공격자가 root 권한을 가진 컨테이너를 제어하게 되면 Docker 데몬이나 커널의 취약점을 악용하여 호스트 시스템에서 root 권한을 얻을 수 있습니다.
- 모범 사례: 컨테이너 프로세스는 항상 root가 아닌 사용자로 실행합니다.
root가 아닌 사용자로 실행하기
docker run과 함께 --user 플래그를 사용하면 컨테이너 프로세스에 사용할 사용자를 이름 또는 UID로 지정할 수 있습니다. 여기서는 Alpine 컨테이너에서 id 명령을 사용자 1000으로 실행합니다.
사용자 1000이 존재하지 않더라도 Docker는 해당 UID를 사용합니다.
docker run --rm -it --user 1000 alpine idLinux 기능 이해하기
기존 Linux 시스템에는 모든 권한을 가지거나 아무 권한도 갖지 않는 'all or nothing' 방식의 root 사용자가 있습니다. Linux 기능은 강력한 root 권한을 더 작고 독립적인 단위로 나눕니다.
이를 통해 프로세스가 전체 root 권한을 갖지 않고도 필요한 특정 root 수준의 권한(예: 낮은 포트에 바인딩하거나 원시 네트워크에 액세스하는 권한)만 사용할 수 있습니다.
불필요한 기능 제거하기
Docker 컨테이너는 기본적으로 많은 기능을 활성화한 상태로 실행됩니다. --cap-drop을 사용하여 불필요한 기능을 제거하면 컨테이너가 수행할 수 있는 작업을 더욱 제한할 수 있습니다.
여기서는 NET_RAW 기능을 제거합니다. NET_RAW가 필요한 ping 명령은 이후 실패하며, 이를 통해 제한이 적용되었음을 확인할 수 있습니다.
docker run --rm -it --cap-drop=NET_RAW alpine ping -c 1 localhost || echo "Ping failed: NET_RAW capability dropped!"컨테이너 리소스 제어하기
컨테이너는 호스트의 커널과 리소스를 공유합니다. 한 컨테이너가 리소스를 제어 없이 사용하면 다른 컨테이너나 호스트 자체에 서비스 거부(DoS)가 발생할 수 있습니다.
- CPU 제한: 컨테이너가 CPU 사이클을 독점하지 못하게 합니다.
- 메모리 제한: 컨테이너가 사용 가능한 RAM을 모두 소비하지 못하게 하여 시스템 불안정을 방지합니다.
리소스 제한 적용하기
docker run을 사용하여 CPU와 메모리 제한을 직접 설정할 수 있습니다. 이 예제에서는 메모리를 128MB로 제한하고 CPU 사용량을 0.5(CPU 코어 하나의 절반)로 제한합니다.
이렇게 하면 컨테이너가 다른 프로세스의 리소스를 고갈시키지 않고 안정적으로 작동합니다.
docker run --rm -it --memory="128m" --cpus="0.5" alpine sh -c "echo 'Container running with limited resources.' && free -h"읽기 전용 파일 시스템
많은 애플리케이션은 시작된 후 루트 파일 시스템에 쓸 필요가 없습니다. 파일 시스템을 읽기 전용으로 만들면 다음과 같은 중요한 보안 이점을 얻을 수 있습니다:
- 변조 방지: 공격자가 기존 파일을 수정하거나 악성 파일을 새로 작성할 수 없습니다.
- 지속성 제한: 변경 사항은 일시적이며 컨테이너를 다시 시작하면 사라집니다.
- 불변성 강제: 컨테이너를 폐기할 수 있고 구성을 외부에서 관리하는 설계를 장려합니다.
읽기 전용 컨테이너 배포하기
컨테이너를 실행할 때 --read-only 플래그를 사용합니다. 명시적으로 마운트된 볼륨 외부에서 컨테이너의 파일 시스템에 쓰려고 하면 실패합니다.
이 읽기 전용 컨테이너에서 파일을 만들어 보세요:
docker run --rm -it --read-only alpine sh -c "touch /test.txt || echo 'Error: Cannot write to read-only filesystem!'"런타임 보안 확인
런타임에서 컨테이너를 보호하기 위한 좋은 방법은 다음 중 무엇인가요?
런타임 보안 복습
훌륭합니다! 컨테이너가 실행되는 동안 컨테이너 보안을 강화하는 방법을 배웠습니다:
- 최소 권한: 필요한 권한만 부여합니다.
- root가 아닌 사용자:
root로 프로세스를 실행하지 않습니다. - 기능: 불필요한 Linux 기능을 제거합니다.
- 리소스 제한: CPU와 메모리 사용량을 제어합니다.
- 읽기 전용: 파일 시스템을 불변으로 만들어 쓰기를 방지합니다.
이러한 방법을 사용하면 공격 표면과 침해가 발생했을 때의 잠재적 영향을 크게 줄일 수 있습니다. 계속 연습하세요!
자주 묻는 질문
“실행 중인 컨테이너 보안” 강의는 무료인가요?
네 — “실행 중인 컨테이너 보안” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 DevOps Bootcamp 강의 전체를 잠금 해제할 수 있습니다. DevOps Bootcamp 강의에는 총 4개의 강의가 포함되어 있습니다.
“실행 중인 컨테이너 보안”에서 뭘 배우나요?
사용자 권한과 리소스 제한을 포함하여 실행 중인 컨테이너를 보호하기 위한 모범 사례를 적용하세요. 브라우저에서 직접 실행하는 실습 코드로 DevOps Bootcamp을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
DevOps Bootcamp을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 DevOps Bootcamp은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“실행 중인 컨테이너 보안” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 DevOps Bootcamp 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 DevOps Bootcamp 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 컨테이너 이미지 보안 검사
- 실행 중인 컨테이너 보안
- Secrets 관리 및 RBAC
- 네트워크 정책과 최소 권한 네트워킹