本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 Amazon Elastic Kubernetes Service 中使用 AWS Secrets Manager 秘密
若要將 Secrets Manager 的秘密顯示為 Amazon EKS Pod 中掛載的檔案,您可以使用 Kubernetes Secrets Store CSI Driver
如果您使用私有 Amazon EKS叢集,請確定VPC叢集所在的 具有 Secrets Manager 端點。Secrets Store CSI Driver 使用 端點呼叫 Secrets Manager。如需在 中建立端點的資訊VPC,請參閱 VPC 端點。
如果您使用 Secrets Manager 自動輪換秘密,您也可以使用 Secrets Store CSI Driver 輪換對帳器功能,以確保您從 Secrets Manager 擷取最新的秘密。如需詳細資訊,請參閱自動輪換已掛載的內容和已同步的 Kubernetes 秘密
步驟 1:設定存取控制
會ASCP擷取 Amazon EKS Pod 身分,並將其交換為IAM角色。您可以在IAM政策中為該IAM角色設定許可。當 ASCP擔任IAM角色時,它會存取您授權的秘密。其他容器無法存取秘密,除非您也將其與IAM角色建立關聯。
如果 中的呼叫ASCP查詢與 Pod 相關聯的區域和IAM角色是由 Kubernetes 限流,您可以使用 變更限流配額helm install
,如步驟 2 所示。
在 Secrets Manager 中授予 Amazon EKS Pod 對秘密的存取權
-
建立許可政策,將 Pod 需要存取的秘密授予
secretsmanager:GetSecretValue
和secretsmanager:DescribeSecret
許可。如需政策範例,請參閱 範例:讀取和描述個別秘密的許可。 -
如果您還沒有叢集,請為叢集建立 IAM OpenID Connect (OIDC) 供應商。如需詳細資訊,請參閱 Amazon EKS使用者指南 中的為您的叢集建立IAMOIDC供應商。
-
為IAM服務帳戶建立角色,並將政策連接至該角色。如需詳細資訊,請參閱 Amazon EKS使用者指南 中的為服務帳戶建立IAM角色。
-
如果您使用私有 Amazon EKS叢集,請確定VPC叢集所在的 具有 AWS STS 端點。如需建立端點的相關資訊,請參閱 AWS Identity and Access Management 使用者指南 中的介面VPC端點。
步驟 2:安裝和設定 ASCP
ASCP 可在 secrets-store-csi-provider-aws
在安裝期間,您可以將 設定為ASCP使用FIPS端點。如需端點清單,請參閱 AWS Secrets Manager 端點。
ASCP 使用 Helm 安裝
若要確保儲存庫指向最新的圖表,請使用
helm repo update.
-
新增秘密存放區CSI驅動程式圖表。
helm repo add secrets-store-csi-driver https://kubernetes-sigs.github.io/secrets-store-csi-driver/charts
-
安裝圖表。若要設定限流,請新增下列旗標:
--set-json 'k8sThrottlingParams={"qps": "
<number of queries per second>
", "burst": "<number of queries per second>
"}'helm install -n kube-system csi-secrets-store secrets-store-csi-driver/secrets-store-csi-driver
-
新增ASCP圖表。
helm repo add aws-secrets-manager https://aws.github.io/secrets-store-csi-driver-provider-aws
-
安裝圖表。若要使用FIPS端點,請新增下列旗標:
--set useFipsEndpoint=true
helm install -n kube-system secrets-provider-aws aws-secrets-manager/secrets-store-csi-driver-provider-aws
使用 儲存庫YAML中的 安裝
使用下列命令。
helm repo add secrets-store-csi-driver https://kubernetes-sigs.github.io/secrets-store-csi-driver/charts helm install -n kube-system csi-secrets-store secrets-store-csi-driver/secrets-store-csi-driver kubectl apply -f https://raw.githubusercontent.com/aws/secrets-store-csi-driver-provider-aws/main/deployment/aws-provider-installer.yaml
步驟 3:識別要掛載的秘密
若要判斷 Amazon 中的哪些掛ASCP載EKS作為檔案系統的檔案秘密,請建立 SecretProviderClass YAML 檔案。SecretProviderClass
會列出要掛載的秘密,以及要掛載的檔案名稱。SecretProviderClass
必須與參考的 Amazon EKS Pod 位於相同的命名空間。
下列範例示範如何使用 SecretProviderClass
來描述您要掛載的秘密,以及如何命名掛載在 Amazon EKS Pod 中的檔案。
範例:依名稱掛載秘密或 ARN
下列範例顯示 SecretProviderClass
,該 會在 Amazon 中掛載三個檔案EKS:
完整 指定的秘密ARN。
依名稱指定的秘密。
秘密的特定版本。
apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: aws-secrets spec: provider: aws parameters: objects: | - objectName: "arn:aws:secretsmanager:us-east-2:
111122223333
:secret:MySecret2-d4e5f6" - objectName: "MySecret3" objectType: "secretsmanager" - objectName: "MySecret4" objectType: "secretsmanager" objectVersionLabel: "AWSCURRENT"
範例:透過機密掛載金鑰/值對
下列範例顯示 SecretProviderClass
,該 會在 Amazon 中掛載三個檔案EKS:
完整 指定的秘密ARN。
此
username
金鑰/值對來自相同的秘密。此
password
金鑰/值對來自相同的秘密。
apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: aws-secrets spec: provider: aws parameters: objects: | - objectName: "arn:aws:secretsmanager:us-east-2:
111122223333
:secret:MySecret-a1b2c3" jmesPath: - path: username objectAlias: dbusername - path: password objectAlias: dbpassword
範例:定義多區域機密的容錯移轉區域
為了在連線中斷或災難復原組態期間提供可用性, ASCP支援自動容錯移轉功能,以從次要區域擷取秘密。
下列範例顯示可擷取複寫至多個區域之機密的 SecretProviderClass
。在此範例中, ASCP 會嘗試從 us-east-1
和 擷取秘密us-east-2
。如果任一區域傳回 4xx 錯誤,例如身分驗證問題,則 ASCP不會掛載任一秘密。如果成功從 擷取秘密us-east-1
,則 會ASCP掛載該秘密值。如果未成功從 擷取秘密us-east-1
,但成功從 擷取秘密us-east-2
,則 會ASCP掛載該秘密值。
apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: aws-secrets spec: provider: aws parameters: region: us-east-1 failoverRegion: us-east-2 objects: | - objectName: "MySecret"
範例:選擇要掛載的容錯移轉機密
下列範例顯示用於指定在容錯移轉時要裝載之機密的 SecretProviderClass
。容錯移轉機密不是複本。在此範例中, ASCP 會嘗試擷取 指定的兩個秘密objectName
。如果任一 傳回 4xx 錯誤,例如身分驗證問題,則 ASCP不會掛載任一秘密。如果成功從 擷取秘密us-east-1
,則 會ASCP掛載該秘密值。如果未成功從 擷取秘密us-east-1
,但成功從 擷取秘密us-east-2
,則 會ASCP掛載該秘密值。Amazon 中掛載的檔案EKS名為 MyMountedSecret
。
apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: aws-secrets spec: provider: aws parameters: region: us-east-1 failoverRegion: us-east-2 objects: | - objectName: "arn:aws:secretsmanager:us-east-1:
111122223333
:secret:MySecret-a1b2c3" objectAlias: "MyMountedSecret" failoverObject: - objectName: "arn:aws:secretsmanager:us-east-2:111122223333
:secret:MyFailoverSecret-d4e5f6"
步驟 4:將秘密掛載為 Amazon EKS Pod 中的檔案
下列指示說明如何使用範例檔案 ExampleSecretProviderClass.yaml
在 Amazon 中掛載秘密 EKS
-
使用命令 將
SecretProviderClass
套用至 Podkubectl apply -f ExampleSecretProviderClass.yaml
。 -
使用命令 部署您的 Pod
kubectl apply -f ExampleDeployment.yaml
。 掛ASCP載檔案。
疑難排解
您可以透過描述 Pod 部署來檢視大多數錯誤。
若要查看容器的錯誤訊息
-
使用下列命令取得 Pod 名稱清單。如果不使用預設命名空間,請使用
-n <NAMESPACE>
。kubectl get pods
-
若要描述 Pod,請在下列命令中,針對
<PODID>
使用您在上一個步驟中找到的 Pod ID。如果不使用預設命名空間,請使用-n <NAMESPACE>
。kubectl describe pod/
<PODID>
檢視 的錯誤 ASCP
-
若要在提供者日誌中尋找詳細資訊,請在下列命令中,針對
<PODID>
使用 csi-secrets-store-provider-aws Pod 的 ID。kubectl -n kube-system get pods kubectl -n kube-system logs pod/
<PODID>