
Ein Tool zur Authentifizierung an einem Kubernetes-Cluster mithilfe von AWS-IAM-Anmeldeinformationen.
Ein Tool zur Verwendung von AWS IAM-Anmeldeinformationen für die Authentifizierung an einem Kubernetes-Cluster. Die ursprüngliche Arbeit an diesem Tool wurde von Heptio vorangetrieben. Das Projekt erhält Beiträge von mehreren Community-Engineers und wird derzeit von Heptio und Amazon EKS OSS Engineers gepflegt.
Wenn Sie als Administrator einen Kubernetes-Cluster auf AWS betreiben, müssen Sie bereits AWS IAM-Anmeldeinformationen verwalten, um den Cluster bereitzustellen und zu aktualisieren. Durch die Verwendung von AWS IAM Authenticator für Kubernetes vermeiden Sie die Verwaltung separater Anmeldeinformationen für den Kubernetes-Zugriff. AWS IAM bietet außerdem eine Reihe nützlicher Eigenschaften wie einen Out-of-Band-Audit-Trail (über CloudTrail) und die Durchsetzung von 2FA/MFA.
Wenn Sie einen Kubernetes-Installer auf AWS erstellen, kann AWS IAM Authenticator für Kubernetes Ihren Bootstrap-Prozess vereinfachen.
Sie müssen Ihre anfänglichen Admin-Anmeldeinformationen nicht auf irgendeine Weise sicher aus Ihrem neu installierten Cluster herausschmuggeln.
Stattdessen können Sie zum Zeitpunkt der Cluster-Bereitstellung eine dedizierte KubernetesAdmin-Rolle erstellen und Authenticator so einrichten, dass Cluster-Administrator-Anmeldungen zugelassen werden.
Angenommen, Sie haben einen Cluster, der auf AWS läuft, und möchten Unterstützung für AWS IAM Authenticator für Kubernetes hinzufügen, dann müssen Sie:
Zuerst müssen Sie eine oder mehrere IAM-Rollen erstellen, die Benutzern/Gruppen innerhalb Ihres Kubernetes-Clusters zugeordnet werden. Der einfachste Weg, dies zu tun, ist sich in der AWS Console anzumelden:
Dadurch wird eine IAM-Rolle ohne Berechtigungen erstellt, die von autorisierten Benutzern/Rollen in Ihrem Konto übernommen werden kann. Notieren Sie sich den Amazon Resource Name (ARN) Ihrer Rolle, den Sie unten benötigen werden.
Sie können dies auch in einem einzigen Schritt mit der AWS CLI anstelle der AWS Console tun:
# get your account ID
ACCOUNT_ID=$(aws sts get-caller-identity --output text --query 'Account')
# define a role trust policy that opens the role to users in your account (limited by IAM policy)
POLICY=$(echo -n '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"AWS":"arn:aws:iam::'; echo -n "$ACCOUNT_ID"; echo -n ':root"},"Action":"sts:AssumeRole","Condition":{}}]}')
# create a role named KubernetesAdmin (will print the new role's ARN)
aws iam create-role \
--role-name KubernetesAdmin \
--description "Kubernetes administrator role (for AWS IAM Authenticator for Kubernetes)." \
--assume-role-policy-document "$POLICY" \
--output text \
--query 'Role.Arn'
Sie können diesen Schritt auch überspringen und Folgendes verwenden:
mapUsers unten).mapRoles unten).Der Server ist dafür gedacht, auf jedem Ihrer Master-Knoten als DaemonSet mit Host-Netzwerk zu laufen, damit er einen localhost-Port bereitstellen kann.
Ein Beispiel für eine ConfigMap- und DaemonSet-Konfiguration finden Sie in deploy/example.yaml.
Bevor Sie sie anwenden, aktualisieren Sie diese Werte für Ihren Cluster:
arn:aws:iam::000000000000:...) in config.yaml.clusterID auf einen eindeutigen Wert für Ihren Cluster fest.Stellen Sie es dann bereit:
kubectl apply -f deploy/example.yaml
kubectl -n kube-system rollout status daemonset/aws-iam-authenticator
kubectl -n kube-system get pods -l k8s-app=aws-iam-authenticator
Sobald der Pod auf einem Control-Plane-Knoten läuft, erstellt der aws-iam-authenticator server die Webhook-Kubeconfig auf dem Host unter /etc/kubernetes/aws-iam-authenticator/kubeconfig.yaml (oder unter dem über --generate-kubeconfig konfigurierten Pfad).
Wenn Sie einen automatisierten Installer erstellen, können Sie die Zertifikats-, Schlüssel- und Webhook-Kubeconfig-Dateien auch einfach mit aws-iam-authenticator init vorab generieren.
Dieser Befehl erzeugt Dateien und legt sie in den konfigurierten Ausgabeverzeichnissen ab.
Sie können dies auf jedem Master-Knoten vor dem Start des API-Servers ausführen. Sie können sie auch vor der Bereitstellung der Master-Knoten generieren und sie in den entsprechenden Host-Pfaden installieren.
Wenn Sie keine Dateien vorab generieren, erzeugt aws-iam-authenticator server sie bei Bedarf.
Dies funktioniert, erfordert jedoch, dass Sie Ihren Kubernetes API-Server nach der Installation neu starten.
Die Kubernetes API integriert sich über einen Token-Authentifizierungs-Webhook in den AWS IAM Authenticator for Kubernetes.
Wenn Sie aws-iam-authenticator server ausführen, wird eine Webhook-Konfigurationsdatei erzeugt und im Host-Dateisystem gespeichert.
Sie müssen Ihrer API-Server-Konfiguration ein einziges zusätzliches Flag hinzufügen:
--authentication-token-webhook-config-file=/etc/kubernetes/aws-iam-authenticator/kubeconfig.yaml
Auf vielen Clustern läuft der API-Server als statisches Pod.
Sie können das Flag zu /etc/kubernetes/manifests/kube-apiserver.yaml hinzufügen.
Stellen Sie sicher, dass das Host-Verzeichnis /etc/kubernetes/aws-iam-authenticator/ in Ihr API-Server-Pod eingebunden ist.
Möglicherweise müssen Sie außerdem den kubelet-Daemon auf Ihrem Master-Node neu starten, damit die aktualisierte statische Pod-Definition übernommen wird:
systemctl restart kubelet.service
Das Standardverhalten des Servers besteht darin, Zuordnungen ausschließlich aus den
Feldern mapUsers und mapRoles seiner Konfigurationsdatei zu beziehen. Siehe Vollständiges
Konfigurationsformat unten für Details.