1️⃣ Kubernetes에서 보안이 중요한 이유?
Kubernetes는 자동 확장, 셀프 힐링, 서비스 디스커버리 등 강력한 기능을 제공하지만,
잘못된 설정이 있으면 보안 취약점이 발생할 수 있습니다.
✅ 보안이 약한 경우 발생할 수 있는 문제
• 무단 접근 → 적절한 인증 & 권한 관리가 없으면 외부 공격자가 클러스터를 조작할 수 있음
• 잘못된 네트워크 설정 → 서비스 간 트래픽이 과도하게 오픈되면 보안 위험 증가
• 컨테이너 이미지 보안 문제 → 악성 코드가 포함된 이미지를 배포하면 전체 시스템이 위험해질 수 있음
Kubernetes 보안을 강화하기 위해 RBAC, 네트워크 정책, 컨테이너 이미지 보안을 설정하는 것이 중요합니다.
2️⃣ Kubernetes 보안 강화 전략
📌 Kubernetes 보안을 강화하는 주요 방법은 다음과 같습니다.
보안 방식설명
RBAC(Role-Based Access Control) | 사용자 및 서비스 계정에 대한 권한 제어 |
네트워크 정책(NetworkPolicy) | Pod 간 트래픽을 제어하여 격리 |
컨테이너 이미지 보안 | 보안 취약점이 있는 컨테이너 이미지 방지 |
Pod 보안 정책 | 특정 Pod 실행 제한 (예: 루트 권한 금지) |
Secret & ConfigMap 보호 | 민감한 정보를 안전하게 저장 |
Kubernetes API 접근 제한 | 불필요한 API 접근을 차단 |
✅ 위 방법을 적용하면 Kubernetes 클러스터 보안을 한층 더 강화할 수 있습니다!
3️⃣ RBAC(Role-Based Access Control) 설정하기
📌 RBAC을 사용하면 사용자 & 서비스 계정의 권한을 세밀하게 제어할 수 있습니다.
✅ RBAC을 활용하면 다음을 제어할 수 있음
✔ 특정 사용자만 kubectl apply를 실행 가능
✔ 특정 네임스페이스 내에서만 리소스 생성 가능
✔ 읽기 전용(Read-Only) 권한만 부여 가능
📌 RBAC을 활용한 접근 제어 예제
✅ Step 1: 읽기 전용(Role) 권한 생성
📌 read-only-role.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: team-a
name: read-only-role
rules:
- apiGroups: [""]
resources: ["pods", "services", "deployments"]
verbs: ["get", "list"]
📌 적용 명령어
kubectl apply -f read-only-role.yaml
✅ Team A 네임스페이스에서 Pod, Service, Deployment를 조회만 가능
✅ Step 2: 특정 사용자에게 RBAC 권한 부여
📌 role-binding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
namespace: team-a
name: read-only-binding
subjects:
- kind: User
name: dev-user
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: read-only-role
apiGroup: rbac.authorization.k8s.io
📌 적용 명령어
kubectl apply -f role-binding.yaml
✅ dev-user는 Team A 네임스페이스에서 읽기 전용 권한만 가짐!
4️⃣ 네트워크 정책(NetworkPolicy) 설정하기
📌 네트워크 정책을 사용하면 Pod 간 트래픽을 제한할 수 있습니다.
📌 기본적으로 Kubernetes는 모든 Pod 간 네트워크 통신을 허용하므로, 보안을 위해 명시적으로 정책을 정의해야 합니다.
✅ Step 1: 네임스페이스 내에서만 통신 가능하도록 설정
📌 network-policy.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-namespace-internal
namespace: team-a
spec:
podSelector: {}
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: team-a
📌 적용 명령어
kubectl apply -f network-policy.yaml
✅ Team A 네임스페이스 내에서만 Pod 간 통신이 가능!
✅ Step 2: 특정 서비스만 통신 가능하도록 설정
📌 network-policy-service.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-web-to-db
namespace: team-a
spec:
podSelector:
matchLabels:
role: db
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
role: web
📌 적용 명령어
kubectl apply -f network-policy-service.yaml
✅ web Pod만 db Pod로 트래픽을 보낼 수 있음!
5️⃣ 컨테이너 이미지 보안 강화
📌 보안 취약점이 포함된 컨테이너 이미지를 배포하면 전체 시스템이 위험할 수 있습니다.
📌 컨테이너 이미지 스캐닝 도구를 활용하여 보안을 강화할 수 있습니다.
✅ 주요 컨테이너 이미지 보안 도구
도구설명
Trivy | 오픈소스 컨테이너 이미지 보안 스캐너 |
Clair | 취약점 스캔 및 보고 기능 제공 |
Anchore | 정책 기반 컨테이너 보안 도구 |
📌 Trivy를 사용하여 컨테이너 이미지 스캔하기
trivy image nginx:latest
✅ 보안 취약점이 있는지 검사 후 안전한 이미지 사용 가능!
6️⃣ Pod 보안 정책(PSP) 설정하기
📌 Pod 보안 정책을 사용하면 루트 사용자 실행을 방지할 수 있습니다.
📌 Pod 보안 정책 예제 (psp.yaml)
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
name: restricted
spec:
privileged: false
runAsUser:
rule: MustRunAsNonRoot
seLinux:
rule: RunAsAny
fsGroup:
rule: MustRunAs
ranges:
- min: 1
max: 65535
📌 적용 명령어
kubectl apply -f psp.yaml
✅ 루트 권한을 가진 컨테이너 실행 방지 가능!
📌 결론: Kubernetes 보안을 강화하려면?
보안 기능설명
RBAC | 사용자 & 서비스 계정의 접근을 제어 |
네트워크 정책 | Pod 간 트래픽 제한 |
컨테이너 이미지 보안 | 취약점이 있는 이미지 배포 방지 |
Pod 보안 정책 | 루트 권한 실행 방지 |
🔥 Kubernetes 보안을 강화하면 무단 접근, 네트워크 침입, 악성 코드 감염을 방지할 수 있습니다! 🚀
'Kubernetes > Kubernetes Basics' 카테고리의 다른 글
📌 Kubernetes 로그 & 모니터링 운영 전략 (0) | 2025.03.03 |
---|---|
📌 Kubernetes 비용 절감 & 리소스 최적화 전략 (0) | 2025.03.03 |
📌 Kubernetes 멀티 테넌시 환경 구축하기 (0) | 2025.03.03 |
📌 Kubernetes 멀티 클러스터 운영 전략 알아보기 (0) | 2025.03.03 |
📌 Kubernetes CI/CD: GitOps로 자동 배포 환경 구축하기 (0) | 2025.03.03 |