本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
叢集EC2執行個體的服務角色 (EC2執行個體設定檔)
叢集EC2執行個體的服務角色 (也稱為 Amazon 的EC2執行個體設定檔EMR) 是特殊類型的服務角色,會在EC2執行個體啟動時指派給 Amazon EMR叢集中的每個執行個體。在 Hadoop 生態系統上執行的應用程式程序會擔任此角色,以取得與其他 AWS 服務互動的許可。
如需EC2執行個體服務角色的詳細資訊,請參閱 IAM 使用者指南 中的使用 IAM角色將許可授予在 Amazon EC2執行個體上執行的應用程式。
重要
叢集EC2執行個體及其相關聯的 AWS 預設受管政策的預設服務角色AmazonElasticMapReduceforEC2Role
位於棄用路徑中,未提供替代 AWS 受管政策。您需要建立並指定執行個體設定檔,以取代已棄用的角色和預設政策。
預設角色和受管政策
-
預設角色名稱為
EMR_EC2_DefaultRole
。 -
EMR_EC2_DefaultRole
預設受管政策AmazonElasticMapReduceforEC2Role
即將結束支援。不針對EC2執行個體設定檔使用預設受管政策,而是將資源型政策套用至 Amazon EMR所需的 S3 儲存貯體和其他資源,或使用您自己的客戶受管政策將IAM角色作為執行個體設定檔。如需詳細資訊,請參閱為具有最低權限許可的叢集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
區域和虛構 AWS 帳戶 ID 123456789012
。 根據您的叢集替換這些項目。
如需有關建立和指定自訂角色的詳細資訊,請參閱 使用 Amazon 自訂IAM角色 EMR。
注意
如果您為 建立自訂EMR角色EC2,請遵循基本工作流程,其會自動建立相同名稱的執行個體設定檔。Amazon EC2可讓您使用不同的名稱建立執行個體設定檔和角色,但 Amazon EMR 不支援此組態,而且會在您建立叢集時造成「無效的執行個體設定檔」錯誤。
使用 讀取和寫入資料至 Amazon S3 EMRFS
當在 Amazon EMR叢集上執行的應用程式使用 s3://
格式參考資料時,Amazon EMR會使用EC2執行個體設定檔來提出請求。叢集通常會以這種方式讀取和寫入資料至 Amazon S3,而且 Amazon 預設EMR會使用連接至叢集EC2執行個體服務角色的許可。如需詳細資訊,請參閱設定 Amazon S3 EMRFS請求IAM的角色。mydata
由於 IAM的角色EMRFS會回復至叢集EC2執行個體的服務角色所附加的許可,因此最佳實務建議您使用 IAM的角色EMRFS,並限制叢集EC2執行個體的服務角色所附加的 EMRFS和 Amazon S3 許可。
以下範例陳述式示範向 Amazon S3 提出請求EMRFS所需的許可。
-
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 資料夾 S3 位置、使用 中的 --log-uri
選項 AWS CLI,或在 RunJobFlow
命令中使用 LogUri
參數來指定。如需詳細資訊,請參閱將日誌檔案封存至 Amazon S3。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::
MyLoggingBucket/MyEMRClusterLogs
/*" } ] }
使用 AWS Glue Data Catalog
如果您使用 AWS Glue Data Catalog 作為應用程式的中繼存放區,下列政策陳述式允許必要的動作。如需詳細資訊,請參閱 Amazon EMR版本指南 中的使用 AWS Glue Data Catalog 作為 Spark 的中繼存放SQL區、使用 AWS Glue Data Catalog 作為 Hive 的中繼存放區,以及使用 Presto 搭配 AWS Glue Data Catalog。
{ "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": "*", } ] }