協助改善此頁面
想要為此使用者指南做出貢獻? 捲動至此頁面底部,然後在 上選取編輯此頁面 GitHub。您的貢獻將幫助我們的使用者指南更適合所有人。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
指派 IAM 角色至 Kubernetes 服務帳戶
本主題說明如何設定 Kubernetes 使用 Pod Identity 擔任 AWS Identity and Access Management (IAM) EKS 角色的服務帳戶。任何 Pods 設定為使用服務帳戶,然後可以存取角色具有存取許可的任何 AWS 服務 。
若要建立 EKS Pod Identity 關聯,只有一個步驟;您可以透過 AWS CLI AWS Management Console、 AWS SDKs AWS CloudFormation 和其他工具EKS在 中建立關聯。在任何 中,叢集內沒有任何關聯的資料或中繼資料 Kubernetes 物件,而且您不會將任何註釋新增至服務帳戶。
必要條件
-
現有的叢集。如果您沒有,則可以按照其中一個 開始使用 Amazon EKS指南來建立。
-
建立關聯的IAM主體必須具有 iam:PassRole
。
-
在您的裝置或 上安裝 AWS CLI 和設定的 最新版本 AWS CloudShell。您可以使用 aws --version | cut -d / -f2
| cut -d ' ' -f1
來檢查您的目前版本。套件管理員yum
,例如 apt-get
、 或 Homebrew for macOS 通常是最新版本 後面的幾個版本 AWS CLI。若要安裝最新版本,請參閱 AWS Command Line Interface 使用者指南中的安裝、更新和解除安裝 AWS CLI 和 快速組態aws configure
。中安裝的 AWS CLI 版本 AWS CloudShell 也可能是最新版本後面的幾個版本。若要更新它,請參閱 AWS CloudShell 使用者指南中的安裝 AWS CLI 到您的主目錄。
-
已在裝置或 AWS CloudShell上安裝 kubectl
命令列工具。版本可與 相同,或最多可以比 更早或更晚的一個次要版本 Kubernetes 叢集的版本。例如,如果您的叢集版本為 1.30
,則可以搭配使用 kubectl
1.29
、1.30
或 1.31
版。若要安裝或升級 kubectl
,請參閱 設定 kubectl 和 eksctl。
-
包含叢集組態的現有 kubectl
config
檔案。若要建立 kubectl
config
檔案,請參閱連接 kubectl EKS 透過建立 kubeconfig file。
建立 EKS Pod Identity 關聯
- AWS Management Console
-
開啟位於 https://console.aws.amazon.com/eks/home#/clusters 的 Amazon EKS主控台。
-
在左側導覽窗格中,選取叢集 ,然後選取您要設定 EKS Pod Identity Agent 附加元件的叢集名稱。
-
選擇存取索引標籤。
-
在 Pod 身分識別關聯中,選擇建立。
-
針對IAM角色 ,選取具有您希望工作負載擁有之許可IAM的角色。
此清單僅包含具有下列信任政策的角色,允許 Pod Identity EKS 使用它們。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowEksAuthToAssumeRoleForPodIdentity",
"Effect": "Allow",
"Principal": {
"Service": "pods.eks.amazonaws.com"
},
"Action": [
"sts:AssumeRole",
"sts:TagSession"
]
}
]
}
-
對於 Kubernetes 命名空間 ,選取 Kubernetes 包含服務帳戶和工作負載的命名空間。或者,您可以使用名稱 (不存在於叢集中) 指定命名空間。
-
對於 Kubernetes 服務帳戶 ,選取 Kubernetes 要使用的服務帳戶。您的 清單 Kubernetes 工作負載必須指定此服務帳戶。或者,您可以使用名稱 (不存在於叢集中) 指定服務帳戶。
-
(選用) 對於標籤,請選擇新增標籤,以在鍵值對中新增中繼資料。這些標籤會套用至關聯,並可用於IAM政策。
您可以多次重複此步驟以新增多個標籤。
-
選擇 Create (建立)。
- AWS CLI
-
-
如果您想要將現有IAM政策與IAM角色建立關聯,請跳至下一個步驟。
建立IAM政策。您可以建立自己的政策,或複製已授予您所需的某些許可的 AWS 受管政策,並根據您的特定要求加以自訂。如需詳細資訊,請參閱 IAM 使用者指南 中的建立IAM政策。
-
建立包含您想要 之 AWS 服務 許可的檔案 Pods 以存取。如需所有 的所有動作清單 AWS 服務,請參閱服務授權參考 。
您可以執行以下命令來建立允許唯讀存取 Amazon S3 儲存貯體的範例政策檔案。您可以選擇性地將組態資訊或引導指令碼存放在此儲存貯體中,並將容器存放在 Pod 可以從儲存貯體讀取檔案,並將其載入您的應用程式。如果您要建立此範例政策,請將以下內容複製到您的裝置。Replace (取代) 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 服務帳戶。
-
如果您有現有的 Kubernetes 您要擔任IAM角色的服務帳戶,然後您可以略過此步驟。
建立 Kubernetes 服務帳戶。將以下內容複製到您的裝置。Replace (取代) my-service-account
使用您想要的名稱和 default
使用不同的命名空間。如果您變更 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
-
建立角色。my-role
將 取代為IAM角色的名稱,並將 my-role-description
取代為角色的描述。
aws iam create-role --role-name my-role
--assume-role-policy-document file://trust-relationship.json
--description "my-role-description
"
-
將IAM政策連接至您的角色。my-role
將 取代為您IAM角色的名稱,並將 my-policy
取代為您建立的現有政策的名稱。
aws iam attach-role-policy --role-name my-role
--policy-arn=arn:aws:iam::111122223333
:policy/my-policy
與服務帳戶IAM的角色不同,Pod Identity EKS 不會在服務帳戶上使用註釋。
-
執行下列命令以建立關聯。my-cluster
以叢集的名稱取代,取代 my-service-account
使用您想要的名稱和 default
使用不同的命名空間。
aws eks create-pod-identity-association --cluster-name my-cluster
--role-arn arn:aws:iam::111122223333
:role/my-role
--namespace default
--service-account my-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
}
}
您可以使用名稱 (不存在於叢集中) 指定命名空間和服務帳戶。您必須建立使用服務帳戶的命名空間、服務帳戶和工作負載,Pod Identity EKS 關聯才能運作。
>確認組態
確認角色和服務帳戶設定正確。
-
確認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)。Replace (取代) 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 v1
範例輸出如下。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-pod-secrets-bucket"
}
]
}
如果您在上一步建立了範例政策,則輸出結果相同。如果您建立了不同的政策,則 example
內容不同。
下一步驟
設定 pods 使用 AWS 服務帳戶存取 服務