

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

# 启用对预置 MSK 集群的公共访问
<a name="public-access"></a>

Amazon MSK 允许您选择开启对运行 Apache Kafka 2.6.0 或更高版本的预置 MSK 集群代理的公共访问权限。出于安全考虑，您在创建 MSK 集群时无法开启公共访问权限。但是，您可以更新现有集群以使其可供公开访问。您还可以创建一个新集群，然后对其进行更新，使其可供公开访问。

您可以开启对 MSK 集群的公共访问权限，无需支付额外费用，但进出集群的数据需要支付标准 AWS 的数据传输费用。有关定价的信息，请参阅 [Amazon EC2 按需定价](https://aws.amazon.com/ec2/pricing/on-demand/)。

 具有双堆栈网络类型的 Amazon MSK 预配置集群同时支持公共 IPv4 访问和 IPv6连接。在集群上启用公共访问后，相同的 IPv6 引导字符串将自动适用于默认和公共访问连接。您现有的 IPv4 引导字符串将继续用于 IPv4连接。请注意，如果您的集群未启用公共访问权限，则 IPv6引导字符串将不具有公共访问功能。有关更多信息，请参阅为 Amazon MSK 集群配置双栈网络类型。

**注意**  
如果你使用的是 SASL/SCRAM 或 mTLS 访问控制方法，则必须先为集群设置 Apache Kafka。 ACLs 然后，升级集群的配置，将属性 `allow.everyone.if.no.acl.found` 设置为 false。有关如何更新集群配置的信息，请参阅[代理配置操作](msk-configuration-operations.md)。

要开启对预置 MSK 集群的公共访问权限，请先确保集群满足以下所有条件：
+ 与集群关联的子网必须是公有子网。每个公有子网都有一个与之关联的公有 IPv4 地址，公有 IPv4 地址的定价如 [Amazon VPC 定价页面](https://aws.amazon.com/vpc/pricing/)所示。这意味着子网必须具有关联的路由表并连接了互联网网关。有关如何创建和附加互联网网关的信息，请参阅《Amazon VPC 用户指南》**中的[使用互联网网关启用 VPC 互联网访问权限](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html)。
+ 未经身份验证的访问控制必须关闭，并且必须至少开启以下访问控制方法之一：SASL/IAM, SASL/SCRAM，mTLS。有关如何更新集群的访问控制方法的信息，请参阅[更新 Amazon MSK 集群的安全设置](msk-update-security.md)。
+ 必须开启集群内的加密。开启设置是创建集群时的默认设置。对于在集群中的加密处于关闭状态时创建的集群，无法为其开启加密。因此，对于在集群中的加密处于关闭状态时创建的集群，无法为其开启公共访问权限。
+ 代理和客户端之间的明文流量必须关闭。有关在其开启时如何关闭的信息，请参阅[更新 Amazon MSK 集群的安全设置](msk-update-security.md)。
+ 如果您使用的是 IAM 访问控制并想要应用授权策略或更新授权策略，请参阅[IAM 访问控制](iam-access-control.md)。有关 Apache Kafka 的信息 ACLs，请参阅。[阿帕奇 Kafka ACLs](msk-acls.md)

在您确保 MSK 集群满足上面列出的条件后，您可以使用 AWS 管理控制台 AWS CLI、或 Amazon MSK API 开启公共访问权限。开启集群的公共访问权限后，您可以为其获取一个公共引导代理字符串。有关获取集群引导代理的信息，请参阅[获取 Amazon MSK 集群的引导代理](msk-get-bootstrap-brokers.md)。

**重要**  
除了开启公共访问权限外，还要确保集群的安全组具有允许从您的 IP 地址进行公共访问的入站 TCP 规则。因此，建议您尽可能严格设置这些规则。有关安全组和入站规则的信息，请参阅《Amazon VPC 用户指南》中的 [您的 VPC 的安全组](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html)。有关端口号，请参阅 [端口信息](port-info.md)。有关如何更改集群安全组的说明，请参阅 [更改 Amazon MSK 集群的安全组](change-security-group.md)。

**注意**  
如果您按照以下说明开启公共访问权限，但仍无法访问集群，请参阅[无法访问已开启公共访问权限的集群](troubleshooting.md#public-access-issues)。

**使用控制台开启公共访问权限**

1. 登录并在[https://console.aws.amazon.com/msk/家中打开 Amazon MSK 控制台？ AWS 管理控制台 region=us](https://console.aws.amazon.com/msk/home?region=us-east-1#/home/)-east-1\$1/home/。

1. 在集群列表中，选择要为其开启公共访问权限的集群。

1. 选择**属性**选项卡，然后找到**网络设置**部分。

1. 选择**编辑公共访问权限**。

**使用开启公共访问权限 AWS CLI**

1. 运行以下 AWS CLI 命令，用集*ClusterArn*群*Current-Cluster-Version*的 ARN 和当前版本替换和。要查找集群的当前版本，请使用[DescribeCluster](https://docs.aws.amazon.com/msk/1.0/apireference/clusters-clusterarn.html#DescribeCluster)操作或 desc [ribe-](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/kafka/describe-cluster.html) AWS CLI cluster 命令。示例版本是 `KTVPDKIKX0DER`。

   ```
   aws kafka update-connectivity --cluster-arn ClusterArn --current-version Current-Cluster-Version --connectivity-info '{"PublicAccess": {"Type": "SERVICE_PROVIDED_EIPS"}}'
   ```

   该 `update-connectivity` 命令的输出如以下 JSON 示例所示。

   ```
   {
       "ClusterArn": "arn:aws:kafka:us-east-1:012345678012:cluster/exampleClusterName/abcdefab-1234-abcd-5678-cdef0123ab01-2",
       "ClusterOperationArn": "arn:aws:kafka:us-east-1:012345678012:cluster-operation/exampleClusterName/abcdefab-1234-abcd-5678-cdef0123ab01-2/0123abcd-abcd-4f7f-1234-9876543210ef"
   }
   ```
**注意**  
要关闭公共访问权限，请使用类似的 AWS CLI 命令，但改为使用以下连接信息：  

   ```
   '{"PublicAccess": {"Type": "DISABLED"}}'
   ```

1. 要获得`update-connectivity`操作结果，请运行以下命令，*ClusterOperationArn*替换为在命令输出中获得的 ARN。`update-connectivity`

   ```
   aws kafka describe-cluster-operation --cluster-operation-arn ClusterOperationArn
   ```

   该 `describe-cluster-operation` 命令的输出如以下 JSON 示例所示。

   ```
   {
       "ClusterOperationInfo": {
           "ClientRequestId": "982168a3-939f-11e9-8a62-538df00285db",
           "ClusterArn": "arn:aws:kafka:us-east-1:012345678012:cluster/exampleClusterName/abcdefab-1234-abcd-5678-cdef0123ab01-2",
           "CreationTime": "2019-06-20T21:08:57.735Z",
           "OperationArn": "arn:aws:kafka:us-east-1:012345678012:cluster-operation/exampleClusterName/abcdefab-1234-abcd-5678-cdef0123ab01-2/0123abcd-abcd-4f7f-1234-9876543210ef",
           "OperationState": "UPDATE_COMPLETE",
           "OperationType": "UPDATE_CONNECTIVITY",
           "SourceClusterInfo": {
               "ConnectivityInfo": {
                   "PublicAccess": {
                       "Type": "DISABLED"
                   }
               }
           },
           "TargetClusterInfo": {
               "ConnectivityInfo": {
                   "PublicAccess": {
                       "Type": "SERVICE_PROVIDED_EIPS"
                   }
               }
           }
       }
   }
   ```

   如果 `OperationState` 的值为 `UPDATE_IN_PROGRESS`，请等待一段时间，然后再次运行 `describe-cluster-operation` 命令。

**使用 Amazon MSK API 开启公共访问权限**
+ 要使用 API 开启或关闭集群的公共访问权限，请参阅[UpdateConnectivity](https://docs.aws.amazon.com//msk/1.0/apireference/clusters-clusterarn-connectivity.html#UpdateConnectivity)。

**注意**  
出于安全考虑，Amazon MSK 不允许公众访问 Apache ZooKeeper 或 KRaft 控制器节点。