在ACK Pro叢集中,您可以使用在阿里雲Key Management Service(Key Management Service)中建立的祕密金鑰加密Kubernetes Secret密鑰。本文主要介紹如何使用KMS管理的金鑰組ACK Pro叢集中的Kubernetes Secret密鑰資料進行落盤加密。
前提條件
條件項 | 說明 |
KMS密鑰 | 已在Key Management Service控制台建立KMS密鑰,且密鑰地區與目標ACK Pro叢集所在地區保持統一。 ACK Pro叢集支援預設密鑰、軟體密鑰和硬體密鑰,您可以按業務需求選擇。關於KMS密鑰管理的更多資訊和相關操作,請參見密鑰管理快速入門;關於KMS服務計費的詳細說明,請參見產品計費。 重要 開啟落盤加密功能時,請勿使用KMS的控制台或OpenAPI禁用或刪除叢集Secret加解密選擇的密鑰,否則會導致叢集API Server不可用,繼而無法正常擷取Secret和ServiceAccount等對象,影響業務應用的正常運行。 |
叢集網路ACL規則配置 | 開啟落盤加密功能時,因為控制面的KMS外掛程式需要訪問阿里雲KMS OpenAPI完成Secrets執行個體的加解密。因此,需要確保叢集使用的安全性群組或VPC網路ACL的出方向規則中允許存取了阿里雲雲產品網段( |
授權 | 根據您使用帳號類型的不同,確認已完成如下授權操作。
|
Secret加密介紹
在Kubernetes叢集中,通常使用Secret密鑰模型儲存和管理業務應用涉及的敏感資訊,例如應用密碼、TLS認證、Docker鏡像下載憑據等敏感資訊。Kubernetes會將所有的Secret金鑰組象資料存放區在叢集對應的etcd中。關於密鑰的更多資訊,請參見Secrets。
在ACK Pro叢集中,您可以使用在KMS中建立的祕密金鑰加密Kubernetes Secret密鑰。KMS加密過程基於Kubernetes提供的KMS Encryption Provider機制,使用信封加密的方式對儲存在etcd中的Kubernetes Secret密鑰進行自動加密和解密。Kubernetes Secret祕密金鑰加密和解密的過程如下。
當一個業務密鑰需要通過Kubernetes Secret API儲存時,資料會首先被API Server產生的一個隨機的資料加密金鑰加密,然後該資料密鑰會被指定的KMS祕密金鑰加密為一個密文金鑰儲存區在etcd中。
解密Kubernetes Secret密鑰時,系統會首先調用KMS的解密OpenAPI進行密文密鑰的解密,然後使用解密後的清除金鑰對Secret資料解密,並最終返回給您。
更多資訊,請參見KMS Encryption Provider機制、使用KMS密鑰進行信封加密。
KMS v2
從Kubernetes 1.31版本開始,ACK Pro叢集優先使用社區KMS v2介面實現落盤加密,KMS v2在叢集中支援管理更多的Secret執行個體,且擁有更好的加解密效能。瞭解更多關於KMS v2加解密流程,請參見KMS v2。
如何將當前叢集已使用的KMS v1介面升級到KMS v2介面,請參見如何升級使用KMS v2進行Secret落盤加密?
Kubernetes社區在1.27版本已經標記KMS v1為廢棄狀態,並在1.29版本開始預設禁用v1介面。為了保證相容性,ACK Pro叢集仍然通過設定KMS v1特性門控開啟使用v1介面。
為ACK Pro叢集開啟Secret落盤加密
為建立的ACK Pro版叢集開啟Secret落盤加密
登入Container Service管理主控台,在左側導覽列單擊叢集列表。
在叢集列表頁面,單擊建立叢集。
在ACK 託管叢集頁簽最下方,展開進階選項(選填),找到Secret 落盤加密,勾選選擇 KMS 密鑰,然後在下拉框中選擇KMS密鑰ID。按需配置其他配置項後。單擊建立叢集。

建立ACK Pro叢集的其他配置,請參見ACK託管叢集配置項說明。
登入Action Trail控制台,在左側導覽列單擊事件查詢,如果事件查詢頁面存在使用aliyuncsmanagedsecurityrole系統角色的加密和解密事件記錄,表明該叢集後台已成功開啟Secret落盤加密特性。
當您不需要使用Secret落盤加密功能時,可在叢集列表單擊叢集名稱,在叢集資訊頁面單擊基本資料頁簽,然後在安全與審計地區關閉Secret落盤加密開關。
為已建立的ACK Pro版叢集開啟Secret落盤加密
登入Container Service管理主控台,在左側導覽列單擊叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在叢集詳情頁面單擊基本資料頁簽,在安全與審計地區開啟Secret落盤加密開關。
首次開啟時,請根據提示單擊前往RAM進行授權進入存取控制快速授權頁面,然後單擊確認授權完成授權。
說明如需開啟落盤加密功能,請確保當前登入的RAM使用者或RAM角色對該叢集有RBAC的管理員或營運人員許可權。具體操作,請參考使用RBAC授予叢集內資源操作許可權。
如需授權aliyuncsmanagedsecurityrole角色,請確保已使用阿里雲帳號(主帳號)或擁有Resource Access Management許可權的RAM使用者或RAM角色登入。
在彈出的Secret落盤加密對話方塊,選擇已有的KMS密鑰,然後單擊確定。
如果您未建立KMS密鑰,請單擊建立密鑰,前往Key Management Service控制台建立密鑰。具體操作,請參見建立密鑰。
當叢集狀態由更新中變為運行中時,表明該叢集的Secret落盤加密特性已開啟。
當您不需要使用Secret落盤加密功能時,可在安全與審計地區關閉Secret落盤加密開關。
使用自動輪轉密鑰開啟Secret落盤加密
您可以使用KMS自動輪轉密鑰功能進行Secret的落盤加密。當密鑰發生自動輪轉時,存量的Secret仍舊使用輪轉前的密鑰版本進行加密,新增的Secret將使用輪轉後的新密鑰版本進行加密。關於自動輪轉密鑰具體操作,請參見密鑰輪轉。
如需確儲存量的Secret也使用新的密鑰版本進行加密,請在密鑰發生自動輪轉後,執行以下命令強制使用新的密鑰版本重新加密所有的存量Secret。
kubectl get secrets --all-namespaces -o json | kubectl annotate --overwrite -f - encryption-key-rotation-time="$(date -u +'%Y-%m-%dT%H:%M:%S%z')"常見問題
如何升級使用KMS v2進行Secret落盤加密?
如使用KMS v2進行Secret落盤加密,請確保您的ACK Pro叢集為1.31或以上版本。
如果您的叢集之前未開啟Secret落盤加密功能,請參考為ACK Pro叢集開啟Secret落盤加密為叢集開啟加密功能。開啟後,叢集中的Secret執行個體在落盤和讀取流程中會自動使用KMS v2介面進行加解密。
如果您的叢集已開啟Secret落盤加密功能,您可以在業務低峰時通過以下任一方式輪轉落盤密鑰的加密方式。
方式一:執行
kubectl get secrets --all-namespaces -o json | kubectl replace -f -命令,該命令會通過KMS v2介面的加密方式輪轉所有已落盤Secrets執行個體的加密方式。方式二:登入Container Service管理主控台,在叢集資訊頁面的基本資料頁簽找到Secret 落盤加密並關閉。關閉流程會觸發叢集所有落盤Secrets執行個體的輪轉。等待一段時間後,參考為ACK Pro叢集開啟Secret落盤加密為叢集重新開啟加密功能,開啟成功後,叢集中的所有Secrets執行個體會使用KMS v2介面落盤加密。
開啟Secret落盤加密後,通過kubectl命令擷取到的Secret是加密後的密文嗎?
不是。Secret落盤加密功能所加密的是etcd中儲存的未經處理資料,即開啟Secret落盤加密後,etcd中儲存的Secret資料將是加密後的密文資料。但用戶端通過API Server提供的Secret API擷取到的Secret資料仍舊是原始的明文資料。
如何禁止RAM使用者或RAM角色在已建立的ACK Pro叢集中開啟或關閉Secret落盤加密功能
您可以通過為RAM使用者或RAM角色授予如下拒絕操作的RAM權限原則,禁止該RAM使用者或RAM角色在已建立的ACK Pro叢集中開啟或關閉Secret落盤加密功能。具體操作,請參見使用RAM授予叢集及雲資源存取權限。
{
"Action": [
"cs:UpdateKMSEncryption"
],
"Effect": "Deny",
"Resource": [
"*"
]
}