Ruoli di runtime per le fasi di Amazon EMR - 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à.

Ruoli di runtime per le fasi di Amazon EMR

Un ruolo di runtime è un ruolo AWS Identity and Access Management (IAM) che puoi specificare quando invii un lavoro o una query a un cluster Amazon EMR. Il job o la query che invii al tuo cluster Amazon EMR utilizza il ruolo di runtime per accedere alle AWS risorse, come gli oggetti in Amazon S3. Puoi specificare i ruoli di runtime con Amazon EMR per i processi Spark e Hive.

Puoi anche specificare i ruoli di runtime quando ti connetti a cluster Amazon EMR in Amazon SageMaker AI e quando colleghi un WorkSpace Amazon EMR Studio a un cluster EMR. Per ulteriori informazioni, consulta Connect a un cluster Amazon EMR di SageMaker AI Studio e. Esecuzione di un WorkSpace EMR Studio con un ruolo di runtime

In precedenza, i cluster Amazon EMR eseguivano processi o query Amazon EMR con autorizzazioni basate sulla policy IAM associata al profilo dell'istanza utilizzato per avviare il cluster. Ciò significava che le policy dovevano contenere l'unione di tutte le autorizzazioni per tutti i processi e le query eseguiti su un cluster Amazon EMR. Con i ruoli di runtime, ora puoi gestire il controllo degli accessi per ogni singolo processo o query, invece di condividere il profilo dell'istanza Amazon EMR del cluster.

Sui cluster Amazon EMR con ruoli di runtime, puoi anche applicare il controllo di accesso AWS Lake Formation basato ai job e alle query di Spark, Hive e Presto sui tuoi data lake. Per ulteriori informazioni su come effettuare l'integrazione con, consulta. AWS Lake FormationIntegra Amazon EMR con AWS Lake Formation

Nota

Quando specifichi un ruolo di runtime per una fase di Amazon EMR, i job o le query che invii possono accedere solo alle AWS risorse consentite dalle policy associate al ruolo di runtime. Questi job e queste query non possono accedere all'Instance Metadata Service sulle EC2 istanze del cluster o utilizzare il profilo dell' EC2 istanza del cluster per accedere a qualsiasi risorsa. AWS

Prerequisiti per l'avvio di un cluster Amazon EMR con un ruolo di runtime

Fase 1: impostazione delle configurazioni di sicurezza in Amazon EMR

Utilizza la seguente struttura JSON per creare una configurazione di sicurezza su AWS Command Line Interface (AWS CLI) e imposta su. EnableApplicationScopedIAMRole true Per ulteriori informazioni sulle configurazioni della sicurezza, consulta Usa le configurazioni di sicurezza per configurare la sicurezza dei cluster Amazon EMR.

{ "AuthorizationConfiguration":{ "IAMConfiguration":{ "EnableApplicationScopedIAMRole":true } } }

Ti consigliamo di abilitare sempre le opzioni di crittografia in transito nella configurazione di sicurezza, in modo che i dati trasferiti su Internet siano crittografati anziché in testo semplice. Puoi ignorare queste opzioni se non desideri connetterti ai cluster Amazon EMR con ruoli SageMaker di runtime di Runtime Studio o EMR Studio. Per configurare la crittografia dei dati, consulta Configurazione della crittografia di dati.

In alternativa, puoi creare una configurazione di sicurezza con impostazioni personalizzate con la AWS Management Console.

Fase 2: configurare un profilo di EC2 istanza per il cluster Amazon EMR

I cluster Amazon EMR utilizzano il ruolo del profilo di EC2 istanza Amazon per assumere i ruoli di runtime. Per utilizzare i ruoli di runtime con le fasi di Amazon EMR, aggiungi le seguenti policy al ruolo IAM che intendi utilizzare come ruolo del profilo dell'istanza. Per aggiungere le policy a un ruolo IAM o modificare una policy inline o gestita esistente, consulta Aggiunta e rimozione di autorizzazioni per identità IAM.

{ "Version":"2012-10-17", "Statement":[ { "Sid":"AllowRuntimeRoleUsage", "Effect":"Allow", "Action":[ "sts:AssumeRole", "sts:TagSession" ], "Resource":[ <runtime-role-ARN> ] } ] }

Passaggio 3: Configurazione di una policy di attendibilità

Per ogni ruolo IAM che intendi utilizzare come ruolo di runtime, imposta la seguente policy di attendibilità, sostituendo EMR_EC2_DefaultRole con il ruolo del profilo dell'istanza. Per modificare la policy di attendibilità di un ruolo IAM, consulta Modifica di una policy di attendibilità del ruolo.

{ "Sid":"AllowAssumeRole", "Effect":"Allow", "Principal":{ "AWS":"arn:aws:iam::<AWS_ACCOUNT_ID>:role/EMR_EC2_DefaultRole" }, "Action":"sts:AssumeRole" }

Avvio di un cluster Amazon EMR con controllo degli accessi basato su ruoli

Dopo aver impostato le configurazioni, puoi avviare un cluster Amazon EMR con la configurazione di sicurezza da Fase 1: impostazione delle configurazioni di sicurezza in Amazon EMR. Per utilizzare i ruoli di runtime con le fasi di Amazon EMR, usa release label emr-6.7.0 o versioni successive e seleziona Hive, Spark o entrambi come applicazione cluster. CloudWatchAgent è supportato su Runtime Role Clusters per EMR 7.6 e versioni successive. Per connetterti da SageMaker AI Studio, usa la release emr-6.9.0 o una versione successiva e seleziona Livy, Spark, Hive o Presto come applicazione cluster. Per istruzioni sull'avvio del cluster, consulta la sezione Specificare una configurazione di sicurezza per un cluster Amazon EMR.

Invio di processi Spark tramite la procedura di Amazon EMR

Di seguito è riportato un esempio di come eseguire l' HdfsTest esempio incluso in Apache Spark. Questa chiamata API ha esito positivo solo se il ruolo di runtime per Amazon EMR fornito dispone dell'accesso a S3_LOCATION.

RUNTIME_ROLE_ARN=<runtime-role-arn> S3_LOCATION=<s3-path> REGION=<aws-region> CLUSTER_ID=<cluster-id> aws emr add-steps --cluster-id $CLUSTER_ID \ --steps '[{ "Name": "Spark Example", "ActionOnFailure": "CONTINUE","HadoopJarStep": { "Jar":"command-runner.jar","Args" : ["spark-example","HdfsTest", "$S3_LOCATION"] } }]' \ --execution-role-arn $RUNTIME_ROLE_ARN \ --region $REGION
Nota

Ti consigliamo di disattivare l'accesso al cluster Amazon EMR di SSH e di consentirne l'accesso solo all'API AddJobFlowSteps di Amazon EMR.

Invio di processi Hive tramite la procedura di Amazon EMR

L'esempio seguente utilizza Apache Hive con fasi Amazon EMR per inviare un processo per l'esecuzione del file QUERY_FILE.hql. Questa query ha esito positivo solo se il ruolo di runtime fornito può accedere al percorso Amazon S3 del file di query.

RUNTIME_ROLE_ARN=<runtime-role-arn> REGION=<aws-region> CLUSTER_ID=<cluster-id> aws emr add-steps --cluster-id $CLUSTER_ID \ --steps '[{ "Name": "Run hive query using command-runner.jar - simple select","ActionOnFailure":"CONTINUE","HadoopJarStep": { "Jar": "command-runner.jar","Args" :["hive - f","s3://DOC_EXAMPLE_BUCKET/QUERY_FILE.hql"] } }]' \ --execution-role-arn $RUNTIME_ROLE_ARN \ --region $REGION

Connect ai cluster Amazon EMR con ruoli di runtime da un SageMaker notebook AI Studio

Puoi applicare i ruoli di runtime di Amazon EMR alle query eseguite nei cluster Amazon EMR da AI Studio. SageMaker A tale scopo, segui la procedura seguente.

  1. Segui le istruzioni in Launch Amazon SageMaker AI Studio per creare un SageMaker AI Studio.

  2. Nell'interfaccia utente di SageMaker AI Studio, avvia un notebook con kernel supportati. Ad esempio, avvia un' SparkMagic immagine con un PySpark kernel.

  3. Scegli un cluster Amazon EMR in SageMaker AI Studio, quindi scegli Connect.

  4. Scegli un ruolo di runtime, quindi seleziona Connect (Connetti).

Questo creerà una cella notebook SageMaker AI con comandi magici per connettersi al tuo cluster Amazon EMR con il ruolo di runtime Amazon EMR scelto. Nella cella del notebook, puoi inserire ed eseguire query con il ruolo di runtime e il controllo degli accessi basato su Lake Formation. Per un esempio più dettagliato, consulta Applica controlli granulari di accesso ai dati con AWS Lake Formation Amazon EMR di Amazon AI Studio. SageMaker

Controllo dell'accesso al ruolo di runtime di Amazon EMR

Puoi controllare l'accesso al ruolo di runtime con la chiave di condizione elasticmapreduce:ExecutionRoleArn. La seguente policy consente a un principale IAM di utilizzare un ruolo IAM denominato Caller o qualsiasi ruolo IAM che inizia con la stringa CallerTeamRole, come il ruolo di runtime.

Importante

È necessario creare una condizione basata sulla chiave di elasticmapreduce:ExecutionRoleArn contesto quando si concede a un chiamante l'accesso per chiamare AddJobFlowSteps o GetClusterSessionCredentials APIs, come illustrato nell'esempio seguente.

{ "Sid":"AddStepsWithSpecificExecRoleArn", "Effect":"Allow", "Action":[ "elasticmapreduce:AddJobFlowSteps" ], "Resource":"*", "Condition":{ "StringEquals":{ "elasticmapreduce:ExecutionRoleArn":[ "arn:aws:iam::<AWS_ACCOUNT_ID>:role/Caller" ] }, "StringLike":{ "elasticmapreduce:ExecutionRoleArn":[ "arn:aws:iam::<AWS_ACCOUNT_ID>:role/CallerTeamRole*" ] } } }

Configurazione di un rapporto di attendibilità tra i ruoli di runtime e i cluster Amazon EMR

Amazon EMR genera un identificatore univoco ExternalId per ogni configurazione di sicurezza con autorizzazione del ruolo di runtime attivata. Questa autorizzazione consente a ogni utente di possedere una serie di ruoli di runtime da utilizzare sui cluster di sua proprietà. Ad esempio, ogni reparto di un'azienda può utilizzare il proprio ID esterno per aggiornare la policy di attendibilità sulla propria serie di ruoli di runtime.

Puoi trovare l'ID esterno con l'API DescribeSecurityConfiguration di Amazon EMR, come mostrato nell'esempio seguente.

aws emr describe-security-configuration --name 'iamconfig-with-lf'{"Name": "iamconfig-with-lf", "SecurityConfiguration": "{\"AuthorizationConfiguration\":{\"IAMConfiguration\":{\"EnableApplicationScopedIAMRole\ ":true,\"ApplicationScopedIAMRoleConfiguration\":{\"PropagateSourceIdentity\":true,\"Exter nalId\":\"FXH5TSACFDWUCDSR3YQE2O7ETPUSM4OBCGLYWODSCUZDNZ4Y\"}},\"Lake FormationConfiguration\":{\"AuthorizedSessionTagValue\":\"Amazon EMR\"}}}", "CreationDateTime": "2022-06-03T12:52:35.308000-07:00" }

Per informazioni su come utilizzare un ID esterno, vedi Come utilizzare un ID esterno per concedere l'accesso alle tue AWS risorse a terzi.

Audit

Per monitorare e controllare le azioni che gli utenti finali compiono con i ruoli IAM, è possibile attivare la funzione di identità di origine. Per ulteriori informazioni sull'origine dell'identità, consulta la sezione Monitoraggio e controllo delle operazioni intraprese con i ruoli assunti.

Per tenere traccia dell'identità dell'origine, imposta ApplicationScopedIAMRoleConfiguration/PropagateSourceIdentity su true nella configurazione di sicurezza, come indicato di seguito.

{ "AuthorizationConfiguration":{ "IAMConfiguration":{ "EnableApplicationScopedIAMRole":true, "ApplicationScopedIAMRoleConfiguration":{ "PropagateSourceIdentity":true } } } }

Quando imposti PropagateSourceIdentity su true, Amazon EMR applica l'identità dell'origine dalle credenziali di chiamata a una sessione di processo o query creata con il ruolo di runtime. Se nelle credenziali di chiamata non è presente alcuna identità di origine, Amazon EMR non imposta l'identità di origine.

Per utilizzare questa proprietà, fornisci le autorizzazioni sts:SetSourceIdentity al tuo profilo dell'istanza, come indicato di seguito.

{ // PropagateSourceIdentity statement "Sid":"PropagateSourceIdentity", "Effect":"Allow", "Action":"sts:SetSourceIdentity", "Resource":[ <runtime-role-ARN> ], "Condition":{ "StringEquals":{ "sts:SourceIdentity":<source-identity> } } }

È necessario anche aggiungere l'istruzione AllowSetSourceIdentity alla policy di attendibilità dei ruoli di runtime.

{ // AllowSetSourceIdentity statement "Sid":"AllowSetSourceIdentity", "Effect":"Allow", "Principal":{ "AWS":"arn:aws:iam::<AWS_ACCOUNT_ID>:role/EMR_EC2_DefaultRole" }, "Action":[ "sts:SetSourceIdentity", "sts:AssumeRole" ], "Condition":{ "StringEquals":{ "sts:SourceIdentity":<source-identity> } } }

Ulteriori considerazioni

Nota

Con la versione di Amazon EMRemr-6.9.0, potresti riscontrare errori intermittenti quando ti connetti ai cluster Amazon EMR da AI Studio. SageMaker Per risolvere questo problema, puoi installare la patch con un'operazione di bootstrap all'avvio del cluster. Per informazioni dettagliate sulle patch, consulta la sezione Amazon EMR release 6.9.0 known issues (Problemi noti di Amazon EMR versione 6.9.0).

Inoltre, quando configuri i ruoli di runtime per Amazon EMR, tieni presente quanto segue.

  • Amazon EMR supporta i ruoli di runtime in tutte le Regioni AWS commerciali.

  • Le fasi di Amazon EMR supportano i processi Apache Spark e Apache Hive con i ruoli di runtime quando utilizzi la versione emr-6.7.0 o successive.

  • SageMaker AI Studio supporta le query Spark, Hive e Presto con ruoli di runtime quando usi release o versioni successive. emr-6.9.0

  • I seguenti kernel per notebook in SageMaker AI supportano i ruoli di runtime:

    • DataScience — Kernel Python 3

    • DataScience 2.0 — Kernel Python 3

    • DataScience 3.0 — Kernel Python 3

    • SparkAnalytics 1.0 — SparkMagic e kernel PySpark

    • SparkAnalytics 2.0 — SparkMagic e PySpark kernel

    • SparkMagic — PySpark kernel

  • Amazon EMR supporta le fasi che utilizzano RunJobFlow solo al momento della creazione del cluster. Questa API non supporta i ruoli di runtime.

  • Amazon EMR non supporta i ruoli di runtime su cluster configurati per la disponibilità elevata.

  • A partire dalla versione 7.5.0 e successive di Amazon EMR, i ruoli di runtime supportano la visualizzazione delle interfacce utente Spark e YARN (UIs), come le seguenti: Spark Live UI, Spark History Server, YARN e YARN. NodeManager ResourceManager Quando accedi a questi UIs, viene richiesto un nome utente e una password. I nomi utente e le password possono essere generati tramite l'uso dell'API EMR. GetClusterSessionCredentials Per ulteriori informazioni sui dettagli di utilizzo dell'API, consulta. GetClusterSessionCredentials

    Un esempio di utilizzo dell' GetClusterSessionCredentials API EMR è il seguente:

    aws emr get-cluster-session-credentials --cluster-id <cluster_ID> --execution-role-arn <IAM_role_arn>
  • È necessario evitare gli argomenti del comando Bash quando si eseguono comandi con il file command-runner.jar JAR:

    aws emr add-steps --cluster-id <cluster-id> --steps '[{"Name":"sample-step","ActionOnFailure":"CONTINUE","Jar":"command-runner.jar","Properties":"","Args":["bash","-c","\"aws s3 ls\""],"Type":"CUSTOM_JAR"}]' --execution-role-arn <IAM_ROLE_ARN>

    Inoltre, è necessario evitare gli argomenti del comando Bash quando si eseguono comandi con lo script runner. Di seguito è riportato un esempio che mostra l'impostazione delle proprietà di Spark, con caratteri di escape inclusi:

    "\"--conf spark.sql.autoBroadcastJoinThreshold=-1\n--conf spark.cradle.RSv2Mode.enabled=true\""
  • I ruoli di runtime non forniscono supporto per il controllo dell'accesso alle risorse del cluster, come HDFS e HMS.