Wie behebe ich RBAC-Probleme mit Amazon EKS?

Lesedauer: 7 Minute
0

Wenn ich meinen Cluster von Amazon Elastic Kubernetes Service (Amazon EKS) verwende, möchte ich Fehler wie Zugriff verweigert, Nicht autorisiert und Verboten beheben.

Kurzbeschreibung

AWS Identity and Access Management (IAM) ermöglicht die Authentifizierung für den Cluster und stützt sich bei der Autorisierung auf die native rollenbasierte Zugriffskontrolle (RBAC) von Kubernetes. Wenn ein IAM-Benutzer oder eine IAM-Rolle einen Amazon-EKS-Cluster erstellt, wird die IAM-Entität mit system:masters-Berechtigungen zur Kubernetes-RBAC-Autorisierungstabelle hinzugefügt.

Gehen Sie wie folgt vor, um Benutzer mit Administratorzugriff zu einem Amazon-EKS-Cluster hinzuzufügen:

  1. Erlauben Sie den zugehörigen IAM-Benutzern die erforderlichen IAM-Konsolenberechtigungen, damit Benutzer die erforderlichen Clustervorgänge ausführen können.
  2. Aktualisieren Sie die aws-auth-ConfigMap, um den zusätzlichen IAM-Benutzern die Cluster-Rolle und die Rollenbindungen zur Verfügung zu stellen. Weitere Informationen finden Sie unter Hinzufügen von IAM-Benutzern oder -Rollen zu Ihrem Amazon EKS-Cluster.

Hinweis: Die aws-auth-ConfigMap unterstützt keine Platzhalter. Es ist eine bewährte Methode, eksctl zu verwenden, um die ConfigMap zu bearbeiten. Falsch formatierte Einträge können zur Aussperrung führen.

Führen Sie den folgenden Befehl kubectl auth can-i aus, um zu überprüfen, ob die RBAC-Berechtigungen korrekt festgelegt sind:

kubectl auth can-i list secrets --namespace dev --as dave

Wenn Sie den Befehl kubectl ausführen, führt der Authentifizierungsmechanismus die folgenden Hauptschritte aus:

  • Kubectl liest die Kontextkonfiguration aus ~/.kube/config.
  • Der Befehl AWS Command Line Interface (AWS CLI) aws eks get-token wird ausgeführt, um Anmeldeinformationen abzurufen, wie in .kube/config definiert.
  • Die Anfrage k8s api wird gesendet und mit dem vorherigen Token signiert.

Hinweis: Sie können das 15-minütige Ablaufdatum des Tokens, das über aws eks get-token abgerufen wurde, nicht ändern.

Lösung

Hinweis: Wenn Sie beim Ausführen von Befehlen von AWS Command Line Interface (AWS CLI) Fehlermeldungen erhalten, stellen Sie sicher, dass Sie die neueste AWS-CLI-Version verwenden.

Authentifizierungsprobleme

Fehler: „Auf den Cluster kann nicht zugegriffen werden, da der IAM-Benutzer des Cluster-Erstellers gelöscht wurde“

Wenn Sie den vorherigen Fehler erhalten, müssen Sie den IAM-Benutzer des Cluster-Erstellers mit demselben Namen wie der Cluster neu erstellen. Finden Sie dazu Informationen über den Cluster-Administrator und den Cluster-Ersteller.

Wenn Sie den Cluster innerhalb der letzten 90 Tage erstellt haben, können Sie in AWS CloudTrail nach CreateCluster-API-Aufrufen suchen. Die Berechtigungen für den Cluster-Ersteller sind identisch mit den system:masters-Berechtigungen. Wenn Sie andere Benutzer mit system:masters-Berechtigungen haben, sind Sie nicht vom Cluster-Ersteller abhängig. Wenn Sie sich zuvor beim Amazon EKS-Cluster authentifiziert haben, können Sie frühere Authentifizierungsprotokolle in der Amazon-CloudWatch-Protokollgruppe überprüfen. Verwenden Sie die folgende CloudWatch-Logs-Insights-Abfrage, um die Benutzer- und Rollendetails des Cluster-Administrators zu überprüfen:

fields @timestamp, @message
| sort @timestamp desc
| filter @logStream like /authenticator/
| filter @message like "system:masters"

Führen Sie die folgenden Befehle aus, um den IAM-Benutzer und die Rolle des Cluster-Erstellers neu zu erstellen:

Wichtig: Stellen Sie sicher, dass Sie alle AWS-CLI-Befehle überprüfen und alle Instances der Beispiel-Zeichenfolgen durch Ihre erforderlichen Werte ersetzen. Ersetzen Sie beispielsweise EXAMPLE-USER durch Ihren Benutzernamen.

aws iam create-user --user-name <EXAMPLE-USER>
aws iam create-role --role-name <EXAMPLE-ROLE>

Fehler: „Konnte nicht angenommen werden, da sie nicht existiert oder die vertrauenswürdige Entität nicht korrekt ist oder ein Fehler beim Aufrufen des AssumeRole-Vorgangs aufgetreten ist“

Wenn Sie den vorherigen Fehler erhalten, überprüfen Sie, ob die Vertrauensrichtlinie dem Benutzer Annahmeberechtigungen korrekt gewährt. Weitere Informationen finden Sie im IAM-Tutorial: Zugriff auf mehreren AWS-Konten mittels IAM-Rollen übertragen.

Führen Sie den folgenden Befehl aus, um lokale Benutzer zu identifizieren, die den Amazon EKS-Cluster standardmäßig bereitstellen:

kubectl get clusterroles -l kubernetes.io/bootstrapping=rbac-defaults

Schalten Sie den anonymen Zugriff für API-Aktionen aus. Anonyme Benutzer haben den Betreff auf name: system:unauthenticated gesetzt. Führen Sie den folgenden Befehl aus, um anonyme Benutzer zu identifizieren:

kubectl get clusterrolebindings.rbac.authorization.k8s.io -o json | jq '.items[] | select(.subjects[]?.name=="system:unauthenticated")'

Weitere Informationen finden Sie in den Anleitungen zu den Best Practices von Amazon EKS.

Autorisierungsprobleme

Fehler: „Die aktuelle Server-API-Gruppenliste konnte nicht abgerufen werden“

Informationen zur Behebung des vorherigen Fehlers finden Sie unter Nicht autorisiert oder Zugriff verweigert (kubectl).

Fehler: „Sie müssen am Server angemeldet sein (nicht autorisiert)“

Informationen zur Behebung des vorherigen Fehlers finden Sie unter Wie behebe ich den Fehler „Sie müssen am Server angemeldet sein (nicht autorisiert)“?

Fehler: „Sie müssen am Server angemeldet sein (der Server hat den Client nach Anmeldeinformationen gefragt)“

Der vorherige Fehler tritt auf, wenn Sie eine IAM-Entität für API-Aufrufe verwenden und die IAM-Entität nicht korrekt zugeordnet wurde. Sie müssen die IAM-Entität einer Amazon EKS-Rolle in der aws-auth-ConfigMap des Clusters zuordnen. Weitere Informationen finden Sie unter Aktivieren des IAM-Benutzer- und Rollenzugriffs auf Ihren Cluster.

Fehler: „Cluster-Steuerebene kann nicht beschrieben werden: AccessDeniedException“

Der vorherige Fehler tritt auf, wenn Sie die kubeconfig mit einem Benutzer und einer Rolle aktualisieren, die nicht über die Berechtigung verfügen, die Aktion eks:DescribeCluster auszuführen.

Fehler: „Der aktuelle Benutzer oder die aktuelle Rolle hat keinen Zugriff auf Kubernetes-Objekte in diesem EKS-Cluster“

Informationen zum vorherigen Fehler finden Sie unter Beheben des Kubernetes-Objektzugriff-Fehlers in Amazon EKS.

Fehler: „Den Cluster-Ersteller-IAM zu einem anderen Benutzer/einer anderen Rolle ändern“

Nachdem Sie einen Cluster erstellt haben, können Sie den Cluster-Ersteller-IAM nicht auf einen anderen Benutzer ändern, da Sie keinen Cluster-Ersteller-IAM konfigurieren können.

Probleme mit dem Netzwerk

Fehler: „Verbindung zum Server kann nicht hergestellt werden: dial tcp 172.xx.xx.xx.xx:443: i/o timeout“

Wenn Sie diesen Fehler erhalten, vergewissern Sie sich, dass die Sicherheitsgruppen Datenverkehr von der Quell-IP-Adresse des Absenders zulassen.

Fehler: „Verbindung zum Server nicht möglich: x509: Zertifikat ist gültig für *.example.com, example.com , nicht https://xxx.gr7.us-east-1.eks.amazonaws.com“

Wenn Sie diesen Fehler erhalten, überprüfen Sie, ob die Proxy-Einstellungen korrekt sind.

KUBECONFIG-Probleme

Fehler: „Die Verbindung zum Server localhost:8080 wurde verweigert“

Der vorherige Fehler tritt auf, wenn die kubeconfig-Datei fehlt. Die kubeconfig-Datei befindet sich in ~/.kube/config, und kubectl benötigt die Datei. Diese Datei enthält Cluster-Anmeldeinformationen, die für die Verbindung mit dem Cluster-API-Server erforderlich sind. Wenn kubectl diese Datei nicht finden kann, versucht es, eine Verbindung zur Standardadresse herzustellen (localhost:8080).

Fehler: „Die Kubernetes-Konfigurationsdatei ist gruppenlesbar“

Der vorherige Fehler tritt auf, wenn die Berechtigungen für die kubeconfig-Datei falsch sind. Führen Sie den folgenden Befehl aus, um dieses Problem zu beheben:

chmod o-r ~/.kube/config
chmod g-r ~/.kube/config

Konfigurationsprobleme beim AWS IAM Identity Center (Nachfolger von AWS Single Sign-On)

Wichtig: Entfernen Sie /aws-reserved/sso.amazonaws.com/ aus der rolearn-URL. Wenn Sie dies nicht tun, können Sie sich nicht als gültiger Benutzer autorisieren.

Weisen Sie Benutzergruppen einer IAM-Berechtigungsrichtlinie zu

1.    Öffnen Sie die IAM-Identity-Center-Konsole.

2.    Wählen Sie die Registerkarte AWS-Konten und dann AWS-Konto aus, um Benutzer zuzuweisen.

3.    Wählen Sie Benutzer zuweisen.

4.    Suchen Sie nach den Benutzergruppen und wählen Sie dann Weiter: Berechtigungssätze.

5.    Wählen Sie Neuen Berechtigungssatz erstellen und dann Benutzerdefinierten Berechtigungssatz erstellen aus.

6.    Geben Sie dem Berechtigungssatz einen Namen, und aktivieren Sie dann das Kontrollkästchen Benutzerdefinierte Berechtigungsrichtlinie erstellen.

7.    Kopieren Sie die folgende Berechtigungsrichtlinie und fügen Sie sie dann in das Fenster ein:

{
"Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "sts:AssumeRole",
      "Resource": "*"
    }
  ]
}

8.    Wählen Sie Erstellen aus.

Konfigurieren Sie Rollenberechtigungen mit Kubernetes RBAC

Verwenden Sie das folgende Manifest, um Rollenberechtigungen mit Kubernetes RBAC zu konfigurieren, um eine RBAC-Rolle zu erstellen:

apiVersion: rbac.authorization.k8s.io/v1 
kind: Role
metadata:
    name: <example name of the RBAC group>
    namespace: <example name of namespace>
 rules:
 - apiGroups: [""]
    resources: ["services", "endpoints", "pods", "deployments", "ingress"]
    verbs: ["get", "list", "watch"]

Ändern Sie den IAM-Authentifikator ConfigMap

1.    Führen Sie den folgenden Befehl aus, um die IAM-Rolle der IAM-Identity-Center-Benutzergruppe zu erfassen, die die Daten des gewünschten Benutzers enthält:

aws iam list-roles | grep Arn

2.    Führen Sie den folgenden Befehl h aus, um den Authentifikator ConfigMap zu ändern:

kubectl edit configmap aws-auth --namespace kube-system

3.    Fügen Sie der ConfigMap unter mapRoles die folgenden Attribute hinzu:

- rolearn: <example arn of the AWS SSO IAM role> 
username: <example preferred username> 
groups:
    - <example name of the RBAC group>

Wichtig: Entfernen Sie /aws-reserved/sso.amazonaws.com/ aus der rolearn-URL. Wenn Sie dies nicht tun, können Sie sich nicht als gültiger Benutzer autorisieren.

4.    Aktualisieren Sie Ihre kubeconfig-Datei, indem Sie den folgenden Befehl ausführen:

aws eks update-kubeconfig —-name <example eks cluster>  —-region <example region>

5.    Melden Sie sich mit dem IAM-Identity-Center-Benutzernamen an, und führen Sie dann die kubectl-Befehle aus.


Ähnliche Informationen

Standardrollen und Rollenbindungen Steuerung des Zugriffs auf EKS-Cluster

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr