選取您的 Cookie 偏好設定

我們使用提供自身網站和服務所需的基本 Cookie 和類似工具。我們使用效能 Cookie 收集匿名統計資料,以便了解客戶如何使用我們的網站並進行改進。基本 Cookie 無法停用,但可以按一下「自訂」或「拒絕」以拒絕效能 Cookie。

如果您同意,AWS 與經核准的第三方也會使用 Cookie 提供實用的網站功能、記住您的偏好設定,並顯示相關內容,包括相關廣告。若要接受或拒絕所有非必要 Cookie,請按一下「接受」或「拒絕」。若要進行更詳細的選擇,請按一下「自訂」。

使用 ConfigMap 授予 IAM 使用者對 Kubernetes 的存取權

焦點模式
使用 ConfigMap 授予 IAM 使用者對 Kubernetes 的存取權 - Amazon EKS

協助改善此頁面

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

若要提供此使用者指南,請選擇位於每個頁面右窗格的 GitHub 上的編輯此頁面連結。

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

協助改善此頁面

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

若要提供此使用者指南,請選擇位於每個頁面右窗格的 GitHub 上的編輯此頁面連結。

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

重要

aws-auth ConfigMap 已棄用。如需管理 Kubernetes APIs 存取的建議方法,請參閱 授予 IAM 使用者使用 EKS 存取項目存取 Kubernetes

IAM AWS Authenticator for Kubernetes 會在 Amazon EKS 控制平面上執行,以使用 IAM 主體存取您的叢集。驗證器會從 aws-auth ConfigMap 獲得其組態資訊。如需所有 aws-auth ConfigMap 設定的詳細資訊,請參閱 GitHub 上的完整組態格式

將 IAM 主體新增至 Amazon EKS 叢集

當您建立 Amazon EKS 叢集時,會自動授予建立叢集的 IAM 主體在 Amazon EKS 控制平面中叢集的角色型存取控制 (RBAC) 組態中的system:masters許可。此主體不會出現在任何可見的組態中,因此請務必追蹤最初建立叢集的主體。若要授予其他 IAM 主體與叢集互動的能力,請在 Kubernetes aws-auth ConfigMap中編輯 ,並使用group您在 中指定的 clusterrolebinding名稱建立 Kubernetes rolebindingaws-auth ConfigMap

注意

如需 Kubernetes 角色型存取控制 (RBAC) 組態的詳細資訊,請參閱 Kubernetes 文件中的使用 RBAC 授權

  1. 判斷 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。只有節點執行個體角色有權存取叢集。

  2. 請確定您擁有現有的 Kubernetes rolesrolebindingsclusterrolebindingsclusterroles並且可以將 IAM 主體映射到這些主體。如需有關這些資源的詳細資訊,請參閱 Kubernetes 文件中的使用 RBAC 授權

    1. 檢視您現有的 Kubernetes rolesclusterrolesRoles 的作用域為 namespace,但 clusterroles 的作用域限定為叢集。

      kubectl get roles -A
      kubectl get clusterroles
    2. 檢視先前輸出中傳回的任何 roleclusterrole 的詳細資訊,並確認其具有您希望 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
    3. 檢視您現有的 Kubernetes rolebindingsclusterrolebindingsRolebindings 的作用域為 namespace,但 clusterrolebindings 的作用域限定為叢集。

      kubectl get rolebindings -A
      kubectl get clusterrolebindings
    4. 檢視任何 rolebindingclusterrolebinding 的詳細資訊,並確認其具有上一步中列為 roleRefroleclusterrole,以及為 subjects 列出的群組名稱。

      role-binding-name 取代為上一個命令的輸出中傳回的 rolebinding 名稱。將 kube-system 取代為 rolebindingnamespace

      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
  3. 編輯 aws-auth ConfigMap。您可以使用例如 eksctl 的工具來更新 ConfigMap,或者您可以透過編輯來手動更新它。

    重要

    我們建議您使用 eksctl 或其他工具來編輯 ConfigMap。如需有關您可以使用的其他工具的資訊,請參閱《Amazon EKS 最佳實務指南》中的使用工具來變更 aws-authConfigMap。格式錯誤的 aws-auth ConfigMap可能會導致您失去叢集存取權。

使用 Eksctl 編輯 Configmap

  1. 您需要在裝置0.205.0或 AWS CloudShell 上安裝版本 或更新版本的eksctl命令列工具。如需有關安裝或更新 eksctl 的指示,請參閱 eksctl 文件中的安裝一節。

  2. 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
  3. 為角色新增映射項目。將 my-group 取代為您的角色名稱。將 eks-console-dashboard-full-access-group 取代為 Kubernetes RoleBindingClusterRoleBinding 物件中指定的群組名稱。使用您的帳戶 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
  4. 為使用者新增映射項目。IAM 最佳實務建議您將許可授予角色而非使用者。將 my-user 取代為您的使用者名稱。將 eks-console-dashboard-restricted-access-group 取代為 Kubernetes RoleBindingClusterRoleBinding 物件中指定的群組名稱。使用您的帳戶 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
  5. 再次檢視 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

  1. 開啟 ConfigMap 進行編輯。

    kubectl edit -n kube-system configmap/aws-auth
    注意

    如果您收到錯誤,指出 " Error from server (NotFound): configmaps "aws-auth" not found ",請使用將 aws-auth ConfigMap 套用至叢集中的程序,以套用庫存 ConfigMap

  2. 將您的 IAM 主體新增至 ConfigMap。IAM 群組不是 IAM 主體,因此無法新增至 ConfigMap

    • 新增 IAM 角色 (例如:為聯合身分使用者):在 data 下位於 ConfigMap 中的 mapRoles 區段新增角色詳細資訊。若此區段在檔案不存在,則將其新增。每個項目支援以下參數:

      • rolearn:要新增的 IAM 角色之 ARN。此值不能包含路徑。例如,您無法指定 ARN,例如 arn:aws: iam::111122223333:role/my-team/developers/role-name 。ARN 需要改為 arn:aws: iam::111122223333:role/role-name

      • username:Kubernetes 內映射至 IAM 角色的使用者名稱。

      • 群組:要將角色映射到的 Kubernetes 群組的群組或清單。群組可以是預設群組,也可以是 clusterrolebindingrolebinding 中指定的群組。如需詳細資訊,請參閱 Kubernetes 文件中的預設角色和角色繫結

    • 若要新增 IAM 使用者:IAM 最佳實務建議您將許可授予角色而非使用者。將使用者詳細資訊新增至 ConfigMapmapUsers 區段 (在 data 下方)。若此區段在檔案不存在,則將其新增。每個項目支援以下參數:

      • userarn:要新增之 IAM 使用者的 ARN。

      • username:Kubernetes 內應設至 IAM 使用者的使用者名稱。

      • 群組:要將使用者映射到的 Kubernetes 群組的群組或清單。群組可以是預設群組,也可以是 clusterrolebindingrolebinding 中指定的群組。如需詳細資訊,請參閱 Kubernetes 文件中的預設角色和角色繫結

  3. 例如,下列的 YAML 區塊包含:

    • mapRoles 區段,將 IAM 節點執行個體映射至 Kubernetes 群組,讓節點可以將自己註冊到叢集,以及 my-console-viewer-role IAM 角色,映射至 Kubernetes 群組,可以檢視所有叢集的所有 Kubernetes 資源。如需 my-console-viewer-role IAM 角色所需的 IAM 和 Kubernetes 群組許可的清單,請參閱 所需的許可

    • admin IAM 使用者從預設 AWS 帳戶映射至 system:masters Kubernetes 群組,以及將my-user使用者從映射至可檢視特定命名空間 Kubernetes 資源之 Kubernetes 群組的不同 AWS 帳戶映射的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
  4. 儲存檔案並結束您的文字編輯器。

aws-authConfigMap 套用至您的叢集

在建立受管節點群組或以 eksctl 建立節點群組時,便會自動建立並套用 aws-auth ConfigMap 至您的叢集。最初建立的目的是要允許將節點加入您的叢集,但您也可以使用此 ConfigMap 來新增角色型存取控制 (RBAC) 以存取 IAM 主體。如果您已啟動自我管理節點,且尚未aws-authConfigMap將 套用至您的叢集,您可以使用下列程序執行此操作。

  1. 檢查您是否已套用 aws-auth ConfigMap

    kubectl describe configmap -n kube-system aws-auth

    如果您收到錯誤,指出 " Error from server (NotFound): configmaps "aws-auth" not found ",則繼續執行下列步驟以套用股票 ConfigMap

  2. 下載、編輯和套用 AWS 驗證器組態映射。

    1. 下載組態對應。

      curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/aws-auth-cm.yaml
    2. 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

    3. 套用組態。此命令可能需要幾分鐘的時間來完成。

      kubectl apply -f aws-auth-cm.yaml
      注意

      如果您收到任何授權或資源類型錯誤,請參閱故障診斷主題中的未經授權或存取遭拒 (kubectl)

  3. 查看節點的狀態,並等待他們到達 Ready 狀態。

    kubectl get nodes --watch

    輸入 Ctrl+C 傳回 Shell 提示。

隱私權網站條款Cookie 偏好設定
© 2025, Amazon Web Services, Inc.或其附屬公司。保留所有權利。