協助改善此頁面
想要為此使用者指南做出貢獻嗎? 捲動至此頁面底部,然後選取 [編輯此頁面於] GitHub。您的貢獻將有助於使我們的用戶指南更適合所有人。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
將IAM角色指派給Kubernetes服務帳戶
本主題說明如何將Kubernetes服務帳戶設定為具有 EKS Pod 身分識別的 AWS Identity and Access Management (IAM) 角色。任何設Pods定為使用服務帳戶的使用者都可以存取 AWS 服務 該角色具有存取權限的任何項目。
若要建立 EKS 網繭身分識別關聯,只需一個步驟;您可以透過 AWS Management Console、、 AWS CLI AWS SDK AWS CloudFormation 和其他工具在 EKS 中建立關聯。在任何 Kubernetes 物件中,叢集內部的關聯沒有任何資料或中繼資料,也不會將任何註解新增至服務帳戶。
必要條件
-
現有的叢集。如果您沒有,則可以按照其中一個 開始使用 Amazon EKS指南來建立。
-
建立關聯的 IAM 主體必須具有
iam:PassRole
。 -
在您的裝置或上 AWS CLI 安裝和設定的最新版本 AWS CloudShell。您可以使用
aws --version | cut -d / -f2 | cut -d ' ' -f1
來檢查您的目前版本。如yum
、apt-get
或適用於 macOS 的 Homebrew 等套件管理工具通常比最新版本的 AWS CLI落後數個版本之多。若要安裝最新版本,請參閱《 AWS Command Line Interface 使用指南》aws configure
中的〈安裝、更新 AWS CLI和解除安裝〉和〈快速設定〉。安裝在中的 AWS CLI 版本也 AWS CloudShell 可能是最新版本之後的幾個版本。若要進行更新,請參閱《 AWS CloudShell 使用者指南》中的〈安裝 AWS CLI 到主目錄〉。 -
已在裝置或 AWS CloudShell上安裝
kubectl
命令列工具。版本可以與您的叢集 Kubernetes 版本相同,或是為最多比該版本更舊一版或更新一版的次要版本。例如,如果您的叢集版本為1.29
,則可以搭配使用kubectl
1.28
、1.29
或1.30
版。若要安裝或升級kubectl
,請參閱 設定kubectl和 eksctl。 -
包含叢集組態的現有
kubectl
config
檔案。若要建立kubectl
config
檔案,請參閱透過建立檔案 Connect 線kubectl至 EKS 叢集 kubeconfig。
建立 EKS Pod 身分識別關聯
- AWS Management Console
-
在以下網址開啟 Amazon EKS 主控台:https://console.aws.amazon.com/eks/home#/clusters
。 -
在左側導覽窗格中,選取叢集,然後選取您要為其設定 EKS Pod 身分識別代理程式附加元件之叢集的名稱。
-
選擇存取索引標籤。
-
在 Pod 身分識別關聯中,選擇建立。
-
對於 IAM 角色,選取具有您希望工作負載擁有許可的 IAM 角色。
注意
此清單僅包含具有下列信任政策的角色,允許 EKS Pod 身分識別使用這些角色。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowEksAuthToAssumeRoleForPodIdentity", "Effect": "Allow", "Principal": { "Service": "pods.eks.amazonaws.com" }, "Action": [ "sts:AssumeRole", "sts:TagSession" ] } ] }
sts:AssumeRole
-
EKS Pod 身分識別會先使用
AssumeRole
來擔任 IAM 角色,然後將臨時憑證傳至您的 Pod。 sts:TagSession
-
EKS Pod 身分識別會用
TagSession
在向 AWS STS的請求中包含工作階段標籤。您可以在信任政策的 condition keys 中使用這些標籤,用來限制哪些服務帳戶、命名空間和叢集可以使用此角色。
如需 Amazon EKS 條件金鑰的清單,請參閱服務授權參考中的 Amazon Elastic Kubernetes Service 定義的條件。若要了解您可以搭配哪些動作和資源使用條件索引鍵,請參閱 Amazon Elastic Kubernetes Service 定義的動作。
-
對於 Kubernetes 命名空間,選取包含服務帳戶和工作負載的 Kubernetes 命名空間。或者,您可以使用名稱 (不存在於叢集中) 指定命名空間。
-
對於 Kubernetes 服務帳戶,選取要使用的 Kubernetes 服務帳戶。Kubernetes 工作負載的清單檔案必須指定此服務帳戶。或者,您可以使用名稱 (不存在於叢集中) 指定服務帳戶。
-
(選用) 對於標籤,請選擇新增標籤,以在鍵值對中新增中繼資料。這些標籤會套用至關聯,可用於 IAM 政策。
您可以多次重複此步驟以新增多個標籤。
-
選擇建立。
- AWS CLI
-
-
如果您要將現有 IAM 政策與 IAM 角色建立關聯,請跳到下一步驟。
建立 IAM 政策。您可以建立自己的政策,或複製已授予您所需的某些許可的 AWS 受管政策,並根據您的特定要求加以自訂。如需詳細資訊,請參閱《IAM 使用者指南》中的建立 IAM 政策。
-
根據您要讓 Pods 存取的 AWS 服務 ,建立內含相關許可的檔案。如需所有動作的清單 AWS 服務,請參閱服務授權參考。
您可以執行以下命令來建立允許唯讀存取 Amazon S3 儲存貯體的範例政策檔案。您可以選擇性地將組態資訊或引導指令碼存放在此儲存貯體中,而 Pod 中的容器可從儲存貯體讀取檔案,並載入至您的應用程式。如果您要建立此範例政策,請將以下內容複製到您的裝置。請
my-pod-secrets-bucket
以儲存貯體名稱取代並執行指令。cat >
my-policy.json
<<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::my-pod-secrets-bucket
" } ] } EOF -
建立 IAM 政策。
aws iam create-policy --policy-name
my-policy
--policy-document file://my-policy.json
-
-
建立 IAM 角色並與 Kubernetes 服務帳戶建立關聯。
-
如果您有要擔任 IAM 角色的現有 Kubernetes 服務帳戶,則可略過此步驟。
建立 Kubernetes 服務帳戶。將以下內容複製到您的裝置。如
my-service-account
有必要,請以您想要的名稱和預設
名稱取代為不同的命名空間。如果您變更default
,命名空間必須已經存在。cat >my-service-account.yaml <<EOF apiVersion: v1 kind: ServiceAccount metadata: name:
my-service-account
namespace:default
EOF kubectl apply -f my-service-account.yaml執行下列命令。
kubectl apply -f my-service-account.yaml
-
執行下列命令以建立 IAM 角色的信任政策檔案。
cat >
trust-relationship.json
<<EOF { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowEksAuthToAssumeRoleForPodIdentity", "Effect": "Allow", "Principal": { "Service": "pods.eks.amazonaws.com" }, "Action": [ "sts:AssumeRole", "sts:TagSession" ] } ] } EOF -
建立角色。將
取代為您的 IAM 角色名稱,並將my-role
取代為您角色的描述。my-role-description
aws iam create-role --role-name
my-role
--assume-role-policy-document file://trust-relationship.json
--description "my-role-description
" -
將 IAM 政策連接至您的角色。將
取代為您的 IAM角色名稱,將my-role
取代為您建立的現有政策名稱。my-policy
aws iam attach-role-policy --role-name
my-role
--policy-arn=arn:aws:iam::111122223333
:policy/my-policy
注意
與服務帳戶的 IAM 角色不同,EKS Pod 身分識別不會在服務帳戶上使用註釋。
-
執行下列命令以建立關聯。取代為叢集
my-cluster
的名稱,如有必要,請my-service-account
以您想要的名稱和預設
名稱取代為不同的命名空間。aws eks create-pod-identity-association --cluster-name
my-cluster
--role-arn arn:aws:iam::111122223333
:role/my-role
--namespacedefault
--service-accountmy-service-account
範例輸出如下。
{ "association": { "clusterName": "my-cluster", "namespace": "default", "serviceAccount": "my-service-account", "roleArn": "arn:aws:iam::111122223333:role/my-role", "associationArn": "arn:aws::111122223333:podidentityassociation/my-cluster/a-abcdefghijklmnop1", "associationId": "a-abcdefghijklmnop1", "tags": {}, "createdAt": 1700862734.922, "modifiedAt": 1700862734.922 } }
注意
您可以使用名稱 (不存在於叢集中) 指定命名空間和服務帳戶。您必須建立命名空間、服務帳戶以及使用服務帳戶進行 EKS Pod 身分識別關聯才能運作的工作負載。
-
-
確認角色和服務帳戶設定正確。
-
確認 IAM 角色的信任政策設定正確。
aws iam get-role --role-name
my-role
--query Role.AssumeRolePolicyDocument範例輸出如下。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Allow EKS Auth service to assume this role for Pod Identities", "Effect": "Allow", "Principal": { "Service": "pods.eks.amazonaws.com" }, "Action": [ "sts:AssumeRole", "sts:TagSession" ] } ] }
-
確認您在上一步連接至角色的政策已連接至該角色。
aws iam list-attached-role-policies --role-name
my-role
--query AttachedPolicies[].PolicyArn --output text範例輸出如下。
arn:aws:iam::
111122223333
:policy/my-policy
-
設定變數以存放您要使用之政策的 Amazon Resource Name (ARN)。將
my-policy
取代為您要確認許可的政策名稱。export policy_arn=arn:aws:iam::
111122223333
:policy/my-policy
-
檢視預設政策版本。
aws iam get-policy --policy-arn $policy_arn
範例輸出如下。
{ "Policy": { "PolicyName": "
my-policy
", "PolicyId": "EXAMPLEBIOWGLDEXAMPLE
", "Arn": "arn:aws:iam::111122223333
:policy/my-policy
", "Path": "/", "DefaultVersionId": "v1
", [...] } } -
檢視政策內容,以確定政策包含您的 Pod 需要的所有許可。視需要將以下命令中的
1
取代為上一個輸出中傳回的版本。aws iam get-policy-version --policy-arn $policy_arn --version-id v
1
範例輸出如下。
{ "Version": "2012-10-17", "Statement": [
{ "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::my-pod-secrets-bucket" }
] }如果您在上一步建立了範例政策,則輸出結果相同。如果您建立了不同的政策,則
example
內容有所不同。
-
-