Wie konfiguriere ich einen SSO-Benutzer für den Zugriff auf meinen Amazon EKS-Cluster?

Lesedauer: 6 Minute
0

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:

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

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr