

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

# 开始使用多 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 集群。