Accesso ai dati S3 in un altro AWS account di EMR Serverless - Amazon EMR

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Accesso ai dati S3 in un altro AWS account di EMR Serverless

Puoi eseguire job Amazon EMR Serverless da un unico AWS account e configurali per accedere ai dati nei bucket Amazon S3 che appartengono a un altro AWS conto. Questa pagina descrive come configurare l'accesso tra account a S3 da EMR Serverless.

I lavori eseguiti su EMR Serverless possono utilizzare una policy di bucket S3 o un ruolo assunto per accedere ai dati in Amazon S3 da un altro AWS conto.

Prerequisiti

Per configurare l'accesso tra più account per Amazon EMR Serverless, devi completare le attività dopo aver effettuato l'accesso a due AWS account:

  • AccountA— Questa è la AWS account in cui hai creato un'applicazione Amazon EMR Serverless. Prima di configurare l'accesso tra più account, devi avere a disposizione quanto segue in questo account:

    • Un'applicazione Amazon EMR Serverless in cui eseguire lavori.

    • Un ruolo di esecuzione del lavoro che dispone delle autorizzazioni necessarie per eseguire i lavori nell'applicazione. Per ulteriori informazioni, consulta Ruoli Job Runtime per Amazon EMR Serverless.

  • AccountB— Questa è la AWS account che contiene il bucket S3 a cui desideri che i tuoi job Amazon EMR Serverless accedano.

Utilizza una policy sui bucket S3 per accedere ai dati S3 tra account

Per accedere al bucket S3 in account B from account A, collega la seguente policy al bucket S3 in 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/*" ] } ] }

Per ulteriori informazioni sull'accesso a più account S3 con le policy dei bucket S3, consulta l'Esempio 2: Il proprietario del bucket concede le autorizzazioni per i bucket tra account nella Guida per l'utente di Amazon Simple Storage Service.

Usa un ruolo presunto per accedere ai dati S3 tra più account

Un altro modo per configurare l'accesso tra più account per Amazon EMR Serverless è con l'AssumeRoleazione di AWS Security Token Service (AWS STS). AWS STS è un servizio web globale che consente di richiedere credenziali temporanee con privilegi limitati per gli utenti. Puoi effettuare API chiamate verso EMR Serverless e Amazon S3 con le credenziali di sicurezza temporanee con cui crei. AssumeRole

I passaggi seguenti illustrano come utilizzare un ruolo presunto per accedere ai dati S3 tra account diversi da Serverless: EMR

  1. Crea un bucket Amazon S3, cross-account-bucket, nel. AccountB Per ulteriori informazioni, consulta Creare un bucket nella Guida per l'utente di Amazon Simple Storage Service. Se si desidera avere un accesso multi-account a DynamoDB, è anche possibile creare una tabella DynamoDB in AccountB. Per ulteriori informazioni, consulta Creazione di una tabella DynamoDB nella Amazon DynamoDB Developer Guide.

  2. Crea un Cross-Account-Role-B IAM ruolo in grado di accedere a AccountB cross-account-bucket.

    1. Accedi a AWS Management Console e apri la IAM console all'indirizzo https://console.aws.amazon.com/iam/.

    2. Scegli Roles (Ruoli), quindi crea un nuovo ruolo: Cross-Account-Role-B. Per ulteriori informazioni su come creare IAM ruoli, consulta Creazione di IAM ruoli nella Guida per l'IAMutente.

    3. Crea una IAM politica che specifichi le autorizzazioni per accedere Cross-Account-Role-B a cross-account-bucket Bucket S3, come dimostra la seguente dichiarazione politica. Quindi allega la IAM politica a. Cross-Account-Role-B Per ulteriori informazioni, consulta Creazione IAM di politiche nella Guida IAM per l'utente.

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

    Se hai bisogno dell'accesso a DynamoDB, crea IAM una policy che specifichi le autorizzazioni per accedere alla tabella DynamoDB tra account. IAMQuindi Cross-Account-Role-B allega la policy a. Per ulteriori informazioni, consulta Amazon DynamoDB: consente l'accesso a una tabella specifica nella IAM Guida per l'utente.

    Di seguito è riportata una politica per consentire l'accesso alla tabella DynamoDBCrossAccountTable.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "dynamodb:*", "Resource": "arn:aws:dynamodb:MyRegion:AccountB:table/CrossAccountTable" } ] }
  3. Modifica la relazione di fiducia per il ruolo Cross-Account-Role-B.

    1. Per configurare la relazione di fiducia per il ruolo, scegli la scheda Relazioni di fiducia nella IAM console relativa al ruolo Cross-Account-Role-B che hai creato nel passaggio 2.

    2. Seleziona Edit Trust Relationship (Modifica relazione di fiducia).

    3. Aggiungi il seguente documento di policy. Ciò consente Job-Execution-Role-A AccountA di assumere il Cross-Account-Role-B ruolo.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AccountA:role/Job-Execution-Role-A" }, "Action": "sts:AssumeRole" } ] }
  4. Grant Job-Execution-Role-A AccountA nel AWS STS AssumeRolepermesso di presumereCross-Account-Role-B.

    1. Nella IAM console per AWS accountAccountA, selezionaJob-Execution-Role-A.

    2. Aggiungi la seguente istruzione di policy a Job-Execution-Role-A per autorizzare l'operazione AssumeRole nel ruolo Cross-Account-Role-B.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::AccountB:role/Cross-Account-Role-B" } ] }

Esempi di ruoli presunti

Puoi utilizzare un singolo ruolo assunto per accedere a tutte le risorse S3 in un account oppure, con Amazon EMR 6.11 e versioni successive, puoi configurare più IAM ruoli da assumere quando accedi a diversi bucket S3 tra account diversi.

Accedi alle risorse S3 con un ruolo presunto

Nota

Quando configuri un lavoro per utilizzare un singolo ruolo assunto, tutte le risorse S3 del job utilizzano quel ruolo, incluso lo entryPoint script.

Se desideri utilizzare un singolo ruolo assunto per accedere a tutte le risorse S3 nell'account B, specifica le seguenti configurazioni:

  1. Specificare la EMRFS configurazione fs.s3.customAWSCredentialsProvider per. spark.hadoop.fs.s3.customAWSCredentialsProvider=com.amazonaws.emr.AssumeRoleAWSCredentialsProvider

  2. Per Spark, usa spark.emr-serverless.driverEnv.ASSUME_ROLE_CREDENTIALS_ROLE_ARN e specifica spark.executorEnv.ASSUME_ROLE_CREDENTIALS_ROLE_ARN le variabili di ambiente su driver ed executor.

  3. Per Hive hive.emr-serverless.launch.env.ASSUME_ROLE_CREDENTIALS_ROLE_ARNtez.am.emr-serverless.launch.env.ASSUME_ROLE_CREDENTIALS_ROLE_ARN, usa e specifica le variabili tez.task.emr-serverless.launch.env.ASSUME_ROLE_CREDENTIALS_ROLE_ARN di ambiente nei contenitori di attività Hive driver, Tez application master e Tez.

Gli esempi seguenti mostrano come utilizzare un ruolo presunto per avviare un processo EMR Serverless eseguito con accesso tra account.

Spark

L'esempio seguente mostra come utilizzare un ruolo presunto per avviare un job EMR Serverless Spark eseguito con accesso a S3 su più account.

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" } }] }'
Hive

L'esempio seguente mostra come utilizzare un ruolo assunto per avviare un processo EMR Serverless Hive eseguito con accesso a S3 su più account.

aws emr-serverless start-job-run \ --application-id application-id \ --execution-role-arn job-role-arn \ --job-driver '{ "hive": { "query": "query_location", "parameters": "hive_parameters" } }' \ --configuration-overrides '{ "applicationConfiguration": [{ "classification": "hive-site", "properties": { "fs.s3.customAWSCredentialsProvider": "com.amazonaws.emr.serverless.credentialsprovider.AssumeRoleAWSCredentialsProvider", "hive.emr-serverless.launch.env.ASSUME_ROLE_CREDENTIALS_ROLE_ARN": "arn:aws:iam::AccountB:role/Cross-Account-Role-B", "tez.am.emr-serverless.launch.env.ASSUME_ROLE_CREDENTIALS_ROLE_ARN": "arn:aws:iam::AccountB:role/Cross-Account-Role-B", "tez.task.emr-serverless.launch.env.ASSUME_ROLE_CREDENTIALS_ROLE_ARN": "arn:aws:iam::AccountB:role/Cross-Account-Role-B" } }] }'

Accedi alle risorse S3 con più ruoli presunti

Con le versioni EMR Serverless 6.11.0 e successive, puoi configurare più IAM ruoli da assumere quando accedi a diversi bucket tra più account. Se desideri accedere a diverse risorse S3 con diversi ruoli assunti nell'account B, usa le seguenti configurazioni all'avvio del job run:

  1. Specificare la EMRFS configurazione fs.s3.customAWSCredentialsProvider per. com.amazonaws.emr.serverless.credentialsprovider.BucketLevelAssumeRoleCredentialsProvider

  2. Specificate la EMRFS configurazione fs.s3.bucketLevelAssumeRoleMapping per definire la mappatura dal nome del bucket S3 al IAM ruolo da assumere nell'account B. Il valore deve essere nel formato di. bucket1->role1;bucket2->role2

Ad esempio, è possibile utilizzare arn:aws:iam::AccountB:role/Cross-Account-Role-B-1 per accedere al bucket bucket1 e utilizzare arn:aws:iam::AccountB:role/Cross-Account-Role-B-2 per accedere al bucket2 bucket. Gli esempi seguenti mostrano come avviare un processo EMR Serverless con accesso a più account tramite più ruoli presunti.

Spark

L'esempio seguente mostra come utilizzare più ruoli presunti per creare un'esecuzione di job Spark EMR Serverless.

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" } }] }'
Hive

Gli esempi seguenti mostrano come utilizzare più ruoli presunti per creare un'esecuzione di job EMR Serverless Hive.

aws emr-serverless start-job-run \ --application-id application-id \ --execution-role-arn job-role-arn \ --job-driver '{ "hive": { "query": "query_location", "parameters": "hive_parameters" } }' \ --configuration-overrides '{ "applicationConfiguration": [{ "classification": "hive-site", "properties": { "fs.s3.customAWSCredentialsProvider": "com.amazonaws.emr.serverless.credentialsprovider.AssumeRoleAWSCredentialsProvider", "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" } }] }'