Amazon EMR
管理指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

使用 Amazon EMR 托管的安全组

启动 Amazon EMR 集群时,您必须为主实例指定一个 Amazon EMR 托管安全组,为核心/任务 (从属) 实例指定一个 Amazon EMR 托管安全组,(可选) 为用于管理私有子网中的集群的 Amazon EMR 资源指定一个安全组。核心/任务实例共享相同的安全组。

您可以使用集群资源的默认 Amazon EMR 托管安全组,也可以为主实例和核心/任务实例选择您自己的安全组。您不能组合使用自己的安全组与默认安全组。

在使用控制台启动集群时,如果默认安全组不存在,则使用 Create ElasticMapReduce-masterCreate ElasticMapReduce-slaveCreate ElasticMapReduce-Master-PrivateCreate ElasticMapReduce-Slave-PrivateCreate ElasticMapReduce-ServiceAccess 填充 Amazon EMR 托管安全组字段。如果默认安全组存在,则这些字段填充为默认安全组 ID;例如,Default: sg-01XXXX6a (ElasticMapReduce-master)Default: sg-07XXXX6c (ElasticMapReduce-slave)。要使用您自己的安全组,请从列表中选择这些安全组。有关默认 Amazon EMR 托管安全组选项的更多信息,请参阅 Amazon EMR托管安全组的默认选项

Amazon EMR 特定入站和出站访问规则将写入并保存在 Amazon EMR 托管安全组中。无论是选择默认安全组还是您自己的安全组,Amazon EMR 都会修改安全组规则以确保在集群的实例之间正确通信。有关写入到 Amazon EMR 托管安全组的规则的更多信息,请参阅 Amazon EMR 托管安全组中的规则

如果需要控制 Amazon EMR 托管安全组中的实例成员资格,您可以为主实例和核心/任务实例创建自己的安全组。有关更多信息,请参阅 Amazon VPC User Guide 中的您的 VPC 的安全组。当您创建自己的安全组时,正确执行集群内通信所需的任何入站和出站规则都将写入到这些组中,但有一些例外。

通常,您将创建自己的 Amazon EMR 托管安全组以将集群隔离,以便它们不能相互通信。这会缓解为每个集群创建单独的 VPC 或 AWS 账户这种需要。例如,要隔离 VPC 中的 Amazon EMR 集群,您需要为每个集群的主节点创建安全组,并需要为每个集群的核心/任务节点创建安全组。当您启动集群时,安全组中的规则仅应用于该集群中的实例,从而有效防止不同集群中的实例相互通信。

如果需要不同的集群相互通信,并且您使用的是自己的安全组,则可以创建包含集群实例相互通信所需的规则的其他安全组,也可以将相同安全组用于这两个集群。如果在启动集群时不指定其他安全组,则集群使用不同的安全组,并且不能相互通信,除非您在主安全组和核心/任务安全组中修改规则集。有关其他安全组的更多信息,请参阅 配置其他安全组

使用控制台指定 Amazon EMR 托管安全组

  1. Open the Amazon EMR console at https://console.amazonaws.cn/elasticmapreduce/.

  2. 选择 Create cluster

  3. Security and Access 部分的 EC2 Security Groups 子部分中:

    • 对于 Master,如果默认安全组不存在,则使用 Create ElasticMapReduce-masterCreate ElasticMapReduce-Master-Private 填充此字段。如果默认安全组存在,则此字段填充为默认安全组 ID;例如,Default: sg-01XXXX6a (ElasticMapReduce-master)。要指定自己的主安全组,请从列表中选择该安全组。

    • 对于 Core & Task,如果默认安全组不存在,则使用 Create ElasticMapReduce-slaveCreate ElasticMapReduce-Slave-Private 填充此字段。如果默认安全组存在,则此字段填充为默认安全组 ID;例如,Default: sg-07XXXX6c (ElasticMapReduce-slave)。要指定自己的核心/任务安全组,请从列表中选择该安全组。

    • (可选) 对于私有子网中集群的 Service Access,如果默认安全组不存在,则使用 Create ElasticMapReduce-ServiceAccess 填充此字段。如果默认安全组存在,则使用默认安全组 ID 填充此字段;例如,Default: sg-4dXXXX34 (ElasticMapReduce-ServiceAccess)。要指定自己的服务访问安全组,请从列表中选择该安全组。

  4. 按照对 SSH 凭证使用 Amazon EC2 密钥对中所述继续创建集群。

使用 AWS CLI 指定 Amazon EMR 托管安全组

create-cluster 命令中使用 --emr-managed-master-security-group--emr-managed-slave-security-group 参数。

如果要使用 Amazon EMR 托管安全组的默认选项,则无需其他参数。按平常使用 CLI 的方式使用 create-cluster 命令。如果默认安全组不存在,则会在启动集群之前创建这些安全组。如果默认安全组存在,则自动分配这些安全组。

注意

Amazon EMR CLI 不支持 Amazon EMR 托管安全组。

  1. 要使用默认安全组选项启动集群,请键入以下命令并将 myKey 替换为您的 Amazon EC2 密钥对的名称。

    aws emr create-cluster --name "Test cluster" --release-label emr-4.2.0 --applications Name=Hive Name=Pig --use-default-roles --ec2-attributes KeyName=myKey --instance-type m4.large --instance-count 3

    如果不使用 --instance-groups 参数指定实例计数,则将启动单个主节点,其余实例将作为核心节点启动。所有节点都使用该命令中指定的实例类型。

  2. 要使用自己的安全组启动集群,请键入以下命令,将 myKey 替换为您的 Amazon EC2 密钥对的名称,将 masterSecurityGroupId 替换为主安全组的 ID,并将 slaveSecurityGroupId 替换为核心/任务安全组的 ID。

    aws emr create-cluster --name "Test cluster" --release-label emr-4.2.0 --applications Name=Hive Name=Pig --ec2-attributes KeyName=myKey,EmrManagedMasterSecurityGroup=sg-masterId,EmrManagedSlaveSecurityGroup=sg-slaveId --instance-type m4.large --instance-count 3 --use-default-roles

    注意

    对于私有子网,您还可以使用 --ec2-attributes 参数指定 ServiceAccessSecurityGroup=sg-service-accessId

    如果不使用 --instance-groups 参数指定实例计数,则将启动单个主节点,其余实例将作为核心节点启动。所有节点都使用该命令中指定的实例类型。

  3. 要检索集群的安全组信息,请键入以下命令并将 j-1K48XXXXXXHCB 替换为您的集群 ID:

    aws emr describe-cluster --cluster-id j-1K48XXXXXXHCB

    有关更多信息,请参阅 AWS CLI 中的 Amazon EMR 命令

Amazon EMR托管安全组的默认选项

如果使用默认安全组启动 Amazon EMR 集群,则为公有子网创建两个组:ElasticMapReduce-master 和 ElasticMapReduce-slave。对于私有子网,将创建以下组:

  • Create ElasticMapReduce-Master-Private

  • Create ElasticMapReduce-Slave-Private

  • Create ElasticMapReduce-ServiceAccess

写入到这些组中的入站和出站访问规则可确保集群中的主实例和核心/任务实例可以正确通信。

此外,如果您使用默认安全组启动同一 VPC 中的其他 Amazon EMR 集群,则这些集群中的实例可与其实例也属于同一安全组的 VPC 内的任何其他 Amazon EMR 集群中的实例通信。

您可以使用控制台、API、CLI 或开发工具包来启动含有默认安全组的集群。如果使用默认安全组,则无需更改现有代码或向 CLI 命令添加参数。

您可以使用控制台启动含有默认安全组的集群。如果默认安全组不存在,则会在启动集群之前创建这些安全组。如果默认安全组存在,则自动分配这些安全组。

Amazon EMR 托管安全组中的规则

本节中的表列出了添加到 Amazon EMR 托管安全组的入站和出站访问规则。Amazon EMR 托管安全组的 IP 地址范围和规则将自动更新。

警告

我们不建议为任何协议或端口创建允许所有 IP 地址 (0.0.0.0/0) 的入站流量的入站规则。这将允许任何人访问,从而造成安全漏洞。

以下规则将添加到 Amazon EMR 托管主安全组:

类型 协议 端口范围 详细信息
入站规则
所有 ICMP ICMP 全部 默认 ElasticMapReduce-master 安全组 ID 或您指定的主安全组 ID;例如,sg-88XXXXed

允许来自 ElasticMapReduce-master 安全组中的任何实例的入站流量。默认情况下,单个 VPC 中所有 Amazon EMR 集群中的主节点都可通过任何 TCP、UDP 或 ICMP 端口相互通信。

如果选择自己的主安全组,则只有该组中的主实例才能通过任何 TCP、UDP 或 ICMP 端口相互通信。

所有 TCP TCP 全部
所有 UDP UDP 全部
所有 ICMP ICMP 全部 默认 ElasticMapReduce-slave 安全组 ID 或您指定的核心/任务安全组 ID;例如,sg-8bXXXXee

允许来自 ElasticMapReduce-slave 安全组中的任何实例的入站流量。默认情况下,主节点接受来自单个 VPC 中任何 Amazon EMR 集群中的任何核心/任务节点通过任何 TCP、UDP 或 ICMP 端口传送的入站通信流量。

如果选择自己的核心/任务安全组,则只有该组中的核心/任务实例可通过任何 TCP、UDP 或 ICMP 端口与主节点通信。

所有 TCP TCP 全部
所有 UDP UDP 全部
HTTPS TCP 8443 各种 Amazon IP 地址范围 允许集群管理器与单个 VPC 中每个 Amazon EMR 集群中的主节点通信。
出站规则
所有流量 全部 全部 0.0.0.0/0 对于 ElasticMapReduce-master 安全组或您指定的组中的任何实例,提供对 Internet 的出站访问。

以下规则添加到 Amazon EMR 托管核心/任务安全组:

类型 协议 端口范围 详细信息
入站规则
所有 ICMP ICMP 全部 默认 ElasticMapReduce-master 安全组 ID 或您指定的主安全组 ID;例如,sg-88XXXXed

允许来自 ElasticMapReduce-master 安全组或您指定的组中任何实例的入站流量。默认情况下,单个 VPC 中所有 Amazon EMR 集群中的核心/任务节点都接受来自主节点通过任何 TCP、UDP 或 ICMP 端口传送的入站通信流量。

如果选择自己的主安全组,则只有该组中的主实例可通过任何 TCP、UDP 或 ICMP 端口与核心/任务节点通信。

所有 TCP TCP 全部
所有 UDP UDP 全部
所有 ICMP ICMP 全部 默认 ElasticMapReduce-slave 安全组 ID 或您指定的核心/任务安全组 ID;例如,sg-8bXXXXee

允许来自 ElasticMapReduce-slave 安全组中的任何实例的入站流量。默认情况下,核心/任务节点接受来自单个 VPC 中任何 Amazon EMR 集群中的任何其他核心/任务节点通过任何 TCP、UDP 或 ICMP 端口传送的入站通信流量。

如果选择自己的核心/任务安全组,则只有该组中的核心/任务实例可通过任何 TCP、UDP 或 ICMP 端口相互通信。

所有 TCP TCP 全部
所有 UDP UDP 全部
自定义 TCP TCP 8443
出站规则
所有流量 全部 全部 0.0.0.0/0 对于 ElasticMapReduce-slave 安全组或您指定的组中的所有实例,提供对 Internet 的出站访问。