使用 AWS 秘密和組態提供者 CSI 搭配 Amazon EKS 的 Pod 身分 - AWS Systems Manager

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

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

使用 AWS 秘密和組態提供者 CSI 搭配 Amazon EKS 的 Pod 身分

AWS Secrets and Configuration Provider 與 Pod Identity Agent for Amazon Elastic Kubernetes Service 整合,可為在 Amazon EKS 上執行的應用程式提供增強的安全性、簡化組態並改善效能。從 AWS Systems Manager Parameter Store Secrets Manager 擷取參數或秘密時,Pod Identity 可簡化 Amazon EKS 的 AWS Identity and Access Management (IAM) 身分驗證。

Amazon EKS Pod 身分識別透過允許直接透過 Amazon EKS 介面設定許可、減少步驟數量,並消除在 Amazon EKS 和 IAM 服務之間切換的需求,簡化設定 Kubernetes 應用程式 IAM 許可的程序。Pod 身分識別可讓您跨多個叢集使用單一 IAM 角色,而無需更新信任政策,並支援角色工作階段標籤,以實現更精細的存取控制。這種方法不僅允許跨角色重複使用許可政策來簡化政策管理,還可以根據相符標籤啟用對 AWS 資源的存取,以增強安全性。

運作方式

  1. Pod 身分識別可將 IAM 角色指派給 Pod。

  2. ASCP 使用此角色進行身分驗證 AWS 服務。

  3. 如果獲得授權,ASCP 會擷取請求的參數,並將其提供給 Pod。

如需詳細資訊,請參閱《Amazon EKS 使用者指南》中的了解 Amazon EKS Pod 身分識別的運作方式

先決條件

重要

僅雲端中的 Amazon EKS 支援 Pod 身分識別。Amazon EC2 執行個體上的 Amazon EKS AnywhereRed Hat OpenShift Service on AWS 或自我管理型 Kubernetes 叢集不支援此功能。

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

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

  • (選用) 存取兩個 AWS 帳戶 以進行跨帳戶存取

安裝 Amazon EKS Pod 身分識別代理程式

若要將 Pod 身分識別與叢集搭配使用,您必須安裝 Amazon EKS Pod 身分識別代理程式附加元件。

安裝 Pod 身分識別代理程式
  • 在叢集上安裝 Pod 身分識別代理程式附加元件。

    使用您的值取代預設預留位置文字

    eksctl create addon \ --name eks-pod-identity-agent \ --cluster clusterName \ --region region

使用 Pod 身分識別設定 ASCP

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

  2. 建立由 Amazon EKS 服務主體擔任的 IAM 角色,用於 Pod 身分識別:

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "pods.eks.amazonaws.com" }, "Action": [ "sts:AssumeRole", "sts:TagSession" ] } ] }

    將 IAM 政策連接至角色。

    使用您的值取代預設預留位置文字

    aws iam attach-role-policy \ --role-name MY_ROLE \ --policy-arn POLICY_ARN
  3. 建立 Pod 身分識別關聯。如需範例,請參閱《Amazon EKS 使用者指南》中的建立 Pod 身分識別關聯

  4. 建立指定要在 Pod 中掛載哪些參數或秘密的 SecretProviderClass

    kubectl apply -f kubectl apply -f https://raw.githubusercontent.com/aws/secrets-store-csi-driver-provider-aws/main/examples/ExampleSecretProviderClass-PodIdentity.yaml

    在 IRSA 和 Pod 身分識別之間,SecretProviderClass 主要差異是選用參數 usePodIdentity。這是可決定身分驗證方法的選用欄位。未指定時,它會預設為使用服務帳戶的 IAM 角色 (IRSA)。

    • 若要使用 EKS Pod 身分識別,請使用下列任何值:"true", "True", "TRUE", "t", "T"

    • 若要明確使用 IRSA,請設定為下列任何值:"false", "False", "FALSE", "f", or "F"

  5. 部署在 /mnt/secrets-store 下掛載參數或秘密的 Pod:

    kubectl apply -f kubectl apply -f https://raw.githubusercontent.com/aws/secrets-store-csi-driver-provider-aws/main/examples/ExampleDeployment-PodIdentity.yaml
  6. 如果您使用私有 Amazon EKS 叢集,請確定叢集所在的 VPC 具有 AWS STS 端點。如需有關建立端點的資訊,請參閱 AWS Identity and Access Management User Guide 中的 Interface VPC endpoints

驗證秘密掛載

若要驗證是否已正確掛載參數或秘密,請執行下列命令。

使用您的值取代預設預留位置文字

kubectl exec -it $(kubectl get pods | awk '/pod-identity-deployment/{print $1}' | head -1) -- cat /mnt/secrets-store/MyParameter
設定 Amazon EKS Pod 身分識別以存取 Parameter Store 中的參數
  1. 建立許可政策,針對 Pod 需要存取的參數,授予 ssm:GetParametersssm:DescribeParameters 存取該參數的許可。

  2. 如果您還沒有參數,請在 Parameter Store 中建立參數。如需相關資訊,請參閱在 Systems Manager 中建立 Parameter Store 參數

疑難排解

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

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

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

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

    kubectl -n kube-system get pods kubectl -n kube-system logs pod/pod-id