本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon EKS 的加密最佳實務
Amazon Elastic Kubernetes Service (Amazon EKS) 可協助您在 上執行 Kubernetes, AWS 而無需安裝或維護您自己的 Kubernetes 控制平面或節點。在 Kubernetes 中,機密可協助您管理敏感資訊,例如使用者憑證、密碼或 API 金鑰。依預設,這些機密以未加密的方式儲存在 API 伺服器的基礎資料儲存 (稱為 etcdetcd
節點的 Amazon Elastic Block Store (Amazon EBS) 磁碟區會使用 Amazon EBS 加密進行加密。任何具有 API 存取權或存取 etcd
的使用者都可以擷取或修改機密。此外,任何有權在命名空間中建立 Pod 的人都可以使用該存取權來讀取該命名空間中的任何機密。您可以使用 AWS 受管金鑰或客戶受管金鑰 AWS KMS keys,在 Amazon EKS 中加密這些靜態秘密。使用 etcd
的另一種方法是使用 AWS Secrets and Config Provider (ASCP)
您可以搭配 Kubernetes 使用下列 AWS 儲存服務:
-
對於 Amazon EBS,您可以使用樹狀內儲存驅動程式或 Amazon EBS CSI 驅動程式。兩者都包括用於加密磁碟區和提供客戶受管金鑰的參數。
-
對於 Amazon Elastic File System (Amazon EFS),您可以使用同時支援動態和靜態佈建的 Amazon EFS CSI 驅動程式。
請考慮此服務的下列加密最佳實務:
-
如果您使用的是
etcd
(依預設儲存未加密的機密物件),請執行下列操作以協助保護機密:-
加密機密靜態資料
(Kubernetes 文件)。 -
使用 AWS KMS 進行 Kubernetes 秘密的信封加密。這可讓您使用唯一的資料金鑰來加密秘密。您可以使用金鑰 AWS KMS 加密金鑰來加密資料金鑰。您可以定期自動輪換金鑰加密金鑰。使用適用於 Kubernetes 的 AWS KMS 外掛程式,所有 Kubernetes 秘密都會以加密文字儲存在
etcd
中。它們只能由 Kubernetes API 伺服器解密。如需詳細資訊,請參閱使用 Amazon EKS 加密提供者支援進行深度防禦,以及在現有叢集 AWS KMS 上使用 加密 Kubernetes 秘密。 -
透過限制讀取和寫入機密的角色型存取控制 (RBAC) 規則啟用或設定授權。限制建立新機密或取代現有機密的許可。如需詳細資訊,請參閱授權概觀
(Kubernetes 文件)。 -
如果您在 Pod 中定義多個容器,且只有其中一個容器需要存取機密,請定義磁碟區掛載,以便其他容器無法存取該機密。以磁碟區掛載的機密會具現化為
tmpfs
磁碟區,並在刪除 Pod 時自動從節點中移除。您也可以使用環境變數,但我們不建議使用此方法,因為環境變數的值可能會出現在日誌中。如需詳細資訊,請參閱機密(Kubernetes 文件)。 -
如果可能,避免授予對命名空間內的機密的
watch
和list
請求的存取權。在 Kubernetes API 中,這些請求非常強大,因為其允許用戶端檢查該命名空間中每個機密的值。 -
僅允許叢集管理員存取
etcd
,包括唯讀存取權。 -
如果存在多個
etcd
執行個體,請確保etcd
使用 TLS 在etcd
對等項之間進行通訊。
-
-
如果您使用的是 ASCP,請執行下列操作以協助保護機密:
-
使用服務帳戶的 IAM 角色將機密存取權限制為僅授權的 Pod。
-
透過使用 AWS Encryption Provider
(GitHub 儲存庫) 啟用 Kubernetes 機密加密,以使用客戶受管 KMS 金鑰實作封套加密。
-
-
若要協助降低環境變數資料外洩的風險,建議您使用 Secret Store CSI Driver 的AWS Secrets Manager 和 Config Provider
(GitHub)。此驅動程式可讓您將儲存在 Secrets Manager 中的機密和儲存在 Parameter Store 中的參數顯示為掛載在 Kubernetes Pod 中的檔案。 注意
AWS Fargate 不支援 。
-
建立 Amazon CloudWatch 指標篩選條件和警示,以針對管理員指定的操作傳送提醒,例如機密刪除或在等待刪除期間使用機密版本。如需詳細資訊,請參閱根據異常偵測建立警報。