本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
叢集 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 版的內容。
- 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"
}
]
}
您的服務角色應使用下列信任政策。
- JSON
-
-
{
"Version":"2012-10-17",
"Statement": [
{
"Sid": "AllowSTSAssumerole",
"Effect": "Allow",
"Action": [
"sts:AssumeRole"
],
"Resource": "arn:aws:iam::123456789012:role/EMR_EC2_DefaultRole"
}
]
}
為叢集 EC2 執行個體建立擁有最低權限許可的服務角色
最佳實務是,強烈建議您為叢集 EC2 執行個體建立服務角色,以及具有應用程式AWS所需其他服務最低許可的許可政策。
預設受管政策 AmazonElasticMapReduceforEC2Role 提供許可,可讓您輕鬆地啟動初始叢集。不過, AmazonElasticMapReduceforEC2Role 正在淘汰的路徑上,Amazon EMR 不會為淘汰的角色提供替代的AWS受管預設政策。若要啟動初始叢集,您需要提供客戶受管資源型或 ID 型政策。
下列政策陳述式提供 Amazon EMR 不同功能所需的許可範例。我們建議您使用這些許可來建立許可政策,限制只能存取您的叢集所需的功能和資源。所有範例政策陳述式都使用 us-west-2區域和虛構AWS帳戶 ID 123456789012。請針對您的叢集適當替換。
如需有關建立和指定自訂角色的詳細資訊,請參閱 使用 Amazon EMR 自訂 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 發出請求所需的許可。
- 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"
}
]
}
將日誌檔案封存至 Amazon S3
下列政策陳述式允許 Amazon EMR 叢集將日誌檔封存至指定的 Amazon S3 位置。在下面的範例中,建立叢集時,使用主控台中的日誌資料夾 S3 位置、使用 中的 --log-uri選項AWS CLI,或在 RunJobFlow命令中使用 LogUri 參數來s3://MyLoggingBucket/MyEMRClusterLogs指定 。如需詳細資訊,請參閱將日誌檔案封存至 Amazon S3。
- JSON
-
-
{
"Version":"2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::MyLoggingBucket/MyEMRClusterLogs/*"
],
"Sid": "AllowS3Putobject"
}
]
}
使用 AWSGlue Data Catalog
如果您使用 AWSGlue Data Catalog 做為應用程式的中繼存放區,下列政策陳述式允許必要的動作。如需詳細資訊,請參閱《Amazon EMR 版本指南》中的使用 AWSGlue Data Catalog 作為 Spark SQL 的中繼存放區、使用 AWSGlue Data Catalog 作為 Hive 的中繼存放區,以及使用 Presto 搭配 AWSGlue Data Catalog。
- 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"
}
]
}