協助改善此頁面
想要為此使用者指南做出貢獻? 捲動至此頁面底部,然後在 上選取編輯此頁面 GitHub。您的貢獻將幫助我們的使用者指南更適合所有人。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
授權 IAM 使用者對 的存取 Kubernetes 使用 ConfigMap
重要
aws-auth
ConfigMap 已棄用。管理 存取的建議方法 Kubernetes APIs 是存取項目 。
使用 IAM 主體存取叢集是由 AWS IAM 驗證器針對 啟用 Kubernetesaws-auth
ConfigMap
獲得其組態資訊。如需所有aws-auth
ConfigMap
設定,請參閱 上的完整組態格式
將IAM主體新增至您的 Amazon EKS叢集
當您建立 Amazon EKS叢集時,在 Amazon 控制平面中,建立叢集的IAM主體會在叢集的角色型存取控制 EKS (RBAC) 組態中自動授予system:masters
許可。此主體不會出現在任何可見的組態中,因此請務必記下最初建立叢集的主體。若要授予其他IAM主體與您的叢集互動的能力,請在 aws-auth ConfigMap
內編輯 。Kubernetes 並建立 Kubernetes rolebinding
clusterrolebinding
或使用group
您在 中指定的 名稱aws-auth ConfigMap
。
注意
如需關於 Kubernetes 角色型存取控制 (RBAC) 組態,請參閱 中的使用RBAC授權
將IAM主體新增至 Amazon EKS叢集
-
判斷
kubectl
正使用哪些憑證來存取叢集。您可以在電腦上透過一下命令查看kubectl
正在使用的憑證。如果不使用預設路徑,則使用kubeconfig
檔案的路徑取代
。~/.kube/config
cat
~/.kube/config
範例輸出如下。
[...] contexts: - context: cluster:
my-cluster.
user:region-code
.eksctl.ioadmin@my-cluster.
name:region-code
.eksctl.ioadmin@my-cluster.
current-context:region-code
.eksctl.ioadmin@my-cluster.
[...]region-code
.eksctl.io在前述範例輸出中,已針對名為
的叢集設定名為my-cluster
的使用者的憑證。若該叢集是由這名使用者建立,則其已擁有您叢集的存取權。如果不是建立叢集的使用者,則需要完成其餘步驟,才能為其他IAM主體啟用叢集存取。IAM 最佳實務建議您將許可授予角色,而不是使用者。您可以使用以下命令查看目前哪些其他主體可以存取您的叢集:admin
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
或clusterrolebindings
clusterroles
以及您可以映射IAM主體的 。如需這些資源的詳細資訊,請參閱 中的使用RBAC授權Kubernetes 文件中)。 -
檢視您現有的 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
-nkube-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
-nkube-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-auth
ConfigMap
。格式錯誤的 aws-auth
ConfigMap
可能會導致您失去叢集存取權。
將 aws-auth
ConfigMap
套用至您的叢集
在建立受管節點群組或以 eksctl
建立節點群組時,便會自動建立並套用 aws-auth
ConfigMap
至您的叢集。它最初是為了允許節點加入叢集而建立,但您也可以使用它ConfigMap
來新增IAM主體的角色型存取控制 (RBAC) 存取權。若尚未啟動自我管理節點且尚未套用 aws-auth
ConfigMap
至叢集,則您可以使用以下程序來完成此操作。
將 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 提示。