Zuweisen von IAM-Rollen zu Kubernetes-Dienstkonten - Amazon EKS

Hilf mit, diese Seite 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.

Wenn Sie zu diesem Benutzerhandbuch beitragen möchten, wählen Sie den GitHub Link Diese Seite bearbeiten auf, der sich im rechten Bereich jeder Seite befindet.

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.

Zuweisen von IAM-Rollen zu Kubernetes-Dienstkonten

In diesem Thema wird beschrieben, wie Sie ein Kubernetes-Dienstkonto so konfigurieren, dass es eine AWS Identity and Access Management (IAM) -Rolle übernimmt. Alle Pods, die für die Verwendung des Dienstkontos konfiguriert sind, können dann auf jeden AWS Dienst zugreifen, für den die Rolle Zugriffsberechtigungen besitzt.

Voraussetzungen

  • Einen vorhandenen -Cluster. Wenn Sie noch keinen haben, können Sie einen erstellen, indem Sie einer der Anleitungen unter folgenErste Schritte mit Amazon EKS.

  • Ein vorhandener Anbieter für IAM OpenID Connect (OIDC) für Ihren Cluster. Informationen zum Feststellen, ob Sie bereits einen haben oder wie Sie einen erstellen können, finden Sie unter Erstellen Sie einen IAM-OIDC-Anbieter für Ihren Cluster.

  • Version 2.12.3 oder höher oder Version 1.27.160 oder höher der auf Ihrem Gerät installierten und konfigurierten AWS Befehlszeilenschnittstelle (AWS CLI) oder AWS CloudShell. Um Ihre aktuelle Version zu überprüfen, verwenden Sie aws --version | cut -d / -f2 | cut -d ' ' -f1. Paketmanager wie yumapt-get, oder Homebrew für macOS liegen oft mehrere Versionen hinter der neuesten Version der AWS CLI. Informationen zur Installation der neuesten Version finden Sie unter Installation und Schnellkonfiguration mit aws configure im Benutzerhandbuch für die AWS Befehlszeilenschnittstelle. Die AWS CLI-Version, in der installiert ist, AWS CloudShell kann auch mehrere Versionen hinter der neuesten Version liegen. Informationen zur Aktualisierung finden Sie im AWS CloudShell Benutzerhandbuch unter AWS CLI in Ihrem Home-Verzeichnis installieren.

  • Das kubectl-Befehlszeilen-Tool ist auf Ihrem Gerät oder in der AWS CloudShell installiert. Die Version kann mit der Kubernetes-Version Ihres Clusters identisch oder bis zu einer Nebenversion sein, die vor oder nach der Kubernetes-Version liegt. 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 Connect kubectl mit einem EKS-Cluster, indem Sie eine kubeconfig-Datei erstellen.

Schritt 1: IAM-Richtlinie erstellen

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

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

  2. Erstellen Sie eine Datei, die die Berechtigungen für die AWS Dienste enthält, auf die Ihre Pods zugreifen sollen. Eine Liste aller Aktionen für alle AWS Dienste finden Sie in der Referenz zur Dienstautorisierung.

    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. my-pod-secrets-bucketErsetzen Sie es 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
  3. Erstellen Sie die IAM-Richtlinie.

    aws iam create-policy --policy-name my-policy --policy-document file://my-policy.json

Schritt 2: IAM-Rolle erstellen und zuordnen

Erstellen Sie eine IAM-Rolle und verknüpfen Sie sie mit einem Kubernetes-Dienstkonto. Sie können entweder eksctl oder die AWS CLI verwenden.

Rolle erstellen und zuordnen (eksctl)

Version 0.204.0 oder höher des eksctl-Befehlszeilen-Tools, das auf Ihrem Computer oder in der AWS CloudShell installiert ist. Informationen zum Installieren und Aktualisieren von eksctl finden Sie in der Dokumentation zu eksctl unter Installation.

my-service-accountErsetzen Sie es durch den Namen des Kubernetes-Dienstkontos, das Sie erstellen und mit einer eksctl IAM-Rolle verknüpfen möchten. defaultErsetzen Sie es durch den Namespace, in dem Sie das eksctl Dienstkonto erstellen möchten. Ersetzen Sie my-cluster mit dem Namen Ihres Clusters. my-roleErsetzen Sie es durch den Namen der Rolle, der Sie das Dienstkonto zuordnen möchten. Falls es noch nicht existiert, eksctl erstellt es für Sie. 111122223333Ersetzen Sie es durch Ihre Konto-ID und my-policy durch den Namen einer bestehenden Richtlinie.

eksctl create iamserviceaccount --name my-service-account --namespace default --cluster my-cluster --role-name my-role \ --attach-policy-arn arn:aws: iam::111122223333:policy/my-policy --approve
Wichtig

Wenn die Rolle oder das Servicekonto bereits vorhanden ist, schlägt der vorherige Befehl möglicherweise fehl. eksctl hat verschiedene Optionen, die Sie in diesen Situationen angeben können. Führen Sie eksctl create iamserviceaccount --help aus, um weitere Informationen zu erhalten.

Rolle erstellen und zuordnen (AWS CLI)

Wenn Sie bereits ein Kubernetes-Dienstkonto haben, dem Sie eine IAM-Rolle zuweisen möchten, können Sie diesen Schritt überspringen.

  1. Erstellen Sie ein Kubernetes-Servicekonto. Kopieren Sie den folgenden Inhalt auf Ihr Gerät. my-service-accountErsetzen Sie es durch Ihren gewünschten Namen und gegebenenfalls default durch einen anderen Namespace. Wenn Sie eine Änderung vornehmendefault, muss der Namespace 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
  2. Setzen Sie Ihre AWS Konto-ID mit dem folgenden Befehl auf eine Umgebungsvariable.

    account_id=$(aws sts get-caller-identity --query "Account" --output text)
  3. Stellen Sie den OIDC-Identitätsanbieter Ihres Clusters mit dem folgenden Befehl auf eine Umgebungsvariable ein. Ersetzen Sie my-cluster mit dem Namen Ihres Clusters.

    oidc_provider=$(aws eks describe-cluster --name my-cluster --region $AWS_REGION --query "cluster.identity.oidc.issuer" --output text | sed -e "s/^https:\/\///")
  4. Legen Sie Variablen für den Namespace und den Namen des Servicekontos fest. my-service-accountErsetzen Sie es durch das Kubernetes-Dienstkonto, das Sie die Rolle übernehmen möchten. Ersetzen Sie es default durch den Namespace des Dienstkontos.

    export namespace=default export service_account=my-service-account
  5. Führen Sie den folgenden Befehl aus, um eine Vertrauensrichtlinie für die IAM-Rolle zu erstellen. Wenn Sie allen Servicekonten innerhalb eines Namespaces die Verwendung der Rolle erlauben möchten, kopieren Sie den folgenden Inhalt auf Ihr Gerät. Ersetze StringEquals durch StringLike und ersetze $service_account durch*. Sie können mehrere Einträge in den Bedingungen StringEquals und StringLike unten hinzufügen, um mehreren Servicekonten oder Namespaces das Annehmen der Rolle zu erlauben. Weitere Informationen dazu, wie Sie zulassen können, dass Rollen von einem anderen AWS Konto als dem Konto, in dem sich Ihr Cluster befindet, diese Rolle übernehmen können, finden Sie unterAuthentifizieren Sie sich bei einem anderen Konto mit IRSA.

    cat >trust-relationship.json <<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws: iam::$account_id:oidc-provider/$oidc_provider" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "$oidc_provider:aud": "sts.amazonaws.com", "$oidc_provider:sub": "system:serviceaccount:$namespace:$service_account" } } } ] } EOF
  6. 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"
  7. 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::$account_id:policy/my-policy
  8. Annotieren Sie Ihr Servicekonto mit dem Amazon-Ressourcennamen (ARN) der IAM-Rolle, die das Servicekonto annehmen soll. Ersetzen Sie my-role durch den Namen Ihrer bestehenden IAM-Rolle. Angenommen, Sie haben in einem vorherigen Schritt zugelassen, dass eine Rolle von einem anderen AWS Konto als dem Konto, in dem sich Ihr Cluster befindet, diese Rolle übernimmt. Stellen Sie dann sicher, dass Sie das AWS Konto und die Rolle des anderen Kontos angeben. Weitere Informationen finden Sie unter Authentifizieren Sie sich bei einem anderen Konto mit IRSA.

    kubectl annotate serviceaccount -n $namespace $service_account eks.amazonaws.com/role-arn=arn:aws: iam::$account_id:role/my-role
  9. (Optional) Konfigurieren Sie den AWS Security Token Service-Endpunkt für ein Dienstkonto. AWS empfiehlt die Verwendung eines regionalen AWS STS-Endpunkts anstelle des globalen Endpunkts. Dies reduziert die Latenz, bietet integrierte Redundanz und erhöht die Gültigkeit der Sitzungstoken.

Schritt 3: Konfiguration bestätigen

  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": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws: iam::111122223333:oidc-provider/oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:default:my-service-account", "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com" } } } ] }
  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. my-policyErsetzen Sie es durch den Namen der Richtlinie, für die Sie die 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. Sehen Sie sich den Inhalt der Richtlinie an, um sicherzustellen, dass die Richtlinie alle Berechtigungen enthält, die Ihr Pod benötigt. Falls erforderlich, ersetzen Sie 1 den folgenden Befehl 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, ist der example Inhalt anders.

  6. Vergewissern Sie sich, dass das Kubernetes-Dienstkonto mit der Rolle versehen ist.

    kubectl describe serviceaccount my-service-account -n default

    Eine Beispielausgabe sieht wie folgt aus.

    Name: my-service-account Namespace: default Annotations: eks.amazonaws.com/role-arn: arn:aws: iam::111122223333:role/my-role Image pull secrets: <none> Mountable secrets: my-service-account-token-qqjfl Tokens: my-service-account-token-qqjfl [...]

Nächste Schritte