協助改善此頁面
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
若要提供此使用者指南,請選擇位於每個頁面右窗格的 GitHub 上的編輯此頁面連結。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon Elastic Kubernetes Service (Amazon EKS) 為執行 Kubernetes 1.28 版或更新版本的 EKS 叢集中的所有 Kubernetes API 資料提供預設信封加密。
信封加密可保護您使用 Kubernetes API 伺服器存放的資料。例如,信封加密適用於 Kubernetes 叢集的組態,例如 ConfigMaps
。信封加密不適用於節點或 EBS 磁碟區上的資料。EKS 先前支援加密 Kubernetes 秘密,現在此信封加密會延伸至所有 Kubernetes API 資料。
這可提供受管的預設體驗,為您的 Kubernetes 應用程式實作defense-in-depth,而且不需要您採取任何動作。
Amazon EKS 使用 AWS Key Management Service (KMS) 搭配 Kubernetes KMS 提供者 v2
了解信封加密
信封加密是使用資料加密金鑰 (DEK) 加密純文字資料的程序,然後再傳送到資料存放區 (等),然後使用存放在遠端、集中受管 KMS 系統 (AWS KMS) 中的根 KMS 金鑰加密 DEK。這是defense-in-depth策略,因為它會使用加密金鑰 (DEK) 保護資料,然後使用稱為金鑰加密金鑰 (KEK) 的個別安全儲存加密金鑰來保護該 DEK,以新增另一個安全層。
Amazon EKS 如何使用 KMS v2 和 AWS KMS 啟用預設信封加密
Amazon EKS 使用 KMS v2
根據預設,此 KEK 由 擁有 AWS,但您可以選擇從 AWS KMS 自攜。
下圖說明在 API 伺服器啟動時產生和加密 DEK。

以下高階圖表說明 Kubernetes 資源在存放於 等環境之前加密的方式。

常見問答集
預設信封加密如何改善 EKS 叢集的安全狀態?
此功能可減少未加密中繼資料和客戶內容的表面積和期間。使用預設信封加密時,中繼資料和客戶內容只會在 kube-apiserver 的記憶體中處於暫時未加密狀態,然後再存放在 等。kube-apiserver 的記憶體是透過 Nitro 系統進行保護。Amazon EKS 僅針對受管 Kubernetes 控制平面使用 Nitro 型 EC2 執行個體。這些執行個體具有安全控制設計,可防止任何系統或人員存取其記憶體。
我需要執行哪個版本的 Kubernetes,才能擁有此功能?
若要啟用預設信封加密,Amazon EKS 叢集必須執行 Kubernetes 1.28 版或更新版本。
如果我執行的是不支援此功能的 Kubernetes 叢集版本,我的資料是否仍然安全?
是。 AWS安全是我們的最高優先順序
無論執行的 Kubernetes 版本為何,儲存在 等中的所有資料都會在每個 EKS 叢集的磁碟層級加密。EKS 使用根金鑰來產生由 EKS 服務管理的磁碟區加密金鑰。此外,每個 Amazon EKS 叢集都是使用叢集特定的虛擬機器在隔離的 VPC 中執行。由於此架構,以及我們對營運安全性的實務,Amazon EKS 已達成多個合規評分和標準,包括 SOC 1、2、3、PCI-DSS、ISO 和 HIPAA 資格。這些合規評分和標準會針對所有具有或沒有預設信封加密的 EKS 叢集進行維護。
信封加密如何在 Amazon EKS 中運作?
啟動時,叢集 API 伺服器會從秘密種子產生資料加密金鑰 (DEK),並結合隨機產生的資料。此外,在啟動時,API 伺服器會呼叫 KMS 外掛程式,以使用來自 KMS 的遠端金鑰加密金鑰 (KEK) 來加密 AWS DEK。這是在 API 伺服器啟動和 KEK 輪換時執行的一次性呼叫。API 伺服器接著會快取加密的 DEK 種子。之後,API 伺服器會使用快取的 DEK 種子,根據金鑰衍生函數 (KDF) 產生其他單次使用 DEKs。然後,這些產生的每個 DEKs都只會用來加密單一 Kubernetes 資源一次,然後再存放在 等。
請務必注意,API 伺服器還有其他呼叫,以驗證 AWS KMS 整合的運作狀態和正常功能。這些額外的運作狀態檢查會顯示在您的 AWS CloudTrail 中。
我是否必須執行任何動作或變更此功能的任何許可,才能在 EKS 叢集中運作?
否,您不需要採取任何動作。Amazon EKS 中的信封加密現在是在執行 Kubernetes 1.28 版或更新版本的所有叢集中啟用的預設組態。 AWS KMS 整合是由 管理的 Kubernetes API 伺服器建立 AWS。這表示您不需要設定任何許可,即可開始為叢集使用 KMS 加密。
如何知道我的叢集是否已啟用預設信封加密?
如果您遷移至使用自己的 CMK,則會看到與叢集相關聯的 KMS 金鑰 ARN。此外,您可以檢視與使用叢集的 CMK 相關聯的 AWS CloudTrail 事件日誌。
如果您的叢集使用 AWS 擁有的金鑰,則會在 EKS 主控台中詳細說明 (金鑰的 ARN 除外)。
是否可以 AWS 存取 Amazon EKS 中用於預設信封加密的 AWS 擁有金鑰?
否。Amazon EKS 中 AWS 具有嚴格的安全控制,可防止任何人存取用於保護已加密資料庫中資料的任何純文字加密金鑰。這些安全措施也會套用至 AWS 擁有的 KMS 金鑰。
我現有的 EKS 叢集是否已啟用預設信封加密?
如果您使用 Kubernetes 1.28 版或更新版本執行 Amazon EKS 叢集,則會啟用所有 Kubernetes API 資料的信封加密。對於現有的叢集,Amazon EKS 使用 eks:kms-storage-migrator
RBAC ClusterRole 將先前未以 等式加密的資料遷移至此新加密狀態。
如果我已在 EKS 叢集中啟用秘密的信封加密,這代表什麼意義?
如果您在 KMS 中已有用於對 Kubernetes 秘密進行信封加密的客戶受管金鑰 (CMK),則該金鑰將用作叢集中所有 Kubernetes API 資料類型的信封加密 KEK。
使用預設信封加密執行 EKS 叢集是否有任何額外費用?
如果您使用 Amazon Web Services 擁有的金鑰進行預設信封加密,則無需支付與受管 Kubernetes 控制平面相關的額外費用。根據預設,每個執行 Kubernetes 1.28 版或更新版本的 EKS 叢集都會使用 Amazon Web Service 擁有的金鑰。不過,如果您使用自己的 AWS KMS 金鑰,則會套用一般 KMS 定價
使用我自己的 AWS KMS 金鑰來加密叢集中的 Kubernetes API 資料需要多少成本?
您每月需支付 1 USD 來存放您建立或匯入 KMS 的任何自訂金鑰。加密和解密請求的 KMS 費用。每個帳戶每月有 20,000 個請求的免費方案,每月每 10,000 個請求支付 0.03 USD。這適用於帳戶的所有 KMS 用量,因此在叢集上使用您自己的 AWS KMS 金鑰的成本將受到您帳戶中其他叢集或 AWS 資源使用此金鑰的影響。
現在我的客戶受管金鑰 (CMK) 用於信封加密所有 Kubernetes API 資料,而不只是秘密,我的 KMS 費用是否會更高?
否。我們使用 KMS v2 實作可大幅減少對 AWS KMS 發出的呼叫次數。無論 EKS 叢集中的其他 Kubernetes 資料是加密或解密,這都會降低與您的 CMK 相關的成本。
如上所述,用於加密 Kubernetes 資源的產生 DEK 種子會在使用遠端 KEK 加密之後,儲存在本機的 Kubernetes API 伺服器快取中。如果加密的 DEK 種子不在 API 伺服器的快取中,API 伺服器將呼叫 AWS KMS 來加密 DEK 種子。然後,API 伺服器會快取加密的 DEK 種子,以供未來在叢集中使用,而無需呼叫 KMS。同樣地,對於解密請求,API 伺服器將呼叫 AWS KMS 進行第一個解密請求,之後將快取解密的 DEK 種子並用於未來的解密操作。
如需詳細資訊,請參閱 GitHub 上的 Kubernetes 增強功能中的 KEP-3299:KMS v2 改進
我可以將相同的 CMK 金鑰用於多個 Amazon EKS 叢集嗎?
是。若要再次使用金鑰,您可以在建立期間將 ARN 與叢集建立關聯,以將其連結至相同區域中的叢集。不過,如果您針對多個 EKS 叢集使用相同的 CMK,您應該採取必要的措施,以防止 CMK 的任意停用。否則,與多個 EKS 叢集相關聯的停用 CMK 將對叢集產生更廣泛的影響,具體取決於該金鑰。
如果啟用預設信封加密後我的 CMK 無法使用,我的 EKS 叢集會發生什麼情況?
如果您停用 KMS 金鑰,則無法用於任何密碼編譯操作。如果無法存取現有的 CMK,API 伺服器將無法加密和保留任何新建立的 Kubernetes 物件,以及解密存放在 等項目中先前加密的任何 Kubernetes 物件。如果停用 CMK,叢集將立即處於運作狀態不佳/降級狀態,此時我們將無法履行服務承諾
停用 CMK 時,您將收到有關 EKS 叢集運作狀態降低的通知,以及在停用 CMK 後 30 天內需要重新啟用 CMK,以確保成功還原 Kubernetes 控制平面資源。
如何保護 EKS 叢集免受已停用/已刪除 CMK 的影響?
為了保護您的 EKS 叢集免於發生這種情況,您的金鑰管理員應使用最低權限原則的 IAM 政策來管理對 KMS 金鑰操作的存取,以降低任何與 EKS 叢集相關聯的任意停用或刪除金鑰的風險。此外,您可以設定 CloudWatch 警示,以接收 CMK 狀態的通知。
如果我重新啟用 CMK,是否會還原我的 EKS 叢集?
為了確保成功還原 EKS 叢集,強烈建議在停用 CMK 後的前 30 天內重新啟用 CMK。不過,成功還原 EKS 叢集也會取決於它是否因為叢集處於運作狀態不佳/降級狀態時可能發生的自動 Kubernetes 升級而經歷任何 API 中斷變更。
停用 CMK 後,為什麼我的 EKS 叢集處於運作狀態不佳/降級狀態?
EKS 控制平面的 API 伺服器使用 DEK 金鑰,該金鑰會加密並快取在 API 伺服器的記憶體中,以在建立/更新操作期間加密所有物件,然後再存放在 等。從 等推擷取現有物件時,API 伺服器會使用相同的快取 DEK 金鑰並解密 Kubernetes 資源物件。如果您停用 CMK,API 伺服器將不會因為 API 伺服器記憶體中的快取 DEK 金鑰而看到任何立即影響。不過,當 API 伺服器執行個體重新啟動時,它不會有快取的 DEK,而且需要呼叫 AWS KMS 以進行加密和解密操作。如果沒有 CMK,此程序將會失敗,並顯示 KMS_KEY_DISABLED 錯誤代碼,導致 API 伺服器無法成功開機。
如果我刪除 CMK,我的 EKS 叢集會發生什麼情況?
刪除與 EKS 叢集相關聯的 CMK 金鑰,將會降低其復原後的運作狀態。如果沒有叢集的 CMK,API 伺服器將無法再加密和保留任何新的 Kubernetes 物件,也無法解密存放在已加密資料庫中的任何先前加密的 Kubernetes 物件。只有在您確定不再需要使用 EKS 叢集時,才應該繼續刪除 EKS 叢集的 CMK 金鑰。
請注意,如果找不到 CMK (KMS_KEY_NOT_FOUND) 或已撤銷與叢集相關聯的 CMK 授予 (KMS_GRANT_REVOKED),您的叢集將無法復原。如需叢集運作狀態和錯誤代碼的詳細資訊,請參閱叢集運作狀態FAQs和具有解析路徑的錯誤代碼。
我是否仍會因為停用或刪除 CMK 而需要為降級/運作狀態不佳的 EKS 叢集付費?
是。雖然在停用 CMK 的情況下,EKS 控制平面將無法使用,但 AWS 仍會執行配置給 EKS 叢集的專用基礎設施資源,直到客戶將其刪除為止。此外,在這種情況下,我們的服務承諾
當 EKS 叢集因為停用 CMK 而處於運作狀態不佳/降級狀態時,是否可以自動升級?
是。不過,如果您的叢集有已停用的 CMK,您將有 30 天的期間可重新啟用它。在這 30 天期間,不會自動升級您的 Kubernetes 叢集。不過,如果超過此期間,而且您尚未重新啟用 CMK,則叢集將依照 EKS 中的 Kubernetes 版本生命週期,自動升級至標準支援的下一個版本 (n+1)。
當您發現受影響的叢集時,強烈建議快速重新啟用已停用的 CMK。請務必注意,雖然 EKS 會自動升級這些受影響的叢集,但無法保證它們會成功復原,尤其是如果叢集經歷多次自動升級,因為這可能包括 Kubernetes API 的變更,以及 API 伺服器引導程序中的意外行為。
我可以使用 KMS 金鑰別名嗎?
是。Amazon EKS 支援使用 KMS 金鑰別名。別名是 Amazon Web Service KMS 金鑰的易記名稱。例如,別名可讓您將 KMS 金鑰稱為 my-key,而不是 1234abcd-12ab-34cd-56ef-1234567890ab
。
我是否仍然可以使用自己的 Kubernetes 備份解決方案來備份和還原叢集資源?
是。您可以使用 Kubernetes 備份解決方案 (例如 Velero