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.

Anmerkung

Wenn Sie eine IAM-Rolle für Ihr Servicekonto mithilfe von eksctl erstellt haben, wurde dies bereits für Sie mit dem Servicekonto erledigt, das Sie beim Erstellen der Rolle angegeben haben.

apiVersion: v1 kind: ServiceAccount metadata: annotations: eks.amazonaws.com/role-arn: arn:aws:iam::<ACCOUNT_ID>:role/<IAM_ROLE_NAME>

Prerequisites

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 <example values> (einschließlich <>) durch Ihre eigenen Werte.

    kubectl annotate serviceaccount -n <SERVICE_ACCOUNT_NAMESPACE> <SERVICE_ACCOUNT_NAME> \ eks.amazonaws.com/role-arn=arn:aws:iam::<ACCOUNT_ID>: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 das AWS-VPC-CNI-Plug-in bereitgestellt wird, erstellt das Bereitstellungsmanifest ein Dienstkonto, 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. Mit dem folgenden Befehl werden die vorhandenen aws-node DaemonSet-Pods gelöscht und mit der Servicekonto-Anmerkung bereitgestellt. Sie können den Namespace, den Bereitstellungstyp und die Bezeichnung ändern, um Ihre spezifischen Pods zu aktualisieren.

    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. Beschreiben Sie einen der Pods und überprüfen Sie, ob die Umgebungsvariablen AWS_WEB_IDENTITY_TOKEN_FILE und AWS_ROLE_ARN vorhanden sind.

    kubectl exec -n kube-system <aws-node-9rgzw> env | grep AWS

    Ausgabe:

    AWS_VPC_K8S_CNI_LOGLEVEL=DEBUG AWS_ROLE_ARN=arn:aws:iam::<ACCOUNT_ID>:role/<IAM_ROLE_NAME> AWS_WEB_IDENTITY_TOKEN_FILE=/var/run/secrets/eks.amazonaws.com/serviceaccount/token