Aktivieren des IAM-Benutzer- und Rollenzugriffs auf Ihren Cluster
Zugriff auf Ihren Cluster mit AWS Identity and Access Management (IAM)-Entitäten wird durch AWSIAM-Authenticator für Kubernetesaws-auth
ConfigMap
. Alle aws-auth
ConfigMap
-Einstellungen finden Sie unter Vollständiges Konfigurationsformat
Hinzufügen von IAM-Benutzern oder -Rollen zu Ihrem Amazon-EKS-Cluster
Wenn Sie einen Amazon-EKS-Cluster erstellen, werden dem Benutzer oder der Rolle der AWS Identity and Access Management(IAM)-Entität, z. B. einem Verbundbenutzer, der den Cluster erstellt, automatisch system:masters
-Berechtigungen in der rollenbasierten Zugriffssteuerungs(RBAC)-Konfiguration des Clusters in der Amazon-EKS-Steuerebene erteilt. Diese IAM-Entität wird in keiner sichtbaren Konfiguration angezeigt. Achten Sie daher darauf, welche IAM-Entität den Cluster ursprünglich erstellt hat. Um zusätzlichen AWS-Benutzern oder Rollen die Möglichkeit zu geben, mit Ihrem Cluster zu interagieren, müssen Sie die aws-auth
ConfigMap
innerhalb von Kubernetes bearbeiten und ein Kubernetes rolebinding
oder clusterrolebinding
mit dem Namen einer group
erstellen, den Sie in der aws-auth
ConfigMap
angeben.
Weitere Informationen zu unterschiedlichen IAM-Identitäten finden Sie unter Identitäten (Benutzer, Gruppen und Rollen) im IAM-Benutzerhandbuch. Weitere Informationen zur Kubernetes rollenbasierten Zugriffssteuerungs (RBAC)-Konfiguration von Kubernetes finden Sie unter Verwenden der RBAC-Autorisierung
So fügen Sie einem Amazon-EKS-Cluster einen IAM-Benutzer oder eine IAM-Rolle hinzu
-
Bestimmen Sie, welche Anmeldeinformationen
kubectl
für den Zugriff auf Ihren Cluster verwendet. Auf Ihrem Computer können Sie mit dem folgenden Befehl sehen, welche Anmeldeinformationenkubectl
verwendet. Ersetzen Sie
durch den Pfad zu Ihrer~/.kube/config
kubeconfig
-Datei, wenn Sie nicht den Standardpfad verwenden.cat
~/.kube/config
Die Beispielausgabe lautet wie folgt.
... 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
...In der vorherigen Beispielausgabe werden die Anmeldeinformationen für einen Benutzer mit dem Namen
für einen Cluster mit dem Namenadmin
konfiguriert. Wenn dies der Benutzer ist, der den Cluster erstellt hat, hat er bereits Zugriff auf Ihren Cluster. Wenn es nicht der Benutzer ist, der den Cluster erstellt hat, müssen Sie die verbleibenden Schritte ausführen, um den Clusterzugriff für andere Benutzer zu aktivieren. Mit dem folgenden Befehl können Sie sehen, welche anderen Rollen oder Benutzer derzeit Zugriff auf Ihren Cluster haben:my-cluster
kubectl describe -n kube-system configmap/aws-auth
Die Beispielausgabe lautet wie folgt.
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>Das vorherige Beispiel ist ein standardmäßiger
aws-auth
ConfigMap
. Nur die Knoten-Instance-Rolle hat Zugriff auf den Cluster. -
Stellen Sie sicher, dass Kubernetes-
roles
undrolebindings
oderclusterroles
undclusterrolebindings
vorhanden sind, denen Sie IAM-Benutzer oder -Rollen zuordnen können. Weitere Informationen über diese Ressourcen finden Sie unter Using RBAC Authorization(RBAC-Autorisierung verwenden) in der Kubernetes-Dokumentation. -
Zeigen Sie Ihre vorhandenen Kubernetes
roles
oderclusterroles
an.Roles
sind auf einennamespace
ausgelegt, aberclusterroles
sind auf den Cluster ausgelegt.kubectl get roles -A
kubectl get clusterroles
-
Zeigen Sie die Details einer beliebigen
role
oderclusterrole
an, die in der vorherigen Ausgabe zurückgegeben wurden, und bestätigen Sie, dass Sie die Berechtigungen (rules
) hat, die Ihre IAM-Benutzer in Ihrem Cluster haben sollen.Ersetzen Sie
durch einenrole-name
role
-Namen, den der vorherige Befehl zurückgegeben hat. Ersetzen Sie
durch den Namespace derkube-system
role
.kubectl describe role
role-name
-nkube-system
Ersetzen Sie
durch einencluster-role-name
clusterrole
-Namen, den der vorherige Befehl zurückgegeben hat.kubectl describe clusterrole
cluster-role-name
-
Zeigen Sie Ihre vorhandenen Kubernetes
rolebindings
oderclusterrolebindings
an.Rolebindings
sind auf einennamespace
ausgelegt, aberclusterrolebindings
sind auf den Cluster ausgelegt.kubectl get rolebindings -A
kubectl get clusterrolebindings
-
Zeigen Sie die Details einer beliebigen
rolebinding
oderclusterrolebinding
an und bestätigen Sie, dass sie einerole
oderclusterrole
aus dem vorherigen Schritt hat, die alsroleRef
aufgeführt wird, und einen Gruppennamen, der fürsubjects
aufgeführt wird.Ersetzen Sie
durch einenrole-binding-name
rolebinding
-Namen, den der vorherige Befehl zurückgegeben hat. Ersetzen SIe
mit demkube-system
namespace
derrolebinding
.kubectl describe rolebinding
role-binding-name
-nkube-system
Die Beispielausgabe lautet wie folgt.
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.ioErsetzen Sie
durch einencluster-role-binding-name
clusterrolebinding
-Namen, den der vorherige Befehl zurückgegeben hat.kubectl describe clusterrolebinding
cluster-role-binding-name
Die Beispielausgabe lautet wie folgt.
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
-
-
Bearbeiten Sie
aws-auth
ConfigMap
. Sie können ein Tool wieeksctl
verwenden, um dieConfigMap
zu aktualisieren, oder Sie können sie durch manuelle Bearbeitung aktualisieren.Wichtig Wir empfehlen die Verwendung von
eksctl
oder einem anderen Tool, um dieConfigMap
zu bearbeiten. Weitere Informationen zu anderen Tools, die Sie verwenden können, finden Sie unter Verwenden von Tools zur Änderung vonaws-auth
ConfigMap
in den Best-Practice-Leitfäden zu Amazon EKS. Ist aws-auth
ConfigMap
falsch formatiert, können Sie den Zugriff auf Ihren Cluster verlieren.
Anwendung der aws-auth
ConfigMap
auf Ihren Cluster
aws-auth
ConfigMap
wird automatisch erstellt und auf Ihren Cluster angewendet, wenn Sie eine verwaltete Knotengruppe erstellen oder wenn Sie eine Knotengruppe mit eksctl
erstellen. Sie wird anfänglich erstellt, um Knoten zu erlauben, Ihrem Cluster beizutreten, aber Sie verwenden diese ConfigMap
auch, um rollenbasierten Zugriffssteuerungs(RBAC)-Zugriff auf IAM-Benutzer und -Rollen hinzuzufügen. Wenn Sie keine selbstverwalteten Knoten gestartet und die aws-auth
ConfigMap
nicht auf Ihr Cluster angewendet haben, können Sie das folgende Verfahren dafür verwenden.
Anwendung der aws-auth
ConfigMap
auf Ihren Cluster
-
Überprüfen Sie, ob Sie die
aws-auth
ConfigMap
bereits angewendet haben.kubectl describe configmap -n kube-system aws-auth
Wenn die Fehlermeldung „
Error from server (NotFound): configmaps "aws-auth" not found
“ angezeigt wird, fahren Sie mit den folgenden Schritten fort, um die lokal gespeicherteConfigMap
anzuwenden. -
Laden Sie die AWS-Authentifizierungs-Konfigurationszuordnung herunter, bearbeiten Sie sie und wenden Sie sie an.
-
Laden Sie die Konfigurationszuordnung herunter.
curl -o aws-auth-cm.yaml https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/aws-auth-cm.yaml
-
Öffnen Sie die Datei mit einem Text-Editor. Ersetzen Sie
durch den Amazon-Ressourcennamen (ARN) der IAM-Rolle, die Ihren Knoten zugeordnet ist, und speichern Sie die Datei. Ändern Sie keine weiteren Zeilen in dieser Datei.<ARN of instance role (not instance profile)>
Wichtig Der Rollen-ARN darf keinen Pfad wie
role/my-team/developers/my-role
enthalten. Das Format des ARN mussarn:aws:iam::
sein. In diesem Beispiel muss111122223333
:role/my-role
my-team/developers/
entfernt werden.apiVersion: v1 kind: ConfigMap metadata: name: aws-auth namespace: kube-system data: mapRoles: | - rolearn:
<ARN of instance role (not instance profile)>
username: system:node:{{EC2PrivateDNSName}} groups: - system:bootstrappers - system:nodesSie können die AWS CloudFormation-Stack-Ausgaben für Ihre Knotengruppen auf die folgenden Werte überprüfen:
-
InstanceRoleARN - Für Knotengruppen, die mit
eksctl
erstellt wurden -
NodeInstanceRole - Für Knotengruppen, die mit von Amazon EKS verkauften AWS CloudFormation-Vorlagen im AWS Management Console erstellt wurden
-
-
Wenden Sie die Konfiguration an. Die Ausführung dieses Befehls kann einige Minuten dauern.
kubectl apply -f aws-auth-cm.yaml
Anmerkung Wenn Sie Autorisierungs- oder Ressourcenfehler erhalten, finden Sie weitere Informationen unter Nicht autorisiert oder Zugriff verweigert (kubectl) im Abschnitt zur Fehlerbehebung.
-
-
Sehen Sie sich den Status Ihrer Knoten an und warten Sie, bis diese in den
Ready
-Status eintreten.kubectl get nodes --watch