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.
Zugreifen auf S3-Daten in einem anderen AWS Konto von EMR Serverless
Sie können Amazon EMR Serverless-Jobs von einem aus ausführen AWS Konto und konfigurieren Sie sie für den Zugriff auf Daten in Amazon S3 S3-Buckets, die zu einem anderen gehören AWS Konto. Auf dieser Seite wird beschrieben, wie Sie den kontoübergreifenden Zugriff auf S3 von Serverless aus EMR konfigurieren.
Jobs, die auf EMR Serverless ausgeführt werden, können eine S3-Bucket-Richtlinie oder eine angenommene Rolle verwenden, um von einem anderen aus auf Daten in Amazon S3 zuzugreifen AWS Konto.
Voraussetzungen
Um den kontoübergreifenden Zugriff für Amazon EMR Serverless einzurichten, müssen Sie Aufgaben erledigen, während Sie bei zwei angemeldet sind AWS Konten:
-
AccountA
— Das ist der AWS Konto, in dem Sie eine Amazon EMR Serverless-Anwendung erstellt haben. Bevor Sie den kontoübergreifenden Zugriff einrichten, müssen Sie für dieses Konto Folgendes bereithalten:-
Eine Amazon EMR Serverless-Anwendung, in der Sie Jobs ausführen möchten.
-
Eine Rolle zur Auftragsausführung, die über die erforderlichen Berechtigungen zum Ausführen von Jobs in der Anwendung verfügt. Weitere Informationen finden Sie unter Job-Runtime-Rollen für Amazon EMR Serverless.
-
-
AccountB
— Das ist AWS Konto, das den S3-Bucket enthält, auf den Ihre Amazon EMR Serverless-Jobs zugreifen sollen.
Verwenden Sie eine S3-Bucket-Richtlinie, um auf kontoübergreifende S3-Daten zuzugreifen
Um auf den S3-Bucket zuzugreifen in account B from account A, hängen Sie die folgende Richtlinie an den S3-Bucket in an account B.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Example permissions 1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
AccountA
:root" }, "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::bucket_name_in_AccountB
" ] }, { "Sid": "Example permissions 2", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AccountA
:root" }, "Action": [ "s3:PutObject", "s3:GetObject", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::bucket_name_in_AccountB
/*" ] } ] }
Weitere Informationen zum kontoübergreifenden S3-Zugriff mit S3-Bucket-Richtlinien finden Sie unter Beispiel 2: Bucket-Besitzer, der kontoübergreifende Bucket-Berechtigungen gewährt im Amazon Simple Storage Service-Benutzerhandbuch.
Verwenden Sie eine angenommene Rolle, um auf kontoübergreifende S3-Daten zuzugreifen
Eine weitere Möglichkeit, den kontoübergreifenden Zugriff für Amazon EMR Serverless einzurichten, ist die AssumeRole
Aktion von AWS Security Token Service (AWS STS). AWS STS ist ein globaler Webservice, mit dem Sie temporäre Anmeldeinformationen mit eingeschränkten Rechten für Benutzer anfordern können. Sie können EMR Serverless und Amazon S3 mit den temporären Sicherheitsanmeldedaten API aufrufen, mit AssumeRole
denen Sie erstellt haben.
Die folgenden Schritte veranschaulichen, wie Sie mithilfe einer angenommenen Rolle von Serverless aus EMR auf kontoübergreifende S3-Daten zugreifen können:
-
Erstellen Sie einen Amazon S3 S3-Bucket,
cross-account-bucket
, imAccountB
. Weitere Informationen finden Sie unter Bucket erstellen im Amazon Simple Storage Service-Benutzerhandbuch. 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 im Amazon DynamoDB DynamoDB-Entwicklerhandbuch. -
Erstellen Sie eine
Cross-Account-Role-B
IAM Rolle in, die Zugriff auf dieAccountB
cross-account-bucket
.Melden Sie sich an bei AWS Management Console und öffnen Sie die IAM Konsole unter https://console.aws.amazon.com/iam/
. -
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 IAMRollen erstellen im IAM Benutzerhandbuch. -
Erstellen Sie eine IAM Richtlinie, die die
Cross-Account-Role-B
Zugriffsberechtigungen für dencross-account-bucket
S3-Bucket, wie die folgende Richtlinienerklärung zeigt. Hängen Sie dann die IAM Richtlinie an anCross-Account-Role-B
. Weitere Informationen finden Sie im IAMBenutzerhandbuch unter IAMRichtlinien erstellen.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:*", "Resource": [ "arn:aws:s3:::
cross-account-bucket
", "arn:aws:s3:::cross-account-bucket
/*" ] } ] }Wenn Sie DynamoDB-Zugriff benötigen, erstellen Sie eine IAM Richtlinie, die Berechtigungen für den Zugriff auf die kontoübergreifende DynamoDB-Tabelle festlegt. Hängen Sie dann die Richtlinie an an. IAM
Cross-Account-Role-B
Weitere Informationen finden Sie unter Amazon DynamoDB: Ermöglicht den Zugriff auf eine bestimmte Tabelle im IAMBenutzerhandbuch.Die folgende Richtlinie ermöglicht den Zugriff auf die 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 Trust Relationships für die Rolle aus
Cross-Account-Role-B
, die Sie in Schritt 2 erstellt haben. -
Wählen Sie Vertrauensbeziehungen bearbeiten aus.
-
Fügen Sie das folgende Richtliniendokument hinzu. Dies ermöglicht es
Job-Execution-Role-A
unsAccountA
, dieCross-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" } ] }
-
-
Grant
Job-Execution-Role-A
inAccountA
der AWS STSAssumeRole
Erlaubnis zur AnnahmeCross-Account-Role-B
.-
In der IAM Konsole für AWS Konto
AccountA
, wählen SieJob-Execution-Role-A
. -
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" } ] }
-
Beispiele für angenommene Rollen
Sie können eine einzelne angenommene Rolle verwenden, um auf alle S3-Ressourcen in einem Konto zuzugreifen, oder mit Amazon EMR 6.11 und höher können Sie mehrere IAM Rollen konfigurieren, die beim Zugriff auf verschiedene kontoübergreifende S3-Buckets übernommen werden sollen.
Themen
Greifen Sie mit einer angenommenen Rolle auf S3-Ressourcen zu
Anmerkung
Wenn Sie einen Job so konfigurieren, dass er eine einzelne angenommene Rolle verwendet, verwenden alle S3-Ressourcen des Jobs diese Rolle, einschließlich des entryPoint
Skripts.
Wenn Sie eine einzige angenommene Rolle für den Zugriff auf alle S3-Ressourcen in Konto B verwenden möchten, geben Sie die folgenden Konfigurationen an:
-
Geben Sie die EMRFS Konfiguration
fs.s3.customAWSCredentialsProvider
für anspark.hadoop.fs.s3.customAWSCredentialsProvider=com.amazonaws.emr.AssumeRoleAWSCredentialsProvider
. -
Verwenden Sie für Spark
spark.emr-serverless.driverEnv.ASSUME_ROLE_CREDENTIALS_ROLE_ARN
und,spark.executorEnv.ASSUME_ROLE_CREDENTIALS_ROLE_ARN
um die Umgebungsvariablen für Treiber und Executoren anzugeben. -
Verwenden Sie für Hive, und
hive.emr-serverless.launch.env.ASSUME_ROLE_CREDENTIALS_ROLE_ARN
tez.am.emr-serverless.launch.env.ASSUME_ROLE_CREDENTIALS_ROLE_ARN
,tez.task.emr-serverless.launch.env.ASSUME_ROLE_CREDENTIALS_ROLE_ARN
um die Umgebungsvariablen in den Hive-Treibern, dem Tez-Anwendungsmaster und den Tez-Task-Containern anzugeben.
Die folgenden Beispiele zeigen, wie eine angenommene Rolle verwendet wird, um eine EMR serverlose Auftragsausführung mit kontenübergreifendem Zugriff zu starten.
Greifen Sie auf S3-Ressourcen mit mehreren angenommenen Rollen zu
Mit den EMR Serverless-Versionen 6.11.0 und höher können Sie mehrere IAM Rollen konfigurieren, die beim Zugriff auf verschiedene kontoübergreifende Buckets übernommen werden sollen. Wenn Sie auf verschiedene S3-Ressourcen mit unterschiedlichen angenommenen Rollen in Konto B zugreifen möchten, verwenden Sie beim Starten der Jobausführung die folgenden Konfigurationen:
-
Geben Sie die EMRFS Konfiguration
fs.s3.customAWSCredentialsProvider
für ancom.amazonaws.emr.serverless.credentialsprovider.BucketLevelAssumeRoleCredentialsProvider
. -
Geben Sie die EMRFS Konfiguration an
fs.s3.bucketLevelAssumeRoleMapping
, um die Zuordnung vom S3-Bucket-Namen zur IAM Rolle in Konto B zu definieren, die übernommen werden soll. Der Wert sollte das Format von habenbucket1->role1;bucket2->role2
.
Sie können beispielsweise für den Zugriff auf arn:aws:iam::
den Bucket AccountB
:role/Cross-Account-Role-B-1bucket1
und für den arn:aws:iam::
Zugriff auf den Bucket verwendenAccountB
:role/Cross-Account-Role-B-2bucket2
. Die folgenden Beispiele zeigen, wie Sie eine EMR serverlose Auftragsausführung mit kontenübergreifendem Zugriff über mehrere angenommene Rollen starten.