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 AWS Konto aus ausführen und sie so konfigurieren, dass sie auf Daten in Amazon S3 S3-Buckets zugreifen, die zu einem anderen Konto gehören. AWS Auf dieser Seite wird beschrieben, wie Sie den kontenübergreifenden Zugriff auf S3 von EMR Serverless aus konfigurieren.
Jobs, die auf EMR Serverless ausgeführt werden, können eine S3-Bucket-Richtlinie oder eine angenommene Rolle verwenden, um von einem anderen AWS Konto aus auf Daten in Amazon S3 zuzugreifen.
Voraussetzungen
Um den kontoübergreifenden Zugriff für Amazon EMR Serverless einzurichten, müssen Sie Aufgaben erledigen, während Sie bei zwei Konten angemeldet sind: AWS
-
AccountA
— Dies ist das AWS Konto, in dem Sie eine serverlose Amazon EMR-Anwendung erstellt haben. Bevor Sie den kontoübergreifenden Zugriff einrichten, müssen Sie für dieses Konto Folgendes bereithalten:-
Eine serverlose Amazon EMR-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
— Dies ist das 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 kontenü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. Mit den temporären Sicherheitsanmeldedaten, die Sie erstellen, können Sie API-Aufrufe an EMR Serverless und Amazon S3 tätigen. AssumeRole
Die folgenden Schritte veranschaulichen, wie Sie eine angenommene Rolle verwenden, um von EMR Serverless aus auf kontoübergreifende S3-Daten zuzugreifen:
-
Erstellen Sie einen Amazon-S3-Bucket,
cross-account-bucket
, inAccountB
. Weitere Informationen finden Sie unter Erstellen eines Buckets 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 inAccountB
, die auf dascross-account-bucket
zugreifen kann.Melden Sie sich bei der an 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 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 von IAM-Richtlinien 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 Sie DynamoDB-Zugriff benötigen, 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 Amazon DynamoDB: Ermöglicht den Zugriff auf eine bestimmte Tabelle im IAM-Benutzerhandbuch.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" } ] }
-
-
Job-Execution-Role-A
ErteilenAccountA
Sie die AWS STSAssumeRole
Erlaubnis zur ÜbernahmeCross-Account-Role-B
.-
Wählen Sie in der IAM-Konsole für das AWS Konto
AccountA
die Option ausJob-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 an.spark.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 serverlose EMR-Auftragsausführung mit kontenübergreifendem Zugriff zu starten.
Das folgende Beispiel zeigt, wie eine angenommene Rolle verwendet wird, um einen EMR Serverless Spark-Job mit kontenübergreifendem Zugriff auf S3 zu starten.
aws emr-serverless start-job-run \
--application-id application-id \
--execution-role-arn job-role-arn \
--job-driver '{
"sparkSubmit": {
"entryPoint": "entrypoint_location
",
"entryPointArguments": [":argument_1
:", ":argument_2
:"],
"sparkSubmitParameters": "--conf spark.executor.cores=4 --conf spark.executor.memory=20g --conf spark.driver.cores=4 --conf spark.driver.memory=8g --conf spark.executor.instances=1"
}
}' \
--configuration-overrides '{
"applicationConfiguration": [{
"classification": "spark-defaults",
"properties": {
"spark.hadoop.fs.s3.customAWSCredentialsProvider": "spark.hadoop.fs.s3.customAWSCredentialsProvider=com.amazonaws.emr.AssumeRoleAWSCredentialsProvider",
"spark.emr-serverless.driverEnv.ASSUME_ROLE_CREDENTIALS_ROLE_ARN": "arn:aws:iam::AccountB
:role/Cross-Account-Role-B",
"spark.executorEnv.ASSUME_ROLE_CREDENTIALS_ROLE_ARN": "arn:aws:iam::AccountB
:role/Cross-Account-Role-B"
}
}]
}'
Greifen Sie auf S3-Ressourcen mit mehreren angenommenen Rollen zu
Mit den Versionen 6.11.0 und höher von EMR Serverless 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 die folgenden Konfigurationen, wenn Sie die Jobausführung starten:
-
Geben Sie die EMRFS-Konfiguration
fs.s3.customAWSCredentialsProvider
für an.com.amazonaws.emr.serverless.credentialsprovider.BucketLevelAssumeRoleCredentialsProvider
-
Geben Sie die EMRFS-Konfiguration
fs.s3.bucketLevelAssumeRoleMapping
an, um die Zuordnung vom S3-Bucket-Namen zur IAM-Rolle in Konto B zu definieren, die angenommen werden soll. Der Wert sollte das Format von haben.bucket1->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 ein serverloser EMR-Job mit kontenübergreifendem Zugriff über mehrere angenommene Rollen gestartet wird.
Das folgende Beispiel zeigt, wie mehrere angenommene Rollen verwendet werden, um eine EMR Serverless Spark-Jobausführung zu erstellen.
aws emr-serverless start-job-run \
--application-id application-id \
--execution-role-arn job-role-arn \
--job-driver '{
"sparkSubmit": {
"entryPoint": "entrypoint_location
",
"entryPointArguments": [":argument_1
:", ":argument_2
:"],
"sparkSubmitParameters": "--conf spark.executor.cores=4 --conf spark.executor.memory=20g --conf spark.driver.cores=4 --conf spark.driver.memory=8g --conf spark.executor.instances=1"
}
}' \
--configuration-overrides '{
"applicationConfiguration": [{
"classification": "spark-defaults",
"properties": {
"spark.hadoop.fs.s3.customAWSCredentialsProvider": "com.amazonaws.emr.serverless.credentialsprovider.BucketLevelAssumeRoleCredentialsProvider",
"spark.hadoop.fs.s3.bucketLevelAssumeRoleMapping": "bucket1->arn:aws:iam::AccountB
:role/Cross-Account-Role-B-1;bucket2->arn:aws:iam::AccountB
:role/Cross-Account-Role-B-2"
}
}]
}'