文章目錄
- 安全認證
- 1. **身份認證(Authentication)**
- 2. **授權(Authorization)**
- 3. **準入控制(Admission Control)**
- 4. **機密信息管理**
- 5. **其他安全實踐**
安全認證
Kubernetes 的安全機制覆蓋了從身份驗證到資源操作的完整鏈條:
- 認證 → 2. 授權 → 3. 準入控制 → 4. 資源管理
生產環境中建議:
- 使用 RBAC + ServiceAccount 進行最小權限分配。
- 啟用 Pod 安全準入 和 網絡策略。
- 定期輪換證書和令牌。
通過組合這些機制,可以構建一個符合零信任原則的 Kubernetes 集群安全體系。
1. 身份認證(Authentication)
http token和賬戶密碼等
https ca證書
-
X.509 客戶端證書
- 通過 TLS 雙向認證,客戶端使用證書(如
kubectl
的--client-certificate
和--client-key
參數)向 API Server 證明身份。 - 證書由集群 CA 簽發,需在 API Server 啟動時配置
--client-ca-file
。
- 通過 TLS 雙向認證,客戶端使用證書(如
-
Bearer Token(靜態令牌)
- 靜態令牌文件通過
--token-auth-file
指定,令牌以明文形式存儲在文件中(不推薦生產環境使用)。 - 通常用于服務賬戶(ServiceAccount)的自動生成令牌(JWT格式)。
- 靜態令牌文件通過
-
ServiceAccount(服務賬戶)
- 每個 Pod 默認掛載一個 ServiceAccount 的令牌(位于
/var/run/secrets/kubernetes.io/serviceaccount/token
)。 - API Server 通過
--service-account-key-file
驗證令牌簽名。
- 每個 Pod 默認掛載一個 ServiceAccount 的令牌(位于
-
OpenID Connect (OIDC)
- 集成第三方身份提供商(如 Google、Azure AD),用戶通過 OAuth 2.0 流程獲取 ID Token 后訪問集群。
-
Webhook 令牌認證
- 將令牌驗證委托給外部服務(如自定義認證服務),通過
--authentication-token-webhook-config-file
配置。
- 將令牌驗證委托給外部服務(如自定義認證服務),通過
-
匿名請求
- 默認允許匿名請求(身份為
system:anonymous
),可通過--anonymous-auth=false
禁用。
- 默認允許匿名請求(身份為
2. 授權(Authorization)
通過 RBAC(主流)、ABAC、Node Authorization 等機制控制已認證用戶的權限:
-
RBAC(基于角色的訪問控制)
- 定義 Role(命名空間內權限)和 ClusterRole(集群范圍權限),再通過 RoleBinding/ClusterRoleBinding 綁定到用戶、組或 ServiceAccount。
- 示例:允許某用戶讀取 Pod 信息:
apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata:namespace: defaultname: pod-reader rules: - apiGroups: [""]resources: ["pods"]verbs: ["get", "list", "watch"]
-
ABAC(基于屬性的訪問控制)
- 通過策略文件(
--authorization-policy-file
)定義規則,靈活性差,已逐漸被 RBAC 取代。
- 通過策略文件(
-
Node Authorization
- 專門授權 kubelet 訪問節點相關資源(如 Pod、Secret)。
-
Webhook 授權
- 將授權決策委托給外部 HTTP 服務。
3. 準入控制(Admission Control)
在請求通過認證和授權后,API Server 會調用準入控制器(Admission Controllers)進行更精細的資源校驗或修改:
-
內置控制器
NamespaceLifecycle
:防止在終止的命名空間中創建資源。ResourceQuota
:限制命名空間的資源使用量。PodSecurity
(替代 PSP):強制執行 Pod 安全標準(如禁止特權容器)。MutatingAdmissionWebhook
/ValidatingAdmissionWebhook
:通過 Webhook 動態修改或驗證資源。
-
示例:使用
ValidatingAdmissionWebhook
攔截不符合標簽要求的 Deployment。
4. 機密信息管理
- Secrets
- 存儲敏感數據(如密碼、令牌),以 Base64 編碼形式存在 Etcd 中,建議啟用加密(
--encryption-provider-config
)。
- 存儲敏感數據(如密碼、令牌),以 Base64 編碼形式存在 Etcd 中,建議啟用加密(
- ConfigMap
- 存儲非敏感配置,與 Secrets 分離以降低風險。
5. 其他安全實踐
- API Server 安全配置
- 啟用 HTTPS(
--tls-cert-file
,--tls-private-key-file
)。 - 限制匿名訪問和廢棄 API 版本。
- 啟用 HTTPS(
- Etcd 加密
- 靜態數據加密(
--encryption-provider-config
)。
- 靜態數據加密(
- 網絡策略(NetworkPolicy)
- 控制 Pod 間網絡流量(需 CNI 插件支持,如 Calico)。
- Pod 安全上下文(SecurityContext)
- 限制容器權限(如
runAsNonRoot: true
、readOnlyRootFilesystem: true
)。
- 限制容器權限(如