Giao diện
Module 8: Pod Security Context & Hardening Standards
🛡️ HPN Engineering Standard
"Secure by Design" Tại HPN, chúng ta không "vá" bảo mật sau khi deploy. Chúng ta xây dựng bảo mật ngay từ manifest đầu tiên.
1. The "Root" Evil (UID 0)
Theo mặc định, Container chạy với user root (UID 0). Đây là một lỗ hổng bảo mật nghiêm trọng. Nếu Hacker thoát được khỏi Container (Container Breakout), họ sẽ có quyền root trên chính Node (Server) của bạn.
❌ The Bad Way
dockerfile
# Dockerfile mặc định
FROM ubuntu:latest
# Mặc định chạy as root
CMD ["/my-app"]✅ The HPN Standard (Non-Root)
Chúng ta bắt buộc mọi Pod phải chạy với runAsUser khác 0 (thường là 1000).
yaml
apiVersion: v1
kind: Pod
metadata:
name: secure-pod
spec:
securityContext:
runAsUser: 1000 # UID 1000 standard
runAsGroup: 3000
fsGroup: 2000 # Quyền truy cập volume
containers:
- name: app
image: my-secure-app:1.0Dockerfile Base
Để điều này hoạt động, Dockerfile của bạn cũng phải hỗ trợ user này hoặc ít nhất không yêu cầu quyền ghi vào các thư mục hệ thống.
2. Immutable Infrastructure: Read-Only Filesystem
Nếu Hacker xâm nhập được vào ứng dụng (ví dụ qua log4shell), điều đầu tiên chúng làm là:
- Tải malware về (
wget mal.sh). - Sửa file cấu hình hệ thống (
/etc/hosts,/usr/bin/).
Chúng ta chặn đứng điều này bằng cách biến filesystem thành Read-Only.
yaml
spec:
containers:
- name: app
securityContext:
readOnlyRootFilesystem: true # 🔒 Bất khả xâm phạmXử lý ghi file tạm (Logs, Cache)
Nếu App cần ghi file tạm, hãy mount một emptyDir volume vào /tmp. Hacker chỉ có thể ghi vào đó và sẽ mất hết khi Pod restart.
yaml
volumeMounts:
- name: tmp-volume
mountPath: /tmp
volumes:
- name: tmp-volume
emptyDir: {}3. Prevent Privilege Escalation
Một process con có thể yêu cầu quyền cao hơn cha nó (giống lệnh sudo). Trong Container, chúng ta không bao giờ muốn điều này.
yaml
spec:
containers:
- name: app
securityContext:
allowPrivilegeEscalation: false # ⛔ Cấm leo thang đặc quyền4. Linux Capabilities (Deep Hardening)
Linux chia quyền root thành nhiều mảnh nhỏ gọi là "Capabilities" (ví dụ: CAP_NET_ADMIN để chỉnh mạng, CAP_CHOWN để đổi chủ file). Docker mặc định cấp khoảng 14 capabilities. Hầu hết App web chỉ cần... 0.
Drop ALL Strategy
Quy tắc vàng: "Drop tất cả, chỉ thêm lại cái thực sự cần".
yaml
spec:
containers:
- name: app
securityContext:
capabilities:
drop: ["ALL"] # 🛡️ Tước bỏ mọi quyền năng
add: ["NET_BIND_SERVICE"] # (Optional) Chỉ thêm nếu cần bind port < 10245. The Golden Standard YAML
Đây là khuôn mẫu (Template) cho mọi Deployment tại HPN. Copy và áp dụng ngay.
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: hpn-secure-app
spec:
template:
spec:
# 1. Pod Level Security
securityContext:
runAsUser: 1000
runAsGroup: 3000
fsGroup: 2000
containers:
- name: main-app
image: hpn-app:1.0.0
# 2. Container Level Security
securityContext:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
capabilities:
drop: ["ALL"]
# 3. Handle Immutable FS
volumeMounts:
- name: tmp-storage
mountPath: /tmp
volumes:
- name: tmp-storage
emptyDir: {}Tổng kết Checklist
Trước khi ship ra Production, hãy tự hỏi:
- [ ] Pod có đang chạy
rootkhông? (Phải là KHÔNG) - [ ] Hacker có ghi được file vào
/binhay/etckhông? (Phải là KHÔNG) - [ ] Process có thể chạy
sudohay leo thang quyền không? (Phải là KHÔNG) - [ ] Process có những Capability thừa thãi không? (Drop ALL chưa?)
WARNING
Áp dụng Hardening có thể làm App bị crash nếu App đó được code cẩu thả (ví dụ: cố ghi log vào code folder). Hãy test kỹ trên Staging.