Servicerolle für EC2-Cluster-Instances (EC2-Instance-Profil) - Amazon EMR

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.

Servicerolle für EC2-Cluster-Instances (EC2-Instance-Profil)

Die Servicerolle für EC2-Instance-Cluster (auch als EC2-Instance-Profil für Amazon EMR bezeichnet) ist eine spezielle Art von Servicerolle, die jeder EC2-Instance in einem Amazon-EMR-Cluster zugewiesen wird, wenn die Instance startet. Anwendungsprozesse, die auf der Hadoop-Ökosystem ausgeführt werden, übernehmen diese Rolle für Berechtigungen für die Interaktion mit anderen AWS -Services.

Weitere Informationen zu Servicerollen für EC2-Instances finden Sie unter Verwenden einer IAM-Rolle zum Erteilen von Berechtigungen für Anwendungen, die auf Amazon-EC2-Instances ausgeführt werden im IAM-Benutzerhandbuch.

Wichtig

Die Standarddienstrolle für Cluster-EC2-Instances und die zugehörige verwaltete AWS Standardrichtlinie AmazonElasticMapReduceforEC2Role sind inzwischen veraltet, und es werden keine neuen AWS verwalteten Richtlinien bereitgestellt. Sie müssen ein Instance-Profil erstellen und angeben, um die veraltete Rolle und die Standardrichtlinie zu ersetzen.

Standardrolle und verwaltete Richtlinie

  • Der Standardrollenname ist EMR_EC2_DefaultRole.

  • Die EMR_EC2_DefaultRole standardmäßige verwaltete Richtlinie,AmazonElasticMapReduceforEC2Role, nähert sich dem Ende des Supports. Anstatt eine verwaltete Standardrichtlinie für das EC2-Instance-Profil zu verwenden, wenden Sie ressourcenbasierte Richtlinien auf S3-Buckets und andere Ressourcen an, die Amazon EMR benötigt, oder verwenden Sie Ihre eigene, vom Kunden verwaltete Richtlinie mit einer IAM-Rolle als Instance-Profil. Weitere Informationen finden Sie unter Erstellen einer Servicerolle für EC2-Cluster-Instances mit Berechtigungen mit geringsten Rechten.

Im Folgenden werden die Inhalte von Version 3 von AmazonElasticMapReduceforEC2Role gezeigt.

JSON
{ "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" ], "Sid": "AllowCLOUDWATCH" } ] }

Ihre Servicerolle sollte die folgende Vertrauensrichtlinie verwenden.

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "AllowSTSAssumerole", "Effect": "Allow", "Action": [ "sts:AssumeRole" ], "Resource": "arn:aws:iam::123456789012:role/EMR_EC2_DefaultRole" } ] }

Erstellen einer Servicerolle für EC2-Cluster-Instances mit Berechtigungen mit geringsten Rechten

Als bewährte Methode empfehlen wir dringend, eine Servicerolle für Cluster-EC2-Instances und eine Berechtigungsrichtlinie zu erstellen, die über die Mindestberechtigungen für andere AWS Dienste verfügt, die für Ihre Anwendung erforderlich sind.

Die standardmäßige verwaltete Richtlinie, AmazonElasticMapReduceforEC2Role, bietet Berechtigungen, mit denen Sie problemlos einen ersten Cluster starten können. AmazonElasticMapReduceforEC2Roleist jedoch auf dem Weg, veraltet zu werden, und Amazon EMR wird keine AWS Ersatz-verwaltete Standardrichtlinie für die veraltete Rolle bereitstellen. Um einen ersten Cluster zu starten, müssen Sie eine vom Kunden verwaltete, ressourcenbasierte oder ID-basierte Richtlinie bereitstellen.

Die Richtlinienanweisungen unten zeigen Beispiele für die für verschiedene Features von Amazon EMR erforderlichen Berechtigungen. Wir empfehlen, diese Berechtigungen zu verwenden, um eine Berechtigungsrichtlinie zu erstellen, die den Zugriff auf nur diese Funktionen und Ressourcen beschränkt, die Ihr Cluster erfordert. Alle Beispielrichtlinien verwenden die us-west-2 Region und die fiktive Konto-ID. AWS 123456789012 Ersetzen Sie diese je nach Bedarf für Ihren Cluster.

Weitere Informationen zum Erstellen und Angeben benutzerdefinierter Rollen finden Sie unter Passen Sie IAM-Rollen mit Amazon EMR an.

Anmerkung

Wenn Sie eine benutzerdefinierte EMR-Rolle für EC2 erstellen, folgen Sie dem grundlegenden Workflow, der automatisch ein Instance-Profil mit demselben Namen erstellt. Amazon EC2 ermöglicht es Ihnen, Instance-Profile und Rollen mit unterschiedlichen Namen zu erstellen, aber Amazon EMR unterstützt diese Konfiguration nicht und führt zu einem Fehler „Ungültiges Instance-Profil“, wenn Sie den Cluster erstellen.

Lesen und Schreiben von Daten in Amazon S3 mithilfe von EMRFS

Wenn eine Anwendung, die auf einem Amazon-EMR-Cluster ausgeführt wird, auf Daten mithilfe des s3://mydata-Formats verweist, wird Amazon EMR von EC2-Instance-Profilen verwendet, um die Anforderung zu stellen. Cluster lesen und schreiben in der Regel Daten auf diese Weise in Amazon S3 und EMRFS verwendet die Amazon-EMR-Berechtigungen, die standardmäßig an die Servicerolle für EC2 Instances angefügt sind. Weitere Informationen finden Sie unter Konfigurieren von IAM-Rollen für EMRFS-Anforderungen an Amazon S3.

Da IAM-Rollen für EMRFS auf die Berechtigungen zurückgreifen, die der Servicerolle für Cluster-EC2-Instances zugeordnet sind, empfehlen wir als bewährte Methode, IAM-Rollen für EMRFS zu verwenden und die EMRFS- und Amazon-S3-Berechtigungen, die der Servicerolle zugeordnet sind, für Cluster-EC2-Instances einzuschränken.

Die Beispielanweisung unten zeigt die Berechtigungen, die erforderlich sind, damit EMRFS Anforderungen an Amazon S3 senden kann.

  • my-data-bucket-in-s3-for-emrfs-reads-and-writes spezifiziert den Bucket in Amazon S3, mit den der Cluster Daten liest und schreibt, sowie alle Unterordner mit /*. Fügen Sie nur die Buckets und Ordner hinzu, die Ihre Anwendung benötigt.

  • Die Richtlinienerklärung, die dynamodb-Aktionen zulässt, ist nur erforderlich, wenn die konsistente EMRFS-Ansicht aktiviert ist. EmrFSMetadata gibt den Standardordner für die konsistente EMRFS-Ansicht an.

JSON
{ "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/*" ], "Sid": "AllowS3Abortmultipartupload" }, { "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:*:123456789012:table/EmrFSMetadata" ], "Sid": "AllowDYNAMODBCreatetable" }, { "Effect": "Allow", "Action": [ "cloudwatch:PutMetricData", "dynamodb:ListTables", "s3:ListBucket" ], "Resource": [ "*" ], "Sid": "AllowCLOUDWATCHPutmetricdata" }, { "Effect": "Allow", "Action": [ "sqs:GetQueueUrl", "sqs:ReceiveMessage", "sqs:DeleteQueue", "sqs:SendMessage", "sqs:CreateQueue" ], "Resource": [ "arn:aws:sqs:*:123456789012:EMRFS-Inconsistency-*" ], "Sid": "AllowSQSGetqueueurl" } ] }

Archivieren von Protokolldateien in Amazon S3

Die folgende Richtlinienanweisung ermöglicht dem Amazon-EMR-Cluster die Archivierung von Protokolldateien in dem angegebenen Amazon-S3-Speicherort. Im folgenden Beispiel wurde bei der Erstellung des Clusters der Speicherort Protokollordner S3 in der Konsole, mithilfe der --log-uri Option von oder mithilfe des AWS CLILogUri Parameters im RunJobFlow Befehl angegeben. s3://MyLoggingBucket/MyEMRClusterLogs Weitere Informationen finden Sie unter Archivieren von Protokolldateien in Amazon S3.

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

Verwenden des AWS Glue-Datenkatalogs

Die folgende Richtlinienerklärung erlaubt Aktionen, die erforderlich sind, wenn Sie den AWS Glue-Datenkatalog als Metastore für Anwendungen verwenden. Weitere Informationen finden Sie unter Verwenden des AWS Glue-Datenkatalogs als Metastore für Spark SQL, Verwenden des AWS Glue-Datenkatalogs als Metastore für Hive und Verwenden von Presto mit dem AWS Glue-Datenkatalog im Amazon EMR-Versionshandbuch.

JSON
{ "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": [ "*" ], "Sid": "AllowGLUECreatedatabase" } ] }