我想要將加密的 Amazon Elastic File System (Amazon EFS) 檔案系統掛載到 Amazon Elastic Kubernetes Service (Amazon EKS) 中的 Pod。
簡短說明
您可以使用 TLS 加密傳輸中或靜態的資料。
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
解決方法
使用 TLS 加密傳輸中的資料
若要使用 TLS 加密傳輸中的資料,請完成下列步驟:
-
為您的 Amazon EKS 叢集部署 Amazon EFS Container Storage Interface (CSI) 驅動程式。
-
為您的叢集建立未加密的 Amazon EFS 檔案系統。
**注意:**建立檔案系統時,請為您的 EKS 節點所在的所有可用區域中的 Amazon EFS,建立掛載目標。
-
將 GitHub 儲存庫複製到本機系統:
git clone https://github.com/kubernetes-sigs/aws-efs-csi-driver.git
-
前往 encryption_in_transit 範例目錄:
cd aws-efs-csi-driver/examples/kubernetes/encryption_in_transit/
-
擷取您的 Amazon EFS 檔案系統 ID:
aws efs describe-file-systems --query "FileSystems[*].FileSystemId" --output text
-
前往 /examples/kubernetes/encryption_in_transit/specs/ 目錄中的 pv.yaml 檔案。然後,使用掛載的 Amazon EFS 檔案系統的 FileSystemId 取代 VolumeHandle 的值。例如:
apiVersion: v1
kind: PersistentVolume
metadata:
name: efs-pv
spec:
capacity:
storage: 5Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: efs-sc
csi:
driver: efs.csi.aws.com
volumeHandle: [FileSystemId]
volumeAttributes:
encryptInTransit: "true"
**注意:**volumeAttributes: encryptInTransit 掛載選項會啟用傳輸中的加密。
-
從 /examples/kubernetes/encryption_in_transit/specs/ 目錄部署儲存體類別、持久性磁碟區宣告、持久性磁碟區和 Pod:
kubectl apply -f specs/storageclass.yaml
kubectl apply -f specs/pv.yaml
kubectl apply -f specs/claim.yaml
kubectl apply -f specs/pod.yaml
-
確認您的 Pod 是否處於執行狀態:
kubectl get pods
-
列出預設命名空間中的持久性磁碟區:
kubectl get pv
-
描述持續性磁碟區:
kubectl describe pv efs-pv
注意: Amazon EFS 檔案系統 ID 會作為 VolumeHandle 列出。
驗證資料是否已寫入 Amazon EFS 檔案系統:
kubectl exec -ti efs-app -- tail -f /data/out.txt
加密靜態資料
若要加密靜態資料,請完成下列步驟:
-
為您的 Amazon EKS 叢集部署 Amazon EFS CSI 驅動程式。
-
為您的 Amazon EKS 叢集開啟靜態加密,以建立 Amazon EFS 檔案系統。
-
將下列 GitHub 儲存庫複製到本機系統:
git clone https://github.com/kubernetes-sigs/aws-efs-csi-driver.git
-
前往 multiple_pods 範例目錄:
cd aws-efs-csi-driver/examples/kubernetes/multiple_pods/
-
擷取您的 Amazon EFS 檔案系統 ID:
aws efs describe-file-systems
範例輸出:
{ "FileSystems": [
{
"SizeInBytes": {
"Timestamp": ,
"Value":
},
"ThroughputMode": "",
"CreationToken": "",
"Encrypted": true,
"CreationTime": ,
"PerformanceMode": "",
"FileSystemId": "[FileSystemId]",
"NumberOfMountTargets": ,
"LifeCycleState": "available",
"KmsKeyId": "arn:aws:kms:ap-southeast-1:<account_id>:key/854df848-fdd1-46e3-ab97-b4875c4190e6",
"OwnerId": ""
},
]
}
-
前往 /examples/kubernetes/multiple_pods/specs/ 目錄中的 pv.yaml 檔案。然後,使用掛載的 Amazon EFS 檔案系統的 FileSystemId 取代 volumeHandle 的值。例如:
apiVersion: v1
kind: PersistentVolume
metadata:
name: efs-pv
spec:
capacity:
storage: 5Gi
volumeMode: Filesystem
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
storageClassName: efs-sc
csi:
driver: efs.csi.aws.com
volumeHandle: [FileSystemId]
-
從 /examples/kubernetes/multiple_pods/specs/ 目錄部署儲存體類別、持久性磁碟區宣告、持久性磁碟區和 Pod:
kubectl apply -f specs/storageclass.yaml
kubectl apply -f specs/pv.yaml
kubectl apply -f specs/claim.yaml
kubectl apply -f specs/pod1.yaml
kubectl apply -f specs/pod2.yaml
-
確認您的 Pod 是否處於執行狀態:
kubectl get pods
-
列出預設命名空間中的持久性磁碟區:
kubectl get pv
-
描述持續性磁碟區:
kubectl describe pv efs-pv
- 驗證資料是否已寫入 Amazon EFS 檔案系統:
kubectl exec -ti app1 -- tail /data/out1.txt
kubectl exec -ti app2 -- tail /data/out1.txt