協助改善此頁面
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
想要為此使用者指南做出貢獻? 選擇 GitHub 上的編輯此頁面連結,該連結位於每個頁面的右窗格中。您的貢獻將幫助我們的使用者指南更適合每個人。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Kubernetes 使用 授予IAM使用者對 的存取權 ConfigMap
重要
aws-auth ConfigMap
已棄用。如需管理 Kubernetes APIs存取的建議方法,請參閱 使用 EKS 存取項目授予IAM使用者對 Kubernetes的存取權。
IAM AWS Authenticator for Kubernetes 會在 Amazon EKS 控制平面上執行aws-auth
ConfigMap
獲得其組態資訊。如需所有 aws-auth
ConfigMap
設定的詳細資訊,請參閱 GitHub 上的完整組態格式
將 IAM 主體新增至 Amazon EKS 叢集
當您建立 Amazon EKS 叢集時,會自動授予建立叢集的 IAM 主體在 Amazon EKS 控制平面中叢集角色型存取控制 (RBAC) 組態的system:masters
許可。此主體不會出現在任何可見的組態中,因此請務必追蹤最初建立叢集的主體。若要授予其他 IAM 主體與您的叢集互動的能力,請在 aws-auth ConfigMap
內編輯 clusterrolebinding
,Kubernetes並使用group
您在 中指定的 名稱建立 Kubernetesrolebinding
或 aws-auth ConfigMap
。
注意
如需有關 Kubernetes 角色型存取控制 (RBAC) 組態的詳細資訊,請參閱 Kubernetes 文件中的使用 RBAC 授權
-
判斷
kubectl
正使用哪些憑證來存取叢集。您可以在電腦上透過一下命令查看kubectl
正在使用的憑證。如果您不使用預設路徑,請將~/.kube/config
取代為kubeconfig
檔案的路徑。cat ~/.kube/config
範例輸出如下。
[...] contexts: - context: cluster: my-cluster.region-code.eksctl.io user: admin@my-cluster.region-code.eksctl.io name: admin@my-cluster.region-code.eksctl.io current-context: admin@my-cluster.region-code.eksctl.io [...]
在上一個範例輸出中,名為
admin
之使用者的登入資料會設定為名為my-cluster
的叢集。若該叢集是由這名使用者建立,則其已擁有您叢集的存取權。如果不是建立叢集的使用者,則需要完成其餘步驟,才能為其他 IAM 主體啟用叢集存取。IAM 最佳實務建議您將許可授予角色而非使用者。您可以使用以下命令查看目前哪些其他主體可以存取您的叢集:kubectl describe -n kube-system configmap/aws-auth
範例輸出如下。
Name: aws-auth Namespace: kube-system Labels: <none> Annotations: <none> Data ==== mapRoles: ---- - groups: - system:bootstrappers - system:nodes rolearn: arn:aws: iam::111122223333:role/my-node-role username: system:node:{{EC2PrivateDNSName}} BinaryData ==== Events: <none>
上一個範例是預設的
aws-auth
ConfigMap
。只有節點執行個體角色有權存取叢集。 -
請確定您現有的 Kubernetes
roles
和rolebindings
或clusterroles
和clusterrolebindings
(您可以將 IAM 主體映射至此)。如需有關這些資源的詳細資訊,請參閱 Kubernetes 文件中的使用 RBAC 授權。 -
檢視您現有的 Kubernetes
roles
或clusterroles
。Roles
的作用域為namespace
,但clusterroles
的作用域限定為叢集。kubectl get roles -A
kubectl get clusterroles
-
檢視先前輸出中傳回的任何
role
或clusterrole
的詳細資訊,並確認其具有您希望 IAM 主體在叢集中擁有的許可 (rules
)。將
role-name
取代為上一個命令的輸出中傳回的role
名稱。將kube-system
取代為role
的命名空間。kubectl describe role role-name -n kube-system
將
cluster-role-name
取代為上一個命令的輸出中傳回的clusterrole
名稱。kubectl describe clusterrole cluster-role-name
-
檢視您現有的 Kubernetes
rolebindings
或clusterrolebindings
。Rolebindings
的作用域為namespace
,但clusterrolebindings
的作用域限定為叢集。kubectl get rolebindings -A
kubectl get clusterrolebindings
-
檢視任何
rolebinding
或clusterrolebinding
的詳細資訊,並確認其具有上一步中列為roleRef
的role
或clusterrole
,以及為subjects
列出的群組名稱。將
role-binding-name
取代為上一個命令的輸出中傳回的rolebinding
名稱。將kube-system
取代為rolebinding
的namespace
。kubectl describe rolebinding role-binding-name -n kube-system
範例輸出如下。
apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: eks-console-dashboard-restricted-access-role-binding namespace: default subjects: - kind: Group name: eks-console-dashboard-restricted-access-group apiGroup: rbac.authorization.k8s.io roleRef: kind: Role name: eks-console-dashboard-restricted-access-role apiGroup: rbac.authorization.k8s.io
將
cluster-role-binding-name
取代為上一個命令的輸出中傳回的clusterrolebinding
名稱。kubectl describe clusterrolebinding cluster-role-binding-name
範例輸出如下。
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: eks-console-dashboard-full-access-binding subjects: - kind: Group name: eks-console-dashboard-full-access-group apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: eks-console-dashboard-full-access-clusterrole apiGroup: rbac.authorization.k8s.io
-
-
編輯
aws-auth
ConfigMap
。您可以使用例如eksctl
的工具來更新ConfigMap
,或者您可以透過編輯來手動更新它。重要
我們建議您使用
eksctl
或其他工具來編輯ConfigMap
。如需有關您可以使用之其他工具的資訊,請參閱《Amazon EKS 最佳實務指南》中的使用工具對 aws-authConfigMap 進行變更。格式錯誤的 aws-auth
ConfigMap
可能會導致您失去叢集存取權。-
檢視使用 eksctl 編輯組態圖的步驟。
-
檢視手動編輯組態圖的步驟。
-
使用 Eksctl 編輯 Configmap
-
您需要在裝置
0.199.0
或 AWS CloudShell 上安裝版本 或更新版本的eksctl
命令列工具。如需有關安裝或更新eksctl
的指示,請參閱eksctl
文件中的安裝一節。 -
在
ConfigMap
檢視目前的映射項目。使用您叢集的名稱取代my-cluster
。將region-code
取代為您的叢集所在的 AWS 區域。eksctl get iamidentitymapping --cluster my-cluster --region=region-code
範例輸出如下。
ARN USERNAME GROUPS ACCOUNT arn:aws: iam::111122223333:role/eksctl-my-cluster-my-nodegroup-NodeInstanceRole-1XLS7754U3ZPA system:node:{{EC2PrivateDNSName}} system:bootstrappers,system:nodes
-
為角色新增映射項目。將
my-group
取代為您的角色名稱。將eks-console-dashboard-full-access-group
取代為 KubernetesRoleBinding
或ClusterRoleBinding
物件中指定的群組名稱。使用您的帳戶 ID 取代111122223333
。您可以將admin
取代為您選擇的任何名稱。eksctl create iamidentitymapping --cluster my-cluster --region=region-code \ --arn arn:aws: iam::111122223333:role/my-role --username admin --group eks-console-dashboard-full-access-group \ --no-duplicate-arns
重要
角色 ARN 不能包含路徑,例如
role/my-team/developers/my-role
。ARN 的格式必須是arn:aws: iam::
。在此範例中,需移除111122223333
:role/my-role
my-team/developers/
。範例輸出如下。
[...] 2022-05-09 14:51:20 [ℹ] adding identity "{arn-aws}iam::111122223333:role/my-role" to auth ConfigMap
-
為使用者新增映射項目。IAM 最佳實務建議您將許可授予角色而非使用者。將
my-user
取代為您的使用者名稱。將eks-console-dashboard-restricted-access-group
取代為 KubernetesRoleBinding
或ClusterRoleBinding
物件中指定的群組名稱。使用您的帳戶 ID 取代111122223333
。您可以將my-user
取代為您選擇的任何名稱。eksctl create iamidentitymapping --cluster my-cluster --region=region-code \ --arn arn:aws: iam::111122223333:user/my-user --username my-user --group eks-console-dashboard-restricted-access-group \ --no-duplicate-arns
範例輸出如下。
[...] 2022-05-09 14:53:48 [ℹ] adding identity "arn:aws: iam::111122223333:user/my-user" to auth ConfigMap
-
再次檢視
ConfigMap
中的映射項目。eksctl get iamidentitymapping --cluster my-cluster --region=region-code
範例輸出如下。
ARN USERNAME GROUPS ACCOUNT arn:aws: iam::111122223333:role/eksctl-my-cluster-my-nodegroup-NodeInstanceRole-1XLS7754U3ZPA system:node:{{EC2PrivateDNSName}} system:bootstrappers,system:nodes arn:aws: iam::111122223333:role/admin my-role eks-console-dashboard-full-access-group arn:aws: iam::111122223333:user/my-user my-user eks-console-dashboard-restricted-access-group
手動編輯 Configmap
-
開啟
ConfigMap
進行編輯。kubectl edit -n kube-system configmap/aws-auth
注意
如果您收到錯誤,指出 "
Error from server (NotFound): configmaps "aws-auth" not found
",請使用 中的程序將 aws-auth ConfigMap 套用至您的叢集,以套用庫存ConfigMap
。 -
將您的 IAM 主體新增至
ConfigMap
。IAM 群組不是 IAM 主體,因此無法新增至ConfigMap
。-
新增 IAM 角色 (例如:為聯合身分使用者):在
data
下位於ConfigMap
中的mapRoles
區段新增角色詳細資訊。若此區段在檔案不存在,則將其新增。每個項目支援以下參數:-
rolearn:要新增的 IAM 角色之 ARN。此值不能包含路徑。例如,您無法指定 ARN,例如
arn:aws: iam::
。ARN 需要改為111122223333
:role/my-team/developers/role-name
arn:aws: iam::
。111122223333
:role/role-name
-
username:Kubernetes 內映射至 IAM 角色的使用者名稱。
-
群組:要將角色映射到的 Kubernetes 群組的群組或清單。群組可以是預設群組,也可以是
clusterrolebinding
或rolebinding
中指定的群組。如需詳細資訊,請參閱 Kubernetes 文件中的預設角色和角色連結。
-
-
若要新增 IAM 使用者:IAM 最佳實務建議您將許可授予角色而非使用者。將使用者詳細資訊新增至
ConfigMap
的mapUsers
區段 (在data
下方)。若此區段在檔案不存在,則將其新增。每個項目支援以下參數:-
userarn:要新增之 IAM 使用者的 ARN。
-
username:Kubernetes 內映射至 IAM 使用者的使用者名稱。
-
群組:要將使用者映射到的 Kubernetes 群組的群組或清單。群組可以是預設群組,也可以是
clusterrolebinding
或rolebinding
中指定的群組。如需詳細資訊,請參閱 Kubernetes 文件中的預設角色和角色連結。
-
-
-
例如,下列的 YAML 區塊包含:
-
mapRoles
區段,將 IAM 節點執行個體映射至 Kubernetes 群組,讓節點可以將自己註冊到叢集,以及my-console-viewer-role
IAM 角色,映射至 Kubernetes 群組,可以檢視所有叢集的所有 Kubernetes 資源。如需my-console-viewer-role
IAM 角色所需的 IAM 和 Kubernetes 群組許可的清單,請參閱 所需的許可。 -
將 IAM
admin
使用者從預設 AWS 帳戶映射到system:masters
Kubernetes群組,以及將my-user
使用者從映射到可檢視特定命名空間Kubernetes資源之群組的不同 AWS 帳戶映射到 Kubernetes群組的mapUsers
區段。如需my-user
IAM 使用者所需的 IAM 和 Kubernetes 群組許可的清單,請參閱 所需的許可。視需要新增或移除行,並將所有
範例值
取代為您自己的值。# Please edit the object below. Lines beginning with a '#' will be ignored, # and an empty file will abort the edit. If an error occurs while saving this file will be # reopened with the relevant failures. # apiVersion: v1 data: mapRoles: | - groups: - system:bootstrappers - system:nodes rolearn: arn:aws: iam::111122223333:role/my-role username: system:node:{{EC2PrivateDNSName}} - groups: - eks-console-dashboard-full-access-group rolearn: arn:aws: iam::111122223333:role/my-console-viewer-role username: my-console-viewer-role mapUsers: | - groups: - system:masters userarn: arn:aws: iam::111122223333:user/admin username: admin - groups: - eks-console-dashboard-restricted-access-group userarn: arn:aws: iam::444455556666:user/my-user username: my-user
-
-
儲存檔案並結束您的文字編輯器。
將 aws-auth
ConfigMap
套用至您的叢集
在建立受管節點群組或以 eksctl
建立節點群組時,便會自動建立並套用 aws-auth
ConfigMap
至您的叢集。最初建立的目的是要允許將節點加入您的叢集,但您也可以使用此 ConfigMap
來新增角色型存取控制 (RBAC) 以存取 IAM 主體。如果您已啟動自我管理節點,且尚未將 aws-auth
ConfigMap
套用至叢集,您可以使用下列程序執行此操作。
-
檢查 是否已套用
aws-auth
ConfigMap
。kubectl describe configmap -n kube-system aws-auth
如果您收到錯誤,指出 "
Error from server (NotFound): configmaps "aws-auth" not found
",請繼續執行下列步驟以套用庫存ConfigMap
。 -
下載、編輯和套用 AWS 驗證器組態映射。
-
下載組態對應。
curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/aws-auth-cm.yaml
-
在
aws-auth-cm.yaml
檔案中,將rolearn
設定至與您節點關聯的 IAM 角色之 Amazon Resource Name (ARN)。您可以使用文字編輯器執行此操作,或取代my-node-instance-role
並執行下列命令:sed -i.bak -e 's|<ARN of instance role (not instance profile)>|my-node-instance-role|' aws-auth-cm.yaml
請勿修改此檔案中的任何其他行。
重要
角色 ARN 不能包含路徑,例如
role/my-team/developers/my-role
。ARN 的格式必須是arn:aws: iam::
。在此範例中,需移除111122223333
:role/my-role
my-team/developers/
。您可以檢查節點群組的 AWS CloudFormation 堆疊輸出,並尋找下列值:
-
InstanceRoleARN:適用於以
eksctl
建立的節點群組 -
NodeInstanceRole – 適用於使用 中的 Amazon EKS vended AWS CloudFormation 範本建立的節點群組 AWS Management Console
-
-
套用組態。此命令可能需要幾分鐘的時間來完成。
kubectl apply -f aws-auth-cm.yaml
注意
如果您收到任何授權或資源類型錯誤,請參閱故障診斷主題中的未經授權或存取遭拒 (kubectl)。
-
-
查看節點的狀態,並等待他們到達
Ready
狀態。kubectl get nodes --watch
輸入
Ctrl
+C
傳回 Shell 提示。