叢集 EC2 執行個體的服務角色 (EC2 執行個體設定檔) - Amazon EMR

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

叢集 EC2 執行個體的服務角色 (EC2 執行個體設定檔)

叢集 EC2 執行個體的服務角色 (也稱為 Amazon EMR 的 EC2 執行個體設定檔) 是一種特殊類型的服務角色,它會在執行個體啟動時指派給 Amazon EMR 叢集中的每個 EC2 執行個體。在 Hadoop 生態系統上執行的應用程式程序會擔任此角色,以取得與其他 AWS 服務互動的許可。

如需有關 EC2 執行個體的服務角色的詳細資訊,請參閱《IAM 使用者指南》中的使用 IAM 角色為在 Amazon EC2 執行個體上執行的應用程式授予許可

重要

叢集 EC2 執行個體的預設服務角色及其相關聯的 AWS 預設受管政策AmazonElasticMapReduceforEC2Role正在淘汰的路徑上,不提供替代 AWS 受管政策。您需要建立並指定執行個體設定檔,以取代已棄用的角色和預設政策。

預設角色和受管政策

  • 預設角色名稱為 EMR_EC2_DefaultRole

  • EMR_EC2_DefaultRole 預設受管政策 AmazonElasticMapReduceforEC2Role 即將結束支援。將資源型政策套用至 S3 儲存貯體和 Amazon EMR 需要的其他資源,或將您自己的客戶受管政策與 IAM 角色搭配使用作為執行個體設定檔,而不是針對 EC2 執行個體設定檔使用預設受管政策。如需詳細資訊,請參閱 為叢集 EC2 執行個體建立擁有最低權限許可的服務角色

以下顯示 AmazonElasticMapReduceforEC2Role 第 3 版的內容。

{ "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" ] } ] }

您的服務角色應使用下列信任政策。

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

為叢集 EC2 執行個體建立擁有最低權限許可的服務角色

最佳做法是,我們強烈建議您為叢集 EC2 執行個體和許可政策建立服務角色,該政策具有應用程式所需其他 AWS 服務的最低許可權。

預設受管政策 AmazonElasticMapReduceforEC2Role 提供許可,可讓您輕鬆地啟動初始叢集。但AmazonElasticMapReduceforEC2Role是,正處於棄用的路徑上,Amazon EMR 不會為已取代的角色提供替代 AWS 受管預設政策。若要啟動初始叢集,您需要提供客戶受管資源型或 ID 型政策。

下列政策陳述式提供 Amazon EMR 不同功能所需的許可範例。我們建議您使用這些許可來建立許可政策,限制只能存取您的叢集所需的功能和資源。所有範例政策陳述式都使用 us-west-2Region 和虛構的 AWS 帳戶 ID 123456789012。請針對您的叢集適當替換。

如需有關建立和指定自訂角色的詳細資訊,請參閱 自訂 IAM 角色

注意

如果您為 EC2 建立自訂 EMR 角色,請遵循基本工作流程,此工作流程會自動建立相同名稱的執行個體設定檔。Amazon EC2 可讓您建立不同名稱的執行個體設定檔和角色,但是 Amazon EMR 不支援此組態,且在建立叢集時會導致「無效的執行個體設定檔」錯誤。

使用 EMRFS 在 Amazon S3 中讀取和寫入資料

當 Amazon EMR 叢集上執行的應用程式參考使用 s3://mydata 格式的資料時,Amazon EMR 將使用 EC2 執行個體設定檔發出請求。叢集通常以這種方式在 Amazon S3 中讀取和寫入資料,而且依預設,Amazon EMR 使用附接至叢集 EC2 執行個體的服務角色的許可。如需詳細資訊,請參閱 設定向 Amazon S3 請求使用 EMRFS 的 IAM 角色

由於 EMRFS 的 IAM 角色會回復為附接至叢集 EC2 執行個體的服務角色的許可,作為最佳實務,建議您使用 EMRFS 的 IAM 角色,並限制附接至叢集 EC2 執行個體的服務角色的 EMRFS 和 Amazon S3 許可。

以下範例陳述式展示 EMRFS 向 Amazon S3 發出請求所需的許可。

  • my-data-bucket-in-s3-for-emrfs-reads-and-writes 使用 /* 指定 Amazon S3 中叢集讀取和寫入資料的儲存貯體以及所有子資料夾。只新增您的應用程式需要的儲存貯體和資料夾。

  • 只有在啟用 EMRFS 一致性檢視時,才需要允許 dynamodb 動作的政策陳述式。EmrFSMetadata 指定 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-*" } ] }

將日誌檔案封存至 Amazon S3

下列政策陳述式允許 Amazon EMR 叢集將日誌檔封存至指定的 Amazon S3 位置。在以下範例中,建立叢集時,s3://MyLoggingBucket/MyEMRClusterLogs是使用控制台中的--log-uri選項,或使用RunJobFlow命令中的LogUri參數,使用主控台中的日誌資料夾 S3 位置來指定。 AWS CLI如需詳細資訊,請參閱 將日誌檔案封存至 Amazon S3

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

使用 AWS Glue 資料型錄

如果您使用 AWS Glue 資料型錄做為應用程式的中繼存放區,下列原則陳述式允許執行所需的動作。如需詳細資訊,請參閱使用 AWS Glue 資料目錄做為 Spark SQL 的中繼存放區使用 AWS Glue 資料目錄做為 Hive 的中繼存放區,以及在 Amazon EM R 發行指南中將 Presto 與 AWS Glue 資料目錄搭配使用

{ "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": "*", } ] }