

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

# 连接到预置 Amazon MSK 集群
<a name="client-access"></a>

默认情况下，只有当客户端与预置 MSK 集群位于同一 VPC 中时，前者才能访问后者。默认情况下，Kafka 客户端和预置 MSK 集群之间的所有通信都是私密的，您的流数据永远不会通过互联网传输。要从与预置 MSK 集群位于同一 VPC 中的客户端连接到该集群，请确保集群的安全组具有接受来自客户端安全组流量的入站规则。有关设置这些规则的信息，请参阅[安全组规则](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html#SecurityGroupRules)。有关如何从与集群位于同一 VPC 中的 Amazon EC2 实例访问集群的示例，请参阅[开始使用 Amazon MSK](getting-started.md)。

**注意**  
KRaft 元数据模式和 MSK Express 代理不能同时启用开放监控和公共访问。

要从集群 VPC 之外的客户端连接到您的 MSK 预配置集群，请参阅[从集群 AWS 的 VPC 内部和外部进行访问](https://docs.aws.amazon.com/msk/latest/developerguide/aws-access.html)。

**Topics**
+ [启用对预置 MSK 集群的公共访问](public-access.md)
+ [从集群的 VPC 内部 AWS 但外部进行访问](aws-access.md)

# 启用对预置 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 控制器节点。

# 从集群的 VPC 内部 AWS 但外部进行访问
<a name="aws-access"></a>

要从集群的 Amazon VPC 内部 AWS 但外部连接到 MSK 集群，可以使用以下选项。

## Amazon VPC 对等连接
<a name="vpc-peering"></a>

要从与集群的 VPC 不同的 VPC 连接到您的 MSK 集群，您可以在两者之间创建对等连接。 VPCs有关 VPC 对等连接的信息，请参阅 [Amazon VPC 对等连接指南](https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html)。

## Direct Connect
<a name="direct-connect"></a>

Direct Connect 通过标准的 1 千兆位或 10 千兆位以太网光纤电缆将 AWS 您的本地网络链接到该网络。电缆的一端连接到您的路由器，另一端连接到 Direct Connect 路由器。建立此连接后，您可以直接创建通往 AWS 云和 Amazon VPC 的虚拟接口，绕过网络路径中的互联网服务提供商。有关更多信息，请参阅 [Direct Connect](https://docs.aws.amazon.com/directconnect/latest/UserGuide/Welcome.html)。

## AWS Transit Gateway
<a name="transit-gateway"></a>

AWS Transit Gateway 是一项使您能够将本地网络 VPCs 和您的本地网络连接到单个网关的服务。有关如何使用 AWS Transit Gateway的信息，请参阅[AWS Transit Gateway](https://docs.aws.amazon.com/vpc/latest/tgw/what-is-transit-gateway.html)。

## VPN 连接
<a name="vpn-connections"></a>

您可以使用以下主题中介绍的 VPN 连接选项，将 MSK 集群的 VPC 连接到远程网络和用户：[VPN 连接](https://docs.aws.amazon.com/vpc/latest/userguide/vpn-connections.html)。

## REST 代理
<a name="rest-proxies"></a>

您可以在集群的 Amazon VPC 中运行的实例上安装 REST 代理。利用 REST 代理，创建器和使用器将能够通过 HTTP API 请求与集群通信。

## 多区域多 VPC 连接
<a name="multi-vpc-multi-region"></a>

以下文档描述了位于不同区域的多个区域 VPCs 的连接选项：[多区域多 VPC 连接](https://aws.amazon.com/answers/networking/aws-multiple-region-multi-vpc-connectivity/)。

## 单区域多 VPC 私有连接
<a name="multi-vpc-single-region"></a>

适用于 Apache Managed Streaming Kafka（Amazon MSK）集群的多 VPC 私有连接（由 [AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/what-is-privatelink.html)）提供支持，该功能使您能够更快地将托管在不同虚拟私有云 () 和账户中的 Kafka 客户端 (VPCs) 和 AWS 账户连接到亚马逊 MSK 集群。

请参阅 [Single Region multi-VPC connectivity for cross-account clients](https://docs.aws.amazon.com/msk/latest/developerguide/aws-access-mult-vpc.html)。

## EC2-Classic 网络已停用
<a name="ec2-classic-retired"></a>

Amazon MSK 不再支持使用 Amazon EC2-Classic 网络运行的 Amazon EC2 实例。

请参阅 [EC2-Classic Networking is Retiring – Here’s How to Prepare](https://aws.amazon.com/blogs/aws/ec2-classic-is-retiring-heres-how-to-prepare/)。

# 单区域中的 Amazon MSK 多 VPC 私有连接
<a name="aws-access-mult-vpc"></a>

适用于 Apache Managed Streaming Kafka（Amazon MSK）集群的多 VPC 私有连接（由 [AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/what-is-privatelink.html)）提供支持，该功能使您能够更快地将托管在不同虚拟私有云 () 和账户中的 Kafka 客户端 (VPCs) 和 AWS 账户连接到亚马逊 MSK 集群。

多 VPC 私有连接是一种托管式解决方案，可简化多 VPC 和跨账户连接的网络基础设施。客户端可以通过连接到 Amazon MSK 集群， PrivateLink 同时将所有流量保持在 AWS 网络内。适用于亚马逊 MSK 集群的多 VPC 私有连接适用于所有可用 Amazon MSK 的 AWS 区域。

**Topics**
+ [什么是多 VPC 私有连接？](#mvpc-what-is)
+ [多 VPC 私有连接的优势](#mvpc-benefits)
+ [多 VPC 私有连接的要求和限制](#mvpc-requirements)
+ [开始使用多 VPC 私有连接](mvpc-getting-started.md)
+ [更新集群上的授权方案](mvpc-cross-account-update-authschemes.md)
+ [拒绝与 Amazon MSK 集群建立托管式 VPC 连接](mvpc-cross-account-reject-connection.md)
+ [删除与 Amazon MSK 集群的托管式 VPC 连接](mvpc-cross-account-delete-connection.md)
+ [多 VPC 私有连接的权限](mvpc-cross-account-permissions.md)

## 什么是多 VPC 私有连接？
<a name="mvpc-what-is"></a>

Amazon MSK 的多 VPC 私有连接是一种连接选项，允许您将托管在不同虚拟私有云 (VPCs) 和 AWS 账户中的 Apache Kafka 客户端连接到 MSK 集群。

Amazon MSK 通过[集群策略](mvpc-cluster-owner-action-policy.md)简化跨账户存取。这些策略允许集群所有者向其他 AWS 账户授予与 MSK 集群建立私有连接的权限。

## 多 VPC 私有连接的优势
<a name="mvpc-benefits"></a>

与[其他连接解决方案](https://docs.aws.amazon.com/msk/latest/developerguide/aws-access.html)相比，多 VPC 私有连接具有以下几个优势：
+ 它可以自动执行 AWS PrivateLink 连接解决方案的运营管理。
+ 它允许 IPs 在连接之间进行重叠 VPCs，从而无需维护与其他 VPC 连接解决方案相关的非重叠 IPs、复杂的对等互连和路由表。

您可以使用适用于 MSK 集群的集群策略来定义哪些 AWS 账户有权设置与 MSK 集群的跨账户私有连接。跨账户管理员可以将权限委派给相应的角色或用户。当与 IAM 客户端身份验证一起使用时，您也可以使用集群策略为连接的客户端精细定义 Kafka 数据面板的权限。

## 多 VPC 私有连接的要求和限制
<a name="mvpc-requirements"></a>

请注意运行多 VPC 私有连接的以下 MSK 集群要求：
+ 只有 Apache Kafka 2.7.1 或更高版本支持多 VPC 私有连接。请确保与 MSK 集群搭配使用的任何客户端都运行与集群兼容的 Apache Kafka 版本。
+ 多 VPC 私有连接支持身份验证类型 IAM、TLS 和 SASL/SCRAM。未经身份验证的集群无法使用多 VPC 私有连接。
+ 如果您使用 SASL/SCRAM 或 mTLS 访问控制方法，则必须为集群设置 Apache Kafka ACLs 。首先，为您的集群设置 Apache Ka ACLs fka。然后，更新集群的配置，将集群的属性 `allow.everyone.if.no.acl.found` 设置为 false。有关如何更新集群配置的信息，请参阅[代理配置操作](msk-configuration-operations.md)。如果您使用的是 IAM 访问控制并想要应用授权策略或更新授权策略，请参阅 [IAM 访问控制](iam-access-control.md)。有关 Apache Kafka 的信息 ACLs，请参阅。[阿帕奇 Kafka ACLs](msk-acls.md)
+ 多 VPC 私有连接不支持 t3.small 实例类型。
+ 不支持跨 AWS 区域的多 VPC 私有连接，仅支持同一区域内的 AWS 账户。
+ 要设置多 VPC 私有连接，则客户端子网数量必须与集群子网数量相同。您还必须确保客户端子网和集群子网的[可用区 IDs](https://docs.aws.amazon.com/ram/latest/userguide/working-with-az-ids.html)相同。
+ Amazon MSK 不支持与 Zookeeper 节点的多 VPC 私有连接。

# 开始使用多 VPC 私有连接
<a name="mvpc-getting-started"></a>

**Topics**
+ [步骤 1：在账户 A 的 MSK 集群上，为集群上的 IAM 身份验证方案开启多 VPC 连接](mvpc-cluster-owner-action-turn-on.md)
+ [步骤 2：将集群策略附加到 MSK 集群](mvpc-cluster-owner-action-policy.md)
+ [步骤 3：用于配置客户端托管的 VPC 连接的跨账户用户操作](mvpc-cross-account-user-action.md)

本教程使用一个常见的用例作为示例，说明如何使用多 VPC 连接，将 Apache Kafka 客户端从集群的 VPC 内部 AWS但外部私下连接到 MSK 集群。此过程要求跨账户用户为每个客户端创建 MSK 托管式 VPC 连接和配置，包括所需的客户端权限。该过程还要求 MSK 集群所有者在 MSK 集群上启用 PrivateLink 连接，并选择身份验证方案来控制对集群的访问。

在本教程的不同部分中，我们选择适用于此示例的选项。这并不意味着它们是可用于设置 MSK 集群或客户端实例的唯一选项。

此用例的网络配置如下：
+ 跨账户用户（Kafka 客户端）和 MSK 集群位于同一个 AWS 网络/区域中，但在不同的账户中：
  + 账户 A 中的 MSK 集群
  + 账户 B 中的 Kafka 客户端
+ 跨账户用户将使用 IAM 身份验证方案私密连接到 MSK 集群。

本教程假设有一个使用 Apache Kafka 版本 2.7.1 或更高版本创建的预置 MSK 集群。在开始配置过程之前，MSK 集群必须处于 ACTIVE 状态。为避免潜在的数据丢失或停机，将使用多 VPC 私有连接来连接到集群的客户端应使用与集群兼容的 Apache Kafka 版本。

下图说明了连接到不同 AWS 账户中的客户端的 Amazon MSK 多 VPC 连接架构。

![\[单区域中的多 VPC 网络图\]](http://docs.aws.amazon.com/zh_cn/msk/latest/developerguide/images/mvpc-network.png)


# 步骤 1：在账户 A 的 MSK 集群上，为集群上的 IAM 身份验证方案开启多 VPC 连接
<a name="mvpc-cluster-owner-action-turn-on"></a>

MSK 集群所有者需要在 MSK 集群创建并处于 ACTIVE 状态后在该集群上进行配置设置。

集群所有者需为将在集群上处于活动状态的任何身份验证方案，在处于 ACTIVE 状态的集群上开启多 VPC 私有连接。这可以使用 [UpdateSecurity API](https://docs.aws.amazon.com/msk/1.0/apireference/clusters-clusterarn-security.html) 或 MSK 控制台来完成。IAM、SASL/SCRAM 和 TLS 身份验证方案支持多 VPC 私有连接。无法为未经身份验证的集群启用多 VPC 私有连接。

对于此用例，您需要将集群配置为使用 IAM 身份验证方案。

**注意**  
如果您要将 MSK 集群配置为使用 SASL/SCRAM 身份验证方案，那么 Apache Kafka ACLs 属性 “” `allow.everyone.if.no.acl.found=false` 是必需的。见 [Apache Kafka ACLs](https://docs.aws.amazon.com/msk/latest/developerguide/msk-acls.html)。

当您更新多 VPC 私有连接设置时，Amazon MSK 会启动代理节点滚动重启，以更新代理配置。完成此过程可能最多需要 30 分钟或更长时间。在更新连接时，您无法对集群进行其他更新。

**使用控制台为账户 A 中的集群上的选定身份验证方案开启多 VPC**

1. 打开集群所在账户[https://console.aws.amazon.com/msk/](https://docs.aws.amazon.com/msk/latest/developerguide/msk-acls.html)的 Amazon MSK 控制台。

1. 在导航窗格的 **MSK 集群**下，选择**集群**以显示账户中的集群列表。

1. 选择要为多 VPC 私有连接配置的集群。集群必须处于 ACTIVE 状态。

1. 选择集群**属性**选项卡，然后转到**网络设置**。

1. 选择**编辑**下拉菜单，然后选择**开启多 VPC 连接**。

1. 选择要为此集群开启的一种或多种身份验证类型。对于此用例，请选择**基于 IAM 角色的身份验证**。

1. 选择**保存更改**。

**Example -在 UpdateConnectivity 集群上开启多 VPC 私有连接身份验证方案的 API**  
作为 MSK 控制台的替代方案，您可以使用 [UpdateConnectivity API](https://docs.aws.amazon.com/msk/1.0/apireference/clusters-clusterarn-connectivity.html) 开启多 VPC 私有连接，并在活动集群上配置身份验证方案。以下示例显示为集群开启了 IAM 身份验证方案。  

```
{
  "currentVersion": "K3T4TT2Z381HKD",
  "connectivityInfo": {
    "vpcConnectivity": {
      "clientAuthentication": {
        "sasl": {
          "iam": {
            "enabled": TRUE
            }
        }
      }
    }
  }
}
```

Amazon MSK 可创建私有连接所需的网络基础设施。Amazon MSK 还可为需要私有连接的每种身份验证类型创建一组新的引导代理端点。请注意，明文身份验证方案不支持多 VPC 私有连接。

# 步骤 2：将集群策略附加到 MSK 集群
<a name="mvpc-cluster-owner-action-policy"></a>

集群所有者可以将集群策略（也称为[基于资源的策略](https://docs.aws.amazon.com/msk/latest/developerguide/security_iam_service-with-iam.html#security_iam_service-with-iam-resource-based-policies)）附加到 MSK 集群，您将在其中开启多 VPC 私有连接。集群策略会授予客户端从其他账户访问集群的权限。在编辑集群策略之前，您需要应有权访问 MSK 集群的账户的账户 ID。请参阅 [How Amazon MSK works with IAM](https://docs.aws.amazon.com/msk/latest/developerguide/security_iam_service-with-iam.html)。

集群所有者必须将集群策略附加到 MSK 集群，该策略将授权账户 B 中的跨账户用户获取集群的引导代理，并授权对账户 A 中的 MSK 集群执行以下操作：
+ CreateVpcConnection
+ GetBootstrapBrokers
+ DescribeCluster
+ DescribeClusterV2

**Example**  
作为参考，以下是基本集群策略的 JSON 示例，类似于 MSK 控制台 IAM policy 编辑器中显示的默认策略。以下策略授予集群、主题和组级的访问权限。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "123456789012"
      },
      "Action": [
        "kafka:CreateVpcConnection",
        "kafka:GetBootstrapBrokers",
        "kafka:DescribeCluster",
        "kafka:DescribeClusterV2",
        "kafka-cluster:*"
      ],
      "Resource": "arn:aws:kafka:us-east-1:111122223333:cluster/testing/de8982fa-8222-4e87-8b20-9bf3cdfa1521-2"
    },
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "123456789012"
      },
      "Action": "kafka-cluster:*",
      "Resource": "arn:aws:kafka:us-east-1:111122223333:topic/testing/*"
    },
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "123456789012"
      },
      "Action": "kafka-cluster:*",
      "Resource": "arn:aws:kafka:us-east-1:111122223333:group/testing/*"
    }
  ]
}
```

**将集群策略附加到 MSK 集群**

1. 在 Amazon MSK 控制台的 **MSK 集群**下，选择**集群**。

1. 向下滚动到**安全设置**，然后选择**编辑集群策略**。

1. 在控制台的**编辑集群策略**屏幕上，选择**多 VPC 连接的基本策略**。

1. 在**账户 ID** 字段中，输入应有权访问此集群的每个账户的账户 ID。在您输入 ID 时，它会自动复制到显示的策略 JSON 语法中。在我们的示例集群策略中，账户 ID 为 *111122223333*。

1. 选择**保存更改**。

有关集群策略的信息 APIs，请参阅 [Amazon MSK 基于资源的](https://docs.aws.amazon.com/msk/latest/developerguide/security_iam_service-with-iam.html#security_iam_service-with-iam-resource-based-policies)策略。

# 步骤 3：用于配置客户端托管的 VPC 连接的跨账户用户操作
<a name="mvpc-cross-account-user-action"></a>

要在与 MSK 集群不同的账户中的客户端之间设置多 VPC 私有连接，跨账户用户需要为该客户端创建托管式 VPC 连接。重复此程序，即可将多个客户端连接到 MSK 集群。在本用例中，您只需要配置一个客户端。

客户端可以使用支持的身份验证方案 IAM、SASL/SCRAM 或 TLS。每个托管式 VPC 连接只能与一个身份验证方案关联。必须在客户端将要连接的 MSK 集群上配置客户端身份验证方案。

 对于此用例，请配置客户端身份验证方案，以便账户 B 中的客户端使用 IAM 身份验证方案。

**先决条件**

此过程需要以下项目：
+ 先前创建的集群策略，可向账户 B 中的客户端授予对账户 A 中的 MSK 集群执行操作的权限。
+ 附加到账户 B 中客户端的身份策略，可授予 `kafka:CreateVpcConnection`、`ec2:CreateTags`、`ec2:CreateVPCEndpoint` 和 `ec2:DescribeVpcAttribute` 操作的权限。

**Example**  
以下是基本客户端身份策略的 JSON 示例，供您参考。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "kafka:CreateVpcConnection",
        "ec2:CreateTags",
        "ec2:CreateVPCEndpoint",
        "ec2:DescribeVpcAttribute"
      ],
      "Resource": "*"
    }
  ]
}
```

**为账户 B 中的客户端创建托管式 VPC 连接**

1. 从集群管理员处获取您希望账户 B 中的客户端连接到的账户 A 中 MSK 集群的**集群 ARN**。记下集群 ARN 以供将来使用。

1. 在客户端账户 B 的 MSK 控制台中，选择**托管式 VPC 连接**，然后选择**创建连接**。

1. 在**连接设置**窗格中，将集群 ARN 粘贴到集群 ARN 文本字段中，然后选择**验证**。

1. 在账户 B 中选择客户端的**身份验证类型**。对于此用例，请在创建客户端 VPC 连接时选择 IAM。

1. 为客户端选择 **VPC**。

1. 至少选择两个**可用区和**关联的**子网**。您可以 IDs 从 AWS 管理控制台集群详细信息中获取可用区，也可以使用 [DescribeCluster](https://docs.aws.amazon.com/msk/1.0/apireference/clusters-clusterarn.html#DescribeCluster)API 或 desc [ribe-cluster](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/kafka/describe-cluster.html) AWS CLI 命令获取。您 IDs 为客户端子网指定的区域必须与集群子网的区域相匹配。如果缺少子网的值，请先创建一个与 MSK 集群具有相同区域 ID 的子网。

1. 为此 VPC 连接选择**安全组**。您可以使用默认安全组。有关配置安全组的更多信息，请参阅 [Control traffic to resources using security groups](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html)。

1. 选择**创建连接**。

1. 要从跨账户用户的 MSK 控制台（**集群**详细信息 > **托管式 VPC 连接**）获取新引导代理字符串的列表，请参阅**集群连接字符串**下显示的引导代理字符串。在客户账户 B 中，可以通过调用 [GetBootstrapBrokers](https://docs.aws.amazon.com/msk/1.0/apireference/clusters-clusterarn-bootstrap-brokers.html#GetBootstrapBrokers)API 或在控制台集群详细信息中查看引导代理列表来查看引导代理列表。

1. 按以下步骤更新与 VPC 连接关联的安全组：

   1. 为 PrivateLink VPC 设置**入站规则**，以允许来自账户 B 网络的 IP 范围的所有流量。

   1. [可选] 设置与 MSK 集群的**出站规则**连接。在 VPC 控制台中依次选择**安全组**、**编辑出站规则**，然后为端口范围 14001-14100 添加**自定义 TCP 流量**的规则。多 VPC 网络负载均衡器正在监听 14001-14100 端口范围。请参阅[网络负载均衡器](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/network-load-balancers.html)。

1. 将账户 B 中的客户端配置为使用用于多 VPC 私有连接的新引导代理连接到账户 A 中的 MSK 集群。请参阅 [Produce and consume data](https://docs.aws.amazon.com/msk/latest/developerguide/produce-consume.html)。

授权完成后，Amazon MSK 会为每个指定的 VPC 和身份验证方案创建托管式 VPC 连接。所选安全组与每个连接相关联。此托管式 VPC 连接由 Amazon MSK 配置为私密地连接到代理。您可以使用一组新的引导代理私密地连接到 Amazon MSK 集群。

# 更新集群上的授权方案
<a name="mvpc-cross-account-update-authschemes"></a>

多 VPC 私有连接支持多种授权方案：一个或多个身份验证方案的SASL/SCRAM, IAM, and TLS. The cluster owner can turn on/off私有连接。集群必须处于 ACTIVE 状态才能执行此操作。

**使用 Amazon MSK 控制台开启身份验证方案**

1. 在 [AWS 管理控制台](https://console.aws.amazon.com/msk) 中为要编辑的集群打开 Amazon MSK 控制台。

1. 在导航窗格的 **MSK 集群**下，选择**集群**以显示账户中的集群列表。

1. 选择要编辑的集群。集群必须处于 ACTIVE 状态。

1. 选择集群**属性**选项卡，然后转到**网络设置**。

1. 选择**编辑**下拉菜单，然后选择**开启多 VPC 连接**，以开启新的身份验证方案。

1. 选择要为此集群开启的一种或多种身份验证类型。

1. 选择**开启选择**。

当您开启新的身份验证方案时，您还应该为新的身份验证方案创建新的托管式 VPC 连接，并更新客户端，以使用特定于新身份验证方案的引导代理。

**使用 Amazon MSK 控制台关闭身份验证方案**
**注意**  
当您为身份验证方案关闭多 VPC 私有连接时，所有与连接相关的基础设施，包括托管式 VPC 连接，都将被删除。

当您为身份验证方案关闭多 VPC 私有连接时，客户端的现有 VPC 连接将变为 INACTIVE 状态，集群端的 Privatelink 基础设施（包括托管式 VPC 连接）将被删除。跨账户用户只能删除处于非活动状态的 VPC 连接。如果在集群上再次开启私有连接，则跨账户用户需要创建与集群的新连接。

1. 在 [AWS 管理控制台](https://console.aws.amazon.com/msk) 打开 Amazon MSK 控制台。

1. 在导航窗格的 **MSK 集群**下，选择**集群**以显示账户中的集群列表。

1. 选择要编辑的集群。集群必须处于 ACTIVE 状态。

1. 选择集群**属性**选项卡，然后转到**网络设置**。

1. 选择**编辑**下拉菜单，然后选择**关闭多 VPC 连接**，以关闭身份验证方案。

1. 选择要为此集群关闭的一种或多种身份验证类型。

1. 选择**关闭选择**。

**Example 使用 AP on/off I 转变身份验证方案**  
作为 MSK 控制台的替代方案，您可以使用 [UpdateConnectivity API](https://docs.aws.amazon.com/msk/1.0/apireference/clusters-clusterarn-connectivity.html) 开启多 VPC 私有连接，并在活动集群上配置身份验证方案。以下示例显示了为 SASL/SCRAM 集群开启的 IAM 身份验证方案。  
当您开启新的身份验证方案时，您还应该为新的身份验证方案创建新的托管式 VPC 连接，并更新客户端，以使用特定于新身份验证方案的引导代理。  
当您为身份验证方案关闭多 VPC 私有连接时，客户端的现有 VPC 连接将变为 INACTIVE 状态，集群端的 Privatelink 基础设施（包括托管式 VPC 连接）将被删除。跨账户用户只能删除处于非活动状态的 VPC 连接。如果在集群上再次开启私有连接，则跨账户用户需要创建与集群的新连接。  

```
Request:
{
  "currentVersion": "string",
  "connnectivityInfo": {
    "publicAccess": {
      "type": "string"
    },
    "vpcConnectivity": {
      "clientAuthentication": {
        "sasl": {
          "scram": {
            "enabled": TRUE
          },
          "iam": {
            "enabled": TRUE
          }        
        },
        "tls": {
          "enabled": FALSE
        }
      }
    }
  }
}

Response:
{
  "clusterArn": "string",
  "clusterOperationArn": "string"
}
```

# 拒绝与 Amazon MSK 集群建立托管式 VPC 连接
<a name="mvpc-cross-account-reject-connection"></a>

通过集群管理员账户的 Amazon MSK 控制台，您可以拒绝客户端 VPC 连接。客户端 VPC 连接必须处于可用状态才能被拒绝。您可能需要拒绝来自不再有权连接到集群的客户端的托管式 VPC 连接。要防止新的托管式 VPC 连接连接到客户端，请在集群策略中拒绝对客户端的访问。在连接所有者删除被拒绝的连接之前，该连接仍会产生费用。请参阅 [Delete a managed VPC connection to an Amazon MSK cluster](https://docs.aws.amazon.com/msk/latest/developerguide/mvpc-cross-account-delete-connection.html)。

**使用 MSK 控制台拒绝客户端 VPC 连接**

1. 在 [AWS 管理控制台](https://console.aws.amazon.com/msk) 打开 Amazon MSK 控制台。

1. 在导航窗格中，选择**集群**并滚动到**网络设置 > 客户端 VPC 连接**列表。

1. 选择要拒绝的连接，然后选择**拒绝客户端 VPC 连接**。

1. 确认要拒绝所选的客户端 VPC 连接。

要使用 API 拒绝托管式 VPC 连接，请使用 `RejectClientVpcConnection` API。

# 删除与 Amazon MSK 集群的托管式 VPC 连接
<a name="mvpc-cross-account-delete-connection"></a>

跨账户用户可以从客户端账户控制台中为 MSK 集群删除托管式 VPC 连接。集群所有者用户不拥有托管式 VPC 连接，因此无法从集群管理员账户中删除该连接。VPC 连接一经删除，就不会再产生费用。

**使用控制台删除托管式 VPC 连接**

1. 从客户端账户中，在 [AWS 管理控制台](https://console.aws.amazon.com/msk) 打开 Amazon MSK 控制台。

1. 在导航窗格中选择**托管式 VPC 连接**。

1. 从连接列表中选择要删除的连接。

1. 确认要删除 VPC 连接。

要使用 API 删除托管式 VPC 连接，请使用 `DeleteVpcConnection` API。

# 多 VPC 私有连接的权限
<a name="mvpc-cross-account-permissions"></a>

本节总结了使用多 VPC 私有连接功能的客户端和集群所需的权限。多 VPC 私有连接要求客户端管理员在将与 MSK 集群建立托管式 VPC 连接的每个客户端上创建权限。它还要求 MSK 集群管理员在 MSK 集群上启用 PrivateLink 连接，并选择身份验证方案来控制对集群的访问。

**集群身份验证类型和主题访问权限**  
为针对您的 MSK 集群启用的身份验证方案开启多 VPC 私有连接功能。请参阅[多 VPC 私有连接的要求和限制](aws-access-mult-vpc.md#mvpc-requirements)。如果您要将 MSK 集群配置为使用 SASL/SCRAM 身份验证方案，那么 Apache Kafka ACLs 属性是必需的。`allow.everyone.if.no.acl.found=false`为集群设置 [阿帕奇 Kafka ACLs](msk-acls.md) 后，请更新集群的配置，将该集群的属性 `allow.everyone.if.no.acl.found` 设置为 false。有关如何更新集群配置的信息，请参阅[代理配置操作](msk-configuration-operations.md)。

**跨账户集群策略权限**  
如果 Kafka 客户端所在的 AWS 账户与 MSK 集群不同，请将基于集群的策略附加到 MSK 集群，该策略授权客户端 root 用户进行跨账户连接。您可以使用 MSK 控制台中的 IAM 策略编辑器（集群**安全设置** > 编辑集群**策略）编辑多 VPC 集群策略**，也可以使用以下方法 APIs 来管理集群策略：

**PutClusterPolicy**  
将集群策略附加到集群。您可以使用此 API 来创建或更新指定的 MSK 集群策略。如果您要更新政策，则必须填写请求有效负载中的 currentVersion 字段。

**GetClusterPolicy**  
检索附加到集群的集群策略文档的 JSON 文本。

**DeleteClusterPolicy**  
删除集群策略。

以下是基本集群策略的 JSON 示例，类似于 MSK 控制台 IAM policy 编辑器中显示的策略。以下策略授予集群、主题和组级的访问权限。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
        "Effect": "Allow",
        "Principal": {
            "AWS": [
                "123456789012"
            ]
        },
        "Action": [
            "kafka-cluster:*",
            "kafka:CreateVpcConnection",
            "kafka:GetBootstrapBrokers",
            "kafka:DescribeCluster",
            "kafka:DescribeClusterV2"
        ],
        "Resource": [
            "arn:aws:kafka:us-east-1:123456789012:cluster/testing/de8982fa-8222-4e87-8b20-9bf3cdfa1521-2",
            "arn:aws:kafka:us-east-1:123456789012:topic/testing/*",
            "arn:aws:kafka:us-east-1:123456789012:group/testing/*"
        ]
    }]
}
```

------

**与 MSK 集群的多 VPC 私有连接的客户端权限**  
要在 Kafka 客户端和 MSK 集群之间设置多 VPC 私有连接，客户端需要一个附加身份策略，以授予对客户端执行 `kafka:CreateVpcConnection`、`ec2:CreateTags` 和 `ec2:CreateVPCEndpoint` 操作的权限。以下是基本客户端身份策略的 JSON 示例，供您参考。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "kafka:CreateVpcConnection",
        "ec2:CreateTags",
        "ec2:CreateVPCEndpoint"
      ],
      "Resource": "*"
    }
  ]
}
```

------

# 端口信息
<a name="port-info"></a>

使用以下端口号，以便 Amazon MSK 可以与客户端计算机通信：
+ 要以明文与代理通信，请使用端口 9092。
+ 要通过 TLS 加密与代理通信，请使用端口 9094 进行内部 AWS 访问，使用端口 9194 进行公共访问。
+ 要通过 SASL/SCRAM 与经纪人通信，请使用端口 9096 进行内部访问，使用端口 9196 AWS 进行公共访问。
+ 要与设置为使用的集群中的代理通信，请使用端口 9098 进行内部 AWS 访问[IAM 访问控制](iam-access-control.md)，使用端口 9198 进行公共访问。
+ 要使用纯文本 IPv6 网络类型与经纪人通信，请使用端口 20092
+ 要与设置为使用 IAM 访问控制的集群中的代理通信 IPv6，请使用端口 20098。
+ 要 SASL/SCRAM 使用与经纪人通信 IPv6，请使用端口 20096。
+ 要使用 IPv6端口 20094 与采用 TLS 加密的代理进行通信。