안녕하세요! 쿠버네티스(Kubernetes)의 세계를 항해하는 여러분을 위한 등대가 되어드릴게요. 🧭 오늘은 복잡해 보이지만 아주 중요한 쿠버네티스의 인증(Authentication)과 인가(Authorization) 체계에 대해 쉽고 상세하게 알아보려고 합니다.
쿠버네티스 클러스터는 수많은 컨테이너와 중요한 애플리케이션들이 모여있는 소중한 공간이죠. 이곳에 아무나 들어와서 마음대로 조작하게 둘 순 없겠죠? 그래서 쿠버네티스는 엄격한 출입 통제 시스템을 갖추고 있답니다.
이 시스템은 크게 두 단계로 나뉩니다.
- 인증 (Authentication) 👤: "당신은 누구신가요?" 신원을 확인하는 단계입니다.
- 인가 (Authorization) 🔑: "당신이 이 작업을 할 권한이 있나요?" 신원이 확인된 사용자가 특정 행동을 할 수 있는지 허가하는 단계입니다.
오늘 포스팅에서는 두 번째 단계인 인가(Authorization), 즉 "무엇을 할 수 있는가?"에 대한 다양한 방법들을 집중적으로 살펴보겠습니다!

⭐ RBAC (Role-Based Access Control): 역할 기반 접근 제어
"당신은 '개발자' 역할이니, '개발 서버'에만 들어갈 수 있습니다."
가장 널리 사용되고 쿠버네티스가 공식적으로 추천하는 방식입니다. 조직 내에서 개인에게 역할을 부여하고, 그 역할에 따라 할 수 있는 일(권한)을 미리 정해두는 방식이죠.
🏢 회사에 비유해 볼까요?
- 사용자(User): 회사 직원 🧑💼
- 역할(Role): '인사팀', '개발팀', '디자인팀' 같은 직무 🏷️
- 권한(Permission): '인사팀'은 직원 정보 열람 가능, '개발팀'은 개발 서버 접근 가능 🔑
- 리소스(Resource): 직원 정보 파일, 개발 서버 💻
이처럼 RBAC는 사용자에게 직접 권한을 하나하나 주는 게 아니라, '역할(Role)'이라는 중간 단계를 두어 권한을 묶어서 관리합니다. 덕분에 권한 관리가 훨씬 수월하고 직관적이죠. 예를 들어 새로운 개발자가 입사하면, 그에게 '개발팀' 역할을 부여하기만 하면 필요한 모든 권한이 한 번에 주어집니다.
RBAC는 쿠버네티스에서 Role, ClusterRole, RoleBinding, ClusterRoleBinding이라는 객체들을 통해 구현됩니다.
🧠 ABAC (Attribute-Based Access Control): 속성 기반 접근 제어
"당신은 '한국'에서 접속했고, '관리자' 그룹에 속해 있으며, 시간은 '업무 시간'이니, '모든 서버'에 접근할 수 있습니다."
ABAC는 RBAC보다 한 단계 더 나아가, 다양한 속성(Attribute)들을 조합해서 만든 정책(Policy)에 따라 접근을 허용하는 매우 유연하고 강력한 방식입니다.
여기서 말하는 속성은 정말 다양할 수 있어요.
- 사용자 속성: 사용자의 이름, 역할, 소속 그룹, 보안 등급 등
- 리소스 속성: 파일의 종류, 민감도, 소유자 등
- 환경 속성: 접속 시간, 접속 위치(IP 주소), 사용 기기 등
🎬 영화관에 비유해 볼까요? '19세 이상 관람가' 영화를 보려면, [나이: 19세 이상] 이라는 사용자 속성과 [영화 등급: 19세] 라는 리소스 속성이 모두 충족되어야만 입장이 가능한 것과 같아요.
ABAC는 이처럼 여러 조건을 동적으로 조합할 수 있어서 매우 세밀한 제어가 가능하지만, 정책을 만들고 관리하기가 RBAC에 비해 복잡하다는 단점이 있습니다.
🤖 Node Authorization: 노드 인가
"1번 노드야, 너는 너에게 할당된 파드(Pod) 정보만 가져갈 수 있어. 다른 노드 정보는 안돼!"
이름에서 알 수 있듯이, 노드(Node)에 특화된 인가 모드입니다. 정확히는 각 노드에서 실행되는 에이전트인 kubelet이 API 서버에 보내는 요청을 허가하는 특별한 목적의 기능이죠.
클러스터의 각 노드에서 일하는 일꾼 kubelet은 자신의 노드에 어떤 파드를 띄워야 하는지, 필요한 설정값(Secret, ConfigMap)은 무엇인지 등을 알기 위해 중앙 관리소인 API 서버와 계속 통신해야 합니다. 📞
이때 Node Authorization은 kubelet이 자신과 관련된 리소스에만 접근하도록 권한을 엄격하게 제한하는 역할을 합니다. 만약 A 노드의 kubelet이 전혀 상관없는 B 노드의 정보를 빼내려고 시도하면, Node Authorization이 "접근 불가! 🛡️"라며 요청을 차단해 버리죠. 이는 클러스터의 보안을 한층 더 강화해 주는 중요한 기능입니다.
Webhook Mode: 웹훅 모드
"이 사용자가 이 작업을 할 수 있는지 잘 모르겠네... 저기 외부 전문가에게 한번 물어보고 올게!"
쿠버네티스의 인가 결정을 내부에서 처리하지 않고, 외부의 다른 시스템에게 물어보는(위임하는) 방식입니다.
'Webhook'은 특정 이벤트가 발생했을 때 지정된 URL로 HTTP 요청을 보내는 것을 의미해요. 인가 과정에서는 다음과 같이 동작합니다.
- 사용자가 API 서버에 특정 작업을 요청합니다. 🙋
- 쿠버네티스 API 서버는 Webhook 모드로 설정된 외부 서비스 URL로 "이 사용자가 이 작업을 하려는데, 허가해도 될까요?" 라는 질문을 담아 HTTP 요청을 보냅니다. ➡️ 外部 서비스
- 요청을 받은 외부 서비스는 자체적인 로직(예: 회사 내부 인증 시스템과 연동)에 따라 권한을 확인하고, "네, 괜찮아요(allow)" 또는 "아니요, 안돼요(deny)" 라고 응답합니다. ✅ / ❌
- API 서버는 외부 서비스의 응답을 받고 최종적으로 사용자의 요청을 처리하거나 거부합니다.
이 방식은 이미 회사에 구축된 복잡한 인증/인가 시스템이 있거나, 쿠버네티스의 기본 인가 모델만으로는 구현하기 어려운 특별한 규칙을 적용하고 싶을 때 매우 유용하게 사용할 수 있습니다.
✨ 마무리하며
오늘은 쿠버네티스 클러스터를 안전하게 지키는 문지기, 인가(Authorization)의 다양한 방법들에 대해 알아보았습니다.
- RBAC: 역할 기반으로 가장 표준적이고 관리하기 쉬운 방법
- ABAC: 여러 속성을 조합해 세밀하고 동적인 제어가 가능한 방법
- Node Authorization: Kubelet의 권한을 제한해 노드 보안을 강화하는 방법
- Webhook Mode: 외부 시스템에 인가 결정을 위임하는 유연한 방법
어떤 방식을 선택할지는 여러분의 환경과 보안 요구사항에 따라 달라집니다. 하지만 대부분의 경우, RBAC로 시작하여 필요에 따라 다른 방식을 조합하는 것이 가장 좋은 출발점이 될 거예요.
여러분의 쿠버네티스 클러스터를 더욱 안전하고 견고하게 만드시길 바랍니다! 💪
태그: 쿠버네티스, Kubernetes, 인증, 인가, 보안, RBAC, ABAC, NodeAuthorization, Webhook, K8s, DevOps
'클라우드 > 쿠버네티스' 카테고리의 다른 글
| CKA/CKAD/CKS 시험 환경이 바뀌었나요? Killer.sh의 가상 데스크톱 환경 파헤치기! 💻 (0) | 2025.09.28 |
|---|---|
| 🔐 쿠버네티스 문을 여는 열쇠들! - 다양한 인증(Authentication) 방법 총정리 (2) | 2025.09.22 |
| 🔑 우리 회사 쿠버네티스, 아무 파드나 시크릿을 다 볼 수 있다구요? (1) | 2025.09.18 |
| 블로그: Kafka, 어디에 올려야 할까? VM vs 쿠버네티스, 국내 기업들의 선택은? (0) | 2025.09.18 |
| ☸️ 쿠버네티스(Kubernetes) TLS 부트스트래핑: 안전한 클러스터의 첫걸음 (1) | 2025.09.12 |