Azure Arc 所啟用 AKS 中的憑證管理概觀
適用於:Azure Stack HCI 22H2 上的 AKS、Windows Server 上的 AKS
Azure Arc 所啟用的 AKS 會使用憑證和令牌型驗證的組合,以保護負責平臺內不同作業的服務(或代理程式)之間的通訊。 憑證式驗證會使用數位證書來識別實體(代理程式、計算機、使用者或裝置),再授與資源的存取權。
雲端代理程式
當您部署由 Arc 啟用的 AKS 時,AKS 會安裝用來在叢集內執行各種功能的代理程式。 這些代理程式包括:
- 雲端代理程式:負責基礎平台協調流程的服務。
- 節點代理程式:位於執行虛擬機建立、刪除等實際工作的每個節點上的服務。
- 金鑰管理系統 (KMS) Pod:負責金鑰管理的服務。
- 其他服務:雲端操作員、憑證管理員等。
AKS 中的雲端代理程式服務負責協調基礎結構元件的建立、讀取、更新和刪除作業,例如叢集中的 虛擬機器(VM)、虛擬網絡 介面(VNIC)和 虛擬網絡(VNET)。
若要與雲端代理程序通訊,用戶端需要布建憑證,以確保此通訊的安全。 每個用戶端都需要與其建立關聯的身分識別,這會定義與客戶端相關聯的角色型 存取控制 (RBAC) 規則。 每個身分識別都包含兩個實體:
- 令牌,用於初始驗證,其會傳回憑證,以及
- 憑證,從上述登入程式取得,並用於任何通訊中的驗證。
每個實體在特定期間有效(預設值為90天),其到期時間結束。 若要繼續存取雲端代理程式,每個用戶端都需要更新憑證並輪替令牌。
憑證類型
Arc 啟用的 AKS 中,有兩種類型的憑證:
- 雲端代理程式 CA 憑證:用來簽署/驗證客戶端憑證的憑證。 此憑證有效期為 365 天 (1 年)。
- 用戶端憑證:雲端代理程式 CA 憑證所簽發的憑證,可讓用戶端向雲端代理程序進行驗證。 這些憑證通常有效 90 天。
Microsoft建議您在新版本的 60 天內更新叢集,不僅為了確保內部憑證和令牌保持最新狀態,也確保您能夠存取新功能、錯誤修正,以及隨時掌握重要的安全性修補程式。 在這些每月更新期間,更新程式會輪替叢集正常作業期間無法自動輪替的任何令牌。 憑證和令牌有效性會重設為從叢集更新日期起的預設 90 天。
在 Arc 所啟用的 AKS 中保護與憑證的安全通訊
憑證可用來建置叢集內元件之間的安全通訊。 AKS 提供內建 Kubernetes 元件的零接觸、現成布建和管理憑證。 在本文中,您將瞭解如何在 Arc 啟用的 AKS 中布建和管理憑證。
憑證和 CA
AKS 會產生並使用下列證書頒發機構單位 (CA) 和憑證。
叢集 CA
- API 伺服器具有叢集 CA,它會簽署憑證,以便從 API 伺服器到
kubelet
的單向通訊。 - 每個憑證
kubelet
簽署要求也會建立叢集 CA 所簽署的憑證簽署要求,以便從kubelet
與 API 伺服器進行通訊。 - etcd 金鑰值存放區具有叢集 CA 簽署的憑證,以便從 etcd 與 API 伺服器進行通訊。
etcd CA
etcd 金鑰值存放區具有 etcd CA,可簽署憑證,以在叢集中的 etcd 複本之間驗證和授權數據復寫。
Front Proxy CA
Front Proxy CA 可保護 API 伺服器與擴充 API 伺服器之間的通訊。
憑證佈建
的憑證布建 kubelet
是使用 TLS 啟動載入來完成。 針對所有其他憑證,請使用 YAML 型金鑰和憑證建立。
- 憑證會儲存在 /etc/kubernetes/pki 中。
- 密鑰為 RSA 4096、EcdsaCurve:P384
注意
跟證書的有效期限為 10 年。 所有其他非跟證書都是短期憑證,且有效期為四天。
憑證更新和管理
非跟證書會自動更新。 除了下列憑證之外,Kubernetes 的所有控制平面憑證都會受到管理:
- Kubelet 伺服器證書
- Kubeconfig 客戶端憑證
作為安全性最佳做法,您應該使用 Active Directory 單一登錄 進行用戶驗證。
憑證撤銷
證書吊銷應該很少見,而且應該在憑證更新時完成。
擁有您想要撤銷的憑證序號之後,請使用 Kubernetes 自定義資源來定義及保存撤銷資訊。 每個撤銷物件都可以由一或多個撤銷項目組成。
若要執行撤銷,請使用下列其中一項:
- 序號
- 群組
- DNS 名稱
- IP 位址
您可以指定一 notBefore
個時間,只撤銷在特定時間戳之前發出的憑證。 notBefore
如果未指定時間,則會撤銷符合撤銷的所有現有和未來憑證。
注意
目前無法使用伺服器證書的撤銷 kubelet
。
如果您在執行撤銷時使用序號,您可以使用 Repair-AksHciClusterCerts
下面所述的PowerShell命令,讓您的叢集進入工作狀態。 如果您使用稍早所列的任何其他欄位,請務必指定時間 notBefore
。
apiVersion: certificates.microsoft.com/v1
kind: RenewRevocation
metadata:
name: my-renew-revocation
namespace: kube-system
spec:
description: My list of renew revocations
revocations:
- description: Revoked certificates by serial number
kind: serialnumber
notBefore: "2020-04-17T17:22:05Z"
serialNumber: 77fdf4b1033b387aaace6ce1c18710c2
- description: Revoked certificates by group
group: system:nodes
kind: Group
- description: Revoked certificates by DNS
dns: kubernetes.default.svc.
kind: DNS
- description: Revoked certificates by DNS Suffix
dns: .cluster.local
kind: DNS
- description: Revoked certificates by IP
ip: 170.63.128.124
kind: IP