Kubernetes/Kubernetes Basics

📌 Kubernetes 보안 강화하기: RBAC, 네트워크 정책, 이미지 스캐닝

ygtoken 2025. 3. 3. 07:41
728x90

 

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 보안을 강화하면 무단 접근, 네트워크 침입, 악성 코드 감염을 방지할 수 있습니다! 🚀

 

 

728x90