Kontoübergreifenden Zugriff für Amazon EMR in EKS einrichten - 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.

Kontoübergreifenden Zugriff für Amazon EMR in EKS einrichten

Sie können kontoübergreifenden Zugriff für Amazon EMR in EKS einrichten. Der kontoübergreifende Zugriff ermöglicht es Benutzern eines AWS-Kontos, Amazon EMR in EKS-Aufträge auszuführen und auf die zugrunde liegenden Daten zuzugreifen, die zu einem anderen AWS-Konto gehören.

Voraussetzungen

Um den kontoübergreifenden Zugriff für Amazon EMR in EKS einzurichten, erledigen Sie Aufgaben, während Sie bei den folgenden AWS-Konten angemeldet sind:

  • AccountA – Ein AWS-Konto, bei dem Sie ein Amazon EMR auf einem virtuellen EKS-Cluster erstellt haben, indem Sie Amazon EMR mit einem Namespace auf einem EKS-Cluster registriert haben.

  • AccountB – Ein AWS-Konto, das einen Amazon-S3-Bucket oder eine DynamoDB-Tabelle enthält, auf die Ihre Amazon EMR in EKS-Aufträge zugreifen sollen.

Sie müssen Folgendes in Ihren AWS-Konten bereithalten, bevor Sie den kontoübergreifenden Zugriff einrichten können:

So greifen Sie auf einen kontoübergreifenden Amazon-S3-Bucket oder eine DynamoDB-Tabelle zu

Gehen Sie wie folgt vor, um den kontoübergreifenden Zugriff für Amazon EMR in EKS einzurichten.

  1. Erstellen Sie einen Amazon-S3-Bucket,cross-account-bucket, in AccountB. Weitere Informationen finden Sie unter Bucket erstellen. Wenn Sie kontenübergreifenden Zugriff auf DynamoDB haben möchten, können Sie auch eine DynamoDB-Tabelle in AccountB erstellen. Weitere Informationen finden Sie unter Erstellen einer DynamoDB-Tabelle.

  2. Erstellen Sie eine Cross-Account-Role-B IAM-Rolle in AccountB, die auf das cross-account-bucket zugreifen kann.

    1. Melden Sie sich an der IAM-Konsole an.

    2. Wählen Sie Rollen und anschließend Neue Rolle Cross-Account-Role-Berstellen aus. Weitere Informationen zum Erstellen von IAM-Rollen finden Sie unter Erstellen von IAM-Rollen im IAM-Benutzerhandbuch.

    3. Erstellen Sie eine IAM-Richtlinie, die die Berechtigungen für den Cross-Account-Role-B Zugriff auf den cross-account-bucket S3-Bucket festlegt, wie die folgende Richtlinienerklärung zeigt. Fügen Sie die IAM-Richtlinie an Cross-Account-Role-B an. Weitere Informationen finden Sie unter Erstellen einer neuen Richtlinie im IAM-Benutzerhandbuch.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:*", "Resource": [ "arn:aws:s3:::cross-account-bucket", "arn:aws:s3:::cross-account-bucket/*" ] } ] }

      Wenn DynamoDB-Zugriff erforderlich ist, erstellen Sie eine IAM-Richtlinie, die Berechtigungen für den Zugriff auf die kontoübergreifende DynamoDB-Tabelle festlegt. Fügen Sie die IAM-Richtlinie an Cross-Account-Role-B an. Weitere Informationen finden Sie unter Erstellen einer Rolle im IAM-Benutzerhandbuch.

      Im Folgenden finden Sie eine Richtlinie für den Zugriff auf eine DynamoDB-Tabelle, CrossAccountTable.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "dynamodb:*", "Resource": "arn:aws:dynamodb:MyRegion:AccountB:table/CrossAccountTable" } ] }
  3. So bearbeiten Sie die Vertrauensbeziehung für die Cross-Account-Role-B-Rolle.

    1. Um die Vertrauensstellung für die Rolle zu konfigurieren, wählen Sie in der IAM-Konsole die Registerkarte Vertrauensbeziehungen für die in Schritt 2 erstellte Rolle aus: Cross-Account-Role-B.

    2. Wählen Sie Vertrauensbeziehungen bearbeiten aus.

    3. Fügen Sie das folgende Richtliniendokument hinzu, das es Ihnen ermöglicht Job-Execution-Role-A in AccountA, diese Cross-Account-Role-B-Rolle zu übernehmen.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AccountA:role/Job-Execution-Role-A" }, "Action": "sts:AssumeRole" } ] }
  4. Erteilen Sie Job-Execution-Role-A in AccountA mmit – STS Assume die Berechtigung, die Rolle Cross-Account-Role-B zu übernehmen.

    1. Wählen Sie in der IAM-Konsole für das AWS-Konto AccountA die Option Job-Execution-Role-A aus.

    2. Fügen Sie die folgende Richtlinienanweisung zu Job-Execution-Role-A hinzu, um die AssumeRole-Aktion in der Rolle Cross-Account-Role-B zu verweigern.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::AccountB:role/Cross-Account-Role-B" } ] }
  5. Stellen Sie für den Zugriff auf Amazon S3 die folgenden spark-submit-Parameter (spark conf) ein, während Sie den Auftrag an Amazon EMR in EKS senden.

    Anmerkung

    Standardmäßig verwendet EMRFS die Rolle Aufgabenausführung, um vom Auftrag aus auf den S3-Bucket zuzugreifen. Wenn customAWSCredentialsProvider jedoch auf AssumeRoleAWSCredentialsProvider gesetzt ist, verwendet EMRFS die entsprechende Rolle, die Sie mit ASSUME_ROLE_CREDENTIALS_ROLE_ARN angeben, und nicht Job-Execution-Role-A für den Amazon-S3-Zugriff.

    • --conf spark.hadoop.fs.s3.customAWSCredentialsProvider=com.amazonaws.emr.AssumeRoleAWSCredentialsProvider

    • --conf spark.kubernetes.driverEnv.ASSUME_ROLE_CREDENTIALS_ROLE_ARN=arn:aws:iam::AccountB:role/Cross-Account-Role-B \

    • --conf spark.executorEnv.ASSUME_ROLE_CREDENTIALS_ROLE_ARN=arn:aws:iam::AccountB:role/Cross-Account-Role-B \

    Anmerkung

    Sie müssen in der ASSUME_ROLE_CREDENTIALS_ROLE_ARN-Auftrag-Spark-Konfiguration sowohl den Executor als auch den Treiber env angeben.

    Für den kontoübergreifenden Zugriff von DynamoDB müssen Sie --conf spark.dynamodb.customAWSCredentialsProvider=com.amazonaws.emr.AssumeRoleAWSCredentialsProvider festlegen.

  6. Führen Sie den Auftrag von Amazon EMR in EKS mit kontoübergreifendem Zugriff aus, wie das folgende Beispiel zeigt.

    aws emr-containers start-job-run \ --virtual-cluster-id 123456 \ --name myjob \ --execution-role-arn execution-role-arn \ --release-label emr-6.2.0-latest \ --job-driver '{"sparkSubmitJobDriver": {"entryPoint": "entryPoint_location", "entryPointArguments": ["arguments_list"], "sparkSubmitParameters": "--class <main_class> --conf spark.executor.instances=2 --conf spark.executor.memory=2G --conf spark.executor.cores=2 --conf spark.driver.cores=1 --conf spark.hadoop.fs.s3.customAWSCredentialsProvider=com.amazonaws.emr.AssumeRoleAWSCredentialsProvider --conf spark.kubernetes.driverEnv.ASSUME_ROLE_CREDENTIALS_ROLE_ARN=arn:aws:iam::AccountB:role/Cross-Account-Role-B --conf spark.executorEnv.ASSUME_ROLE_CREDENTIALS_ROLE_ARN=arn:aws:iam::AccountB:role/Cross-Account-Role-B"}} ' \ --configuration-overrides '{"applicationConfiguration": [{"classification": "spark-defaults", "properties": {"spark.driver.memory": "2G"}}], "monitoringConfiguration": {"cloudWatchMonitoringConfiguration": {"logGroupName": "log_group_name", "logStreamNamePrefix": "log_stream_prefix"}, "persistentAppUI":"ENABLED", "s3MonitoringConfiguration": {"logUri": "s3://my_s3_log_location" }}}'