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 für EKS-Jobs 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 auf 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 S3-Bucket oder eine DynamoDB-Tabelle enthält, auf die Ihre Amazon EMR on EKS-Jobs zugreifen sollen.
Sie müssen Folgendes in Ihren AWS Konten bereithalten, bevor Sie den kontoübergreifenden Zugriff einrichten können:
Ein virtueller Amazon EMR in EKS-Cluster in
AccountA, in dem Sie Aufträge ausführen möchten.Eine Rolle zur Aufgabenausführung in
AccountA, die über die erforderlichen Berechtigungen zum Ausführen von Aufgaben im virtuellen Cluster verfügt. Weitere Informationen erhalten Sie unter Erstellen einer Aufgabenausführungsrolle und Auftragausführungsrollen mit Amazon EMR in EKS verwenden.
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.
Erstellen Sie einen Amazon-S3-Bucket,
cross-account-bucket, inAccountB. Weitere Informationen finden Sie unter Bucket erstellen. Wenn Sie kontenübergreifenden Zugriff auf DynamoDB haben möchten, können Sie auch eine DynamoDB-Tabelle inAccountBerstellen. Weitere Informationen finden Sie unter Erstellen einer DynamoDB-Tabelle.Erstellen Sie eine
Cross-Account-Role-BIAM-Rolle inAccountB, die auf dascross-account-bucketzugreifen kann.Melden Sie sich an der IAM-Konsole an.
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.Erstellen Sie eine IAM-Richtlinie, die die Berechtigungen für den
Cross-Account-Role-BZugriff auf dencross-account-bucketS3-Bucket festlegt, wie die folgende Richtlinienerklärung zeigt. Fügen Sie die IAM-Richtlinie anCross-Account-Role-Ban. Weitere Informationen finden Sie unter Erstellen einer neuen Richtlinie im IAM-Benutzerhandbuch.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-Ban. 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.
So bearbeiten Sie die Vertrauensbeziehung für die
Cross-Account-Role-B-Rolle.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.Wählen Sie Vertrauensbeziehungen bearbeiten aus.
Fügen Sie das folgende Richtliniendokument hinzu, das es Ihnen ermöglicht
Job-Execution-Role-AinAccountA, dieseCross-Account-Role-B-Rolle zu übernehmen.
Erteilen Sie
Job-Execution-Role-AinAccountAmmit – STS Assume die Berechtigung, die RolleCross-Account-Role-Bzu übernehmen.Wählen Sie in der IAM-Konsole für das AWS Konto die Option
AccountAaus.Job-Execution-Role-AFügen Sie die folgende Richtlinienanweisung zu
Job-Execution-Role-Ahinzu, um dieAssumeRole-Aktion in der RolleCross-Account-Role-Bzu verweigern.
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
customAWSCredentialsProviderjedoch aufAssumeRoleAWSCredentialsProvidergesetzt ist, verwendet EMRFS die entsprechende Rolle, die Sie mitASSUME_ROLE_CREDENTIALS_ROLE_ARNangeben, und nichtJob-Execution-Role-Afü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 Treiberenvangeben.Für den kontoübergreifenden Zugriff von DynamoDB müssen Sie
--conf spark.dynamodb.customAWSCredentialsProvider=com.amazonaws.emr.AssumeRoleAWSCredentialsProviderfestlegen.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" }}}'