Zuordnung einer IAM-Rolle einem Kubernetes-Servicekonto - Amazon EKS

Unterstützung für die Verbesserung dieser Seite beitragen

Um zu diesem Benutzerhandbuch beizutragen, klicken Sie auf den Link Diese Seite auf GitHub bearbeiten, der sich im rechten Bereich jeder Seite befindet.

Zuordnung einer IAM-Rolle einem Kubernetes-Servicekonto

Dieses Thema behandelt die Konfiguration eines Kubernetes-Servicekontos, um eine Rolle für die AWS-Identitäts- und Zugriffsverwaltung (IAM) mit EKS Pod Identity zu übernehmen. Alle Pods, welche für die Verwendung des Servicekontos konfiguriert sind, können dann auf alle AWS-Services zugreifen, für welche die Rolle über Zugriffsberechtigungen verfügt.

Das Erstellen einer EKS-Pod-Identity-Zuordnung umfasst nur einen einzigen Schritt: Sie erstellen die Zuordnung in EKS über die AWS-Managementkonsole, die AWS CLI, die AWS-SDKs, AWS CloudFormation und andere Tools. Es gibt keine Daten oder Metadaten zu den Zuordnungen innerhalb des Clusters in Kubernetes-Objekten, und Sie fügen den Servicekonten keine Annotationen hinzu

Voraussetzungen

  • Einen vorhandenen -Cluster. Falls Sie noch kein Service-Konto haben, können Sie eines erstellen, indem Sie einer der Anleitungen in Erste Schritte mit Amazon EKS folgen.

  • Der IAM-Prinzipal, der die Zuordnung erstellt, muss iam:PassRole haben.

  • Die neueste Version der AWS-CLI, die auf Ihrem Gerät oder in AWS CloudShell installiert und konfiguriert ist. Sie können Ihre aktuelle Version mit aws --version | cut -d / -f2 | cut -d ' ' -f1 überprüfen. Paket-Manager wie yum, apt-get oder Homebrew für macOS sind oft mehrere Versionen hinter der neuesten Version der AWS-CLI. Um die neueste Version zu installieren, lesen Sie Installation und Schnellkonfiguration mit aws configure im Benutzerhandbuch zur AWS-Befehlszeilenschnittstelle. Die in AWS CloudShell installierte AWS-CLI-Version kann auch mehrere Versionen hinter der neuesten Version zurückliegen. Informationen zum Aktualisieren finden Sie unter Installieren der AWS-CLI in Ihrem Stammverzeichnis im AWS-CloudShell-Benutzerhandbuch.

  • Das kubectl-Befehlszeilen-Tool ist auf Ihrem Gerät oder in AWS CloudShell installiert. Die Version kann mit der Kubernetes-Version Ihres Clusters identisch sein oder bis zu einer Nebenversion älter oder neuer sein. Wenn Ihre Clusterversion beispielsweise 1.29 ist, können Sie kubectl-Version 1.28, 1.29, oder 1.30 damit verwenden. Informationen zum Installieren oder Aktualisieren von kubectl finden Sie unter kubectl und eksctl einrichten.

  • Eine vorhandene kubectl config-Datei, die Ihre Clusterkonfiguration enthält. Informationen zum Erstellen einer kubectl config-Datei finden Sie unter kubectl mit einem EKS-Cluster durch Erstellen einer kubeconfig-Datei verbinden.

Pod-Identity-Zuordnung erstellen (AWS-Konsole)

  1. Öffnen Sie die Amazon-EKS-Konsole.

  2. Wählen Sie im linken Navigationsbereich Cluster aus. Wählen Sie anschließend den Namen des Clusters aus, für den Sie das Add-on „EKS Pod Identity Agent“ konfigurieren möchten.

  3. Wählen Sie die Registerkarte Zugriff aus.

  4. Wählen Sie in den Pod-Identity-Zuordnungen die Option Erstellen aus.

  5. Wählen Sie als IAM-Rolle die IAM-Rolle mit den Berechtigungen aus, die die Workload haben soll.

    Anmerkung

    Die Liste enthält nur Rollen mit der folgenden Vertrauensrichtlinie, die EKS Pod Identity ermöglicht, diese Rollen zu verwenden.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowEksAuthToAssumeRoleForPodIdentity", "Effect": "Allow", "Principal": { "Service": "pods.eks.amazonaws.com" }, "Action": [ "sts:AssumeRole", "sts:TagSession" ] } ] }

    sts:AssumeRole – EKS Pod Identity nutzt AssumeRole, um die IAM-Rolle anzunehmen, bevor es die temporären Anmeldeinformationen an Ihre Pods übergibt.

    sts:TagSession – EKS Pod Identity nutzt TagSession, um Sitzungs-Tags in die Anfragen an AWS STS einzufügen.

    Sie können diese Tags in den Bedingungsschlüsseln der Vertrauensrichtlinie verwenden, um einzuschränken, welche Servicekonten, Namespaces und Cluster diese Rolle verwenden dürfen.

    Eine Liste der Amazon EKS-Bedingungsschlüssel finden Sie unter Bedingungsschlüssel für Amazon Elastic Kubernetes Service in der Service-Autorisierungsreferenz. Um zu erfahren, mit welchen Aktionen und Ressourcen Sie einen Bedingungsschlüssel verwenden können, lesen Sie von Amazon Elastic Kubernetes Service definierte Aktionen.

  6. Wählen Sie als Kubernetes-Namespace den Kubernetes-Namespace aus, der das Servicekonto und die Workload enthält. Optional können Sie den Namen eines Namespace angeben, der nicht im Cluster vorhanden ist.

  7. Wählen Sie für das Kubernetes-Servicekonto das zu verwendende Kubernetes-Servicekonto aus. Das Manifest für Ihre Kubernetes-Workload muss dieses Servicekonto angeben. Optional können Sie den Namen eines Servicekontos angeben, das nicht im Cluster vorhanden ist.

  8. (Optional) Wählen Sie für die Tags die Option Tag hinzufügen aus, um Metadaten in einem Schlüssel-Wert-Paar hinzuzufügen. Diese Tags werden auf die Zuordnung angewendet und können in IAM-Richtlinien verwendet werden.

    Sie können diesen Schritt wiederholen, um mehrere Regionen hinzuzufügen.

  9. Wählen Sie Erstellen aus.

Erstellung einer Pod-Identity-Zuordnung (AWS-CLI)

  1. Wenn Sie Ihrer IAM-Rolle eine vorhandene IAM-Richtlinie zuordnen möchten, fahren Sie mit dem nächsten Schritt fort.

    Erstellen Sie eine IAM-Richtlinie. Sie können eine eigene Richtlinie erstellen oder eine von AWS verwaltete Richtlinie kopieren, die bereits einige der benötigten Berechtigungen erteilt, und sie an Ihre spezifischen Anforderungen anpassen. Weitere Informationen finden Sie unter Erstellen von IAM-Richtlinien im IAM-Benutzerhandbuch.

    1. Erstellen Sie eine Datei, welche die Berechtigungen für die AWS-Services enthält, auf die Ihre Pods Zugriff haben sollen. Eine Liste aller Aktionen für alle AWS-Services finden Sie unter Referenz zur Service-Autorisierung.

      Sie können den folgenden Befehl ausführen, um eine Beispiel-Richtliniendatei zu erstellen, die schreibgeschützten Zugriff auf einen Amazon-S3-Bucket gewährt. Sie können optional Konfigurationsinformationen oder ein Bootstrap-Skript in diesem Bucket speichern und die Container in Ihrem Pod können die Datei aus dem Bucket lesen und in Ihre Anwendung laden. Wenn Sie diese Beispielrichtlinie erstellen möchten, kopieren Sie den folgenden Inhalt auf Ihr Gerät. Ersetzen Sie my-pod-secrets-bucket durch Ihren Bucket-Namen und führen Sie den Befehl aus.

      cat >my-policy.json <<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::my-pod-secrets-bucket" } ] } EOF
    2. Erstellen Sie die IAM-Richtlinie.

      aws iam create-policy --policy-name my-policy --policy-document file://my-policy.json
  2. Erstellen Sie eine IAM-Rolle und ordnen Sie diese einem Kubernetes- Servicekonto zu.

    1. Wenn Sie ein vorhandenes Kubernetes-Servicekonto haben, das eine IAM-Rolle annehmen soll, können Sie diesen Schritt überspringen.

      Erstellen Sie ein Kubernetes-Servicekonto. Kopieren Sie den folgenden Inhalt auf Ihr Gerät. Ersetzen Sie my-service-account durch Ihren Wunschnamen und default durch einen anderen Namespace, falls erforderlich. Wenn Sie default ändern, muss der Namespace bereits vorhanden sein.

      cat >my-service-account.yaml <<EOF apiVersion: v1 kind: ServiceAccount metadata: name: my-service-account namespace: default EOF kubectl apply -f my-service-account.yaml

      Führen Sie den folgenden Befehl aus.

      kubectl apply -f my-service-account.yaml
    2. Führen Sie den folgenden Befehl aus, um eine Vertrauensrichtlinie für die IAM-Rolle zu erstellen.

      cat >trust-relationship.json <<EOF { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowEksAuthToAssumeRoleForPodIdentity", "Effect": "Allow", "Principal": { "Service": "pods.eks.amazonaws.com" }, "Action": [ "sts:AssumeRole", "sts:TagSession" ] } ] } EOF
    3. Erstellen Sie die -Rolle. Ersetzen Sie my-role durch einen Namen für Ihre IAM-Rolle und my-role-description durch eine Beschreibung für Ihre Rolle.

      aws iam create-role --role-name my-role --assume-role-policy-document file://trust-relationship.json --description "my-role-description"
    4. Hängen Sie eine IAM-Richtlinie an Ihre Rolle an. Ersetzen Sie my-role durch den Namen Ihrer IAM-Rolle und my-policy durch den Namen einer vorhandenen Richtlinie, die Sie erstellt haben.

      aws iam attach-role-policy --role-name my-role --policy-arn=arn:aws:iam::111122223333:policy/my-policy
      Anmerkung

      Im Gegensatz zu IAM-Rollen für Servicekonten verwendet EKS Pod Identity keine Annotation im Servicekonto.

    5. Führen Sie den folgenden Befehl aus, um die Zuordnung zu erstellen. Ersetzen Sie my-cluster durch den Namen des Clusters, my-service-account durch Ihren Wunschnamen und default durch einen anderen Namespace, falls erforderlich.

      aws eks create-pod-identity-association --cluster-name my-cluster --role-arn arn:aws:iam::111122223333:role/my-role --namespace default --service-account my-service-account

      Eine Beispielausgabe sieht wie folgt aus.

      { "association": { "clusterName": "my-cluster", "namespace": "default", "serviceAccount": "my-service-account", "roleArn": "arn:aws:iam::111122223333:role/my-role", "associationArn": "arn:aws::111122223333:podidentityassociation/my-cluster/a-abcdefghijklmnop1", "associationId": "a-abcdefghijklmnop1", "tags": {}, "createdAt": 1700862734.922, "modifiedAt": 1700862734.922 } }
      Anmerkung

      Sie können den Namen eines Namespace und eines Servicekontos angeben, der bzw. das nicht im Cluster vorhanden ist. Sie müssen den Namespace, das Servicekonto und die Workload erstellen, die das Servicekonto verwendet, damit die EKS-Pod-Identity-Zuordnung funktioniert.

Konfiguration bestätigen

  1. Stellen Sie sicher, dass die Vertrauensrichtlinie der IAM-Rolle korrekt konfiguriert ist.

    aws iam get-role --role-name my-role --query Role.AssumeRolePolicyDocument

    Eine Beispielausgabe sieht wie folgt aus.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "Allow EKS Auth service to assume this role for Pod Identities", "Effect": "Allow", "Principal": { "Service": "pods.eks.amazonaws.com" }, "Action": [ "sts:AssumeRole", "sts:TagSession" ] } ] }
  2. Stellen Sie sicher, dass die Richtlinie, die Sie in einem vorherigen Schritt an Ihre Rolle angehängt haben, an die Rolle angehängt ist.

    aws iam list-attached-role-policies --role-name my-role --query 'AttachedPolicies[].PolicyArn' --output text

    Eine Beispielausgabe sieht wie folgt aus.

    arn:aws:iam::111122223333:policy/my-policy
  3. Legen Sie eine Variable fest, um den Amazon-Ressourcennamen (ARN) der Richtlinie zu speichern, die Sie verwenden möchten. Ersetzen Sie my-policy durch den Namen der Richtlinie, für die Sie Berechtigungen überprüfen möchten.

    export policy_arn=arn:aws:iam::111122223333:policy/my-policy
  4. Zeigen Sie die Standardversion der Richtlinie an.

    aws iam get-policy --policy-arn $policy_arn

    Eine Beispielausgabe sieht wie folgt aus.

    { "Policy": { "PolicyName": "my-policy", "PolicyId": "EXAMPLEBIOWGLDEXAMPLE", "Arn": "arn:aws:iam::111122223333:policy/my-policy", "Path": "/", "DefaultVersionId": "v1", [...] } }
  5. Überprüfen Sie den Inhalt der Richtlinie, um sicherzustellen, dass sie alle Berechtigungen enthält, die Ihr Pod benötigt. Ersetzen Sie im folgenden Befehl 1 durch die Version, die in der vorherigen Ausgabe zurückgegeben wurde.

    aws iam get-policy-version --policy-arn $policy_arn --version-id v1

    Eine Beispielausgabe sieht wie folgt aus.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::my-pod-secrets-bucket" } ] }

    Wenn Sie die Beispielrichtlinie in einem vorherigen Schritt erstellt haben, ist Ihre Ausgabe dieselbe. Wenn Sie eine andere Richtlinie erstellt haben, sieht der Beispiel-Inhalt anders aus.

Nächste Schritte

Konfiguration von Pods für den Zugriff auf AWS-Services mit Servicekonten