Einrichten von Zugriffsberechtigungen mit IAM Rollen für Dienstkonten (IRSA) - Amazon EMR

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.

Einrichten von Zugriffsberechtigungen mit IAM Rollen für Dienstkonten (IRSA)

Standardmäßig haben der Livy-Server und die Treiber und Executoren der Spark-Anwendung keinen Zugriff auf Ressourcen. AWS Das Serverdienstkonto und das Spark-Dienstkonto steuern den Zugriff auf AWS Ressourcen für den Livy-Server und die Pods der Spark-Anwendung. Um Zugriff zu gewähren, müssen Sie die Dienstkonten einer IAM Rolle zuordnen, die über die erforderlichen AWS Berechtigungen verfügt.

Sie können die IRSA Zuordnung vor der Installation von Apache Livy, während der Installation oder nach Abschluss der Installation einrichten.

Einrichtung IRSA während der Installation von Apache Livy (für ein Serverdienstkonto)

Anmerkung

Diese Zuordnung wird nur für das Serverdienstkonto unterstützt.

  1. Stellen Sie sicher, dass Sie die Einrichtung von Apache Livy für Amazon abgeschlossen haben EKS und gerade dabei sind, Apache Livy mit Amazon EMR EMR on zu installieren. EKS

  2. Erstellen Sie einen Kubernetes-Namespace für den Livy-Server. In diesem Beispiel lautet der Name des Namespaces. livy-ns

  3. Erstellen Sie eine IAM Richtlinie, die die Berechtigungen AWS-Services für die enthält, auf die Ihre Pods zugreifen sollen. Im folgenden Beispiel wird eine IAM Richtlinie zum Abrufen von Amazon S3 S3-Ressourcen für den Spark-Einstiegspunkt erstellt.

    cat >my-policy.json <<EOF{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::my-spark-entrypoint-bucket" } ] } EOF aws iam create-policy --policy-name my-policy --policy-document file://my-policy.json
  4. Verwenden Sie den folgenden Befehl, um Ihre AWS-Konto ID auf eine Variable festzulegen.

    account_id=$(aws sts get-caller-identity --query "Account" --output text)
  5. Setzen Sie den OpenID Connect (OIDC) -Identitätsanbieter Ihres Clusters auf eine Umgebungsvariable.

    oidc_provider=$(aws eks describe-cluster --name my-cluster --region $AWS_REGION --query "cluster.identity.oidc.issuer" --output text | sed -e "s/^https:\/\///")
  6. Legen Sie Variablen für den Namespace und den Namen des Servicekontos fest. Achten Sie darauf, Ihre eigenen Werte zu verwenden.

    export namespace=default export service_account=my-service-account
  7. Erstellen Sie mit dem folgenden Befehl eine Vertrauensrichtliniendatei. Wenn Sie allen Dienstkonten in einem Namespace Zugriff auf die Rolle gewähren möchten, kopieren Sie den folgenden Befehl und ersetzen Sie ihn durch StringLike und StringEquals $service_account ersetzen * Sie ihn durch.

    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
  8. Erstellen Sie die -Rolle.

    aws iam create-role --role-name my-role --assume-role-policy-document file://trust-relationship.json --description "my-role-description"
  9. Verwenden Sie den folgenden Helm-Installationsbefehl, serviceAccount.executionRoleArn um die Zuweisung festzulegen. IRSA Das Folgende ist ein Beispiel für den Befehl Helm install. Den entsprechenden ECR-registry-account Wert für Ihre bei Amazon AWS-Region registrierten Konten ECR finden Sie nach Regionen.

    helm install livy-demo \ oci://895885662937.dkr.ecr.us-west-2.amazonaws.com/livy \ --version 7.3.0 \ --namespace livy-ns \ --set image=ECR-registry-account.dkr.ecr.region-id.amazonaws.com/livy/emr-7.3.0:latest \ --set sparkNamespace=spark-ns \ --set serviceAccount.executionRoleArn=arn:aws:iam::123456789012:role/my-role

Zuordnung IRSA zu einem Spark-Servicekonto

Bevor Sie eine Zuordnung IRSA zu einem Spark-Dienstkonto vornehmen, stellen Sie sicher, dass Sie die folgenden Schritte abgeschlossen haben:

Gehen Sie wie folgt vor, um IRSA eine Zuordnung zu Ihrem Spark-Dienstkonto vorzunehmen:

  1. Verwenden Sie den folgenden Befehl, um das Spark-Dienstkonto abzurufen.

    SPARK_NAMESPACE=<spark-ns> LIVY_APP_NAME=<livy-app-name> kubectl --namespace $SPARK_NAMESPACE describe sa -l "app.kubernetes.io/instance=$LIVY_APP_NAME" | awk '/^Name:/ {print $2}'
  2. Legen Sie Ihre Variablen für den Namespace und den Namen des Dienstkontos fest.

    export namespace=default export service_account=my-service-account
  3. Verwenden Sie den folgenden Befehl, um eine Vertrauensrichtliniendatei für die IAM Rolle zu erstellen. Das folgende Beispiel erteilt allen Dienstkonten innerhalb des Namespace die Erlaubnis, die Rolle zu verwenden. Ersetzen Sie dazu durch StringLike und StringEquals ersetzen Sie es $service_account durch *.

    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
  4. Erstellen Sie die -Rolle.

    aws iam create-role --role-name my-role --assume-role-policy-document file://trust-relationship.json --description "my-role-description"
  5. Ordnen Sie das Server- oder Spark-Dienstkonto mit dem folgenden eksctl Befehl zu. Stellen Sie sicher, dass Sie Ihre eigenen Werte verwenden.

    eksctl create iamserviceaccount --name spark-sa \ --namespace spark-namespace --cluster livy-eks-cluster \ --attach-role-arn arn:aws:iam::0123456789012:role/my-role \ --approve --override-existing-serviceaccounts