728x90
1️⃣ 개요
DaemonSet은 모든 노드에서 실행되기 때문에, Pod 내부에서 호스트 시스템의 민감한 영역에 접근해야 할 경우가 있습니다.
하지만 이러한 접근은 보안적으로 위험할 수 있으므로, 필요한 최소한의 권한만 부여하는 것이 중요합니다.
Kubernetes는 securityContext를 통해 컨테이너 수준의 권한 제한, 사용자 설정, 파일 시스템 보호 등을 구성할 수 있게 해줍니다.
이번 글에서는 DaemonSet에서 securityContext를 활용하여 권한을 제어하는 방법을 정리합니다.
2️⃣ PodSecurityContext vs Container SecurityContext
항목 | PodSecurityContext | Container SecurityContext |
적용 범위 | Pod 전체 | 개별 컨테이너 |
위치 | spec.securityContext | containers[].securityContext |
주요 설정 | runAsUser, fsGroup, runAsGroup | privileged, readOnlyRootFilesystem, capabilities 등 |
✅ 일반적으로 DaemonSet에서는 Container SecurityContext 중심으로 세부 설정을 조절하게 됩니다.
3️⃣ 권한 제한 설정 예시 (보안 강화 목적)
securityContext:
runAsNonRoot: true # 루트 권한 사용 불가
readOnlyRootFilesystem: true # 루트 파일시스템을 읽기 전용으로 제한
allowPrivilegeEscalation: false # SUID 등 권한 상승 금지
capabilities:
drop: # 기본 Capabilities 중 불필요한 것 제거
- ALL
📌 설명
- 컨테이너가 루트가 아닌 사용자로 실행되도록 강제합니다.
- 시스템 변경이 불가능하도록 파일시스템을 읽기 전용으로 설정합니다.
- capabilities.drop을 통해 기본 Linux Capabilities도 제거합니다.
4️⃣ DaemonSet 전체 예제 (보안 컨텍스트 포함)
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: secure-agent
spec:
selector:
matchLabels:
app: secure-agent
template:
metadata:
labels:
app: secure-agent
spec:
containers:
- name: secure-agent
image: busybox
command: ["sh", "-c", "echo Secure agent running; sleep 3600"]
securityContext:
runAsNonRoot: true
readOnlyRootFilesystem: true
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
📌 설명 요약
- 이 DaemonSet은 busybox를 모든 노드에 배포하되, 컨테이너가 루트 권한 없이 실행되며 시스템 변경이 불가능하도록 제한됩니다.
5️⃣ privileged 모드가 필요한 경우
어떤 DaemonSet은 /dev, /proc, 커널 인터페이스 등에 접근해야 할 수 있습니다.
이럴 경우에는 다음과 같이 privileged 모드를 설정합니다.
securityContext:
privileged: true # 모든 권한 부여
📌 주의
- privileged 모드는 컨테이너가 호스트와 거의 동일한 권한을 갖게 되므로,
반드시 필요한 경우에만 설정해야 하며, 이미지 검증 및 격리 강화가 요구됩니다.
6️⃣ AppArmor / SELinux / Pod Security Standards 연동
보안 | 기능 설명 |
AppArmor/SELinux | 컨테이너의 시스템 콜, 파일 접근 등을 제한하는 리눅스 커널 보안 프로필 |
Pod Security Standards (PSP 대체) | Restricted / Baseline / Privileged 등 보안 수준을 설정하는 Pod-level 정책 |
✅ DaemonSet이 높은 권한을 요구할 경우, 클러스터 보안 정책에 따라 배포가 차단될 수 있으므로 미리 정책과의 충돌 여부를 확인해야 합니다.
🔥 7️⃣ 결론
✔ DaemonSet은 노드에 대한 접근 범위가 넓기 때문에, SecurityContext를 통해 최소 권한 원칙을 적용하는 것이 중요합니다.
✔ 권한 상승, 루트 실행, 파일 쓰기 등을 제한하여 잠재적인 보안 위험을 줄일 수 있습니다.
✔ 필요한 경우에만 privileged 모드를 사용하며, 항상 운영 정책과 보안 프로파일(AppArmor, SELinux 등)을 함께 고려해야 합니다.
728x90