協助改善此頁面
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
若要提供此使用者指南,請選擇位於每個頁面右窗格中的在 GitHub 上編輯此頁面連結。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 ConfigMap 授予 IAM 使用者對 Kubernetes 的存取權
重要
aws-auth ConfigMap 已棄用。如需管理 Kubernetes APIs 存取的建議方法,請參閱 使用 EKS 存取項目授予 IAM 使用者對 Kubernetes 的存取權。
IAM AWS Authenticator for Kubernetes 在 Amazon aws-auth ConfigMap 獲得其組態資訊。如需所有 aws-auth ConfigMap 設定的詳細資訊,請參閱 GitHub 上的完整組態格式
將 IAM 主體新增至 Amazon EKS 叢集
當您建立 Amazon EKS 叢集時,會自動在 Amazon EKS 控制平面的叢集角色型存取控制 (RBAC) 組態中授予建立叢集的 IAM 主體system:masters許可。此主體不會出現在任何可見的組態中,因此請務必追蹤最初建立叢集的主體。若要授予其他 IAM 主體與叢集互動的能力,請在 Kubernetes aws-auth ConfigMap中編輯 ,並使用group您在 中指定的 clusterrolebinding名稱建立 Kubernetes rolebinding或 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-authConfigMap。只有節點執行個體角色有權存取叢集。
- 
            請確定您擁有現有的 Kubernetes roles和rolebindings或clusterrolebindings,clusterroles且您可以將 IAM 主體映射至其中。如需有關這些資源的詳細資訊,請參閱 Kubernetes 文件中的使用 RBAC 授權。 - 
                  檢視您現有的 Kubernetes roles或clusterroles。Roles的作用域為namespace,但clusterroles的作用域限定為叢集。kubectl get roles -Akubectl 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 -Akubectl 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-authConfigMap。您可以使用例如eksctl的工具來更新ConfigMap,或者您可以透過編輯來手動更新它。重要我們建議您使用 eksctl或其他工具來編輯ConfigMap。如需有關您可以使用之其他工具的資訊,請參閱《Amazon EKS 最佳實務指南》中的使用工具對 aws-authConfigMap 進行變更。格式錯誤的 aws-authConfigMap可能會導致您失去叢集存取權。- 
                  檢視使用 eksctl 編輯組態圖的步驟。 
- 
                  檢視手動編輯組態圖的步驟。 
 
- 
                  
使用 Eksctl 編輯 Configmap
- 
               您需要在裝置 0.212.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-rolemy-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-namearn: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-roleIAM 角色,映射至 Kubernetes 群組,可以檢視所有叢集的所有 Kubernetes 資源。如需my-console-viewer-roleIAM 角色所需的 IAM 和 Kubernetes 群組許可的清單,請參閱 所需的許可。
- 
                     將 adminIAM 使用者從預設 AWS 帳戶映射至system:mastersKubernetes 群組,以及將my-user使用者從映射至可檢視特定命名空間 Kubernetes 資源之 Kubernetes 群組的不同 AWS 帳戶映射的mapUsers區段。如需my-userIAM 使用者所需的 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-authConfigMap 套用至您的叢集
      在建立受管節點群組或以 eksctl 建立節點群組時,便會自動建立並套用 aws-auth ConfigMap 至您的叢集。最初建立的目的是要允許將節點加入您的叢集,但您也可以使用此 ConfigMap 來新增角色型存取控制 (RBAC) 以存取 IAM 主體。如果您已啟動自我管理節點,且尚未aws-authConfigMap將 套用至叢集,您可以使用下列程序執行此操作。
- 
            檢查您是否已套用 aws-authConfigMap。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-rolemy-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 提示。