- Published on
Istio - Chi tiết về bảo mật trong Istio
- Authors

- Name
- Bạch Đăng Tuấn
- Occupation
- Kỹ sư công nghệ thông tin
- Zalo: 0934.01.07.04
🛡️ Istio Security - Chi tiết
📑 Mục Lục
- Tổng quan bảo mật Istio
- Nhận dạng & Quản lý chứng chỉ
- Xác thực (Authentication)
- Ủy quyền (Authorization)
- Các mô hình chính sách và ví dụ thực tế
- Thực hành tốt và cảnh báo
- Tài nguyên học thêm
🔍 Tổng quan bảo mật Istio
Istio hỗ trợ bảo mật toàn diện:
- Identity mạnh mẽ: sử dụng SPIFFE ID
- Mutual TLS: mã hóa và xác thực 2 chiều
- JWT Authentication: xác thực người dùng cuối
- Authorization Policies: kiểm soát truy cập đến từng dịch vụ
- Audit: theo dõi hoạt động truy cập
Mục tiêu:
- Zero Trust: không tin mặc định bất kỳ kết nối nào
- Defense in depth: bảo vệ nhiều lớp
- Không thay đổi mã ứng dụng: áp dụng bảo mật qua proxy
🆔 Nhận dạng & Quản lý chứng chỉ
- Mỗi workload được cấp một chứng chỉ X.509 có SPIFFE ID như:
spiffe://cluster.local/ns/default/sa/reviews - Quá trình cấp chứng chỉ:
- Istio Agent → gửi CSR đến istiod
- istiod → cấp cert và key
- Envoy proxy → lấy cert/key từ SDS
🔐 Xác thực (Authentication)
Peer Authentication (mTLS)
- Tự động giữa các proxy Envoy
- Bật mTLS ở cấp độ namespace/workload
- Hỗ trợ chế độ
PERMISSIVE,STRICT,DISABLE
Request Authentication (JWT)
- Xác thực người dùng cuối bằng JWT
- Hỗ trợ nhiều provider như:
- Google Auth, Firebase, Keycloak, Auth0
- JWT có thể đến từ header hoặc query param
Ví dụ cấu hình:
apiVersion: security.istio.io/v1
kind: RequestAuthentication
metadata:
name: jwt-auth
spec:
jwtRules:
- issuer: "https://accounts.google.com"
jwksUri: "https://www.googleapis.com/oauth2/v3/certs"
✅ Ủy quyền (Authorization)
- Định nghĩa trong
AuthorizationPolicy - Hành động:
ALLOW,DENY,CUSTOM - Áp dụng ở các lớp: mesh-wide, namespace, workload
Cơ chế:
- Envoy proxy đánh giá yêu cầu theo rule
- Chính sách được lưu trong CRDs
Ví dụ:
apiVersion: security.istio.io/v1
kind: AuthorizationPolicy
metadata:
name: allow-get
spec:
selector:
matchLabels:
app: myapp
action: ALLOW
rules:
- to:
- operation:
methods: ["GET"]
📋 Các mô hình chính sách và ví dụ thực tế
- Deny All: từ chối toàn bộ yêu cầu
- Allow Nothing: không định nghĩa rule (mặc định từ chối)
- Allow All: cho phép mọi yêu cầu
- Path-based: chỉ cho phép
/api/* - Principal-based: chỉ người dùng có JWT
iss=google.com
Ví dụ cấm /admin nếu không có JWT:
action: DENY
rules:
- to:
- operation:
paths: ["/admin"]
from:
- source:
notRequestPrincipals: ["*"]
🛠️ Thực hành tốt và cảnh báo
- Luôn bật
STRICTmTLS cho dịch vụ nội bộ - Kiểm tra xác thực bằng
PERMISSIVEtrước khiSTRICT - Luôn áp dụng deny first, rồi allow
- Tránh để trống
AuthorizationPolicy, điều này sẽ allow all - Tránh áp dụng rule HTTP cho TCP (MongoDB...)