

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

# 使用 Amazon EMR 阻止公有访问
<a name="emr-block-public-access"></a>

如果集群的安全配置允许来自公有 IP 地址的入站流量通过某个端口，Amazon EMR *阻止公有访问（BPA）*会阻止您在公有子网中启动该集群。

**重要**  
默认情况下，*阻止公有访问*处于启用状态。为了增强账户保护，我们建议您将其保持启用状态。

## 了解阻止公有访问
<a name="emr-block-public-access-about"></a>

您可以使用*阻止公有访问*账户级别配置，来 Amazon EMR 集群的公有网络访问进行集中管理。

当您的用户 AWS 账户 启动集群时，Amazon EMR 会检查该集群的安全组中的端口规则，并将其与您的入站流量规则进行比较。如果安全组有向公有 IP 地址 IPv4 0.0.0.0/0 或 IPv6 :: /0 开放端口的入站规则，并且这些端口未被指定为账户的例外情况，则 Amazon EMR 不允许用户创建集群。

如果用户修改了公有子网中正在运行的集群的安全组规则，使其具有违反您账户的 BPA 配置的公有访问规则，则 Amazon EMR 将撤销新规则，前提是它有权这样做。如果 Amazon EMR 无权撤销该规则，它会在 AWS Health 控制面板中创建一个描述违规行为的事件。要向 Amazon EMR 授予撤销规则权限，请参阅 [配置 Amazon EMR 以撤销安全组规则](#revoke-block-public-access)。

默认情况下，您的 AWS 账户中每个 AWS 区域 的所有集群都启用了阻止公有访问权限。BPA 适用于集群的整个生命周期，但不适用于您在私有子网中创建的集群。您可以配置 BPA 规则的例外；默认情况下，端口 22 是例外。有关设置例外的更多信息，请参阅 [配置阻止公有访问](#configure-block-public-access)。

## 配置阻止公有访问
<a name="configure-block-public-access"></a>

您可以随时更新账户中的安全组和封锁公共访问配置。

您可以使用 AWS 管理控制台、() 和 Amazon EMR API 开启和关闭阻止公共访问 AWS Command Line Interface (BPA AWS CLI) 设置。设置会Region-by-Region 根据具体情况应用于您的账户。为了保障集群安全性，建议您使用 BPA。

------
#### [ Console ]

**使用控制台配置阻止公有访问**

1. [登录 AWS 管理控制台，然后在 /emr 上打开亚马逊 EMR 控制台。https://console.aws.amazon.com](https://console.aws.amazon.com/emr)

1. 在顶部导航栏中，如果还未选中，则选中要配置的**区域**。

1. 在左侧导航窗格中的 **EMR on EC2** 下，选择 **Block public access**（阻止公有访问）。

1. 在 **Block public access settings (阻止公有访问设置)** 下，完成以下步骤。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/emr/latest/ManagementGuide/emr-block-public-access.html)

------
#### [ AWS CLI ]

**要配置阻止公共访问，请使用 AWS CLI**
+ 使用 `aws emr put-block-public-access-configuration` 命令可配置阻止公有访问，如以下示例所示。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/emr/latest/ManagementGuide/emr-block-public-access.html)

------

## 配置 Amazon EMR 以撤销安全组规则
<a name="revoke-block-public-access"></a>

Amazon EMR 需要权限才能撤销安全组规则并遵守您的阻止公有访问配置。您可以使用以下方法之一向 Amazon EMR 授予其所需的权限：
+ **（建议）**将 `AmazonEMRServicePolicy_v2` 托管的策略附加到服务角色。有关更多信息，请参阅 [Amazon EMR 的服务角色（EMR 角色）](emr-iam-role.md)。
+ 创建允许对安全组执行 `ec2:RevokeSecurityGroupIngress` 操作的新内联策略。有关如何修改角色权限策略的更多信息，请参阅《IAM 用户指南》**中的使用 [IAM 控制台](https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-managingrole-editing-console.html#roles-modify_permissions-policy)、[AWS API](https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-managingrole-editing-api.html#roles-modify_permissions-policy-api) 和 [AWS CLI](https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-managingrole-editing-cli.html#roles-modify_permissions-policy-cli) **修改角色权限策略**。

## 解决阻止公有访问违规问题
<a name="resolve-block-public-access"></a>

如果发生阻止公有访问违规，则可以通过以下操作之一来缓解违规：
+ 如果要访问集群上的 Web 界面，请使用 [查看 Amazon EMR 集群上托管的 Web 界面](emr-web-interfaces.md) 中所述的选项之一通过 SSH（端口 22）访问该界面。
+ 要允许来自特定 IP 地址而不是公有 IP 地址的流量进入集群，请添加安全组规则。有关更多信息，请参阅《Amazon EC2 入门指南》**中的[向安全组添加规则](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-security-groups.html#adding-security-group-rule)。
+ **（不推荐）**您可以将 Amazon EMR BPA 例外配置为包括所需的端口或端口范围。指定 BPA 例外时，未受保护的端口会带来风险。如果您计划指定例外，则应在不再需要该例外时立即将其删除。有关更多信息，请参阅 [配置阻止公有访问](#configure-block-public-access)。

## 识别与安全组规则关联的集群
<a name="identify-block-public-access"></a>

您可能需要识别与给定安全组规则关联的所有集群，或者找到给定集群的安全组规则。
+ 如果您知道安全组，则可以在找到安全组的网络接口时识别其关联的集群。有关更多信息，请参阅 AWS re:Post上的 [如何查找与 Amazon EC2 安全组关联的资源？](https://forums.aws.amazon.com/knowledge-center/ec2-find-security-group-resources)。连接到这些网络接口的 Amazon EC2 实例，将使用它们所属集群的 ID 进行标记。
+ 如果要查找已知集群的安全组，请按照 [查看 Amazon EMR 集群状态和详细信息](emr-manage-view-clusters.md) 中的步骤操作。您可以在控制台的**网络和安全**面板中找到集群的安全组，也可以从 AWS CLI的 `Ec2InstanceAttributes` 字段中找到集群的安全组。