[K8s] 제로 트러스트를 향한 클러스터 내부 보안: Network Policy와 RBAC

2026. 8. 19. 22:54·▣ Infra & DevOps/Kubernetes🚢
728x90
반응형

이번 글에서는 K8s 내부에 제로 트러스트(Zero Trust) 보안 모델을 구축하기 위한 Network Policy와 RBAC을 다룹니다.


1. 기본값은 "모두 허용": K8s 네트워크의 위험한 출발점

K8s의 기본 네트워크 설정은 모든 Pod 간 통신을 허용합니다. 같은 클러스터에 있는 프론트엔드 Pod, 백엔드 Pod, 데이터베이스 Pod가 서로 아무런 제약 없이 접근할 수 있습니다. 이는 개발 초기에는 편리하지만, 프로덕션 환경에서는 치명적인 보안 취약점입니다.

  • 프론트엔드 Pod가 해킹당하면 DB Pod에 직접 접근 가능
  • 관련 없는 네임스페이스의 Pod끼리도 자유롭게 통신

2. Network Policy: Pod 간 방화벽

Network Policy는 K8s에서 Pod 간의 트래픽을 제어하는 방화벽 규칙입니다.

# DB Pod는 backend 라벨이 붙은 Pod의 5432 포트 접근만 허용
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: db-allow-backend-only
  namespace: production
spec:
  podSelector:
    matchLabels:
      app: postgres
  policyTypes:
    - Ingress
  ingress:
    - from:
        - podSelector:
            matchLabels:
              role: backend
      ports:
        - protocol: TCP
          port: 5432

핵심 규칙

  • Default Deny: Network Policy가 하나라도 적용되면, 해당 Pod는 명시적으로 허용된 트래픽만 받습니다.
  • 라벨 기반 선택: IP가 아닌 Pod의 라벨(Label)로 대상을 지정하므로, Pod가 재생성되어 IP가 바뀌어도 정책이 유지됩니다.
  • 네임스페이스 격리: namespaceSelector를 통해 다른 네임스페이스에서의 접근을 완전히 차단할 수 있습니다.

Network Policy: Pod 간 허용/차단 트래픽 흐름


3. RBAC: "누가 K8s API를 호출할 수 있는가"

Network Policy가 Pod 간의 네트워크 통신을 제어한다면, RBAC(Role-Based Access Control)는 K8s API 서버에 대한 접근 권한을 제어합니다. "이 개발자는 Pod를 조회할 수 있지만 삭제는 못 한다", "이 CI/CD 서비스 계정은 Deployment만 업데이트할 수 있다" 같은 규칙을 설정합니다.

 

RBAC의 4가지 핵심 오브젝트:

오브젝트 범위 역할
Role 네임스페이스 특정 네임스페이스 내 권한 정의
ClusterRole 클러스터 전체 클러스터 전역 권한 정의
RoleBinding 네임스페이스 사용자/그룹에 Role을 연결
ClusterRoleBinding 클러스터 전체 사용자/그룹에 ClusterRole을 연결
# 백엔드 개발자에게 production 네임스페이스의 Pod 조회 권한만 부여
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: production
  name: pod-reader
rules:
  - apiGroups: [""]
    resources: ["pods", "pods/log"]
    verbs: ["get", "list", "watch"]   # 조회만 가능, 삭제/수정 불가

RBAC 계층 구조: User → RoleBinding → Role → 리소스 권한


4. 요약: 제로 트러스트 보안 체크리스트

계층 도구 원칙
네트워크 Network Policy 명시적으로 허용하지 않은 Pod 간 통신은 모두 차단
API 접근 RBAC 최소 권한 원칙(Least Privilege) — 필요한 권한만 부여
데이터 전송 Cilium WireGuard Pod 간 통신 자동 암호화

 

제로 트러스트의 핵심은 "클러스터 내부라고 해서 신뢰하지 않는다"입니다. Network Policy로 Pod 간 통신을 최소화하고, RBAC으로 API 접근을 제한하는 것이 클라우드 네이티브 보안의 기본입니다.

728x90
반응형
'▣ Infra & DevOps/Kubernetes🚢' 카테고리의 다른 글
  • [K8s] K8s 네트워크의 진화와 성능 최적화: kube-proxy의 한계와 eBPF/Cilium
  • [K8s] 트래픽 폭주에 대비하는 K8s 자동 확장 전략: HPA와 KEDA
  • [K8s] 상태가 있는(Stateful) 데이터를 위한 스토리지 전략: PV, PVC와 StatefulSet
  • [K8s] 눈을 가리고 운전할 수는 없다: K8s 옵저버빌리티(Observability)와 AIOps의 도래
예르미(yermi)
예르미(yermi)
끊임없이 제 자신을 계발하는 개발자입니다👨🏻‍💻
  • 예르미(yermi)
    예르미의 코딩노트
    예르미(yermi)
  • 전체
    오늘
    어제
    • 분류 전체보기 (1024) N
      • ◎ Java (133)
        • Java☕ (93)
        • JSP📋 (26)
        • Applet🧳 (6)
        • Interview👨🏻‍🏫 (8)
      • ◎ JavaScript (48)
        • JavaScript🦎 (25)
        • jQuery🌊 (8)
        • React🌐 (2)
        • Vue.js🔰 (6)
        • Node.js🫒 (3)
        • Google App Script🐑 (4)
      • ◎ HTML5+CSS3 (17)
        • HTML5📝 (8)
        • CSS3🎨 (9)
      • ──────────── (0)
      • ▣ Framework (67)
        • Spring🍃 (36)
        • Spring Boot🍀 (12)
        • Bootstrap💜 (3)
        • Selenium🌕 (6)
        • MyBatis🐣 (10)
      • ▣ Tools (47)
        • API🎯 (18)
        • Library🎲 (15)
        • JitPack🚀 (3)
        • Jenkins👨🏻 (7)
        • Thymeleaf🌿 (4)
      • ▣ Server (30)
        • Apache Tomcat🐱 (14)
        • Apache HTTP Server🛡️ (1)
        • Nginx🧶 (7)
        • OracleXE💿 (4)
        • VisualSVN📡 (4)
      • ▣ Infra & DevOps (19) N
        • LGTM Stack🔭 (5)
        • Kafka🐦‍🔥 (0)
        • Kubernetes🚢 (8)
        • KubeCon Japan 2026⚓ (6) N
      • ▣ OS : 운영체제 (18)
        • cmd : 명령프롬프트💻 (10)
        • Linux🐧 (8)
      • ▣ SQL : Database (56)
        • Oracle SQL🏮 (26)
        • PL SQL💾 (9)
        • MySQL🐬 (6)
        • MariaDB🦦 (6)
        • H2 Database🔠 (3)
        • SQL 실전문제🐌 (6)
      • ────────── (0)
      • ◈ Human Project (86)
        • Mini : Library Service📚 (15)
        • 화면 설계 [HTML]🐯 (10)
        • 서버 프로그램 구현🦁 (15)
        • Team : 여수어때🛫 (19)
        • Custom : Student🏫 (9)
        • Custom : Board📖 (18)
      • ◈ Yermi Project (49) N
        • 조사모아(Josa-moa)📬 (5)
        • Riddle-Game🧩 (6)
        • 맛있을 지도🍚 (2)
        • 어디 가! 박대리!🙋🏻‍♂️ (5)
        • 조크베어🐻‍❄️ (4)
        • Looks Like Thirty🦉 (2)
        • Toy Project💎 (12)
        • 오픈소스 파헤치기🪐 (5)
        • 오늘가챠🃏 (8) N
      • ◈ Refactoring (15)
        • Mini : Library Service📚 (8)
        • 서버 프로그램 구현🦁 (1)
        • Team : 여수어때🛫 (0)
        • 쿼리 튜닝일지🔧 (6)
      • ◈ Coding Test (80)
        • 백준(BOJ)👨🏻‍💻 (71)
        • 프로그래머스😎 (2)
        • 코드트리🌳 (7)
      • ◈ Study (129)
        • 기초튼튼 개발지식🥔 (25)
        • HTTP 웹 지식💡 (4)
        • 클린코드(Clean Code)🩺 (1)
        • 디자인패턴(GoF)🥞 (12)
        • 알고리즘(Algorithm)🎡 (14)
        • 다이어그램(Diagram)📈 (4)
        • 파이썬(Python)🐍 (16)
        • 에러노트(Error Note)🧱 (34)
        • 웹 보안(Web Security)🔐 (11)
        • 인공지능 AI🛸 (8)
      • ◈ 공부모임 (57)
        • 혼공학습단⏰ (18)
        • 코드트리 챌린지👊🏻 (2)
        • 개발도서 100독👟 (8)
        • 나는 리뷰어다🌾 (17)
        • 국가기술자격 서포터즈🌻 (12)
      • ◈ 자격증 공부 (48)
        • 정보처리기사🔱 (16)
        • 정보처리산업기사🔅 (9)
        • 정보보안기사⚜️ (11)
        • 컴퓨터활용능력 1급📼 (12)
      • ─────────── (0)
      • ◐ 기타 (124)
        • 알아두면 좋은 팁(tip)✨ (46)
        • 개발자의 일상🎈 (55)
        • 개발도서 서평🔍 (10)
        • 개발관련 세미나🎤 (2)
        • 블로그 꾸미기🎀 (9)
        • 사도신경 프로젝트🎚️ (2)
  • 인기 글

  • 최근 댓글

  • 반응형
    250x250
  • 태그

    백준 티어
    spring
    꿀팁
    Error Note
    Database
    자바스크립트
    BOJ
    백준
    javascript
    jsp
    CSS
    SQL
    Java
    코딩 테스트
    spring boot
    코딩
    프로그래밍
    일상
    Oracle
    Project
  • hELLO· Designed By정상우.v4.10.3
예르미(yermi)
[K8s] 제로 트러스트를 향한 클러스터 내부 보안: Network Policy와 RBAC
상단으로

티스토리툴바