本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
設定 Amazon EKS 叢集並建立所需的 IAM 資源,以允許 Amazon EKS 服務帳戶連接到您的 Amazon Keyspaces 表格
-
為 Amazon EKS 叢集建立開放式 ID Connect (OIDC) 提供者。若要針對服務帳戶使用 IAM 角色,則需要執行此動作。如需有關 OIDC 提供者及如何建立它們的詳細資訊,請參閱 Amazon EKS 使用者指南中的為叢集建立 IAM OIDC 提供者。
使用下列命令為您的叢集建立 IAM OIDC 身分提供者。此範例假設您的叢集名稱為
my-eks-cluster
。如果您有不同名稱的叢集,請記得在以 future 的所有命令中更新名稱。eksctl utils associate-iam-oidc-provider --cluster
my-eks-cluster
--approve使用以下命令確認 OIDC 身分提供者已向 IAM 註冊。
aws iam list-open-id-connect-providers --region
aws-region
輸出看起來應該類似於這個。記下 OIDC 的 Amazon 資源名稱 (ARN),您在下一個步驟中為服務帳戶建立信任政策時需要它。
{ "OpenIDConnectProviderList": [ .. { "Arn": "arn:aws:iam::
111122223333
:oidc-provider/oidc.eks.aws-region
.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE
" } ] }
-
為 Amazon EKS 叢集建立服務帳戶。服務帳戶會為在網繭中執行的處理程序提供身分識別。Pod 是可用來部署容器化應用程式的最小且最簡單的 Kubernetes 物件。接下來,建立服務帳戶可以假設為取得資源許可的 IAM 角色。您可以從已設定為使用可承擔具有該服務存取權限的 IAM 角色的服務帳戶存取任 AWS 何服務。
為服務帳戶建立新的命名空間。命名空間有助於隔離針對本教學課程建立的叢集資源。您可以使用以下命令創建一個新的命名空間。
kubectl create namespace
my-eks-namespace
要使用自定義命名空間,您必須將其與 Fargate 配置文件相關聯。下面的代碼是這樣的一個例子。
eksctl create fargateprofile \ --cluster
my-eks-cluster
\ --namemy-fargate-profile
\ --namespacemy-eks-namespace
\ --labels*
=*
使用下列命令
my-eks-serviceaccount
在 Amazon EKS 叢集的命名空my-eks-namespace
間中建立名稱的服務帳戶。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
執行下列命令以建立信任政策檔案,以指示 IAM 角色信任您的服務帳戶。主參與者可以擔任角色之前,需要此信任關係。您需要對文件進行以下編輯:
對於
Principal
,請輸入 IAM 傳回給list-open-id-connect-providers
命令的 ARN。ARN 包含您的帳號和地區。在
condition
陳述式中,取代 AWS 區域 和 OIDC 識別碼。確認服務帳戶名稱和命名空間是否正確。
建立 IAM 角色時,您需要在下一個步驟中附加信任政策檔案。
cat >trust-relationship.json <<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::
111122223333
:oidc-provider/oidc.eks.aws-region
.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE
" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.aws-region
.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE
:sub": "system:serviceaccount:my-eks-namespace
:my-eks-serviceaccount
", "oidc.eks.aws-region
.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE
:aud": "sts.amazonaws.com" } } } ] } EOF可選:您也可以在
StringEquals
或StringLike
條件中新增多個項目,以允許多個服務帳戶或命名空間擔任該角色。若要允許您的服務帳戶在不同 AWS 帳戶中擔任 IAM 角色,請參閱 Amazon EKS 使用者指南中的跨帳戶 IAM 許可。
-
使用要假設的 Amazon EKS 服務帳戶名稱
my-iam-role
建立 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" -
透過附加存取政策,將 IAM 角色許可指派給 Amazon Keyspaces。
附加存取政策以定義 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" } ] }
使用可承擔的 IAM 角色的 Amazon 資源名稱 (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
確認 IAM 角色和服務帳戶設定正確。
使用下列陳述式確認 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.
aws-region
.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.aws-region
/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com", "oidc.eks.aws-region
.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:my-eks-namespace:my-eks-serviceaccount" } } } ] }確認已使用 IAM 角色註釋 Amazon EKS 服務帳戶。
kubectl describe serviceaccount
my-eks-serviceaccount
-nmy-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:設定應用程式。