

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

# 叢集 EC2 執行個體的服務角色 (EC2 執行個體設定檔)
<a name="emr-iam-role-for-ec2"></a>

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

如需有關 EC2 執行個體的服務角色的詳細資訊，請參閱《IAM 使用者指南》**中的[使用 IAM 角色為在 Amazon EC2 執行個體上執行的應用程式授予許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2.html)。

**重要**  
叢集 EC2 執行個體的預設服務角色及其相關聯的 AWS 預設受管政策`AmazonElasticMapReduceforEC2Role`位於棄用路徑中，未提供替代的 AWS 受管政策。您需要建立並指定執行個體設定檔，以取代已棄用的角色和預設政策。

## 預設角色和受管政策
<a name="emr-ec2-role-default"></a>
+ 預設角色名稱為 `EMR_EC2_DefaultRole`。
+ `EMR_EC2_DefaultRole` 預設受管政策 `AmazonElasticMapReduceforEC2Role` 即將結束支援。將資源型政策套用至 S3 儲存貯體和 Amazon EMR 需要的其他資源，或將您自己的客戶受管政策與 IAM 角色搭配使用作為執行個體設定檔，而不是針對 EC2 執行個體設定檔使用預設受管政策。如需詳細資訊，請參閱[為叢集 EC2 執行個體建立擁有最低權限許可的服務角色](#emr-ec2-role-least-privilege)。

以下顯示 `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 執行個體建立擁有最低權限許可的服務角色
<a name="emr-ec2-role-least-privilege"></a>

最佳實務是，強烈建議您為叢集 EC2 執行個體建立服務角色，以及具有應用程式 AWS 所需其他服務最低許可的許可政策。

預設受管政策 `AmazonElasticMapReduceforEC2Role` 提供許可，可讓您輕鬆地啟動初始叢集。不過， `AmazonElasticMapReduceforEC2Role` 正在淘汰的路徑上，Amazon EMR 不會為淘汰的角色提供替代的 AWS 受管預設政策。若要啟動初始叢集，您需要提供客戶受管資源型或 ID 型政策。

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

如需有關建立和指定自訂角色的詳細資訊，請參閱 [使用 Amazon EMR 自訂 IAM 角色](emr-iam-roles-custom.md)。

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

### 使用 EMRFS 在 Amazon S3 中讀取和寫入資料
<a name="emr-ec2-role-EMRFS"></a>

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

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

以下範例陳述式展示 EMRFS 向 Amazon S3 發出請求所需的許可。
+ *my-data-bucket-in-s3-for-emrfs-reads-and-writes* 使用 */\$1* 指定 Amazon S3 中叢集讀取和寫入資料的儲存貯體以及所有子資料夾。只新增您的應用程式需要的儲存貯體和資料夾。
+ 只有在啟用 EMRFS 一致性檢視時，才需要允許 `dynamodb` 動作的政策陳述式。*EmrFSMetadata* 指定 EMRFS 一致性檢視的預設資料夾。

------
#### [ 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
<a name="emr-ec2-role-s3-logs"></a>

下列政策陳述式允許 Amazon EMR 叢集將日誌檔封存至指定的 Amazon S3 位置。在以下範例中，建立叢集時，使用 主控台中的**日誌資料夾 S3 位置**、使用 中的 `--log-uri`選項 AWS CLI，或在 `RunJobFlow`命令中使用 `LogUri` 參數來*s3://MyLoggingBucket/MyEMRClusterLogs*指定 。如需詳細資訊，請參閱[將日誌檔案封存至 Amazon S3](emr-plan-debugging.md#emr-plan-debugging-logs-archive)。

------
#### [ JSON ]

****  

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

------

### 使用 AWS Glue Data Catalog
<a name="emr-ec2-role-glue"></a>

如果您使用 AWS Glue Data Catalog 做為應用程式的中繼存放區，下列政策陳述式會允許所需的動作。如需詳細資訊，請參閱《*Amazon EMR 版本指南*》中的[使用 AWS Glue Data Catalog 作為 Spark SQL 的中繼存放區](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-spark-glue.html)、[使用 AWS Glue Data Catalog 作為 Hive 的中繼存放](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-hive-metastore-glue.html)區，以及[使用 Presto 搭配 AWS Glue Data Catalog](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-presto-glue.html)。

------
#### [ 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"
    }
  ]
}
```

------