Wie konfiguriere ich einen SSO-Benutzer für den Zugriff auf meinen Amazon EKS-Cluster?
Ich verwende AWS IAM Identity Center (Nachfolger von AWS Single Sign-On). Ich kann jedoch nicht auf den Amazon-Elastic-Kubernetes-Service-Cluster (Amazon EKS) zugreifen. Ich möchte den SSO-Benutzer für den Zugriff auf meinen Cluster konfigurieren.
Lösung
Stellen Sie sicher, dass die folgenden Voraussetzungen erfüllt sind:
- Sie haben IAM Identity Center aktiviert und konfiguriert.
- Ihr SSO-Benutzer ist mit dem AWS-Konto verknüpft, in dem sich der Amazon-EKS-Cluster befindet.
Hinweis: Die folgenden Schritte verwenden kubectl, um auf den Cluster zuzugreifen. Nachdem Sie den kubectl-Zugriff konfiguriert haben, können Sie die Cluster-Ressourcen in der Amazon-EKS-Konsole sehen, indem Sie sich als IAM-Identity-Center-Benutzer anmelden.
Hinweis: Wenn Sie beim Ausführen von den AWS-Command-Line-Interface-Befehlen Fehler erhalten, vergewissern Sie sich, dass Sie eine aktuelle Version der AWS-CLI ausführen.
AWS CLI für die Verwendung Ihres SSO-Benutzers konfigurieren
Erstellen Sie ein AWS-Command-Line-Interface-Profil (AWS CLI), das die SSO-Authentifizierung verwendet, wenn die AWS-CLI-Befehle ausgeführt werden. Weitere Informationen finden Sie unter Konfiguration der AWS-CLI für die Verwendung von AWS IAM Identity Center (Nachfolger von AWS Single Sign-On).
Im Folgenden finden Sie ein Beispiel für die AWS-CLI-SSO-Konfiguration mithilfe des automatischen Verfahrens:
aws configure sso SSO start URL [None]: https://my-sso-portal.awsapps.com/start SSO region [None]: us-east-1
Die AWS-CLI versucht, Ihren Standardbrowser zu öffnen und den Anmeldevorgang für Ihr IAM-Identity-Center-Konto zu starten.
Attempting to automatically open the SSO authorization page in your default browser.
Wenn die AWS-CLI den Browser nicht öffnen kann, erhalten Sie die folgende Meldung mit Anweisungen zum manuellen Starten des Anmeldevorgangs:
If the browser does not open or you wish to use a different device to authorize this request, open the following URL: https://device.sso.us-east-2.amazonaws.com/ Then enter the code: XXXX-XXXX The only AWS account available to you is: 123456789999 Using the account ID 123456789999 The only role available to you is: ViewOnlyAccess Using the role name "ViewOnlyAccess" CLI default client Region [us-east-2]: CLI default output format [json]: CLI profile name [ViewOnlyAccess-123456789999]: test-profile To use this profile, specify the profile name using --profile, as shown: aws s3 ls --profile test-profile
Sie können jetzt die AWS-CLI-Befehle mit diesem neuen Profil ausführen. Mit dieser Konfiguration kann Ihr SSO-Benutzer Folgendes tun:
- Authentifizieren Sie sich bei AWS.
- Nehmen Sie eine AWS-Identity-and-Management-Rolle (IAM) an, die vom IAM Identity Center erstellt wurde.
Beispiel:
$ aws sts get-caller-identity { "UserId": "AROAXMRV33N1234567890:test-user", "Account": "123456789999", "Arn": "arn:aws:sts::123456789999:assumed-role/AWSReservedSSO_ViewOnlyAccess_05a3861234567890/test-user" }
Konfigurieren Sie den kubectl-Kontext, um das für SSO erstellte AWS-CLI-Profil zu verwenden
Kubectl verwendet AWS-CLI-Befehle. Daher müssen Sie das neue AWS-CLI-Profil im aktuellen Kontext von kubectl angeben. Führen Sie den folgenden Befehl aus, um den kubectl-Kontext so zu aktualisieren, dass er das neue Profil verwendet:
aws eks update-kubeconfig --name $CLUSTER-NAME --profile test-profile
Nachdem Sie diesen Befehl ausgeführt haben, verwendet kubectl das Profil test-profile, um sich beim Cluster-API-Server zu authentifizieren.
Erstellen Sie eine ARN-Version, indem Sie den Pfad ausschließen
Die IAM-Rollen, die in aws-auth ConfigMap zugeordnet sind, enthalten keinen Pfad. Standardmäßig enthält der Amazon-Ressourcenname (ARN) der IAM-Rolle, die Ihrem SSO-Benutzer zugeordnet ist, den Pfad.
Beispiel:
arn:aws:iam::123456789999:role/aws-reserved/sso.amazonaws.com/us-east-2/AWSReservedSSO_ViewOnlyAccess_05a3861234567890
Wenn Sie der aws-auth ConfigMap den vollständigen ARN hinzufügen, ist Ihr SSO-Benutzer nicht authentifiziert. Sie können mit Ihrem SSO-Benutzer nicht auf Ihren Cluster zugreifen. Stellen Sie sicher, dass Sie eine Version dieses ARN ohne Angabe des Pfads erstellen. Diese Version muss im nächsten Schritt verwendet werden
Beispiel:
arn:aws:iam::123456789000:role/AWSReservedSSO_ViewOnlyAccess_05a38657af2a0a01
Sie können die IAM-Rolle auch ohne den Pfad abrufen, indem Sie die folgenden Befehle ausführen:
ssorole=$(aws sts get-caller-identity --query Arn --output text --profile test-profile | cut -d/ -f2) account=$(aws sts get-caller-identity --query Account --output text --profile test-profile) echo "arn:aws:iam::$account:role/$ssorole" arn:aws:iam::123456789000:role/AWSReservedSSO_ViewOnlyAccess_05a38657af2a0a01
Fügen Sie den ARN zur aws-auth ConfigMap hinzu
Damit Ihr SSO-Benutzer auf den Amazon-EKS-Cluster zugreifen kann, muss die IAM-Rolle, die Ihrem SSO-Benutzer zugeordnet ist, den Kubernetes-RBAC-Berechtigungen zugeordnet werden. Fügen Sie dazu die IAM-Rolle ARN ohne den Pfad in die aws-auth ConfigMap ein. Ordnen Sie es dann dem Kubernetes-Benutzer und den Gruppen zu, die mit der Kubernetes-Rolle und dem RoleBinding (oder ClusterRole und ClusterRoleBinding) verknüpft sind. Verwenden Sie je nach Anwendungsfall die Anweisungen aus einem der folgenden Abschnitte.
SSO-Benutzer mit clusterweiten Administratorberechtigungen
Standardmäßig bietet die Kubernetes-Gruppe system:masters clusterweite Administratorberechtigungen. Diese Gruppe ist mit dem ClusterRole cluster-Admin und dem ClusterRoleBinding-Cluster-Admin verknüpft. Daher müssen Sie keine neuen ClusterRole- und ClusterBindingRole-Objekte erstellen. Sie müssen nur die IAM-Rolle ohne Pfad der Gruppe system:masters zuordnen.
Bearbeiten Sie dazu die aws-auth ConfigMap:
kubectl edit configmap aws-auth -n kube-system
Fügen Sie dann Folgendes hinzu:
- groups: - system:masters rolearn: arn:aws:iam::123456789000:role/AWSReservedSSO_ViewOnlyAccess_05a38657af2a0a01 username: cluster-admin
SSO-Benutzer mit namespace-gebundenen Leseberechtigungen
In diesem Fall müssen Sie eine Rolle und ein RoleBinding mit Leseberechtigungen in einem bestimmten Namespace erstellen. Verknüpfen Sie diese Objekte dann mit der IAM-Rolle, indem Sie einen benutzerdefinierten Benutzer- oder Gruppennamen in der aws-auth ConfigMap verwenden.
1. Erstellen Sie ein Kubernetes-Rollenobjekt, das nur Leserechte in Ihrem gewünschten Namespace zulässt:
cat << EOF | kubectl apply -f - apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: namespace: $MY-NAMESPACE name: reader-role rules: - apiGroups: [""] # "" indicates the core API group resources: ["*"] verbs: ["get", "watch", "list"] EOF
Hinweis:
- Ersetzen Sie $MY-NAMESPACE durch den Namen Ihres Namespace.
- Ersetzen Sie reader-role durch Ihren benutzerdefinierten Benutzernamen.
2. Erstellen Sie ein Kubernetes-RoleBinding-Objekt, das die Kubernetes-Rollenberechtigungen mit der Gruppe read-only-group verknüpft:
cat <<EOF | kubectl apply -f - apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: reader-binding namespace: MY-NAMESPACE subjects: - kind: Group name: read-only-group apiGroup: rbac.authorization.k8s.io roleRef: kind: Role name: reader-role apiGroup: rbac.authorization.k8s.io EOF
3. Ordnen Sie die IAM-Rolle ARN ohne Pfad der Gruppe read-only-group in aws-auth ConfigMap zu.
Sie können die IAM-Rolle automatisch zuordnen, indem Sie den folgenden Befehl ausführen:
eksctl create iamidentitymapping \ --cluster $CLUSTER-NAME \ --region $REGION \ --arn arn:aws:iam::123456789000:role/AWSReservedSSO_ViewOnlyAccess_05a38657af2a0a01 \ --group read-only-group \ --no-duplicate-arns \ --username read-only-user1
Hinweis: Ersetzen Sie $CLUSTER-NAME und $REGION durch den Namen Ihres Clusters bzw. Ihrer Region. Sie können die IAM-Rolle auch manuell zuordnen. Bearbeiten Sie dazu die aws-auth ConfigMap:
kubectl edit configmap aws-auth -n kube-system
Fügen Sie dann im Abschnitt MapRules Folgendes hinzu:
- groups: - read-only-group rolearn: arn:aws:iam::123456789000:role/AWSReservedSSO_ViewOnlyAccess_05a38657af2a0a01 username: read-only-user1
Wichtig: Die IAM-Rolle darf in der aws-auth ConfigMap nur einmal vorkommen. Stellen Sie daher sicher, dass nur ein Abschnitt die IAM-Rolle enthält.
Sie können jetzt Ihren SSO-Benutzer verwenden, um auf Ihren Cluster zuzugreifen:
$ kubectl get pod NAME READY STATUS RESTARTS AGE web-0 1/1 Running 0 24h
Ähnliche Informationen
Einschalten des IAM-Benutzer- und Rollenzugriffs auf Ihren Cluster
Relevanter Inhalt
- AWS OFFICIALAktualisiert vor einem Jahr
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor einem Jahr
- AWS OFFICIALAktualisiert vor 7 Monaten