本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
叢集 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-2
Region 和虛構的 AWS 帳戶 ID 123456789012
。請針對您的叢集適當替換。
如需有關建立和指定自訂角色的詳細資訊,請參閱 自訂 IAM 角色。
注意
如果您為 EC2 建立自訂 EMR 角色,請遵循基本工作流程,此工作流程會自動建立相同名稱的執行個體設定檔。Amazon EC2 可讓您建立不同名稱的執行個體設定檔和角色,但是 Amazon EMR 不支援此組態,且在建立叢集時會導致「無效的執行個體設定檔」錯誤。
使用 EMRFS 在 Amazon S3 中讀取和寫入資料
當 Amazon EMR 叢集上執行的應用程式參考使用 s3://
格式的資料時,Amazon EMR 將使用 EC2 執行個體設定檔發出請求。叢集通常以這種方式在 Amazon S3 中讀取和寫入資料,而且依預設,Amazon EMR 使用附接至叢集 EC2 執行個體的服務角色的許可。如需詳細資訊,請參閱 設定向 Amazon S3 請求使用 EMRFS 的 IAM 角色。mydata
由於 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": "*", } ] }