Einem Kubernetes Dienstkonto eine IAM Rolle zuweisen - Amazon EKS

Hilf mit, diese Seite zu verbessern

Möchten Sie zu diesem Benutzerhandbuch beitragen? Scrollen Sie zum Ende dieser Seite und wählen Sie Diese Seite bearbeiten am aus GitHub. Ihre Beiträge werden dazu beitragen, unser Benutzerhandbuch für alle zu verbessern.

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Einem Kubernetes Dienstkonto eine IAM Rolle zuweisen

In diesem Thema wird beschrieben, wie Sie ein Kubernetes Dienstkonto so konfigurieren, dass es eine AWS Identity and Access Management (IAM) -Rolle bei EKS Pod Identity annimmt. JederPods, der für die Verwendung des Dienstkontos konfiguriert ist, kann dann auf jedes Konto zugreifen, für AWS-Service das die Rolle über Zugriffsberechtigungen verfügt.

Um eine EKS Pod Identity-Zuordnung zu erstellen, gibt es nur einen einzigen Schritt: Sie erstellen die Zuordnung EKS mithilfe der Tools AWS Management Console AWS CLI, AWS SDKs, AWS CloudFormation und anderer Tools. Es gibt keine Daten oder Metadaten zu den Zuordnungen innerhalb des Clusters in Kubernetes-Objekten und Sie fügen den Servicekonten keine Anmerkungen hinzu.

Voraussetzungen
  • Einen vorhandenen -Cluster. Wenn Sie keine haben, können Sie eine mit einem der Erste Schritte mit Amazon EKS-Leitfäden erstellen.

  • Der IAM Prinzipal, der die Assoziation erstellt, muss über Folgendes verfügeniam:PassRole:

  • Die neueste Version von ist auf Ihrem Gerät AWS CLI installiert und konfiguriert oder AWS CloudShell. 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 von AWS CLI. Informationen zur Installation der neuesten Version finden Sie unter Installation, Aktualisierung und Deinstallation der AWS CLI und Schnellkonfiguration mit aws configure im AWS Command Line Interface Benutzerhandbuch. Die in der installierte AWS CLI Version AWS CloudShell kann auch mehrere Versionen hinter der neuesten Version liegen. Informationen zur Aktualisierung finden Sie unter Installation AWS CLI in Ihrem Home-Verzeichnis im AWS CloudShell Benutzerhandbuch.

  • Das kubectl-Befehlszeilen-Tool ist auf Ihrem Gerät oder in der AWS CloudShell installiert. Die Version kann der Kubernetes-Version Ihres Clusters entsprechen oder eine 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 Einrichten kubectl und eksctl.

  • Eine vorhandene kubectl config-Datei, die Ihre Clusterkonfiguration enthält. Informationen zum Erstellen einer kubectl config-Datei finden Sie unter Stellen Sie eine Connect kubectl zu einem EKS Cluster her, indem Sie eine kubeconfig Datei erstellen.

Die EKS Pod Identity-Zuordnung erstellen

AWS Management Console
  1. Öffnen Sie die EKS Amazon-Konsole unter https://console.aws.amazon.com/eks/home#/clusters.

  2. Wählen Sie im linken Navigationsbereich Clusters und anschließend den Namen des Clusters aus, für den Sie das EKS Pod Identity Agent-Add-on 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 für die IAMRolle die IAM Rolle mit den Berechtigungen aus, die der Workload haben soll.

    Anmerkung

    Die Liste enthält nur Rollen, für die die folgende Vertrauensrichtlinie gilt, die es EKS Pod Identity ermöglicht, sie zu verwenden.

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

    EKSPod Identity übernimmt AssumeRole die IAM Rolle, bevor die temporären Anmeldeinformationen an Ihre Pods weitergegeben werden.

    sts:TagSession

    EKSPod Identity verwendetTagSession, um Sitzungs-Tags in die Anfragen an aufzunehmen AWS STS.

    Sie können diese Tags im Element condition keys in der Vertrauensrichtlinie verwenden, um zu beschränken, welche Servicekonten, Namespaces und Cluster diese Rolle verwenden dürfen.

    Eine Liste der EKS Amazon-Bedingungsschlüssel finden Sie unter Von Amazon Elastic Kubernetes Service definierte Bedingungen in der Service Authorization Reference. 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 als Kubernetes-Servicekonto das zu verwendende Kubernetes-Servicekonto aus. Im Manifest für Ihre Kubernetes-Workload muss dieses Servicekonto angegeben werden. 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 Create (Erstellen) aus.

AWS CLI
  1. Wenn Sie Ihrer IAM Rolle eine bestehende 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 im IAMBenutzerhandbuch unter IAMRichtlinien erstellen.

    1. Erstellen Sie eine Datei, die 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 in der Service Authorization Reference.

      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 my-pod-secrets-bucket geben Sie Ihren Bucket-Namen ein 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 verknüpfen Sie sie mit einem Kubernetes Dienstkonto.

    1. Wenn Sie bereits über ein Kubernetes Dienstkonto verfügen, für das Sie eine IAM Rolle übernehmen möchten, können Sie diesen Schritt überspringen.

      Ein Kubernetes-Service-Konto aktualisieren Kopieren Sie den folgenden Inhalt auf Ihr Gerät. Ersetzen my-service-account mit deinem Wunschnamen und default mit einem anderen Namespace, falls erforderlich. Wenn du dich änderst default, der Namespace muss bereits existieren.

      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 Vertrauensrichtliniendatei 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. my-roleErsetzen Sie ihn 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. Fügen Sie Ihrer Rolle eine IAM Richtlinie bei. my-roleErsetzen Sie sie 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 Dienstkonten verwendet EKS Pod Identity keine Anmerkung zum Dienstkonto.

    5. Führen Sie den folgenden Befehl aus, um die Zuordnung zu erstellen. Durch my-cluster den Namen des Clusters ersetzen, ersetzen my-service-account mit Ihrem gewünschten Namen und default mit einem 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 Dienstkonto und den Workload, der das Dienstkonto verwendet, erstellen, damit die EKS Pod Identity-Zuordnung funktioniert.

>Konfiguration bestätigen

Stellen Sie sicher, dass die Rolle und das Servicekonto korrekt konfiguriert sind.
  1. Vergewissern Sie sich, 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 my-policy mit dem Namen der Richtlinie, für die Sie Berechtigungen bestätigen 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. Zeigen Sie den Inhalt der Richtlinie an, um sicherzustellen, dass die Richtlinie alle Berechtigungen enthält, die Ihr Pod erfordert. Falls erforderlich, ersetzen 1 im folgenden Befehl mit der 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, dann example Der Inhalt ist anders.

Nächster Schritt

Für pods den Zugriff auf AWS Dienste mit Dienstkonten konfigurieren