在 Amazon Elastic Kubernetes Service 中使用 AWS Secrets Manager 秘密 - AWS Secrets Manager

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

在 Amazon Elastic Kubernetes Service 中使用 AWS Secrets Manager 秘密

若要將來自 Secrets Manager 的密碼顯示為裝載在 Amazon EKS 網繭中的檔案,您可以使用 Kubernetes AWS 秘密存放區驅動程式的機密和組態提供者 (ASCP)。CSI該ASCP工作與 Amazon Elastic Kubernetes Service(AmazonEKS)1.17 + 運行 Amazon 節點組。EC2 AWS Fargate 不支援節點群組。使用ASCP,您可以在 Secret Manager 中存放和管理您的密碼,然後透過在 Amazon 上執行的工作負載擷取密碼EKS。如果您的密鑰包含多個JSON格式的鍵/值對,則可以選擇要在 Amazon 上安裝哪些鍵/值對。EKSASCP使用JMESPath語法查詢密鑰中的鍵/值對。ASCP也適用於參數存放區參數

如果您使用私有 Amazon EKS 叢集,請確保叢集所在的叢集具有 Secrets Manager 端點。VPC密碼存放區CSI驅動程式會使用端點對 Secrets Manager 撥打電話。如需在中建立端點的相關資訊VPC,請參閱VPC 端點

如果您對密碼使用 Secrets Manager 自動輪替,您也可以使用 Secret Store CSI 驅動程式輪換調解器功能來確保您從 Secrets Manager 擷取最新的密碼。如需詳細資訊,請參閱自動輪換已掛載的內容和已同步的 Kubernetes 秘密

步驟 1:設定存取控制

會ASCP擷取 Amazon EKS 網繭身分並將其交換為IAM角色。您可以在該IAM角色的IAM策略中設定權限。當該IAM角色ASCP擔任時,它可以訪問您授權的密碼。除非您同時將其與IAM角色建立關聯,否則其他容器無法存取密碼。

如果來自查詢區域和與網繭相關聯之IAM角色的呼叫受 Kubernetes 限制,您可以使用helm install變更節流配額,如步ASCP驟 2 所示。

授予您的 Amazon EKS 網繭對秘密管理器中機密的存取權
  1. 建立權限原則,以授secretsmanager:GetSecretValuesecretsmanager:DescribeSecret網繭需要存取的密碼並獲得權限。如需政策範例,請參閱 範例:讀取和描述個別機密的權限

  2. 如果您還沒有,請為叢集建立 IAM OpenID Connect (OIDC) 提供者。如需詳細資訊,請參閱 Amazon EKS 使用者指南中的為叢集建立IAMOIDC提供者

  3. 為服務帳戶建立IAM角色,並將策略附加至其中。如需詳細資訊,請參閱 Amazon EKS 使用者指南中的為服務帳戶建立IAM角色。

  4. 如果您使用私有 Amazon EKS 叢集,請VPC確保叢集所在的叢集具有 AWS STS 端點。如需有關建立端點的資訊,請參閱《AWS Identity and Access Management 使用指南》中的「介面VPC端點」。

步驟 2:安裝和配置 ASCP

可ASCP在 secrets-store-csi-provider-aws 儲存庫 GitHub 中使用。存放庫還包含用於創建和掛載密碼的示例YAML文件。

在安裝期間,您可以ASCP將設定為使用FIPS端點。如需端點清單,請參閱 AWS Secrets Manager 端點

要ASCP通過使用頭盔安裝
  1. 為了確保回購指向最新的圖表,請使用 helm repo update.

  2. 新增密碼儲存區CSI驅動程式圖表。

    helm repo add secrets-store-csi-driver https://kubernetes-sigs.github.io/secrets-store-csi-driver/charts
  3. 安裝圖表。若要設定節流,請新增下列旗標:--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
  4. 添加圖ASCP表。

    helm repo add aws-secrets-manager https://aws.github.io/secrets-store-csi-driver-provider-aws
  5. 安裝圖表。若要使用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:識別要掛載的秘密

要確定將哪些密碼ASCP掛載在 Amazon EKS 作為文件系統上的文件,請創建一個SecretProviderClassYAML文件。會SecretProviderClass列出要掛載的密碼,以及要掛載它們的檔案名稱。SecretProviderClass必須與其參考的 Amazon EKS 網繭位於相同的命名空間中。

下列範例說明如何使用SecretProviderClass來描述您要掛載的密碼,以及如何命名掛接在 Amazon EKS 網繭中的檔案。

範例:依名稱或掛載密碼 ARN

以下示例顯示在 SecretProviderClass Amazon 中掛載三個文件的一個EKS:

  1. 由完整指定的密碼ARN。

  2. 依名稱指定的秘密。

  3. 秘密的特定版本。

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:

  1. 由完整指定的密碼ARN。

  2. username 金鑰/值對來自相同的秘密。

  3. 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 網繭中的檔案

下列指示說明如何使用範例檔案 .yaml 和 ExampleSecretProviderClassExampleDeployment.yaml 來將密碼裝載為YAML檔案。

在 Amazon 安裝秘密 EKS
  1. 使用SecretProviderClass指令將套用至網繭kubectl apply -f ExampleSecretProviderClass.yaml

  2. 使用命令部署您的網繭kubectl apply -f ExampleDeployment.yaml

  3. 會ASCP掛載檔案。

疑難排解

您可以透過描述 Pod 部署來檢視大多數錯誤。

若要查看容器的錯誤訊息
  1. 使用下列命令取得 Pod 名稱清單。如果不使用預設命名空間,請使用 -n <NAMESPACE>

    kubectl get pods
  2. 若要描述 pod,請在下列命令中,<PODID> 使用您在上一個步驟中找到之網繭的網繭識別碼。如果不使用預設命名空間,請使用 -n <NAMESPACE>

    kubectl describe pod/<PODID>
若要查看錯誤 ASCP
  • 若要在提供者記錄檔中尋找更多資訊,請在下列命令中,<PODID> 使用 csi-secrets-store-provider-aws 網繭的識別碼。

    kubectl -n kube-system get pods kubectl -n kube-system logs pod/<PODID>