Skip to content

⚔️ Challenge: Permission Audit (RBAC)

🚨 Security Alert

Level: Critical Scenario: Thực tập sinh mới "Huy" phàn nàn rằng anh ấy không xem được log của Backend App. Một Senior (dỏm) đã apply file YAML dưới đây để "fix nhanh" cho Huy.

1. The Dangerous Configuration

Dưới đây là file YAML đã được apply vào cluster.

yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: intern-access
rules:
- apiGroups: ["*"]
  resources: ["*"]
  verbs: ["*"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: intern-binding
subjects:
- kind: User
  name: huy
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: intern-access
  apiGroup: rbac.authorization.k8s.io

🔻 Câu hỏi 1: Tại sao cấu hình này là "Thảm họa"?

👉 Click để xem đáp án

Nó cấp quyền "Full Admin" (God Mode) cho Huy trên toàn bộ Cluster.

  1. resources: ["*"] + verbs: ["*"]: Cho phép làm BẤT CỨ ĐIỀU GÌ (Xóa Node, Xóa Database, Đọc Secret, Tắt Cluster).
  2. ClusterRole: Phạm vi ảnh hưởng là TOÀN BỘ CLUSTER, không chỉ riêng namespace backend.
  3. Huy có thể vô tình (hoặc cố ý) xóa sạch hệ thống chỉ với một lệnh.

2. The Mission: Fix the Permissions

Nhiệm vụ của bạn là viết lại file YAML trên để tuân thủ nguyên tắc Least Privilege.

Yêu cầu:

  1. Chỉ cho phép Huy thao tác trong namespace backend.
  2. Huy chỉ cần xem Log và trạng thái Pods để debug.
  3. Cấm Huy xóa Pod, Sửa Deployment, hoặc Đọc Secret.
  4. Cấm Huy truy cập các namespace khác (như kube-system).

📝 Your Solution YAML

Hãy thử viết YAML trước khi xem đáp án. Gợi ý: Dùng Role thay vì ClusterRole.




3. The Solution (HPN Standard)

Đây là cách chúng ta cấp quyền chuẩn chỉ tại HPN.

yaml
# 1. Role: Chỉ định nghĩa QUYỀN HẠN trong phạm vi Namespace
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: backend # 🔒 Chỉ áp dụng cho namespace này
  name: pod-viewer-role
rules:
- apiGroups: [""]
  resources: ["pods", "pods/log"] # 🔒 Chỉ cho phép tác động vào Pods & Log
  verbs: ["get", "list", "watch"] # 🔒 Chỉ cho phép xem (Read-Only)

---
# 2. RoleBinding: Trao Role cho Huy
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  namespace: backend
  name: huy-backend-viewer
subjects:
- kind: User
  name: huy
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: pod-viewer-role
  apiGroup: rbac.authorization.k8s.io

Giải thích Security Check:

  • Namespace Isolation: Huy không thể động vào database namespace hay kube-system.
  • Resource Limitation: Huy không thể xem Secret (kubectl get secrets -> Forbidden).
  • Verb Limitation: Huy không thể xóa Pod (kubectl delete pod -> Forbidden).
  • Audit Ready: Cấu hình này an toàn và pass mọi bài audit.