单个区域中的 Amazon MSK 多VPC私有连接 - Amazon Managed Streaming for Apache Kafka

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

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

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

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

什么是多VPC私有连接?

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

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

多VPC私有连接的好处

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

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

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

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

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

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

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

  • 多VPC私有连接支持身份验证类型IAMTLS和SASL/SCRAM。未经身份验证的集群不能使用多VPC私有连接。

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

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

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

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

开始使用多VPC私有连接

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

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

此用例的网络配置如下:

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

    • MSK账户 A 中的集群

    • 账户 B 中的 Kafka 客户端

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

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

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

单区域中的多 VPC 网络图

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

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

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

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

注意

如果您要将MSK集群配置为使用SASL/SCRAM身份验证方案,那么 Apache Kafka ACLs 属性 “allow.everyone.if.no.acl.found=false” 是必需的。见 Apache Kafka ACLs

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

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

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

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

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

  5. 选择 “编辑” 下拉菜单,然后选择 “打开多VPC连接”。

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

  7. 选择保存更改

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

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

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

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

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

集群所有者可以将集群策略(也称为基于资源的策略)附加到您将在其中开启多VPC私有连接的MSK集群。集群策略会授予客户端从其他账户访问集群的权限。在编辑集群策略之前,您需要拥有访问集MSK群权限的账户的账户 ID。查看 Amazon 是如何MSK与之合作IAM的。

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

  • CreateVpcConnection

  • GetBootstrapBrokers

  • DescribeCluster

  • DescribeClusterV2

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

{ "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. 选择保存更改

有关集群策略的信息APIs,请参阅 Amazon MSK 基于资源的策略

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

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

客户端可以使用支持的身份验证方案IAMSCRAM、SASL/或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. 至少选择两个可用区和关联的子网。您可以IDs从 AWS 管理控制台集群详细信息中获取可用区,也可以使用或 desc ribe- AWS CLI cluster 命令获取可用区。DescribeClusterAPI您IDs为客户端子网指定的区域必须与集群子网的区域相匹配。如果缺少子网的值,请先创建一个与您的MSK集群具有相同区域 ID 的子网。

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

  8. 选择创建连接

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

  10. 按如下方式更新与VPC连接关联的安全组:

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

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

  11. 将账户 B 中的客户机配置为使用新的引导程序代理进行多VPC私有连接,以连接到账户 A 中的MSK集群。请参阅生成和使用数据

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