소개
Docker 는 애플리케이션을 컨테이너화하는 인기 있는 선택이 되었지만, 이러한 컨테이너의 보안 및 제어를 관리하는 것은 필수적입니다. 이 튜토리얼에서는 Docker 에서 기능 경계 집합을 이해하고 구성하는 과정을 안내하여 Docker 기반 애플리케이션의 보안 및 제어를 강화합니다.
Docker 기능 이해
Docker 기능은 컨테이너에 특정 권한을 부여하거나 제한하는 보안 기능입니다. 기능은 Linux 커널의 기능으로, 프로세스에 부여되는 권한을 전통적인 루트 사용자의 전부 또는 아무것도 아닌 접근 방식보다 더 세밀하게 제어할 수 있도록 합니다.
Linux 커널에는 30 개 이상의 서로 다른 기능이 부여되거나 제한될 수 있습니다. 몇 가지 예는 다음과 같습니다.
CAP_NET_ADMIN: 컨테이너가 네트워크 인터페이스 구성, 방화벽 설정, 라우팅 테이블 관리와 같은 네트워크 관련 작업을 수행할 수 있도록 허용합니다.CAP_SYS_ADMIN: 파일 시스템 마운트, 커널 모듈 로드 및 기타 저수준 시스템 작업을 포함한 광범위한 시스템 관리 권한을 부여합니다.CAP_CHOWN: 컨테이너가 파일 및 디렉토리의 소유권을 변경할 수 있도록 허용합니다.
기본적으로 Docker 컨테이너는 제한된 기능 집합을 부여받아 공격 표면 및 잠재적인 보안 위험을 줄이는 데 도움이 됩니다. 그러나 특정 기능을 사용하려면 컨테이너에 추가 기능을 부여해야 할 수 있습니다.
graph TD
A[Linux 커널] --> B[기능]
B --> C[CAP_NET_ADMIN]
B --> D[CAP_SYS_ADMIN]
B --> E[CAP_CHOWN]
B --> F[기타 기능]
C --> G[네트워크 관리]
D --> H[시스템 관리]
E --> I[소유권 변경]
표 1: 일반적인 Docker 기능
| 기능 | 설명 |
|---|---|
CAP_NET_ADMIN |
컨테이너가 네트워크 관련 작업을 수행할 수 있도록 허용합니다. |
CAP_SYS_ADMIN |
광범위한 시스템 관리 권한을 부여합니다. |
CAP_CHOWN |
컨테이너가 파일 및 디렉토리의 소유권을 변경할 수 있도록 허용합니다. |
Docker 기능을 이해하는 것은 컨테이너를 보호하고 시스템 리소스에 대한 적절한 액세스 수준을 보장하는 데 중요합니다.
기능 경계 집합 구성
Docker 컨테이너의 기능 경계 집합을 구성하려면 컨테이너를 시작할 때 --cap-add 및 --cap-drop 옵션을 사용할 수 있습니다.
--cap-add 옵션을 사용하면 컨테이너의 경계 집합에 하나 이상의 기능을 추가할 수 있으며, --cap-drop 옵션을 사용하면 컨테이너의 경계 집합에서 하나 이상의 기능을 제거할 수 있습니다.
CAP_NET_ADMIN 기능을 추가하고 CAP_SYS_ADMIN 기능을 제거하여 컨테이너를 시작하는 예는 다음과 같습니다.
docker run --cap-add=NET_ADMIN --cap-drop=SYS_ADMIN -it ubuntu:22.04 /bin/bash
이 예제에서 컨테이너는 네트워크 관련 작업을 수행할 수 있는 CAP_NET_ADMIN 기능을 갖게 되지만, 광범위한 시스템 관리 권한을 부여하는 CAP_SYS_ADMIN 기능은 제거됩니다.
실행 중인 컨테이너의 현재 기능 경계 집합은 docker inspect 명령을 사용하여 확인할 수 있습니다.
docker inspect <container_id> | grep "CapBnd"
이렇게 하면 지정된 컨테이너의 현재 기능 경계 집합이 표시됩니다.
graph TD
A[Docker 컨테이너] --> B[기능 경계 집합]
B --> C[--cap-add=NET_ADMIN]
B --> D[--cap-drop=SYS_ADMIN]
C --> E[CAP_NET_ADMIN]
D --> F[CAP_SYS_ADMIN]
표 1: 일반적인 Docker 기능 경계 집합 옵션
| 옵션 | 설명 |
|---|---|
--cap-add=<capability> |
지정된 기능을 컨테이너의 경계 집합에 추가합니다. |
--cap-drop=<capability> |
지정된 기능을 컨테이너의 경계 집합에서 제거합니다. |
Docker 컨테이너의 기능 경계 집합을 구성하는 것은 애플리케이션 보안 및 공격 표면 감소에 중요한 단계입니다.
기능 경계 집합의 실제 적용
Docker 의 기능 경계 집합은 컨테이너의 보안 및 격리를 강화하기 위해 다양한 실제 시나리오에서 사용될 수 있습니다.
신뢰할 수 없는 애플리케이션 실행
컨테이너 내에서 신뢰할 수 없거나 잠재적으로 악성인 애플리케이션을 실행할 때, 기능 경계 집합을 사용하여 컨테이너에 부여된 권한을 제한할 수 있습니다. 예를 들어, CAP_SYS_ADMIN 기능을 제거하여 컨테이너가 민감한 시스템 관리 작업을 수행하는 것을 방지할 수 있습니다.
docker run --cap-drop=SYS_ADMIN -it untrusted-app /bin/bash
민감한 서비스 보안
컨테이너가 데이터베이스나 웹 서버와 같은 민감한 서비스를 실행하는 경우, 기능 경계 집합을 사용하여 컨테이너의 시스템 리소스 액세스를 필요한 것으로만 제한할 수 있습니다. 이렇게 하면 공격 표면을 줄이고 보안 위반의 잠재적 영향을 최소화하는 데 도움이 됩니다.
docker run --cap-drop=CHOWN --cap-drop=SETUID --cap-drop=SETGID -it secure-service /bin/bash
규정 준수 및 규제 요구 사항
의료 또는 금융과 같은 일부 산업에서는 애플리케이션에 부여된 권한에 대한 특정 규정 준수 또는 규제 요구 사항이 있을 수 있습니다. 기능 경계 집합을 사용하여 Docker 컨테이너가 이러한 요구 사항을 충족하고 필요한 보안 표준을 준수하도록 할 수 있습니다.
graph TD
A[Docker 컨테이너] --> B[기능 경계 집합]
B --> C[신뢰할 수 없는 애플리케이션]
B --> D[민감한 서비스]
B --> E[규정 준수 요구 사항]
C --> F[권한 제한]
D --> G[액세스 제한]
E --> H[보안 표준 준수]
표 1: 기능 경계 집합 구성 예
| 사용 사례 | 제거할 기능 |
|---|---|
| 신뢰할 수 없는 애플리케이션 | CAP_SYS_ADMIN, CAP_SETUID, CAP_SETGID |
| 민감한 서비스 | CAP_CHOWN, CAP_SETUID, CAP_SETGID |
| 규정 준수 요구 사항 | CAP_SYS_ADMIN, CAP_MKNOD, CAP_AUDIT_WRITE |
Docker 컨테이너의 기능 경계 집합을 이해하고 구성함으로써 애플리케이션의 보안 및 격리를 강화하고, 규정 준수 요구 사항을 충족하며, 잠재적인 공격 표면을 줄일 수 있습니다.
요약
이 튜토리얼을 마치면 Docker 기능과 기능 경계 집합을 구성하는 방법에 대한 포괄적인 이해를 얻게 될 것입니다. Docker 기반 애플리케이션의 보안 및 제어를 개선할 수 있도록 이러한 기능을 관리하는 실제적인 적용 사례를 배우게 될 것입니다.



