Zuordnen einer IAM-Rolle zu einem Servicekonto - Amazon EKS

Zuordnen einer IAM-Rolle zu einem Servicekonto

In Kubernetes definieren Sie die IAM-Rolle, die mit einem Servicekonto in Ihrem Cluster verknüpft werden soll, indem Sie dem Servicekonto die folgende Anmerkung hinzufügen.

apiVersion: v1 kind: ServiceAccount metadata: annotations: eks.amazonaws.com/role-arn: arn:aws:iam::111122223333:role/iam-role-name
Anmerkung

Wenn Sie eine IAM-Rolle für Ihr Servicekonto mithilfe von eksctl erstellt haben, hat eksctl bereits das Servicekonto annotiert, das Sie beim Erstellen der Rolle angegeben haben.

Voraussetzungen

So kommentieren Sie ein Dienstkonto mit einer IAM-Rolle

  1. Verwenden Sie den folgenden Befehl, um Ihr Servicekonto mit dem ARN der IAM-Rolle zu versehen, die Sie mit Ihrem Servicekonto verwenden möchten. Ersetzen Sie service-account-namespace mit dem Kubernetes-Namespace Ihres Servicekontos, und service-account-name mit dem Namen Ihres bestehenden Kubernetes-Servicekontos. Ersetzen Sie 111122223333 mit Ihrer AWS-Konto-ID und iam-role-name mit dem Namen Ihrer vorhandenenAWS Identity and Access Management-(IAM)-Rolle.

    kubectl annotate serviceaccount -n service-account-namespace service-account-name \ eks.amazonaws.com/role-arn=arn:aws:iam::111122223333:role/iam-role-name
    Anmerkung

    Wenn Sie noch kein Dienstkonto haben, müssen Sie eines erstellen. Weitere Informationen finden Sie unter Konfigurieren von Dienstkonten für Pods in der Kubernetes-Dokumentation. Damit das Dienstkonto Kubernetes-Berechtigungen verwenden kann, müssen Sie ein Role oder ClusterRole erstellen und dann die Rolle an das Dienstkonto binden. Weitere Informationen finden Sie unter Using RBAC Authorization in der Kubernetes-Dokumentation. Wenn beispielsweise Amazon VPC CNI plugin for Kubernetes bereitgestellt wird, erstellt das Bereitstellungsmanifest ein Servicekonto, eine Clusterrolle und eine Clusterrollenbindung. Sie können das Manifest auf GitHub als Beispiel anzeigen.

  2. Löschen Sie alle vorhandenen Pods, die dem Servicekonto zugeordnet sind, und erstellen Sie sie neu, um die Umgebungsvariablen für Anmeldeinformationen anzuwenden. Der mutierende Webhook wendet sie nicht auf Pods an, die bereits ausgeführt werden. Wenn Sie die Anmerkung beispielsweise dem Dienstkonto hinzugefügt haben, das für den Amazon-VPC-CNI-DaemonSet in einem vorherigen Schritt verwendet wurde, löscht der folgende Befehl die vorhandenen aws-node-DaemonSet-Pods und stellt sie mit der Servicekonto-Anmerkung bereit. Sie können Pods, kube-system, und-l k8s-app=aws-Knoten mit den Informationen für die Pods, für die Sie Ihre Anmerkung festlegen, ersetzen.

    kubectl delete pods -n kube-system -l k8s-app=aws-node
  3. Bestätigen Sie, dass alle Pods neu gestartet wurden.

    kubectl get pods -n kube-system -l k8s-app=aws-node
  4. Zeigen Sie die Umgebungsvariablen für einen der Pods an, und überprüfen Sie, ob die Umgebungsvariablen AWS_WEB_IDENTITY_TOKEN_FILE und AWS_ROLE_ARN vorhanden sind. Der folgende Beispielbefehl gibt die Variablen für einen der Pods zurück, die vom Amazon-VPC-CNI-DaemonSet erstellt wurden. Der Pod namens aws-node-5v6ws wurde in der Ausgabe des Beispiels zurückgegeben, das im vorherigen Schritt verwendet wurde.

    kubectl exec -n kube-system aws-node-5v6ws -- env | grep AWS

    Die Beispielausgabe lautet wie folgt.

    ... AWS_WEB_IDENTITY_TOKEN_FILE=/var/run/secrets/eks.amazonaws.com/serviceaccount/token ... AWS_ROLE_ARN=arn:aws:iam::111122223333:role/iam-role-name ...
  5. (Optional) Abhängig von der Version Ihres Clusters, verwenden Pods möglicherweise den AWS Security Token Service-regionalen oder den globalen Endpunkt. AWS empfiehlt die Verwendung von regionalen -Endpunkten statt des globalen Endpunkts, um die Latenz zu reduzieren, Redundanz zu erhalten und die Gültigkeit von Sitzungstokens zu verlängern. Weitere Informationen darüber, wie Sie ermitteln, welchen Endpunkttyp Ihre Pods verwenden, oder zum Ändern des Endpunkttyps, finden Sie unter Konfigurieren des AWS Security Token Service-Endpunkts für ein Servicekonto.