

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Amazon EMR 使用的 IAM 服务角色
<a name="emr-iam-service-roles"></a>

在预置集群资源、运行应用程序、动态扩展资源以及创建和运行 EMR Notebooks 时，Amazon EMR 使用 IAM 服务角色代表您执行操作。Amazon EMR 与其它 AWS 服务交互时使用以下角色。每个角色在 Amazon EMR 中都有唯一的功能。本部分中的主题介绍角色功能，并提供默认角色和每个角色的权限策略。

如果您的集群上有直接调用 AWS 服务的应用程序代码，则可能需要使用 SDK 来指定角色。有关更多信息，请参阅 [将 IAM 角色与直接调用 AWS 服务的应用程序配合使用](emr-iam-roles-calling.md)。

**Topics**
+ [Amazon EMR 的服务角色（EMR 角色）](emr-iam-role.md)
+ [集群 EC2 实例（EC2 实例配置文件）的服务角色](emr-iam-role-for-ec2.md)
+ [Amazon EMR 中的自动扩展服务角色（Auto Scaling 角色）](emr-iam-role-automatic-scaling.md)
+ [EMR Notebooks 的服务角色](emr-managed-notebooks-service-role.md)
+ [对 Amazon EMR 使用服务相关角色](using-service-linked-roles.md)

# Amazon EMR 的服务角色（EMR 角色）
<a name="emr-iam-role"></a>

Amazon EMR 角色定义了在预置资源，以及执行对于在集群中运行的特定 Amazon EC2 实例而言不会执行的服务级任务时，将允许 Amazon EMR 执行的操作。例如，服务角色用于在集群启动时配置 EC2 实例。
+ 默认角色名为 `EMR_DefaultRole_V2`。
+ 附加到 `EMR_DefaultRole_V2` 的 Amazon EMR 范围的默认托管式策略是 `AmazonEMRServicePolicy_v2`。此 v2 策略将取代弃用的默认托管式策略 `AmazonElasticMapReduceRole`。

`AmazonEMRServicePolicy_v2` 取决于对 Amazon EMR 预调配或使用的资源的范围缩小访问权限。使用此策略时，您需要在预置集群时传递用户标签 `for-use-with-amazon-emr-managed-policies = true`。Amazon EMR 将自动传播这些标签。此外，您可能需要手动向特定类型的资源添加用户标签，例如不是由 Amazon EMR 创建的 EC2 安全组。请参阅[标记资源以使用托管式策略](emr-managed-iam-policies.md#manually-tagged-resources)。

**重要**  
Amazon EMR 使用此 Amazon EMR 服务角色和 `AWSServiceRoleForEMRCleanup` 角色来清理账户中不再使用的集群资源，例如 Amazon EC2 实例。您必须在角色策略包含删除或终止资源所需的操作。否则，Amazon EMR 将无法执行这些清理操作，并且集群上剩余的未使用资源可能会产生费用。

下面显示的是当前 `AmazonEMRServicePolicy_v2` 策略的内容。您还可以在 IAM 控制台上查看 [https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AmazonEMRServicePolicy_v2](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AmazonEMRServicePolicy_v2) 托管式策略的当前内容。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "CreateInTaggedNetwork",
      "Effect": "Allow",
      "Action": [
        "ec2:CreateNetworkInterface",
        "ec2:RunInstances",
        "ec2:CreateFleet",
        "ec2:CreateLaunchTemplate",
        "ec2:CreateLaunchTemplateVersion"
      ],
      "Resource": [
        "arn:aws:ec2:*:*:subnet/*",
        "arn:aws:ec2:*:*:security-group/*"
      ],
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/for-use-with-amazon-emr-managed-policies": "true"
        }
      }
    },
    {
      "Sid": "CreateWithEMRTaggedLaunchTemplate",
      "Effect": "Allow",
      "Action": [
        "ec2:CreateFleet",
        "ec2:RunInstances",
        "ec2:CreateLaunchTemplateVersion"
      ],
      "Resource": [
        "arn:aws:ec2:*:*:launch-template/*"
      ],
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/for-use-with-amazon-emr-managed-policies": "true"
        }
      }
    },
    {
      "Sid": "CreateEMRTaggedLaunchTemplate",
      "Effect": "Allow",
      "Action": [
        "ec2:CreateLaunchTemplate"
      ],
      "Resource": [
        "arn:aws:ec2:*:*:launch-template/*"
      ],
      "Condition": {
        "StringEquals": {
          "aws:RequestTag/for-use-with-amazon-emr-managed-policies": "true"
        }
      }
    },
    {
      "Sid": "CreateEMRTaggedInstancesAndVolumes",
      "Effect": "Allow",
      "Action": [
        "ec2:RunInstances",
        "ec2:CreateFleet"
      ],
      "Resource": [
        "arn:aws:ec2:*:*:instance/*",
        "arn:aws:ec2:*:*:volume/*"
      ],
      "Condition": {
        "StringEquals": {
          "aws:RequestTag/for-use-with-amazon-emr-managed-policies": "true"
        }
      }
    },
    {
      "Sid": "ResourcesToLaunchEC2",
      "Effect": "Allow",
      "Action": [
        "ec2:RunInstances",
        "ec2:CreateFleet",
        "ec2:CreateLaunchTemplate",
        "ec2:CreateLaunchTemplateVersion"
      ],
      "Resource": [
        "arn:aws:ec2:*:*:network-interface/*",
        "arn:aws:ec2:*::image/ami-*",
        "arn:aws:ec2:*:*:key-pair/*",
        "arn:aws:ec2:*:*:capacity-reservation/*",
        "arn:aws:ec2:*:*:placement-group/pg-*",
        "arn:aws:ec2:*:*:fleet/*",
        "arn:aws:ec2:*:*:dedicated-host/*",
        "arn:aws:resource-groups:*:*:group/*"
      ]
    },
    {
      "Sid": "ManageEMRTaggedResources",
      "Effect": "Allow",
      "Action": [
        "ec2:CreateLaunchTemplateVersion",
        "ec2:DeleteLaunchTemplate",
        "ec2:DeleteNetworkInterface",
        "ec2:ModifyInstanceAttribute",
        "ec2:TerminateInstances"
      ],
      "Resource": [
        "*"
      ],
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/for-use-with-amazon-emr-managed-policies": "true"
        }
      }
    },
    {
      "Sid": "ManageTagsOnEMRTaggedResources",
      "Effect": "Allow",
      "Action": [
        "ec2:CreateTags",
        "ec2:DeleteTags"
      ],
      "Resource": [
        "arn:aws:ec2:*:*:instance/*",
        "arn:aws:ec2:*:*:volume/*",
        "arn:aws:ec2:*:*:network-interface/*",
        "arn:aws:ec2:*:*:launch-template/*"
      ],
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/for-use-with-amazon-emr-managed-policies": "true"
        }
      }
    },
    {
      "Sid": "CreateNetworkInterfaceNeededForPrivateSubnet",
      "Effect": "Allow",
      "Action": [
        "ec2:CreateNetworkInterface"
      ],
      "Resource": [
        "arn:aws:ec2:*:*:network-interface/*"
      ],
      "Condition": {
        "StringEquals": {
          "aws:RequestTag/for-use-with-amazon-emr-managed-policies": "true"
        }
      }
    },
    {
      "Sid": "TagOnCreateTaggedEMRResources",
      "Effect": "Allow",
      "Action": [
        "ec2:CreateTags"
      ],
      "Resource": [
        "arn:aws:ec2:*:*:network-interface/*",
        "arn:aws:ec2:*:*:instance/*",
        "arn:aws:ec2:*:*:volume/*",
        "arn:aws:ec2:*:*:launch-template/*"
      ],
      "Condition": {
        "StringEquals": {
          "ec2:CreateAction": [
            "RunInstances",
            "CreateFleet",
            "CreateLaunchTemplate",
            "CreateNetworkInterface"
          ]
        }
      }
    },
    {
      "Sid": "TagPlacementGroups",
      "Effect": "Allow",
      "Action": [
        "ec2:CreateTags",
        "ec2:DeleteTags"
      ],
      "Resource": [
        "arn:aws:ec2:*:*:placement-group/pg-*"
      ]
    },
    {
      "Sid": "ListActionsForEC2Resources",
      "Effect": "Allow",
      "Action": [
        "ec2:DescribeAccountAttributes",
        "ec2:DescribeCapacityReservations",
        "ec2:DescribeDhcpOptions",
        "ec2:DescribeImages",
        "ec2:DescribeInstances",
        "ec2:DescribeInstanceTypeOfferings",
        "ec2:DescribeLaunchTemplates",
        "ec2:DescribeNetworkAcls",
        "ec2:DescribeNetworkInterfaces",
        "ec2:DescribePlacementGroups",
        "ec2:DescribeRouteTables",
        "ec2:DescribeSecurityGroups",
        "ec2:DescribeSubnets",
        "ec2:DescribeVolumes",
        "ec2:DescribeVolumeStatus",
        "ec2:DescribeVpcAttribute",
        "ec2:DescribeVpcEndpoints",
        "ec2:DescribeVpcs"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Sid": "CreateDefaultSecurityGroupWithEMRTags",
      "Effect": "Allow",
      "Action": [
        "ec2:CreateSecurityGroup"
      ],
      "Resource": [
        "arn:aws:ec2:*:*:security-group/*"
      ],
      "Condition": {
        "StringEquals": {
          "aws:RequestTag/for-use-with-amazon-emr-managed-policies": "true"
        }
      }
    },
    {
      "Sid": "CreateDefaultSecurityGroupInVPCWithEMRTags",
      "Effect": "Allow",
      "Action": [
        "ec2:CreateSecurityGroup"
      ],
      "Resource": [
        "arn:aws:ec2:*:*:vpc/*"
      ],
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/for-use-with-amazon-emr-managed-policies": "true"
        }
      }
    },
    {
      "Sid": "TagOnCreateDefaultSecurityGroupWithEMRTags",
      "Effect": "Allow",
      "Action": [
        "ec2:CreateTags"
      ],
      "Resource": [
        "arn:aws:ec2:*:*:security-group/*"
      ],
      "Condition": {
        "StringEquals": {
          "aws:RequestTag/for-use-with-amazon-emr-managed-policies": "true",
          "ec2:CreateAction": "CreateSecurityGroup"
        }
      }
    },
    {
      "Sid": "ManageSecurityGroups",
      "Effect": "Allow",
      "Action": [
        "ec2:AuthorizeSecurityGroupEgress",
        "ec2:AuthorizeSecurityGroupIngress",
        "ec2:RevokeSecurityGroupEgress",
        "ec2:RevokeSecurityGroupIngress"
      ],
      "Resource": [
        "*"
      ],
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/for-use-with-amazon-emr-managed-policies": "true"
        }
      }
    },
    {
      "Sid": "CreateEMRPlacementGroups",
      "Effect": "Allow",
      "Action": [
        "ec2:CreatePlacementGroup"
      ],
      "Resource": [
        "arn:aws:ec2:*:*:placement-group/pg-*"
      ]
    },
    {
      "Sid": "DeletePlacementGroups",
      "Effect": "Allow",
      "Action": [
        "ec2:DeletePlacementGroup"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Sid": "AutoScaling",
      "Effect": "Allow",
      "Action": [
        "application-autoscaling:DeleteScalingPolicy",
        "application-autoscaling:DeregisterScalableTarget",
        "application-autoscaling:DescribeScalableTargets",
        "application-autoscaling:DescribeScalingPolicies",
        "application-autoscaling:PutScalingPolicy",
        "application-autoscaling:RegisterScalableTarget"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Sid": "ResourceGroupsForCapacityReservations",
      "Effect": "Allow",
      "Action": [
        "resource-groups:ListGroupResources"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Sid": "AutoScalingCloudWatch",
      "Effect": "Allow",
      "Action": [
        "cloudwatch:PutMetricAlarm",
        "cloudwatch:DeleteAlarms",
        "cloudwatch:DescribeAlarms"
      ],
      "Resource": [
        "arn:aws:cloudwatch:*:*:alarm:*_EMR_Auto_Scaling"
      ]
    },
    {
      "Sid": "PassRoleForAutoScaling",
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": [
        "arn:aws:iam::*:role/EMR_AutoScaling_DefaultRole"
      ],
      "Condition": {
        "StringLike": {
          "iam:PassedToService": "application-autoscaling.amazonaws.com*"
        }
      }
    },
    {
      "Sid": "PassRoleForEC2",
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": [
        "arn:aws:iam::*:role/EMR_EC2_DefaultRole"
      ],
      "Condition": {
        "StringLike": {
          "iam:PassedToService": "ec2.amazonaws.com*"
        }
      }
    },
    {
      "Sid": "CreateAndModifyEmrServiceVPCEndpoint",
      "Effect": "Allow",
      "Action": [
        "ec2:ModifyVpcEndpoint",
        "ec2:CreateVpcEndpoint"
      ],
      "Resource": [
        "arn:aws:ec2:*:*:vpc-endpoint/*",
        "arn:aws:ec2:*:*:subnet/*",
        "arn:aws:ec2:*:*:security-group/*",
        "arn:aws:ec2:*:*:vpc/*"
      ],
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/for-use-with-amazon-emr-managed-policies": "true"
        }
      }
    },
    {
      "Sid": "CreateEmrServiceVPCEndpoint",
      "Effect": "Allow",
      "Action": [
        "ec2:CreateVpcEndpoint"
      ],
      "Resource": [
        "arn:aws:ec2:*:*:vpc-endpoint/*"
      ],
      "Condition": {
        "StringEquals": {
          "aws:RequestTag/for-use-with-amazon-emr-managed-policies": "true",
          "aws:RequestTag/Name": "emr-service-vpce"
        }
      }
    },
    {
      "Sid": "TagEmrServiceVPCEndpoint",
      "Effect": "Allow",
      "Action": [
        "ec2:CreateTags"
      ],
      "Resource": [
        "arn:aws:ec2:*:*:vpc-endpoint/*"
      ],
      "Condition": {
        "StringEquals": {
          "ec2:CreateAction": "CreateVpcEndpoint",
          "aws:RequestTag/for-use-with-amazon-emr-managed-policies": "true",
          "aws:RequestTag/Name": "emr-service-vpce"
        }
      }
    }
  ]
}
```

------

您的服务角色应该使用下面的信任策略。

**重要**  
下面的信任策略包括 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) 和 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) 全局条件密钥，该密钥将限制您为 Amazon EMR 授予的、针对您账户中特定资源的权限。使用这些策略可以防止[混淆代理问题](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowSTSAssumerole",
      "Effect": "Allow",
      "Action": [
        "sts:AssumeRole"
      ],
      "Resource": "arn:aws:iam::123456789012:role/EMRServiceRole",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "123456789012"
        },
        "ArnLike": {
          "aws:SourceArn": "arn:aws:elasticmapreduce:*:123456789012:*"
        }
      }
    }
  ]
}
```

------

# 集群 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 默认托管策略即将被弃用，没有提供替代的 AWS 托管策略。`AmazonElasticMapReduceforEC2Role`您需要创建并指定实例配置文件以替换弃用的角色和默认策略。

## 默认角色和托管式策略
<a name="emr-ec2-role-default"></a>
+ 默认角色名为 `EMR_EC2_DefaultRole`。
+ `EMR_EC2_DefaultRole` 默认托管式策略 `AmazonElasticMapReduceforEC2Role` 的支持即将结束。不要为 EC2 实例配置文件使用默认托管式策略，而是将基于资源的策略应用于 Amazon EMR 需要的 S3 桶和其他资源，或者使用您自己的客户管理型策略和 IAM 角色作为实例配置文件。有关更多信息，请参阅 [创建具有最小权限的集群 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 不支持此配置，并且在您创建集群时会导致“invalid instance profile”错误。

### 使用 EMRFS 读写 Amazon S3 中的数据
<a name="emr-ec2-role-EMRFS"></a>

当在 Amazon EMR 集群上运行的应用程序引用 `s3://mydata` 格式的数据时，Amazon EMR 使用 EC2 实例配置文件发出请求。集群通常以这种方式在 Amazon S3 中读取和写入数据。默认情况下，Amazon EMR 使用附加到集群 EC2 实例的服务角色的权限。有关更多信息，请参阅[为处理 EMRFS 对 Amazon S3 的请求配置 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* 指定 Amazon S3 中的桶，在该桶中，集群使用 */\$1* 读取和写入数据和所有子文件夹。请仅添加您的应用程序需要的存储桶和文件夹。
+ 只有在启用 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://MyLoggingBucket/MyEMRClusterLogs*时，使用控制台中的**日志文件夹 S3 位置** AWS CLI、中的`--log-uri`选项或`RunJobFlow`命令中的`LogUri`参数进行指定。有关更多信息，请参阅 [将日志文件归档到 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 数据目录
<a name="emr-ec2-role-glue"></a>

以下策略声明允许您使用 Glue 数据目录作为 AWS 应用程序的元数据仓时所需的操作。有关更多信息，请参阅《亚马逊 *EM* R 发布指南》[中的 [“使用 AWS Glue 数据目录作为 Spark SQL 的元数据库](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-spark-glue.html)、[使用 AWS Glue 数据目录作为 Hive 的元数据仓](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-hive-metastore-glue.html)以及将 Presto 与 Glue 数据目录一起使用 AWS Glue 数据](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"
    }
  ]
}
```

------

# Amazon EMR 中的自动扩展服务角色（Auto Scaling 角色）
<a name="emr-iam-role-automatic-scaling"></a>

Amazon EMR 的 Auto Scaling 角色的作用与服务角色相似，但前者允许用于动态扩展环境的其它操作。
+ 默认角色名为 `EMR_AutoScaling_DefaultRole`。
+ 附加到 `EMR_AutoScaling_DefaultRole` 的默认托管式策略是 `AmazonElasticMapReduceforAutoScalingRole`。

`AmazonElasticMapReduceforAutoScalingRole` 版本 1 的内容如下所示。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Action": [
        "cloudwatch:DescribeAlarms",
        "elasticmapreduce:ListInstanceGroups",
        "elasticmapreduce:ModifyInstanceGroups"
      ],
      "Effect": "Allow",
      "Resource": [
        "*"
      ],
      "Sid": "AllowCLOUDWATCHDescribealarms"
    }
  ]
}
```

------

您的服务角色应该使用下面的信任策略。

**重要**  
下面的信任策略包括 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) 和 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) 全局条件密钥，该密钥将限制您为 Amazon EMR 授予的、针对您账户中特定资源的权限。使用这些策略可以防止[混淆代理问题](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "sts:AssumeRole"
      ],
      "Resource": "arn:aws:iam::123456789012:role/ApplicationAutoScalingEMRRole",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "123456789012"
        },
        "ArnLike": {
          "aws:SourceArn": "arn:aws:application-autoscaling:*:123456789012:scalable-target/*"
        }
      },
      "Sid": "AllowSTSAssumerole"
    }
  ]
}
```

------

# EMR Notebooks 的服务角色
<a name="emr-managed-notebooks-service-role"></a>

每个 EMR 笔记本都需要访问其他 AWS 资源和执行操作的权限。附加到此服务角色的 IAM 策略为笔记本提供了与其他 AWS 服务互操作的权限。使用创建笔记本时 AWS 管理控制台，需要指定*AWS 服务角色*。您可以使用默认角色 `EMR_Notebooks_DefaultRole`，也可以指定您创建的角色。如果之前尚未创建 Notebook，则可以选择创建默认角色。
+ 默认角色名为 `EMR_Notebooks_DefaultRole`。
+ 默认情况下，附加到 `EMR_Notebooks_DefaultRole` 的托管式策略是 `AmazonElasticMapReduceEditorsRole` 和 `S3FullAccessPolicy`。

您的服务角色应该使用下面的信任策略。

**重要**  
下面的信任策略包括 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) 和 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) 全局条件密钥，该密钥将限制您为 Amazon EMR 授予的、针对您账户中特定资源的权限。使用这些策略可以防止[混淆代理问题](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "sts:AssumeRole"
      ],
      "Resource": "arn:aws:iam::123456789012:role/EMRServiceRole",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "123456789012"
        },
        "ArnLike": {
          "aws:SourceArn": "arn:aws:elasticmapreduce:*:123456789012:*"
        }
      },
      "Sid": "AllowSTSAssumerole"
    }
  ]
}
```

------

版本 1 的内容 `AmazonElasticMapReduceEditorsRole` 如下所示。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ec2:AuthorizeSecurityGroupEgress",
        "ec2:AuthorizeSecurityGroupIngress",
        "ec2:CreateSecurityGroup",
        "ec2:DescribeSecurityGroups",
        "ec2:RevokeSecurityGroupEgress",
        "ec2:CreateNetworkInterface",
        "ec2:CreateNetworkInterfacePermission",
        "ec2:DeleteNetworkInterface",
        "ec2:DeleteNetworkInterfacePermission",
        "ec2:DescribeNetworkInterfaces",
        "ec2:ModifyNetworkInterfaceAttribute",
        "ec2:DescribeTags",
        "ec2:DescribeInstances",
        "ec2:DescribeSubnets",
        "ec2:DescribeVpcs",
        "elasticmapreduce:ListInstances",
        "elasticmapreduce:DescribeCluster",
        "elasticmapreduce:ListSteps"
      ],
      "Resource": [
        "*"
      ],
      "Sid": "AllowEC2Authorizesecuritygroupegress"
    },
    {
      "Effect": "Allow",
      "Action": [
        "ec2:CreateTags"
      ],
      "Resource": [
        "arn:aws:ec2:*:*:network-interface/*"
      ],
      "Condition": {
        "ForAllValues:StringEquals": {
          "aws:TagKeys": [
            "aws:elasticmapreduce:editor-id",
            "aws:elasticmapreduce:job-flow-id"
          ]
        }
      },
      "Sid": "AllowEC2Createtags"
    }
  ]
}
```

------

下面是 `S3FullAccessPolicy` 的内容。`S3FullAccessPolicy` 允许 EMR Notebooks 的服务角色对 AWS 账户中的对象执行所有 Amazon S3 操作。当您为 EMR Notebooks 创建自定义服务角色时，必须向服务角色授予 Amazon S3 权限。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:*"
      ],
      "Resource": [
        "*"
      ],
      "Sid": "AllowS3"
    }
  ]
}
```

------

您可以将服务角色的读写权限范围缩小到要保存 Notebook 文件的 Amazon S3 位置。使用以下最小 Amazon S3 权限集。

```
"s3:PutObject",
"s3:GetObject",
"s3:GetEncryptionConfiguration",
"s3:ListBucket",
"s3:DeleteObject"
```

如果您的 Amazon S3 存储桶已加密，您必须为 AWS Key Management Service包含以下权限。

```
"kms:Decrypt",
"kms:GenerateDataKey",
"kms:ReEncryptFrom",
"kms:ReEncryptTo",
"kms:DescribeKey"
```

当您将 Git 存储库链接到 Notebook 并需要为存储库创建密钥时，您必须在附加到 Amazon EMR Notebooks 的服务角色的 IAM policy 中添加 `secretsmanager:GetSecretValue` 权限。下面演示了一个示例策略：

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": [
        "secretsmanager:GetSecretValue"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}
```

------

## EMR Notebooks 服务角色权限
<a name="emr-managed-notebooks-service-role-permissions"></a>

此表列出了 EMR Notebooks 使用服务角色执行的操作，以及每个操作所需的权限。


****  

| Action | Permissions | 
| --- | --- | 
| 在 Notebook 和 Amazon EMR 集群之间建立安全的网络通道，并执行必要的清理操作。 |  <pre>"ec2:CreateNetworkInterface", <br />"ec2:CreateNetworkInterfacePermission", <br />"ec2:DeleteNetworkInterface", <br />"ec2:DeleteNetworkInterfacePermission", <br />"ec2:DescribeNetworkInterfaces", <br />"ec2:ModifyNetworkInterfaceAttribute", <br />"ec2:AuthorizeSecurityGroupEgress", <br />"ec2:AuthorizeSecurityGroupIngress", <br />"ec2:CreateSecurityGroup",<br />"ec2:DescribeSecurityGroups", <br />"ec2:RevokeSecurityGroupEgress",<br />"ec2:DescribeTags",<br />"ec2:DescribeInstances",<br />"ec2:DescribeSubnets",<br />"ec2:DescribeVpcs",<br />"elasticmapreduce:ListInstances", <br />"elasticmapreduce:DescribeCluster", <br />"elasticmapreduce:ListSteps"</pre>  | 
| 使用存储在 AWS Secrets Manager 中的 Git 凭证将 Git 存储库链接到 Notebook。 |  <pre>"secretsmanager:GetSecretValue"</pre>  | 
| 将 AWS 标签应用于 EMR Notebooks 在设置安全网络通道时创建的网络接口和默认安全组。有关更多信息，请参阅[标记 AWS 资源](https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html)。 |  <pre>"ec2:CreateTags"</pre>  | 
| 访问 Notebook 文件和元数据或将它们上载到 Amazon S3。 |  <pre>"s3:PutObject",<br />"s3:GetObject",<br />"s3:GetEncryptionConfiguration",<br />"s3:ListBucket",<br />"s3:DeleteObject" </pre> 仅当您使用加密的 Amazon S3 存储桶时才需要以下权限。 <pre>"kms:Decrypt",<br />"kms:GenerateDataKey",<br />"kms:ReEncryptFrom",<br />"kms:ReEncryptTo",<br />"kms:DescribeKey"</pre>  | 

## EMR Notebooks 对托管策略 AWS 的更新
<a name="notebooks-slr-updates"></a>

查看自 2021 年 3 月 1 日起 EMR Notebooks AWS 托管政策更新的详细信息。


| 更改 | 描述 | 日期 | 
| --- | --- | --- | 
| AmazonElasticMapReduceEditorsRole - Added permissions | EMR Notebooks 已将 `ec2:describeVPCs` 和 `elastmicmapreduce:ListSteps` 权限添加至 `AmazonElasticMapReduceEditorsRole`。  | 2023 年 2 月 8 日  | 
| EMR Notebooks 开启了跟踪修订  |  EMR Notebooks 开始跟踪 AWS 其托管策略的更改。  | 2023 年 2 月 8 日  | 

# 对 Amazon EMR 使用服务相关角色
<a name="using-service-linked-roles"></a>

Amazon EMR 使用 AWS Identity and Access Management (IAM) [服务相关](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-linked-role)角色。服务相关角色是一种独特类型的 IAM 角色，它与 Amazon EMR 直接相关。服务相关角色由 Amazon EMR 预定义，包括该服务代表您调用 AWS 其他服务所需的所有权限。

**Topics**
+ [对 Amazon EMR 使用服务相关角色进行清理](using-service-linked-roles-cleanup.md)
+ [将服务相关角色与 Amazon EMR 结合使用以预写日志记录](using-service-linked-roles-wal.md)

有关支持服务相关角色的其他服务的信息，请参阅与 [IAM 配合使用的AWS 服务，](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)并在**服务相关角色**列中查找标有 “**是**” 的服务。选择**是**和链接，查看该服务的服务关联角色文档。

# 对 Amazon EMR 使用服务相关角色进行清理
<a name="using-service-linked-roles-cleanup"></a>

Amazon EMR 使用 AWS Identity and Access Management (IAM) [服务相关](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-linked-role)角色。服务相关角色是一种独特类型的 IAM 角色，它与 Amazon EMR 直接相关。服务相关角色由 Amazon EMR 预定义，包括该服务代表您调用 AWS 其他服务所需的所有权限。

服务相关角色与 Amazon EMR 服务角色和 Amazon EMR 的 Amazon EC2 实例配置文件配合使用。有关服务角色和实例配置文件的更多信息，请参阅[配置 IAM 服务角色以获得 Amazon EMR 对 AWS 服务和资源的权限](emr-iam-roles.md)。

服务相关角色让您可以轻松设置 Amazon EMR，因为您不必手动添加必要的权限。Amazon EMR 定义其服务相关角色的权限，除非另外定义，否则只有 Amazon EMR 可以代入该角色。定义的权限包括信任策略和权限策略，而且权限策略不能附加到任何其他 IAM 实体。

只有在删除任何相关资源并终止账户中的所有 EMR 集群后，才能删除 Amazon EMR 的服务相关角色。这将保护您的 Amazon EMR 资源，以免无意中删除访问资源的权限。

## 使用服务相关角色进行清理
<a name="using-service-linked-roles-permissions-cleanup"></a>

Amazon EMR 使用基于服务的**AWSServiceRoleForEMRCleanup**角色授予亚马逊 EMR 代表您终止和删除 Amazon EC2 资源的权限，该权限可在 Amazon EMR 服务相关角色失去该权限时代表您终止和删除 Amazon EC2 资源。如果服务相关角色不存在，Amazon EMR 会在集群创建期间自动创建该角色。

 AWSServiceRoleForEMRCleanup 服务相关角色信任以下服务来代入该角色：
+ `elasticmapreduce.amazonaws.com`

 AWSServiceRoleForEMRCleanup 服务相关角色权限策略允许 Amazon EMR 对指定资源完成以下操作：
+ 操作：`ec2` 上的 `DescribeInstances`
+ 操作：`DescribeLaunchTemplates` 上的 `ec2`
+ 操作：`DeleteLaunchTemplate` 上的 `ec2`
+ 操作：`DescribeSpotInstanceRequests` 上的 `ec2`
+ 操作：`ModifyInstanceAttribute` 上的 `ec2`
+ 操作：`TerminateInstances` 上的 `ec2`
+ 操作：`CancelSpotInstanceRequests` 上的 `ec2`
+ 操作：`DeleteNetworkInterface` 上的 `ec2`
+ 操作：`DescribeInstanceAttribute` 上的 `ec2`
+ 操作：`DescribeVolumeStatus` 上的 `ec2`
+ 操作：`DescribeVolumes` 上的 `ec2`
+ 操作：`DetachVolume` 上的 `ec2`
+ 操作：`DeleteVolume` 上的 `ec2`
+ 操作：`DescribePlacementGroups` 上的 `ec2`
+ 操作：`ec2` 上的 `DeletePlacementGroup`

必须配置权限，允许 IAM 实体（如用户、组或角色）创建、编辑或删除服务相关角色。

## 为 Amazon EMR 创建服务相关角色
<a name="create-service-linked-role"></a>

您无需手动创建 AWSServiceRoleForEMRCleanup 角色。当您启动集群时，无论是首次启动还是 AWSServiceRoleForEMRCleanup 服务相关角色不存在，Amazon EMR 都会为您创建 AWSServiceRoleForEMRCleanup 服务相关角色。您必须拥有创建服务相关角色的权限。有关将此功能添加到 IAM 实体（如用户、组或角色）的权限策略的示例语句：

将以下语句添加到需要创建服务相关角色的 IAM 实体的权限策略。

```
{
             "Sid": "ElasticMapReduceServiceLinkedRole",
             "Effect": "Allow",
             "Action": "iam:CreateServiceLinkedRole",
             "Resource": "arn:aws:iam::*:role/aws-service-role/elasticmapreduce.amazonaws.com*/AWSServiceRoleForEMRCleanup*",
             "Condition": {
                 "StringEquals": {
                     "iam:AWSServiceName": [
                         "elasticmapreduce.amazonaws.com",
                         "elasticmapreduce.amazonaws.com.rproxy.govskope.us.cn"
                     ]
                 }
             }
 }
```

**重要**  
如果您在 2017 年 10 月 24 日之前使用过 Amazon EMR，当时不支持服务相关角色，那么 Amazon EMR 会在您的账户中创建 AWSServiceRoleForEMRCleanup 服务相关角色。有关更多信息，请参阅[我的 IAM 账户中出现新角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot_roles.html#troubleshoot_roles_new-role-appeared)。

## 为 Amazon EMR 编辑服务相关角色
<a name="edit-service-linked-role"></a>

Amazon EMR 不允许您编辑 AWSServiceRoleForEMRCleanup 服务相关角色。创建服务相关角色后，您无法更改服务相关角色的名称，因为各种实体可能会引用服务相关角色。但您可以使用 IAM 编辑服务相关角色的描述。

### 编辑服务相关角色描述（IAM 控制台）
<a name="edit-service-linked-role-iam-console"></a>

您可以使用 IAM 控制台编辑服务相关角色的描述。

**编辑服务相关角色的描述（控制台）**

1. 在 IAM 控制台的导航窗格中，选择**角色**。

1. 以下代码示例显示如何将 IAM 策略附加到用户。

1. 在 **Role description (角色描述)** 的右侧，选择 **Edit (编辑)**。

1. 在框中键入新描述，然后选择 **Save changes (保存更改)**。

### 编辑服务相关角色描述（IAM CLI）
<a name="edit-service-linked-role-iam-cli"></a>

您可以使用中的 IAM 命令 AWS Command Line Interface 来编辑服务相关角色的描述。

**更改服务相关角色的描述（CLI）**

1. (可选) 要查看角色的当前描述，请使用以下命令：

   ```
   $ aws iam get-role --role-name role-name
   ```

   通过 CLI 命令使用角色名称（并非 ARN）指向角色。例如，如果某个角色的 ARN 为 `arn:aws:iam::123456789012:role/myrole`，则将该角色称为 **myrole**。

1. 要更新服务相关角色的描述，请使用以下命令之一：

   ```
   $ aws iam update-role-description --role-name role-name --description description
   ```

### 编辑服务相关角色描述（IAM API）
<a name="edit-service-linked-role-iam-api"></a>

您可以使用 IAM API 编辑服务相关角色的描述。

**更改服务相关角色的描述（API）**

1. (可选) 要查看角色的当前描述，请使用以下命令：

   IAM API：[GetRole](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetRole.html)

1. 要更新角色的描述，请使用以下命令：

   IAM API：[UpdateRoleDescription](https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateRoleDescription.html)

## 删除适用于 Amazon EMR 的服务相关角色
<a name="delete-service-linked-role"></a>

如果您不再需要使用需要服务相关角色的功能或服务，建议您删除该服务相关角色。这样，您就不会有未被主动监控或维护的未使用实体。但是，您必须先清除您的服务相关角色，然后才能将其删除。

### 清除服务相关角色
<a name="service-linked-role-review-before-delete"></a>

在使用 IAM 删除服务相关角色之前，必须先确认该服务相关角色没有活动会话，并删除服务相关角色使用的所有资源。

**在 IAM 控制台中检查服务相关角色是否具有活动会话**

1. 使用 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 打开 IAM 控制台。

1. 在导航窗格中，选择**角色**。选择 AWSServiceRoleForEMRCleanup 服务相关角色的名称（不是复选框）。

1. 在所选服务相关角色的**摘要**页面上，选择**访问顾问**。

1. 在 **Access Advisor (访问顾问)** 选项卡上，查看服务相关角色的近期活动。
**注意**  
如果您不确定 Amazon EMR 是否 AWSServiceRoleForEMRCleanup 在使用服务相关角色，可以尝试删除该服务相关角色。如果服务正在使用服务相关角色，则删除失败，您可以查看正在使用服务相关角色的区域。如果正在使用服务相关角色，则必须等待会话结束，然后才能删除服务相关角色。您无法撤销服务相关角色对会话的权限。

**移除使用的 Amazon EMR 资源 AWSService RoleFor EMRCleanup**
+ 终止您的账户中的所有集群。有关更多信息，请参阅[终止处于启动、运行或等待状态的 Amazon EMR 集群](UsingEMR_TerminateJobFlow.md)。

### 删除服务相关角色（IAM 控制台）
<a name="delete-service-linked-role-iam-console"></a>

您可以使用 IAM 控制台删除服务相关角色。

**删除服务相关角色 (控制台)**

1. 使用 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 打开 IAM 控制台。

1. 在导航窗格中，选择**角色**。选中旁边的复选框 AWSService RoleForEMRCleanup，而不是名称或行本身。

1. 对于页面顶部的**角色操作**，请选择**删除角色**。

1. 在确认对话框中，查看上次访问服务的数据，该数据显示了每个选定角色上次访问 AWS 服务的时间。这样可帮助您确认角色当前是否处于活动状态。要继续，请选择 **Yes, Delete（是的，删除）**。

1. 监视 IAM 控制台通知，以监控服务相关角色的删除进度。由于 IAM 服务相关角色删除是异步的，因此在提交服务相关角色进行删除后，删除任务可能会成功，也可能会失败。如果任务失败，您可以从通知中选择 **View details** 或 **View Resources** 以了解删除失败的原因。如果因角色正在使用服务中的资源而导致删除操作失败，则失败原因将包含一个资源列表。

### 删除服务相关角色（IAM CLI）
<a name="delete-service-linked-role-iam-cli"></a>

您可以使用中的 IAM 命令 AWS Command Line Interface 删除服务相关角色。如果服务相关角色正被使用或具有关联的资源，则无法删除它，因此您必须提交删除请求。如果不满足这些条件，该请求可能会被拒绝。

**删除服务相关角色（CLI）**

1. 要查看删除任务的状态，您必须从响应中捕获 `deletion-task-id`。键入以下命令以提交服务相关角色的删除请求：

   ```
   $ aws iam [delete-service-linked-role](https://docs.aws.amazon.com/cli/latest/reference/iam/delete-service-linked-role.html) --role-name AWSServiceRoleForEMRCleanup
   ```

1. 键入以下命令以检查删除任务的状态：

   ```
   $ aws iam [get-service-linked-role-deletion-status](https://docs.aws.amazon.com/cli/latest/reference/iam/get-service-linked-role-deletion-status.html) --deletion-task-id deletion-task-id
   ```

   删除任务的状态可能是 `NOT_STARTED`、`IN_PROGRESS`、`SUCCEEDED` 或 `FAILED`。如果删除失败，则调用会返回失败的原因，以便您进行问题排查。

### 删除服务相关角色（IAM API）
<a name="delete-service-linked-role-iam-api"></a>

您可以使用 IAM API 删除服务相关角色。如果服务相关角色正被使用或具有关联的资源，则无法删除它，因此您必须提交删除请求。如果不满足这些条件，该请求可能会被拒绝。

**删除服务相关角色（API）**

1. 要提交服务相关角色的删除请求，请致[DeleteServiceLinkedRole](https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteServiceLinkedRole.html)电。在请求中，指定 AWSServiceRoleForEMRCleanup 角色名称。

   要查看删除任务的状态，您必须从响应中捕获 `DeletionTaskId`。

1. 要检查删除的状态，请调用 [GetServiceLinkedRoleDeletionStatus](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetServiceLinkedRoleDeletionStatus.html)。在请求中，指定 `DeletionTaskId`。

   删除任务的状态可能是 `NOT_STARTED`、`IN_PROGRESS`、`SUCCEEDED` 或 `FAILED`。如果删除失败，则调用会返回失败的原因，以便您进行问题排查。

## 支持的区域 AWSService RoleFor EMRCleanup
<a name="emr-slr-regions"></a>

Amazon EMR 支持在以下 AWSServiceRoleForEMRCleanup 区域使用服务相关角色。


****  

|  区域名称 | 区域标识 | Amazon EMR 支持 | 
| --- | --- | --- | 
| 美国东部（弗吉尼亚州北部） | us-east-1 | 是 | 
| 美国东部（俄亥俄州） | us-east-2 | 是 | 
| 美国西部（北加利福尼亚） | us-west-1 | 是 | 
| 美国西部（俄勒冈州） | us-west-2 | 是 | 
| 亚太地区（孟买） | ap-south-1 | 是 | 
| 亚太地区（大阪） | ap-northeast-3 | 是 | 
| 亚太地区（首尔） | ap-northeast-2 | 是 | 
| 亚太地区（新加坡） | ap-southeast-1 | 是 | 
| 亚太地区（悉尼） | ap-southeast-2 | 是 | 
| 亚太地区（东京） | ap-northeast-1 | 是 | 
| 加拿大（中部） | ca-central-1 | 是 | 
| 欧洲地区（法兰克福） | eu-central-1 | 是 | 
| 欧洲地区（爱尔兰） | eu-west-1 | 是 | 
| 欧洲地区（伦敦） | eu-west-2 | 是 | 
| 欧洲地区（巴黎） | eu-west-3 | 是 | 
| 南美洲（圣保罗） | sa-east-1 | 是 | 

# 将服务相关角色与 Amazon EMR 结合使用以预写日志记录
<a name="using-service-linked-roles-wal"></a>

Amazon EMR 使用 AWS Identity and Access Management (IAM) [服务相关](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-linked-role)角色。服务相关角色是一种独特类型的 IAM 角色，它与 Amazon EMR 直接相关。服务相关角色由 Amazon EMR 预定义，包括该服务代表您调用 AWS 其他服务所需的所有权限。

服务相关角色与 Amazon EMR 服务角色和 Amazon EMR 的 Amazon EC2 实例配置文件配合使用。有关服务角色和实例配置文件的更多信息，请参阅[配置 IAM 服务角色以获得 Amazon EMR 对 AWS 服务和资源的权限](emr-iam-roles.md)。

服务相关角色让您可以轻松设置 Amazon EMR，因为您不必手动添加必要的权限。Amazon EMR 定义其服务相关角色的权限，除非另外定义，否则只有 Amazon EMR 可以代入该角色。定义的权限包括信任策略和权限策略，而且权限策略不能附加到任何其他 IAM 实体。

只有在删除相关资源并终止账户中的所有 EMR 集群后，才能删除 Amazon EMR 的服务相关角色。这将保护您的 Amazon EMR 资源，以免无意中删除访问资源的权限。

## 预写日志记录（WAL）的服务相关角色
<a name="using-service-linked-roles-permissions-wal"></a>

Amazon EMR 使用服务相关角色 **AWSServiceRoleForEMRWAL** 来检索集群状态。

 AWSServiceRoleForEMRWAL 服务相关角色信任以下服务来代入该角色：
+ `emrwal.amazonaws.com`

服务相关角色的 [`EMRDescribeClusterPolicyForEMRWAL`](EMRDescribeClusterPolicyForEMRWAL.md) 权限策略允许 Amazon EMR 对指定资源完成以下操作：
+ 操作：`*` 上的 `DescribeCluster`

您必须配置权限以允许 IAM 实体（本例中为 Amazon EMR WAL）创建、编辑或删除服务相关角色。根据需要将以下语句添加到实例配置文件的权限策略中：

## CreateServiceLinkedRole
<a name="iam-create-wal"></a>

**允许 IAM 实体创建 AWSService RoleFor EMRWAL 服务相关角色**

将以下语句添加到需要创建服务相关角色的 IAM 实体的权限策略：

```
{
    "Effect": "Allow",
    "Action": [
        "iam:CreateServiceLinkedRole",
        "iam:PutRolePolicy"
    ],
    "Resource": "arn:aws:iam::*:role/aws-service-role/emrwal.amazonaws.com*/AWSServiceRoleForEMRWAL*",
    "Condition": {
        "StringLike": {
            "iam:AWSServiceName": [
                "emrwal.amazonaws.com",
                "elasticmapreduce.amazonaws.com.rproxy.govskope.us.cn"
            ]
        }
    }
}
```

## UpdateRoleDescription
<a name="iam-update-wal"></a>

**允许 IAM 实体编辑 AWSService RoleFor EMRWAL 服务相关角色的描述**

将以下语句添加到需要编辑服务相关角色的描述的 IAM 实体的权限策略：

```
{
    "Effect": "Allow",
    "Action": [
        "iam:UpdateRoleDescription"
    ],
    "Resource": "arn:aws:iam::*:role/aws-service-role/emrwal.amazonaws.com*/AWSServiceRoleForEMRWAL*",
    "Condition": {
        "StringLike": {
            "iam:AWSServiceName": [
                "emrwal.amazonaws.com",
                "elasticmapreduce.amazonaws.com.rproxy.govskope.us.cn"
            ]
        }
    }
}
```

## DeleteServiceLinkedRole
<a name="iam-delete-wal"></a>

**允许 IAM 实体删除 AWSService RoleFor EMRWAL 服务相关角色**

将以下语句添加到需要删除服务相关角色的 IAM 实体的权限策略：

```
{
    "Effect": "Allow",
    "Action": [
        "iam:DeleteServiceLinkedRole",
        "iam:GetServiceLinkedRoleDeletionStatus"
    ],
    "Resource": "arn:aws:iam::*:role/aws-service-role/elasticmapreduce.amazonaws.com*/AWSServiceRoleForEMRCleanup*",
    "Condition": {
        "StringLike": {
            "iam:AWSServiceName": [
                "emrwal.amazonaws.com",
                "elasticmapreduce.amazonaws.com.rproxy.govskope.us.cn"
            ]
        }
    }
}
```

## 为 Amazon EMR 创建服务相关角色
<a name="create-service-linked-role-wal"></a>

您无需手动创建 AWSService RoleFor EMRWAL 角色。当您使用 EMRWAL CLI 或从中创建 WAL 工作空间时，Amazon EMR HBase 会自动创建此服务相关角色 AWS CloudFormation，或者当您为 Amazon EMR WAL 配置工作空间且服务相关角色尚不存在时，将创建服务相关角色。您必须拥有创建服务相关角色的权限。有关将此功能添加到 IAM 实体（如用户、组或角色）权限策略的示例语句，请参阅上一节 [预写日志记录（WAL）的服务相关角色](#using-service-linked-roles-permissions-wal)。

## 为 Amazon EMR 编辑服务相关角色
<a name="edit-service-linked-role-wal"></a>

Amazon EMR 不允许您编辑 AWSService RoleFor EMRWAL 服务相关角色。创建服务相关角色后，您无法更改服务相关角色的名称，因为各种实体可能会引用服务相关角色。但您可以使用 IAM 编辑服务相关角色的描述。

### 编辑服务相关角色描述（IAM 控制台）
<a name="edit-service-linked-role-iam-console"></a>

您可以使用 IAM 控制台编辑服务相关角色的描述。

**编辑服务相关角色的描述（控制台）**

1. 在 IAM 控制台的导航窗格中，选择**角色**。

1. 以下代码示例显示如何将 IAM 策略附加到用户。

1. 在 **Role description (角色描述)** 的右侧，选择 **Edit (编辑)**。

1. 在框中键入新描述，然后选择 **Save changes (保存更改)**。

### 编辑服务相关角色描述（IAM CLI）
<a name="edit-service-linked-role-iam-cli"></a>

您可以使用中的 IAM 命令 AWS Command Line Interface 来编辑服务相关角色的描述。

**更改服务相关角色的描述（CLI）**

1. (可选) 要查看角色的当前描述，请使用以下命令：

   ```
   $ aws iam get-role --role-name role-name
   ```

   通过 CLI 命令使用角色名称（并非 ARN）指向角色。例如，如果某个角色的 ARN 为 `arn:aws:iam::123456789012:role/myrole`，则将该角色称为 **myrole**。

1. 要更新服务相关角色的描述，请使用以下命令之一：

   ```
   $ aws iam update-role-description --role-name role-name --description description
   ```

### 编辑服务相关角色描述（IAM API）
<a name="edit-service-linked-role-iam-api"></a>

您可以使用 IAM API 编辑服务相关角色的描述。

**更改服务相关角色的描述（API）**

1. (可选) 要查看角色的当前描述，请使用以下命令：

   IAM API：[GetRole](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetRole.html)

1. 要更新角色的描述，请使用以下命令：

   IAM API：[UpdateRoleDescription](https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateRoleDescription.html)

## 删除适用于 Amazon EMR 的服务相关角色
<a name="delete-service-linked-role-wal"></a>

如果您不再需要使用需要服务相关角色的功能或服务，建议您删除该服务相关角色。这样，您就不会有未被主动监控或维护的未使用实体。但是，您必须先清除您的服务相关角色，然后才能将其删除。

**注意**  
如果您删除 AWSService RoleFor EMRWAL 角色，则预写日志操作不会受到影响，但是 Amazon EMR 不会在您的 EMR 集群终止后自动删除其创建的日志。因此，如果删除服务相关角色，则需要手动删除 Amazon EMR WAL 日志。

### 清除服务相关角色
<a name="service-linked-role-review-before-delete"></a>

必须先确认服务相关角色没有活动会话并删除该角色使用的任何资源，然后才能使用 IAM 删除服务相关角色。

**在 IAM 控制台中检查服务相关角色是否具有活动会话**

1. 使用 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 打开 IAM 控制台。

1. 在导航窗格中，选择**角色**。选择 AWSService RoleFor EMRWAL 角色的名称（不是复选框）。

1. 在选定角色的 **Summary (摘要)** 页面上，选择 **Access Advisor (访问顾问)**。

1. 在 **Access Advisor (访问顾问)** 选项卡上，查看服务相关角色的近期活动。
**注意**  
如果您不确定 Amazon EMR 是否 AWSServiceRoleFor在使用 EMRWAL 角色，可以尝试删除该服务相关角色。如果服务正在使用该角色，则删除将失败，您可以查看正在使用服务相关角色的区域。如果正在使用服务相关角色，则必须等待会话结束，然后才能删除服务相关角色。您无法撤销服务相关角色对会话的权限。

**移除 EMRWAL 使用的亚马逊 EMR 资源 AWSService RoleFor**
+ 终止您的账户中的所有集群。有关更多信息，请参阅[终止处于启动、运行或等待状态的 Amazon EMR 集群](UsingEMR_TerminateJobFlow.md)。

### 删除服务相关角色（IAM 控制台）
<a name="delete-service-linked-role-iam-console"></a>

您可以使用 IAM 控制台删除服务相关角色。

**删除服务相关角色 (控制台)**

1. 使用 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 打开 IAM 控制台。

1. 在导航窗格中，选择**角色**。选中 AWSService RoleFor EMRWAL 旁边的复选框，而不是名称或行本身。

1. 对于页面顶部的**角色操作**，请选择**删除角色**。

1. 在确认对话框中，查看上次访问服务的数据，该数据显示了每个选定角色上次访问 AWS 服务的时间。这样可帮助您确认角色当前是否处于活动状态。要继续，请选择 **Yes, Delete（是的，删除）**。

1. 监视 IAM 控制台通知，以监控服务相关角色的删除进度。由于 IAM 服务相关角色删除是异步的，因此，在您提交角色进行删除后，删除任务可能成功，也可能失败。如果任务失败，您可以从通知中选择 **View details** 或 **View Resources** 以了解删除失败的原因。如果因角色正在使用服务中的资源而导致删除操作失败，则失败原因将包含一个资源列表。

### 删除服务相关角色（IAM CLI）
<a name="delete-service-linked-role-iam-cli"></a>

您可以使用中的 IAM 命令 AWS Command Line Interface 删除服务相关角色。如果服务相关角色正被使用或具有关联的资源，则无法删除它，因此您必须提交删除请求。如果不满足这些条件，该请求可能会被拒绝。

**删除服务相关角色（CLI）**

1. 要查看删除任务的状态，您必须从响应中捕获 `deletion-task-id`。键入以下命令以提交服务相关角色的删除请求：

   ```
   $ aws iam [delete-service-linked-role](https://docs.aws.amazon.com/cli/latest/reference/iam/delete-service-linked-role.html) --role-name AWSServiceRoleForEMRWAL
   ```

1. 键入以下命令以检查删除任务的状态：

   ```
   $ aws iam [get-service-linked-role-deletion-status](https://docs.aws.amazon.com/cli/latest/reference/iam/get-service-linked-role-deletion-status.html) --deletion-task-id deletion-task-id
   ```

   删除任务的状态可能是 `NOT_STARTED`、`IN_PROGRESS`、`SUCCEEDED` 或 `FAILED`。如果删除失败，则调用会返回失败的原因，以便您进行问题排查。

### 删除服务相关角色（IAM API）
<a name="delete-service-linked-role-iam-api"></a>

您可以使用 IAM API 删除服务相关角色。如果服务相关角色正被使用或具有关联的资源，则无法删除它，因此您必须提交删除请求。如果不满足这些条件，该请求可能会被拒绝。

**删除服务相关角色（API）**

1. 要提交服务相关角色的删除请求，请致[DeleteServiceLinkedRole](https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteServiceLinkedRole.html)电。在请求中，指定 AWSService RoleFor EMRWAL 角色名称。

   要查看删除任务的状态，您必须从响应中捕获 `DeletionTaskId`。

1. 要检查删除的状态，请调用 [GetServiceLinkedRoleDeletionStatus](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetServiceLinkedRoleDeletionStatus.html)。在请求中，指定 `DeletionTaskId`。

   删除任务的状态可能是 `NOT_STARTED`、`IN_PROGRESS`、`SUCCEEDED` 或 `FAILED`。如果删除失败，则调用会返回失败的原因，以便您进行问题排查。

## AWSServiceRoleForEMRWAL 支持的区域
<a name="emr-slr-regions-wal"></a>

Amazon EMR 支持在以下区域使用 AWSService RoleFor EMRWAL 服务相关角色。


****  

|  区域名称 | 区域标识 | Amazon EMR 支持 | 
| --- | --- | --- | 
| 美国东部（弗吉尼亚州北部） | us-east-1 | 是 | 
| 美国东部（俄亥俄州） | us-east-2 | 是 | 
| 美国西部（北加利福尼亚） | us-west-1 | 是 | 
| 美国西部（俄勒冈州） | us-west-2 | 是 | 
| 亚太地区（孟买） | ap-south-1 | 是 | 
| 亚太地区（新加坡） | ap-southeast-1 | 是 | 
| 亚太地区（悉尼） | ap-southeast-2 | 是 | 
| 亚太地区（东京） | ap-northeast-1 | 是 | 
| 欧洲地区（法兰克福） | eu-central-1 | 是 | 
| 欧洲地区（爱尔兰） | eu-west-1 | 是 | 