Certified Kubernetes Administration - 56
2024-06-22
- Kubernetes
- Cloud
- Linux
Docker 보안 기본 개념
-
프로세스 격리:
-
호스트에는 Docker 데몬, SSH 서버 등의 프로세스가 실행됩니다.
-
컨테이너는 호스트와 동일한 커널을 공유하지만, 네임스페이스를 통해 격리됩니다.
-
호스트는 모든 프로세스를 볼 수 있지만, 각 컨테이너는 자신의 프로세스만 볼 수 있습니다.
-
예를 들어, 컨테이너 내에서 실행되는 프로세스는 호스트에서 다른 프로세스 ID를 가질 수 있습니다.
-
-
사용자 및 권한 관리:
-
기본적으로 Docker는 컨테이너 내 프로세스를 루트 사용자로 실행합니다.
-
컨테이너 내에서 실행되는 프로세스는 루트 사용자 권한을 가지지만, 이는 호스트의 루트 사용자와 다릅니다.
-
docker run
명령어에서--user
옵션을 사용하여 비루트 사용자로 프로세스를 실행할 수 있습니다. -
Docker 이미지 생성 시
USER
지시문을 사용하여 사용자 ID를 설정할 수 있습니다.
-
-
루트 사용자 보안 제한:
-
Docker는 루트 사용자의 권한을 제한하는 보안 기능을 제공합니다.
-
루트 사용자라도 컨테이너 내에서 호스트를 재부팅하거나 중요한 시스템 설정을 변경할 수 없습니다.
-
리눅스 기능(Linux capabilities)을 사용하여 이러한 제한을 구현합니다.
-
cap-add
옵션을 사용하여 추가 권한을 부여할 수 있으며,cap-drop
옵션으로 권한을 제거할 수 있습니다. -
모든 권한을 부여하려면
--privileged
플래그를 사용할 수 있습니다.
-
Kubernetes 보안 컨텍스트
-
보안 컨텍스트 정의:
-
Kubernetes에서 보안 컨텍스트는 파드 또는 컨테이너의 보안 설정을 정의합니다.
-
사용자는 보안 컨텍스트를 사용하여 컨테이너가 실행되는 방식에 대한 보안 관련 설정을 지정할 수 있습니다.
-
-
사용자 및 그룹 설정:
-
securityContext
필드를 사용하여 파드 또는 컨테이너 수준에서 사용자와 그룹을 지정할 수 있습니다. -
runAsUser
: 컨테이너 내 프로세스를 특정 사용자 ID로 실행. -
runAsGroup
: 컨테이너 내 프로세스를 특정 그룹 ID로 실행.
-
-
Linux Capabilities 관리:
-
capabilities
필드를 사용하여 컨테이너에 추가하거나 제거할 Linux 기능을 지정할 수 있습니다. -
add
: 컨테이너에 추가할 기능. -
drop
: 컨테이너에서 제거할 기능.
-
-
Privileged 모드:
-
privileged
필드를true
로 설정하여 컨테이너에 모든 권한을 부여할 수 있습니다. -
이는 보안 위험이 있으므로 신중하게 사용해야 합니다.
-
예시 파드 정의 파일
apiVersion: v1
kind: Pod
metadata:
name: secure-pod
spec:
containers:
- name: secure-container
image: nginx
securityContext:
runAsUser: 1000
runAsGroup: 3000
capabilities:
add: ["NET_ADMIN", "SYS_TIME"]
drop: ["MKNOD"]
privileged: false
요약
Docker와 Kubernetes에서 보안 컨텍스트는 컨테이너의 보안 설정을 관리하는 데 중요한 역할을 합니다. 프로세스 격리, 사용자 및 그룹 설정, Linux 기능 관리 등을 통해 보안을 강화할 수 있습니다. 이를 통해 컨테이너의 보안성을 높이고, 호스트 시스템의 안전을 유지할 수 있습니다.
Certified ...
Certified ...