Erstellen einer IAM-Rolle und -Richtlinie für Ihr Servicekonto - Amazon EKS

Erstellen einer IAM-Rolle und -Richtlinie für Ihr Servicekonto

Sie müssen eine IAM-Richtlinie erstellen, die die Berechtigungen angibt, die die Container in Ihren Pods haben sollen. Es gibt verschiedene Möglichkeiten, eine neue IAM-Berechtigungsrichtlinie zu erstellen. Eine Möglichkeit besteht darin, eine komplette, von AWS verwaltete Richtlinie zu kopieren, die bereits einige der gewünschten Bedingungen erfüllt, und sie dann an Ihre spezifischen Anforderungen anzupassen. Weitere Informationen finden Sie unter Erstellen einer neuen Richtlinie im IAM-Benutzerhandbuch.

Sie müssen auch eine IAM-Rolle für Ihre Kubernetes-Servicekonten erstellen, die Sie verwenden können, bevor Sie sie mit einem Servicekonto verknüpfen. Die Vertrauensstellung gilt für Ihren Cluster und Ihr Servicekonto, sodass jede Kombination aus Cluster und Servicekonto eine eigene Rolle erfordert. Anschließend können Sie der Rolle eine bestimmte IAM-Richtlinie anfügen, die den Containern in Ihren Pods die gewünschten Berechtigungen erteilt. Die entsprechende Vorgehensweise wird nachfolgend beschrieben.

Erstellen Sie eine IAM-Richtlinie

In diesem Verfahren bieten wir zwei Beispielrichtlinien an, die Sie für Ihre Anwendung verwenden können:

  • Eine Richtlinie, um schreibgeschützten Zugriff auf einen Amazon-S3-Bucket zu erlauben. Sie können 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.

  • Eine Richtlinie, um kostenpflichtige Container-Abbilder von zuzulassen AWS Marketplace.

  1. Öffnen Sie die IAM-Konsole unter https://console.aws.amazon.com/iam/.

  2. Wählen Sie im linken Navigationsbereich Policies (Richtlinien) und anschließend Create Policy (Richtlinie erstellen) aus.

  3. Wählen Sie den Tab JSON.

  4. Fügen Sie im Feld Policy Document (Richtliniendokument) eine der folgenden Richtlinien ein, die auf Ihre Servicekonten angewendet werden sollen, oder fügen Sie Ihr eigenes Richtliniendokument in das Feld ein. Sie können auch den visuellen Editor verwenden, um Ihre eigene Richtlinie zu erstellen.

    Das folgende Beispiel erlaubt Berechtigungen für den Amazon-S3-Bucket my-pod-secrets-bucket. Sie können das Richtliniendokument Ihren individuellen Anforderungen anpassen.

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

    Das folgende Beispiel erteilt die erforderlichen Berechtigungen, um ein kostenpflichtiges Container-Abbild von zu verwenden AWS Marketplace.

    { "Version": "2012-10-17", "Statement": [ { "Action": [ "aws-marketplace:RegisterUsage" ], "Effect": "Allow", "Resource": "*" } ] }
  5. Wählen Sie Review policy (Richtlinie prüfen).

  6. Geben Sie einen Namen und eine Beschreibung für Ihre Richtlinie ein und wählen Sie dann Create policy (Richtlinie erstellen) aus.

  7. Notieren Sie den Amazon-Ressourcennamen (ARN) der Richtlinie, um sie später beim Erstellen Ihrer Rolle zu verwenden.

Erstellen Sie eine IAM-Rolle für ein Servicekonto

Erstellen Sie eine IAM-Rolle für Ihr Servicekonto von Kubernetes. Sie können eksctl, AWS Management Console oder AWS CLI verwenden, um die Rolle zu erstellen.

Voraussetzungen

  • Einen vorhandenen -Cluster. Wenn Sie keine haben, können Sie eine mit einer der Erste Schritte mit Amazon EKS-Hilfslinien erstellen.

  • Wenn Sie AWS Management Console oder AWS CLI zum Erstellen der Rolle verwenden, müssen Sie einen vorhandenen IAM-OIDC-Anbieter für Ihren Cluster haben. Weitere Informationen finden Sie unter Erstellen Sie einen IAM-OIDC-Anbieter für Ihren Cluster.

  • Eine vorhandene IAM-Richtlinie, die die Berechtigungen für die AWS-Ressourcen enthält, auf die Ihr Dienstkonto Zugriff benötigt. Weitere Informationen finden Sie unter Erstellen Sie eine IAM-Richtlinie.

Sie können die IAM-Rolle mit eksctl, AWS Management Console oder AWS CLI erstellen. Wählen Sie die Registerkarte mit dem Namen des Werkzeugs aus, mit dem Sie die Rolle erstellen möchten.

eksctl

Erstellen Sie das Servicekonto und die IAM-Rolle mit dem folgenden Befehl. Ersetzen Sie example values durch Ihre eigenen Werte.

eksctl create iamserviceaccount \ --name kubernetes_service_account_name \ --namespace kubernetes_service_account_namespace \ --cluster my-cluster \ --attach-policy-arn IAM_policy_ARN \ --approve \ --override-existing-serviceaccounts

Es wird eine AWS CloudFormation-Vorlage bereitgestellt, die eine IAM-Rolle erstellt und ihr die IAM-Richtlinie anfügt. Die Rolle ist einem Kubernetes-Servicekonto zugeordnet. Wenn Ihr Cluster keinen vorhandenen IAM-OIDC-Anbieter hatte, wurde einer erstellt. Wenn das Dienstkonto nicht vorhanden ist, wird es in dem von Ihnen bereitgestellten Namespace erstellt. Wenn das Dienstkonto vorhanden ist, wird es mit annotiert eks.amazonaws.com/role-arn:arn:aws:iam::your-account-id:role/iam-role-name-that-was-created.

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

  2. Wählen Sie den Namen Ihres Clusters und dann die Registerkarte Konfiguration aus.

  3. Notieren Sie im Abschnitt Details den Wert der OpenID-Connect-Provider-URL.

  4. Öffnen Sie die IAM-Konsole unter https://console.aws.amazon.com/iam/.

  5. Wählen Sie im linken Navigationsbereich Roles aus. Wählen Sie dann Create Role.

  6. Wählen Sie im Abschnitt Trusted entity type (Typ der vertrauenswürdigen Entität) die Option Web identity (Web-Identität) aus.

  7. Gehen Sie im Abschnitt Web identity (Web-Identität) wie folgt vor:

    1. Wählen Sie für Identity provider (Identitätsanbieter) die URL für Ihren Cluster aus.

    2. Wählen Sie für Audience (Zielgruppe) sts.amazonaws.com.

  8. Wählen Sie Next (Weiter).

  9. Geben Sie im Feld Filter policies (Filterrichtlinien) den Namen der IAM-Richtlinie mit den Berechtigungen ein, die Ihr Servicekonto verwenden soll.

  10. Aktivieren Sie in den Suchergebnissen das Kontrollkästchen links neben der zu verwendenden Richtlinie.

  11. Wählen Sie Next (Weiter).

  12. Geben Sie unter Role name (Rollenname), einen eindeutigen Namen für Ihre Rolle ein, z. B. myRole.

  13. Geben Sie unter Description (Beschreibung) einen beschreibenden Text wie Amazon EKS - Service account role ein.

  14. Wählen Sie Create role (Rolle erstellen) aus.

  15. Nachdem die Rolle erstellt wurde, wählen Sie die Rolle in der Konsole aus, um sie zur Bearbeitung zu öffnen.

  16. Wählen Sie die Registerkarte Trust Relationships (Vertrauensstellungen) und dann Edit trust policy (Vertrauensrichtlinie bearbeiten) aus.

  17. Suchen Sie die Zeile, die wie folgt aussieht:

    "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E:aud": "sts.amazonaws.com"

    Ändern Sie die Zeile so, dass sie wie die folgende Zeile aussieht. Ersetzen Sie EXAMPLED539D4633E53DE1B716D3041E durch die OIDC-Anbieter-ID Ihres Clusters und region-code durch den Code der AWS-Region, in der sich der Cluster befindet. Ersetzen Sie aud durch sub sowie KUBERNETES_SERVICE_ACCOUNT_NAMESPACE und KUBERNETES_SERVICE_ACCOUNT_NAME durch den Namen Ihres Kubernetes-Servicekontos und den Kubernetes-Namespace, in dem sich das Konto befindet.

    "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E:sub": "system:serviceaccount:KUBERNETES_SERVICE_ACCOUNT_NAMESPACE:KUBERNETES_SERVICE_ACCOUNT_NAME"
    Anmerkung

    Wenn Sie noch kein Dienstkonto von Kubernetes 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 anzeigen.

  18. Wählen Sie Update Policy (Richtlinie aktualisieren) aus, um den Vorgang abzuschließen.

AWS CLI
  1. Legen Sie Ihre AWS-Konto-ID mit dem folgenden Befehl auf eine Umgebungsvariable fest.

    ACCOUNT_ID=$(aws sts get-caller-identity --query "Account" --output text)
  2. Legen Sie Ihren OIDC-Identitätsanbieter mit dem folgenden Befehl auf eine Umgebungsvariable fest. Ersetzen Sie example values durch Ihre eigenen Werte.

    Wichtig

    Sie müssen mindestens Version 1.22.30 oder 2.4.9 von AWS CLI verwenden, um die richtige Ausgabe von diesem Befehl zu erhalten. Weitere Informationen finden Sie unter Installieren der AWS CLI im AWS Command Line Interface-Leitfaden.

    OIDC_PROVIDER=$(aws eks describe-cluster --name cluster-name --query "cluster.identity.oidc.issuer" --output text | sed -e "s/^https:\/\///")
  3. Kopieren Sie den folgenden Codeblock auf Ihren Computer und ersetzen Sie das example values durch Ihre eigenen Werte.

    read -r -d '' TRUST_RELATIONSHIP <<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}:sub": "system:serviceaccount:my-namespace:my-service-account" } } } ] } EOF echo "${TRUST_RELATIONSHIP}" > trust.json
  4. Führen Sie den geänderten Codeblock aus dem vorherigen Schritt aus, um eine Datei mit dem Namen zu erstellen trust.json.

  5. Führen Sie den folgenden AWS CLI-Befehl aus, um die Rolle zu erstellen.

    aws iam create-role --role-name IAM_ROLE_NAME --assume-role-policy-document file://trust.json --description "IAM_ROLE_DESCRIPTION"
  6. Führen Sie den folgenden Befehl aus, um Ihre IAM-Richtlinie an Ihre Rolle anzuhängen.

    aws iam attach-role-policy --role-name IAM_ROLE_NAME --policy-arn=IAM_POLICY_ARN