將 AWS Secrets and Configuration Provider CSI 與服務帳戶 IAM 角色 (IRSA) 搭配使用 - AWS Systems Manager

AWS Systems ManagerChange Manager 不再開放給新客戶。現有客戶可以繼續正常使用該服務。如需詳細資訊,請參閱AWS Systems ManagerChange Manager可用性變更

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

將 AWS Secrets and Configuration Provider CSI 與服務帳戶 IAM 角色 (IRSA) 搭配使用

先決條件

  • Amazon EKS 叢集 (1.17 版或更新版本)

  • 可透過 kubectl 存取 AWS CLI 和 Amazon EKS 叢集

設定存取控制

ASCP 會擷取 Amazon EKS Pod 身分識別,並將其交換為 IAM 角色。您可以在 IAM 政策中為該 IAM 角色設定許可。ASCP 擔任 IAM 角色時,它可存取您授權的參數。除非您也將其與 IAM 角色建立關聯,否則其他容器無法存取參數。

授予 Amazon EKS Pod 對 Parameter Store 中參數的存取權
  1. 建立許可政策,針對 Pod 需要存取的參數,授予 ssm:GetParametersssm:DescribeParameters 存取該參數的許可。

  2. 如果尚未建立,請為叢集建立 IAM OpenID Connect (OIDC) 提供者。如需詳細資訊,請參閱《Amazon EKS 使用者指南》中的為您的叢集建立 IAM OIDC 身分提供者

  3. 建立服務帳戶的 IAM 角色,並將政策連接至該角色。如需詳細資訊,請參閱《Amazon EKS 使用者指南》中的建立服務帳戶的 IAM 角色

  4. 如果您使用私有 Amazon EKS 叢集,請確認叢集所在的 VPC 具有 AWS STS 端點。如需有關建立端點的資訊,請參閱 AWS Identity and Access Management User Guide 中的 Interface VPC endpoints

識別要掛載的參數

若要確定 ASCP 在 Amazon EKS 中掛載哪些參數作為檔案系統中的檔案,請建立 SecretProviderClass YAML 檔案。SecretProviderClass 會列出要掛載的參數,以及將其掛載的檔案名稱。SecretProviderClass 必須與其參考的 Amazon EKS Pod 位於同一命名空間。

將參數掛載為檔案

下列指示說明如何使用範例 YAML 檔案 ExampleSecretProviderClass.yamlExampleDeployment.yaml 將參數掛載為檔案。

在 Amazon EKS 中掛載參數
  1. SecretProviderClass 套用至 Pod:

    kubectl apply -f ExampleSecretProviderClass.yaml
  2. 部署您的 Pod:

    kubectl apply -f ExampleDeployment.yaml
  3. ASCP 可掛載檔案。

疑難排解

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

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

    kubectl get pods
  2. 若要描述 Pod,請在下列命令中,針對 pod-id 使用您在上一個步驟中從 Pod 找到的 Pod ID。如果不使用預設命名空間,請使用 -n nameSpace

    kubectl describe pod/pod-id
若要查看 ASCP 的錯誤
  • 若要在提供者記錄中尋找更多資訊,請在下列命令中,針對 pod-id 使用 csi-secrets-store-provider-aws Pod 的 ID。

    kubectl -n kube-system get pods kubectl -n kube-system logs Pod/pod-id
  • 驗證是否已安裝 SecretProviderClass CRD:
    kubectl get crd secretproviderclasses.secrets-store.csi.x-k8s.io

    此命令應會傳回有關 SecretProviderClass 自訂資源定義的資訊。

  • 驗證是否已建立 SecretProviderClass 物件。
    kubectl get secretproviderclass SecretProviderClassName -o yaml