Ruolo di servizio per istanze EC2 del cluster (profilo istanza EC2) - 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à.

Ruolo di servizio per istanze EC2 del cluster (profilo istanza EC2)

Il ruolo di servizio per le istanze EC2 del cluster (detto anche profilo dell'istanza EC2 per Amazon EMR) è un tipo speciale di ruolo di servizio assegnato a ogni istanza EC2 in un cluster Amazon EMR quando l'istanza viene avviata. I processi delle applicazioni eseguite sull'ecosistema Hadoop presuppongono che questo ruolo per le autorizzazioni interagisca con altri servizi AWS .

Per ulteriori informazioni sui ruoli di servizio per le istanze EC2, consulta Utilizzo di un ruolo IAM per concedere autorizzazioni ad applicazioni in esecuzione su istanze di Amazon EC2 nella Guida per l'utente IAM.

Importante

Il ruolo di servizio predefinito per le istanze EC2 del cluster e la relativa politica gestita AWS predefinita associata AmazonElasticMapReduceforEC2Role stanno per diventare obsoleti, senza che vengano fornite politiche gestite sostitutive. AWS Sarà necessario creare e specificare un profilo di istanza per sostituire il ruolo obsoleto e la policy predefinita.

Ruolo predefinito e policy gestita

  • Il nome del ruolo predefinito è EMR_EC2_DefaultRole.

  • Il supporto per la policy gestita da EMR_EC2_DefaultRole predefinita (AmazonElasticMapReduceforEC2Role) è quasi al termine. Invece di utilizzare una policy gestita predefinita per il profilo dell'istanza EC2, applica policy basate sulle risorse ai bucket S3 e ad altre risorse di cui Amazon EMR necessita, oppure utilizza la policy gestita dal cliente con un ruolo IAM come profilo dell'istanza. Per ulteriori informazioni, consulta Creazione di un ruolo di servizio per le istanze EC2 del cluster con le autorizzazioni con privilegi minimi.

Di seguito viene mostrato il contenuto della versione 3 di AmazonElasticMapReduceforEC2Role.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Resource": "*", "Action": [ "cloudwatch:*", "dynamodb:*", "ec2:Describe*", "elasticmapreduce:Describe*", "elasticmapreduce:ListBootstrapActions", "elasticmapreduce:ListClusters", "elasticmapreduce:ListInstanceGroups", "elasticmapreduce:ListInstances", "elasticmapreduce:ListSteps", "kinesis:CreateStream", "kinesis:DeleteStream", "kinesis:DescribeStream", "kinesis:GetRecords", "kinesis:GetShardIterator", "kinesis:MergeShards", "kinesis:PutRecord", "kinesis:SplitShard", "rds:Describe*", "s3:*", "sdb:*", "sns:*", "sqs:*", "glue:CreateDatabase", "glue:UpdateDatabase", "glue:DeleteDatabase", "glue:GetDatabase", "glue:GetDatabases", "glue:CreateTable", "glue:UpdateTable", "glue:DeleteTable", "glue:GetTable", "glue:GetTables", "glue:GetTableVersions", "glue:CreatePartition", "glue:BatchCreatePartition", "glue:UpdatePartition", "glue:DeletePartition", "glue:BatchDeletePartition", "glue:GetPartition", "glue:GetPartitions", "glue:BatchGetPartition", "glue:CreateUserDefinedFunction", "glue:UpdateUserDefinedFunction", "glue:DeleteUserDefinedFunction", "glue:GetUserDefinedFunction", "glue:GetUserDefinedFunctions" ] } ] }

Il tuo ruolo di servizio dovrebbe utilizzare la seguente policy di attendibilità:

{ "Version": "2008-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

Creazione di un ruolo di servizio per le istanze EC2 del cluster con le autorizzazioni con privilegi minimi

Come best practice, consigliamo vivamente di creare un ruolo di servizio per le istanze EC2 del cluster e una politica di autorizzazioni che preveda le autorizzazioni minime per gli altri servizi richiesti dall'applicazione. AWS

La policy gestita predefinita AmazonElasticMapReduceforEC2Role offre le autorizzazioni che facilitano l'avvio del primo cluster. Tuttavia, AmazonElasticMapReduceforEC2Role è sulla via dell'obsolescenza e Amazon EMR non fornirà una policy predefinita AWS gestita sostitutiva per il ruolo obsoleto. Per avviare un cluster iniziale, è necessario fornire una policy basata sulle risorse gestita dal cliente o basata su ID.

Le seguenti dichiarazioni di policy forniscono esempi di autorizzazioni richieste per differenti caratteristiche di Amazon EMR. È consigliabile utilizzare queste autorizzazioni per la creazione di una policy di autorizzazioni che limita l'accesso alle sole caratteristiche e risorse che richiede il cluster. Tutte le dichiarazioni politiche di esempio utilizzano la regione e l'ID dell'account fittizio us-west-2. AWS 123456789012 Sostituirli nel modo appropriato per il cluster.

Per ulteriori informazioni sulla creazione e sula specifica di ruoli personalizzati, consulta Personalizzazione dei ruoli IAM.

Nota

Se crei un ruolo EMR personalizzato per EC2, segui il flusso di lavoro di base che crea automaticamente un profilo di istanza con lo stesso nome. Amazon EC2 consente di creare profili di istanza e ruoli con nomi diversi, ma Amazon EMR non supporta questa configurazione e genera l'errore "invalid instance profile (profilo di istanza non valido)" quando crei il cluster.

Lettura e scrittura di dati su Amazon S3 utilizzando EMRFS

Quando un'applicazione in esecuzione su un cluster Amazon EMR riferisce i dati utilizzando il formato s3://mydata, Amazon EMR utilizza il profilo dell'istanza EC2 per effettuare la richiesta. In genere, i cluster leggono e scrivono dati su Amazon S3 in questo modo e Amazon EMR utilizza le autorizzazioni associate al ruolo di servizio per le istanze EC2 del cluster per impostazione predefinita. Per ulteriori informazioni, consulta Configurazione di ruoli IAM per le richieste EMRFS ad Amazon S3.

Poiché i ruoli IAM per EMRFS verranno ripristinati alle autorizzazioni associate al ruolo di servizio per le istanze EC2 del cluster, come best practice ti consigliamo di utilizzare i ruoli IAM per EMRFS e limitare le autorizzazioni EMRFS e Amazon S3 associate al ruolo di servizio per le istanze EC2 del cluster.

L'istruzione di esempio di seguito mostra le autorizzazioni che EMRFS richiede per effettuare le richieste ad Amazon S3.

  • my-data-bucket-in-s3-for-emrfs-reads-and-writes specifica il bucket in Amazon S3 dove il cluster legge e scrive i dati e tutte le sottocartelle utilizzando /*. Aggiungere solo i bucket e le cartelle necessari per la propria applicazione.

  • La dichiarazione di policy che consente le azioni dynamodb è necessaria solo se è abilitata la visualizzazione coerente di EMRFS. EmrFSMetadata specifica la cartella predefinita per la visualizzazione coerente di EMRFS.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:AbortMultipartUpload", "s3:CreateBucket", "s3:DeleteObject", "s3:GetBucketVersioning", "s3:GetObject", "s3:GetObjectTagging", "s3:GetObjectVersion", "s3:ListBucket", "s3:ListBucketMultipartUploads", "s3:ListBucketVersions", "s3:ListMultipartUploadParts", "s3:PutBucketVersioning", "s3:PutObject", "s3:PutObjectTagging" ], "Resource": [ "arn:aws:s3:::my-data-bucket-in-s3-for-emrfs-reads-and-writes", "arn:aws:s3:::my-data-bucket-in-s3-for-emrfs-reads-and-writes/*" ] }, { "Effect": "Allow", "Action": [ "dynamodb:CreateTable", "dynamodb:BatchGetItem", "dynamodb:BatchWriteItem", "dynamodb:PutItem", "dynamodb:DescribeTable", "dynamodb:DeleteItem", "dynamodb:GetItem", "dynamodb:Scan", "dynamodb:Query", "dynamodb:UpdateItem", "dynamodb:DeleteTable", "dynamodb:UpdateTable" ], "Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/EmrFSMetadata" }, { "Effect": "Allow", "Action": [ "cloudwatch:PutMetricData", "dynamodb:ListTables", "s3:ListBucket" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "sqs:GetQueueUrl", "sqs:ReceiveMessage", "sqs:DeleteQueue", "sqs:SendMessage", "sqs:CreateQueue" ], "Resource": "arn:aws:sqs:us-west-2:123456789012:EMRFS-Inconsistency-*" } ] }

Archiviazione di file di log in Amazon S3

La seguente istruzione di policy consente al cluster Amazon EMR di archiviare i file di log nel percorso Amazon S3 specificato. Nell'esempio seguente, quando il cluster è stato creato, s3://MyLoggingBucket/MyEMRClusterLogsè stato specificato utilizzando la posizione della cartella Log S3 nella console, utilizzando l'--log-uriopzione from o utilizzando il LogUri parametro nel comando. AWS CLIRunJobFlow Per ulteriori informazioni, consulta Archiviazione di file di log in Amazon S3.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::MyLoggingBucket/MyEMRClusterLogs/*" } ] }

Utilizzo degli strumenti di debug

L'istruzione di policy seguente consente operazioni necessarie se si abilita lo strumento di debug Amazon EMR. L'archiviazione dei file di log Amazon S3 e le autorizzazioni associate mostrate nell'esempio in alto sono necessarie per il debug. Per ulteriori informazioni, consulta Abilitare lo strumento di debug.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sqs:GetQueueUrl", "sqs:SendMessage" ], "Resource": "arn:aws:sqs:us-west-2:123456789012:AWS-ElasticMapReduce-*" } ] }

Utilizzo del AWS Glue Data Catalog

La seguente dichiarazione sulla politica consente le azioni necessarie se si utilizza il AWS Glue Data Catalog come metastore per le applicazioni. Per ulteriori informazioni, consulta Using the AWS Glue Data Catalog come metastore per Spark SQL, Using the AWS Glue Data Catalog come metastore per Hive e Using Presto with the Glue AWS Data Catalog nella Amazon EMR Release Guide.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:CreateDatabase", "glue:UpdateDatabase", "glue:DeleteDatabase", "glue:GetDatabase", "glue:GetDatabases", "glue:CreateTable", "glue:UpdateTable", "glue:DeleteTable", "glue:GetTable", "glue:GetTables", "glue:GetTableVersions", "glue:CreatePartition", "glue:BatchCreatePartition", "glue:UpdatePartition", "glue:DeletePartition", "glue:BatchDeletePartition", "glue:GetPartition", "glue:GetPartitions", "glue:BatchGetPartition", "glue:CreateUserDefinedFunction", "glue:UpdateUserDefinedFunction", "glue:DeleteUserDefinedFunction", "glue:GetUserDefinedFunction", "glue:GetUserDefinedFunctions" ], "Resource": "*", } ] }