步驟 1:設定 Amazon EKS 叢集和設定 IAM 許可 - Amazon Keyspaces (適用於 Apache Cassandra)

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

步驟 1:設定 Amazon EKS 叢集和設定 IAM 許可

設定 Amazon EKS 叢集並建立允許 Amazon EKS 服務帳戶連線到 Amazon Keyspaces 資料表所需的 IAM 資源
  1. 為 Amazon EKS 叢集建立 Open ID Connect (OIDC) 提供者。為服務帳戶使用 IAM 角色時需要此功能。如需 OIDC 提供者以及如何建立它們的詳細資訊,請參閱《Amazon EKS 使用者指南》中的為您的叢集建立 IAM OIDC 提供者

    1. 使用下列命令為您的叢集建立 IAM OIDC 身分提供者。此範例假設您的叢集名稱為 my-eks-cluster。如果您有具有不同名稱的叢集,請記得更新所有未來命令中的名稱。

      eksctl utils associate-iam-oidc-provider --cluster my-eks-cluster --approve
    2. 確認 OIDC 身分提供者已使用下列命令向 IAM 註冊。

      aws iam list-open-id-connect-providers --region us-east-1

      輸出看起來應該與此類似。請記下 OIDC 的 Amazon Resource Name (ARN),當您為服務帳戶建立信任政策時,需要在下一個步驟中使用它。

      { "OpenIDConnectProviderList": [ .. { "Arn": "arn:aws:iam::111122223333:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE" } ] }
  2. 建立 Amazon EKS 叢集的服務帳戶。服務帳戶為在 Pod 中執行的程序提供身分。Pod 是最小且最簡單的 Kubernetes 物件,可用來部署容器化應用程式。接著,建立服務帳戶可擔任的 IAM 角色,以取得 資源的許可。您可以從 Pod 存取任何已設定為使用服務帳戶 AWS 的服務,該帳戶可擔任具有該服務存取許可的 IAM 角色。

    1. 為服務帳戶建立新的命名空間。命名空間有助於隔離為此教學課程建立的叢集資源。您可以使用下列命令建立新的命名空間。

      kubectl create namespace my-eks-namespace
    2. 若要使用自訂命名空間,您必須將其與 Fargate 設定檔建立關聯。下列程式碼為範例。

      eksctl create fargateprofile \ --cluster my-eks-cluster \ --name my-fargate-profile \ --namespace my-eks-namespace \ --labels *=*
    3. 使用下列命令,在 Amazon EKS 叢集my-eks-namespace的命名空間my-eks-serviceaccount中建立名稱為 的服務帳戶。

      cat >my-serviceaccount.yaml <<EOF apiVersion: v1 kind: ServiceAccount metadata: name: my-eks-serviceaccount namespace: my-eks-namespace EOF kubectl apply -f my-serviceaccount.yaml
    4. 執行下列命令來建立信任政策檔案,指示 IAM 角色信任您的服務帳戶。在委託人可以擔任角色之前,需要此信任關係。您需要對 檔案進行下列編輯:

      • 針對 Principal,輸入 IAM 傳回命令的 ARNlist-open-id-connect-providers。ARN 包含您的帳戶號碼和區域。

      • condition陳述式中,取代 AWS 區域 和 OIDC ID。

      • 確認服務帳戶名稱和命名空間正確無誤。

      建立 IAM 角色時,您需要在下一個步驟中連接信任政策檔案。

      cat >trust-relationship.json <<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::111122223333:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:my-eks-namespace:my-eks-serviceaccount", "oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com" } } } ] } EOF

      選用:您也可以在 StringEqualsStringLike條件中新增多個項目,以允許多個服務帳戶或命名空間擔任該角色。若要讓您的服務帳戶在不同帳戶中 AWS 擔任 IAM 角色,請參閱《Amazon EKS 使用者指南》中的跨帳戶 IAM 許可

  3. 使用要擔任my-iam-role的 Amazon EKS 服務帳戶的名稱建立 IAM 角色。將最後一個步驟中建立的信任政策檔案連接到角色。信任政策會指定 IAM 角色可信任的服務帳戶和 OIDC 提供者。

    aws iam create-role --role-name my-iam-role --assume-role-policy-document file://trust-relationship.json --description "EKS service account role"
  4. 連接存取政策,將 IAM 角色許可指派給 Amazon Keyspaces。

    1. 連接存取政策,以定義 IAM 角色可在特定 Amazon Keyspaces 資源上執行的動作。在此教學課程中,我們使用 AWS 受管政策 AmazonKeyspacesFullAccess,因為我們的應用程式會將資料寫入您的 Amazon Keyspaces 資料表。不過,根據最佳實務,建議您建立實作最低權限原則的自訂存取政策。如需詳細資訊,請參閱Amazon Keyspaces 如何與 IAM 搭配使用

      aws iam attach-role-policy --role-name my-iam-role --policy-arn=arn:aws:iam::aws:policy/AmazonKeyspacesFullAccess

      使用下列陳述式確認政策已成功連接至 IAM 角色。

      aws iam list-attached-role-policies --role-name my-iam-role

      輸出看起來應該像這樣。

      { "AttachedPolicies": [ { "PolicyName": "AmazonKeyspacesFullAccess", "PolicyArn": "arn:aws:iam::aws:policy/AmazonKeyspacesFullAccess" } ] }
    2. 使用可擔任的 IAM 角色的 Amazon Resource Name (ARN) 來標註服務帳戶。請務必使用您的帳戶 ID 更新角色 ARN。

      kubectl annotate serviceaccount -n my-eks-namespace my-eks-serviceaccount eks.amazonaws.com/role-arn=arn:aws:iam::111122223333:role/my-iam-role
  5. 確認 IAM 角色和服務帳戶已正確設定。

    1. 確認 IAM 角色的信任政策已使用下列陳述式正確設定。

      aws iam get-role --role-name my-iam-role --query Role.AssumeRolePolicyDocument

      輸出看起來應該與此類似。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::111122223333:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.us-east-1/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com", "oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:my-eks-namespace:my-eks-serviceaccount" } } } ] }
    2. 確認 Amazon EKS 服務帳戶已標註 IAM 角色。

      kubectl describe serviceaccount my-eks-serviceaccount -n my-eks-namespace

      輸出看起來應該與此類似。

      Name: my-eks-serviceaccount Namespace:my-eks-namespace Labels: <none> Annotations: eks.amazonaws.com/role-arn: arn:aws:iam::111122223333:role/my-iam-role Image pull secrets: <none> Mountable secrets: <none> Tokens: <none> [...]

在您建立 Amazon EKS 服務帳戶、IAM 角色並設定必要的關係和許可之後,請繼續步驟 2:設定應用程式