協助改善此頁面
想要為此使用者指南做出貢獻嗎? 捲動至此頁面底部,然後選取 [編輯此頁面於] GitHub。您的貢獻將有助於使我們的用戶指南更適合所有人。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
指派IAM角色給Kubernetes服務帳戶
本主題說明如何將Kubernetes服務帳戶設定為擔任 AWS Identity and Access Management (IAM) 角色。接Pods著,任何設定為使用服務帳戶的使用者都可以存取 AWS 服務 該角色具有存取權限的任何項目。
必要條件
-
現有的叢集。如果您沒有,則可以按照其中一個 開始使用 Amazon EKS指南來建立。
-
叢集的現有 IAM OpenID Connect (OIDC) 提供者。若要了解是否已經擁有,或是了解如何建立,請參閱為您的叢集建立IAMOIDC提供者。
-
您裝置上安裝和設定的 AWS Command Line Interface (AWS CLI) 的版本
1.27.160
或更新版本、版本或更新版本或更新版本或更新版本 AWS CloudShell。2.12.3
若要檢查您目前的版本,請使用
。如aws --version | cut -d / -f2 | cut -d ' ' -f1
yum
、apt-get
或適用於 macOS 的 Homebrew 等套件管理工具通常比最新版本的 AWS CLI落後數個版本之多。若要安裝最新版本,請參閱《AWS Command Line Interface 使用者指南》中的安裝、更新和解除安裝 AWS CLI以及使用 aws configure 的快速組態。安裝在中的 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
檔案,請參閱透過建立kubeconfig檔案 Connect 線kubectl到EKS叢集。
指派IAM角色給Kubernetes服務帳戶
若要將IAM角色與Kubernetes服務帳戶建立關聯
-
如果您想要將現有IAM原則與您的IAM角色相關聯,請跳至下一個步驟。
建立IAM策略。您可以建立自己的政策,或複製已授予您所需的某些許可的 AWS 受管政策,並根據您的特定要求加以自訂。如需詳細資訊,請參閱《使用指南》中的IAM〈建立IAM策略〉。
-
根據您要讓 Pods 存取的 AWS 服務 ,建立內含相關許可的檔案。如需所有動作的清單 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服務帳戶建立關聯。您可以使用
eksctl
或 AWS CLI。 -
(選擇性) 設定服務帳戶的 AWS Security Token Service 端點。 AWS 建議使用區域 AWS STS 端點而非全域端點。這樣可以減少延遲、提供內建備援,並增加工作階段字符的有效性。
確認配置
確認角色和服務帳戶設定正確。
-
確認IAM角色的信任原則設定正確。
aws iam get-role --role-name
my-role
--query Role.AssumeRolePolicyDocument範例輸出如下。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::
111122223333
:oidc-provider/oidc.eks.region-code
.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE
" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.region-code
.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE
:sub": "system:serviceaccount:default:my-service-account
", "oidc.eks.region-code
.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE
:aud": "sts.amazonaws.com" } } } ] } -
確認您在上一步連接至角色的政策已連接至該角色。
aws iam list-attached-role-policies --role-name
my-role
--query AttachedPolicies[].PolicyArn --output text範例輸出如下。
arn:aws:iam::
111122223333
:policy/my-policy
-
設定變數以儲存您要使用之政策的 Amazon 資源名稱 (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 v
1
範例輸出如下。
{ "Version": "2012-10-17", "Statement": [
{ "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::my-pod-secrets-bucket" }
] }如果您在上一步建立了範例政策,則輸出結果相同。如果您建立了不同的策略,則
example
內容是不同的。 -
確認 Kubernetes 服務帳戶標註了角色。
kubectl describe serviceaccount
my-service-account
-ndefault
範例輸出如下。
Name:
my-service-account
Namespace:default
Annotations: eks.amazonaws.com/role-arn: arn:aws:iam::111122223333
:role/my-role
Image pull secrets: <none> Mountable secrets:my-service-account
-token-qqjfl
Tokens:my-service-account
-token-qqjfl
[...]