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:
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 finden 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 inAccountB
erstellen. Weitere Informationen finden Sie unter Erstellen einer DynamoDB-Tabelle.Erstellen Sie eine
Cross-Account-Role-B
IAM-Rolle inAccountB
, die auf dascross-account-bucket
zugreifen kann.Melden Sie sich an der IAM-Konsole an.
Wählen Sie Rollen und anschließend Neue Rolle
Cross-Account-Role-B
erstellen 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-B
Zugriff auf dencross-account-bucket
S3-Bucket festlegt, wie die folgende Richtlinienerklärung zeigt. Fügen Sie die IAM-Richtlinie anCross-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" } ] }
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-A
inAccountA
, dieseCross-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" } ] }
Erteilen Sie
Job-Execution-Role-A
inAccountA
mmit – STS Assume die Berechtigung, die RolleCross-Account-Role-B
zu übernehmen.Wählen Sie in der IAM-Konsole für das AWS-Konto
AccountA
die OptionJob-Execution-Role-A
aus.Fügen Sie die folgende Richtlinienanweisung zu
Job-Execution-Role-A
hinzu, um dieAssumeRole
-Aktion in der RolleCross-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" } ] }
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 aufAssumeRoleAWSCredentialsProvider
gesetzt ist, verwendet EMRFS die entsprechende Rolle, die Sie mitASSUME_ROLE_CREDENTIALS_ROLE_ARN
angeben, und nichtJob-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 Treiberenv
angeben.Für den kontoübergreifenden Zugriff von DynamoDB müssen Sie
--conf spark.dynamodb.customAWSCredentialsProvider=com.amazonaws.emr.AssumeRoleAWSCredentialsProvider
festlegen.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" }}}'