本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
資料加密和秘密管理
靜態加密
您可以搭配 Kubernetes 使用三種不同的 AWS 原生儲存選項:EBS、EFS 和 FSx for Lustre。這三個使用服務受管金鑰或客戶主金鑰 (CMK) 提供靜態加密。對於 EBS,您可以使用樹狀內儲存驅動程式或 EBS CSI 驅動程式tls
參數新增至 PV mountOptions
中的 來新增傳輸加密,如本範例所示:
apiVersion: v1 kind: PersistentVolume metadata: name: efs-pv spec: capacity: storage: 5Gi volumeMode: Filesystem accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain storageClassName: efs-sc mountOptions: - tls csi: driver: efs.csi.aws.com volumeHandle: <file_system_id>
FSx CSI 驅動程式
kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: fsx-sc provisioner: fsx.csi.aws.com parameters: subnetId: subnet-056da83524edbe641 securityGroupIds: sg-086f61ea73388fb6b deploymentType: PERSISTENT_1 kmsKeyId: <kms_arn>
重要
自 2020 年 5 月 28 日起,寫入 EKS Fargate Pod 中暫時性磁碟區的所有資料都會預設使用業界標準的 AES-256 密碼編譯演算法進行加密。不需要修改您的應用程式,因為 服務會無縫處理加密和解密。
加密靜態資料
加密靜態資料視為最佳實務。如果您不確定是否需要加密,請加密您的資料。
定期輪換您的 CMKs
設定 KMS 以自動輪換您的 CMKs。這將每年輪換一次金鑰,同時無限期儲存舊金鑰,以便仍然可以解密您的資料。如需詳細資訊,請參閱輪換客戶主金鑰
使用 EFS 存取點簡化對共用資料集的存取
如果您有具有不同 POSIX 檔案許可的共用資料集,或想要透過建立不同的掛載點來限制對共用檔案系統一部分的存取,請考慮使用 EFS 存取點。若要進一步了解如何使用存取點,請參閱 https://https://docs.aws.amazon.com/efs/latest/ug/efs-access-points.html。今天,如果您想要使用存取點 (AP),則需要在 PV volumeHandle
參數中參考 AP。
重要
自 2021 年 3 月 23 日起,EFS CSI 驅動程式支援動態佈建 EFS 存取點。存取點是 EFS 檔案系統的應用程式特定進入點,可讓您更輕鬆地在多個 Pod 之間共用檔案系統。每個 EFS 檔案系統最多可有 120 PVs。如需詳細資訊,請參閱 Amazon EFS CSI 動態佈建簡介
秘密管理
Kubernetes 秘密用於存放敏感資訊,例如使用者憑證、密碼或 API 金鑰。它們會保留在以 base64 編碼的字串。在 EKS 上,已加密節點的 EBS 磁碟區會使用 EBS 加密進行加密。Pod 可以透過在 中參考秘密來擷取 Kubernetes 秘密物件podSpec
。這些秘密可以映射到環境變數或掛載為磁碟區。如需建立秘密的詳細資訊,請參閱 https://https://kubernetes.io/docs/concepts/configuration/secret/
警告
秘密命名空間中的所有 Pod 都可以參考秘密命名空間中的秘密。
警告
節點授權方允許 Kubelet 讀取掛載到節點的所有秘密。
使用 AWS KMS 進行 Kubernetes 秘密的信封加密
這可讓您使用唯一的資料加密金鑰 (DEK) 來加密秘密。然後,DEK 會使用來自 AWS KMS 的金鑰加密金鑰 (KEK) 進行加密,該金鑰可依週期性排程自動輪換。使用適用於 Kubernetes 的 KMS 外掛程式,所有 Kubernetes 秘密會以加密文字而非純文字儲存在 中,並且只能由 Kubernetes API 伺服器解密。如需其他詳細資訊,請參閱使用 EKS 加密提供者支援進行深度防禦
稽核 Kubernetes 秘密的使用
在 EKS 上,開啟稽核記錄並建立 CloudWatch 指標篩選條件和警示,以便在使用秘密時提醒您 (選用)。以下是 Kubernetes 稽核日誌 的指標篩選條件範例{($.verb="get") && ($.objectRef.resource="secret")}
。您也可以搭配 CloudWatch Log Insights 使用下列查詢:
fields @timestamp, @message | sort @timestamp desc | limit 100 | stats count(*) by objectRef.name as secret | filter verb="get" and objectRef.resource="secrets"
上述查詢會顯示在特定時間範圍內存取秘密的次數。
fields @timestamp, @message | sort @timestamp desc | limit 100 | filter verb="get" and objectRef.resource="secrets" | display objectRef.namespace, objectRef.name, user.username, responseStatus.code
此查詢會顯示秘密,以及嘗試存取秘密和回應碼之使用者的命名空間和使用者名稱。
定期輪換您的秘密
Kubernetes 不會自動輪換秘密。如果您必須輪換秘密,請考慮使用外部秘密存放區,例如 Vault 或 AWS Secrets Manager。
使用個別命名空間做為隔離秘密與不同應用程式的方式
如果您有無法在命名空間中的應用程式之間共用的秘密,請為這些應用程式建立個別的命名空間。
使用磁碟區掛載而非環境變數
環境變數的值可能會無意中出現在日誌中。掛載為磁碟區的秘密會執行個體化為 tmpfs 磁碟區 (RAM 後端檔案系統),其會在刪除 Pod 時自動從節點移除。
使用外部秘密提供者
使用 Kubernetes 秘密有幾種可行的替代方案,包括 AWS Secrets Manager
隨著外部秘密存放區的使用量不斷增加, 需要將其與 Kubernetes 整合。Secret Store CSI 驅動程式
注意
當秘密存放區 CSI 驅動程式必須擷取秘密時,它會擔任指派給參考秘密之 Pod 的 IRSA 角色。您可以在此處
如需 AWS Secrets & Configuration Provider (ASCP) 的其他資訊,請參閱下列資源:
external-secrets