单区域中的 Amazon MSK 多 VPC 私有连接 - Amazon Managed Streaming for Apache Kafka
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

单区域中的 Amazon MSK 多 VPC 私有连接

适用于 Apache Managed Streaming Kafka(Amazon MSK)集群的多 VPC 私有连接(由 Amazon PrivateLink)提供支持,该功能使您能够更快地将托管在不同虚拟私有云 (VPC) Amazon 和账户中的 Kafka 客户端连接到亚马逊 MSK 集群。

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

什么是多 VPC 私有连接?

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

Amazon MSK 通过集群策略简化跨账户存取。这些策略允许集群所有者向其他 Amazon 账户授予与 MSK 集群建立私有连接的权限。

多 VPC 私有连接的优势

其他连接解决方案相比,多 VPC 私有连接具有以下几个优势:

  • 它可以自动执行 Amazon PrivateLink 连接解决方案的运营管理。

  • 它允许在连接的 VPC 之间重叠 IP,从而无需维护与其他 VPC 连接解决方案关联的非重叠的 IP、复杂的对等连接和路由表。

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

多 VPC 私有连接的要求和限制

请注意运行多 VPC 私有连接的以下 MSK 集群要求:

  • 只有 Apache Kafka 2.7.1 或更高版本支持多 VPC 私有连接。请确保与 MSK 集群搭配使用的任何客户端都运行与集群兼容的 Apache Kafka 版本。

  • 多 VPC 私有连接支持身份验证类型 IAM、TLS 和 SASL/SCRAM。未经身份验证的集群无法使用多 VPC 私有连接。

  • 如果您使用的是 SASL/SCRAM 或 mTLS 访问控制方法,则必须为集群设置 Apache Kafka ACL。首先,为集群设置 Apache Kafka ACL。然后,更新集群的配置,将集群的属性 allow.everyone.if.no.acl.found 设置为 false。有关如何更新集群配置的信息,请参阅 Amazon MSK 配置操作。如果您使用的是 IAM 访问控制并想要应用授权策略或更新授权策略,请参阅 IAM 访问控制。有关 Apache Kafka ACL 的信息,请参阅 Apache Kafka ACL

  • 多 VPC 私有连接不支持 t3.small 实例类型。

  • 不支持跨 Amazon 区域的多 VPC 私有连接,仅支持同一区域内的 Amazon 账户。

  • Amazon MSK 不支持与 Zookeeper 节点的多 VPC 私有连接。

开始使用多 VPC 私有连接

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

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

此用例的网络配置如下:

  • 跨账户用户(Kafka 客户端)和 MSK 集群位于同一个 Amazon 网络/区域中,但在不同的账户中:

    • 账户 A 中的 MSK 集群

    • 账户 B 中的 Kafka 客户端

  • 跨账户用户将使用 IAM 身份验证方案私密连接到 MSK 集群。

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

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

单区域中的多 VPC 网络图

步骤 1:在账户 A 的 MSK 集群上,为集群上的 IAM 身份验证方案开启多 VPC 连接

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

集群所有者需为将在集群上处于活动状态的任何身份验证方案,在处于 ACTIVE 状态的集群上开启多 VPC 私有连接。这可以使用 UpdateSecurity API 或 MSK 控制台来完成。IAM、SASL/SCRAM 和 TLS 身份验证方案支持多 VPC 私有连接。无法为未经身份验证的集群启用多 VPC 私有连接。

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

注意

如果您将 MSK 集群配置为使用 SASL/SCRAM 身份验证方案,则必须提供 Apache Kafka ACL 属性“allow.everyone.if.no.acl.found=false”。请参阅 Apache Kafka ACL

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

使用控制台为账户 A 中的集群上的选定身份验证方案开启多 VPC
  1. 通过以下网址为集群所在的账户打开 Amazon MSK 控制台:https://console.aws.amazon.com/msk/

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

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

  4. 选择集群属性选项卡,然后转到网络设置

  5. 选择编辑下拉菜单,然后选择开启多 VPC 连接

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

  7. 选择保存更改

例 -在 UpdateConnectivity 集群上开启多 VPC 私有连接身份验证方案的 API

作为 MSK 控制台的替代方案,您可以使用 UpdateConnectivity API 开启多 VPC 私有连接,并在活动集群上配置身份验证方案。以下示例显示为集群开启了 IAM 身份验证方案。

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

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

步骤 2:将集群策略附加到 MSK 集群

集群所有者可以将集群策略(也称为基于资源的策略)附加到 MSK 集群,您将在其中开启多 VPC 私有连接。集群策略会授予客户端从其他账户访问集群的权限。在编辑集群策略之前,您需要应有权访问 MSK 集群的账户的账户 ID。请参阅 How Amazon MSK works with IAM

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

  • CreateVpc连接

  • GetBootstrap经纪人

  • DescribeCluster

  • DescribeClusterV2

作为参考,以下是基本集群策略的 JSON 示例,类似于 MSK 控制台 IAM policy 编辑器中显示的默认策略。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "123456789012" ] }, "Action": [ "kafka:CreateVpcConnection", "kafka:GetBootstrapBrokers", "kafka:DescribeCluster", "kafka:DescribeClusterV2" ], "Resource": "arn:aws:kafka:us-east-1:123456789012:cluster/testing/de8982fa-8222-4e87-8b20-9bf3cdfa1521-2" } ] }
将集群策略附加到 MSK 集群
  1. 在 Amazon MSK 控制台的 MSK 集群下,选择集群

  2. 向下滚动到安全设置,然后选择编辑集群策略

  3. 在控制台的编辑集群策略屏幕上,选择多 VPC 连接的基本策略

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

  5. 选择保存更改

有关集群策略 API 的信息,请参阅 Amazon MSK resource-based policies

步骤 3:用于配置客户端托管的 VPC 连接的跨账户用户操作

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

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

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

先决条件

此过程需要以下项目:

  • 先前创建的集群策略,可向账户 B 中的客户端授予对账户 A 中的 MSK 集群执行操作的权限。

  • 附加到账户 B 中客户的身份策略,用于授予kafka:CreateVpcConnectionec2:CreateTagsec2:CreateVPCEndpointec2:DescribeVpcAttribute操作的权限。

以下是基本客户端身份策略的 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 以供将来使用。

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

  3. 连接设置窗格中,将集群 ARN 粘贴到集群 ARN 文本字段中,然后选择验证

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

  5. 为客户端选择 VPC

  6. 至少选择两个可用区和关联的子网。您可以从 Amazon 管理控制台集群详细信息中获取可用区 ID,也可以使用 DescribeClusterAPI 或 desc ribe-cluster Amazon CLI 命令获取。您为客户端子网指定的区域 ID 必须与集群子网的区域 ID 相匹配。如果缺少子网的值,请先创建一个与 MSK 集群具有相同区域 ID 的子网。

  7. 为此 VPC 连接选择安全组。您可以使用默认安全组。有关配置安全组的更多信息,请参阅 Control traffic to resources using security groups

  8. 选择创建连接

  9. 要从跨账户用户的 MSK 控制台(集群详细信息 > 托管式 VPC 连接)获取新引导代理字符串的列表,请参阅集群连接字符串下显示的引导代理字符串。在客户账户 B 中,可以通过调用 Brokers API 或在控制台集群详细信息中查看引导GetBootstrap代理列表来查看引导代理列表。

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

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

    2. [可选] 设置与 MSK 集群的出站规则连接。在 VPC 控制台中依次选择安全组编辑出站规则,然后为端口范围 14001-14100 添加自定义 TCP 流量的规则。多 VPC 网络负载均衡器正在监听 14001-14100 端口范围。请参阅网络负载均衡器

  11. 将账户 B 中的客户端配置为使用用于多 VPC 私有连接的新引导代理连接到账户 A 中的 MSK 集群。请参阅 Produce and consume data

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