Part 12 · Kubernetes · 12.1.08

Configuration, identity, RBAC và admission security

Kubernetes security không nằm ở một object duy nhất. Config/Secret, workload identity, RBAC, Pod hardening, admission policy và tenant isolation phải tạo thành nhiều lớp bảo vệ; một namespace hoặc một Secret object riêng lẻ không tự tạo ra security boundary mạnh.

Mental model: bảo vệ theo chuỗi data → identity → authorization → workload runtime → admission/supply chain → tenant boundary. Mỗi lớp phải có least privilege, observability và recovery plan riêng.

1. ConfigMap and Secret

ConfigMap dành cho cấu hình không nhạy cảm; Secret dành cho dữ liệu như password, token hoặc key. Secret là Kubernetes API object — không phải secret manager hoàn chỉnh. Giá trị Secret thường được biểu diễn bằng base64 nhưng base64 chỉ là encoding, không phải encryption; dữ liệu Secret trong etcd cần được cấu hình encryption at rest và quyền đọc phải được giới hạn bằng RBAC.

Cách đưa config vào PodUpdate behaviorRủi ro / vận hành
Environment variableProcess nhận giá trị khi container start; thay đổi object không tự cập nhật biến môi trường của process đang chạy.Cần rollout/restart để nhận version mới; secret có thể lộ qua process/debug tooling nếu vận hành kém.
Mounted / projected volumeKubelet có thể cập nhật file sau một khoảng trễ; application vẫn phải đọc lại/reload.Không giả định update là instant; cần xác định reload semantics và xử lý file rotation an toàn.
External secret store / CSILifecycle phụ thuộc provider/driver và policy rotation.Giảm secret material trong workflow Kubernetes nhưng thêm dependency, permission model và failure mode mới.

Config và Secret cần có version/ownership rõ ràng. Khi thay đổi cấu hình có ảnh hưởng behavior, dùng immutable artifact hoặc checksum/version annotation để rollout workload có kiểm soát thay vì hy vọng process tự nhận cấu hình mới.

Failure window: rotation có thể tạo outage nếu producer của Secret đổi trước khi consumer reload, hoặc credential cũ bị revoke quá sớm. Giữ overlap window hữu hạn và có metric xác nhận tất cả workload đã chuyển sang version mới trước khi revoke.

2. Identity and RBAC

Workload thường gọi Kubernetes API bằng ServiceAccount. Không cần API access thì tắt automount token ở Pod hoặc ServiceAccount. Human identity và workload identity nên tách riêng để audit, rotation và blast radius rõ ràng.

RBAC gồm Role/ClusterRole mô tả quyền và RoleBinding/ClusterRoleBinding gán quyền cho subject. Least privilege phải xét đồng thời verbs, resources, API groups, namespace và phạm vi cluster.

Permission nhạy cảmVì sao nguy hiểmKiểm soát
* wildcardTự động bao phủ resource/verb mới xuất hiện sau upgrade.Liệt kê explicit verbs/resources khi có thể.
bind, escalate, impersonateCó thể mở đường privilege escalation.Chỉ cấp cho control-plane/admin workflow thực sự cần.
Create workloadsPod có thể chạy bằng ServiceAccount khác trong namespace hoặc yêu cầu runtime privilege nếu admission không chặn.Kết hợp RBAC với Pod Security/admission và giới hạn ServiceAccounts.
Read SecretsCredential disclosure có thể dẫn đến lateral movement.Giới hạn get; tránh list/watch rộng; audit access.
# Ví dụ: workload không cần Kubernetes API token
apiVersion: v1
kind: ServiceAccount
metadata:
  name: web
  namespace: app
automountServiceAccountToken: false

Operational signals: theo dõi denied API requests tăng đột biến, creation/change của RoleBinding và ClusterRoleBinding, impersonation, Secret reads bất thường và workload dùng ServiceAccount ngoài ownership mong đợi. Sau incident hoặc credential exposure, revoke/rotate token, review bindings và đối chiếu audit log.

3. Pod security

SecurityContext giảm khả năng container chuyển từ application compromise thành node compromise. Với Linux workload thông thường, baseline hardening thường gồm chạy non-root với UID/GID cố định phù hợp ownership, không privilege escalation, filesystem root read-only khi khả thi, drop capabilities không cần thiết và dùng seccomp profile phù hợp.

securityContext:
  runAsNonRoot: true
  seccompProfile:
    type: RuntimeDefault
containers:
- name: app
  image: registry.example/app@sha256:...
  securityContext:
    allowPrivilegeEscalation: false
    readOnlyRootFilesystem: true
    capabilities:
      drop: ["ALL"]

Tránh hostPID, hostIPC, hostNetwork, privileged container, hostPath/socket mount và quyền truy cập host khác trừ workload hạ tầng đã được review. Các quyền này có thể làm mờ container boundary.

Kubernetes Pod Security Standards định nghĩa ba profile: Privileged, BaselineRestricted. Built-in Pod Security Admission áp policy ở namespace level và hỗ trợ ba mode enforce, audit, warn; có thể pin policy version để upgrade cluster không bất ngờ thay đổi enforcement.

apiVersion: v1
kind: Namespace
metadata:
  name: payments
  labels:
    pod-security.kubernetes.io/enforce: restricted
    pod-security.kubernetes.io/audit: restricted
    pod-security.kubernetes.io/warn: restricted
Rollout rule: với namespace hiện hữu, đo violations bằng audit/warn trước; sửa workload; sau đó mới enforce. Giữ break-glass procedure cho workload hạ tầng đặc biệt nhưng không biến exception thành default.

4. Admission and supply chain

Admission chạy trên API write path sau authentication/authorization và trước khi object được persist. Đây là nơi phù hợp để enforce policy như image registry, digest/signature/provenance, resource requests/limits, security context và field invariants.

Nếu policy chỉ cần validation declarative, ưu tiên cơ chế in-process như ValidatingAdmissionPolicy khi phù hợp để giảm network dependency. Webhook vẫn hữu ích cho logic phức tạp nhưng trở thành dependency trực tiếp của API write availability.

Failure modeImpactMitigation / recovery
Admission webhook timeout / unavailableVới fail-closed, create/update có thể bị chặn; deploy/scale/repair dừng.HA replicas, short timeout, narrow match rules, monitor latency/error; chuẩn bị rollback webhook config.
failurePolicy: IgnoreTăng availability nhưng policy có thể bị bypass khi webhook lỗi.Chỉ dùng sau threat-model; alert ngay khi webhook unhealthy và reconcile resources được tạo trong window đó.
Policy rollout quá chặtBlock workload hợp lệ trên toàn scope.Audit/warn/canary scope trước, version policy, rollback binding/config nhanh.
Image/tag bị thay đổiCùng tag có thể chạy artifact khác qua thời gian.Pin digest, allow trusted registries, verify signature/provenance theo supply-chain policy.
Capacity/security trade-off: admission logic chạy trong write path của control plane. Policy engine chậm hoặc dependency ngoài cluster không ổn định có thể biến security control thành cluster-wide availability incident. SLO cần có webhook/policy latency, error/timeout rate và rejected request rate.

5. Multi-tenancy

Namespace là organizational và policy scope quan trọng nhưng không phải hard isolation boundary một mình. Namespace multi-tenancy cần phối hợp RBAC + NetworkPolicy + ResourceQuota/LimitRange + Pod Security/admission + storage/runtime controls.

Nếu threat model có hostile tenants, yêu cầu kernel-level isolation hoặc compliance boundary độc lập, namespace sharing có thể không đủ. Khi đó separate cluster/node/runtime sandbox là lựa chọn cần đánh giá rõ về security guarantee và operational cost.

6. Production checklist và recovery

AreaSignal cần theo dõiRecovery / rollback
Secret/configVersion drift, failed reload, auth failures sau rotationKhôi phục credential/config version trước; giữ overlap rồi revoke có kiểm soát.
RBACDenied requests, binding changes, unusual Secret readsRevert binding/role change, rotate compromised identity, audit blast radius.
Pod securityAdmission warnings/rejections theo namespace/workloadRollback policy label/version hoặc workload manifest; không disable toàn cluster nếu chỉ một scope lỗi.
AdmissionLatency, timeout, 5xx, rejection rateDisable/narrow broken binding/webhook theo runbook; reconcile objects được tạo trong fail-open window.
Tenant isolationQuota pressure, policy drops, cross-namespace access attemptsContain tenant, revoke access, restore policy/quota và kiểm tra lateral movement.
Security rollback không đồng nghĩa “tắt security”. Mục tiêu là quay về policy/version đã biết tốt, thu hẹp scope lỗi và giữ audit trail. Với fail-open window, luôn có bước post-recovery reconciliation để tìm resource đã lọt qua policy.
Tài liệu chính thức: Secrets · Secrets good practices · RBAC · RBAC good practices · Pod Security Standards · Pod Security Admission · Admission Control · Dynamic Admission Control · Multi-tenancy