AWS Big Data Blog
Secure connectivity patterns to access Amazon MSK across AWS Regions
June 2026: This post was reviewed and updated for accuracy.
August 2023: Amazon MSK now offers a managed feature called multi-VPC private connectivity to simplify connectivity of your Kafka clients to your brokers. Refer this blog to learn more.
AWS customers often segment their workloads across accounts and Amazon Virtual Private Cloud (Amazon VPC) to streamline access management while being able to expand their footprint. As a result, in some scenarios you, as an AWS customer, need to make an Amazon Managed Streaming for Apache Kafka (Amazon MSK) cluster accessible to Apache Kafka clients not only in the same Amazon VPC as the cluster but also in a remote Amazon VPC. A guest post by Goldman Sachs presented cross-account connectivity patterns to an MSK cluster using AWS PrivateLink. Inspired by the work of Goldman Sachs, this post demonstrates additional connectivity patterns that can support both cross-account and cross-Region connectivity to an MSK cluster. We also developed sample code that supports the automation of the creation of resources for the connectivity pattern based on AWS PrivateLink.
Overview
Amazon MSK makes it easy to run Apache Kafka clusters on AWS. It’s a fully managed streaming service that automatically configures and maintains Apache Kafka clusters and Apache Zookeeper nodes for you. Amazon MSK lets you focus on building your streaming solutions and supports familiar Apache Kafka ecosystem tools (such as MirrorMaker, Kafka Connect, and Kafka streams) and helps avoid the challenges of managing the Apache Kafka infrastructure and operations.
If you have workloads segmented across several VPCs and AWS accounts, there may be scenarios in which you need to make Amazon MSK cluster accessible to Apache Kafka clients across VPCs. To provide secure connection between resources across multiple VPCs, AWS provides several networking constructs. Let’s get familiar with these before discussing the different connectivity patterns:
- Amazon VPC peering is the simplest networking construct that enables bidirectional connectivity between two VPCs. You can use this connection type to enable between VPCs across accounts and AWS Regions to communicate with each other using private IP addresses.
- AWS Transit Gateway provides a highly available and scalable design for connecting VPCs. Unlike VPC peering that can go cross-Region, AWS Transit Gateway is a regional service, but you can use inter-Region peering between transit gateways to route traffic across Regions.
AWS PrivateLink is an AWS networking service that provides private access to a specific service instead of all resources within a VPC and without traversing the public internet. You can use this service to expose your own application in a VPC to other users or applications in another VPC within the same AWS Region and cross-region via an AWS PrivateLink-powered service (referred to as an endpoint service). Other AWS principals can then create a connection from their VPC to your endpoint service using an interface VPC endpoint.
Amazon MSK networking
When you create an MSK cluster, either via the AWS Management Console or AWS Command Line Interface (AWS CLI), it’s deployed into a managed VPC with brokers in private subnets (one per Availability Zone) as shown in the following diagram. Amazon MSK also creates the Apache ZooKeeper nodes in the same private subnets.
The brokers in the cluster are made accessible to clients in the customer VPC through elastic network interfaces (ENIs) that appear in the customer account. The security groups on the ENIs dictate the source and type of ingress and egress traffic allowed on the brokers.
IP addresses from the customer VPC are attached to the ENIs, and all network traffic stays within the AWS network and is not accessible to the internet.
Connections between clients and an MSK cluster are always private.

This blog demonstrates four connectivity patterns to securely access an MSK cluster from a remote VPC. The following table lists these patterns and their key characteristics. Each pattern aligns with the networking constructs discussed earlier.
| VPC Peering | AWS Transit Gateway | AWS PrivateLink with a single NLB | AWS PrivateLink with multiple NLBs | |
| Bandwidth | Limited by instance network performance and flow limits. | Up to 100 Gbps | 10 Gbps per AZ | 10 Gbps per AZ |
| Pricing | Data transfer charge (free if data transfer is within AZs) | Data processing charge + hourly charge per attachment + cross-region data transfer charges | Data processing charge + interface endpoint charge + Network load balancer charge + inter-region data transfer charges for cross-region PrivateLink | Data processing charge + interface endpoint charge + Network load balancer charge + + inter-region data transfer charges for cross-region PrivateLink |
| Scalability | Recommended for smaller number of VPCs | No limit on number of VPCs | No limit on number of VPCs | No limit on number of VPCs |
Let’s explore these connectivity options in more detail.
VPC peering
To access an MSK cluster from a remote VPC, the first option is to create a peering connection between the two VPCs.
Let’s say you use Account A to provision an MSK cluster in us-east-1 Region, as shown in the following diagram. Now, you have an Apache Kafka client in the customer VPC in Account B that needs to access this MSK cluster. To enable this connectivity, you just need to create a peering connection between the VPC in Account A and the VPC in Account B. You should also consider implementing fine-grained network access controls with security groups to make sure that only specific resources are accessible between the peered VPCs.
Because VPC peering works across Regions, you can extend this architecture to provide access to Apache Kafka clients in another Region. As shown in the following diagram, to provide access to Kafka clients in the VPC of Account C, you just need to create another peering connection between the VPC in Account C with the VPC in Account A. The same networking principles apply to make sure only specific resources are reachable. In the following diagram, a solid line indicates a direct connection from the Kafka client to MSK cluster, whereas a dotted line indicates a connection flowing via VPC peering.

VPC peering has the following benefits:
- Simplest connectivity option.
- Low latency.
- No bandwidth limits (it is just limited by instance network performance and flow limits).
- Lower overall cost compared to other VPC-to-VPC connectivity options.
However, it has some drawbacks:
- VPC peering doesn’t support transitive peering, which means that only directly peered VPCs can communicate with each other.
- You can’t use this connectivity pattern when there are overlapping IPv4 or IPv6 CIDR blocks in the VPCs.
- Managing access can become challenging as the number of peered VPCs grows.
You can use VPC peering when the number of VPCs to be peered is less than 10.
AWS Transit Gateway
AWS Transit Gateway can provide scalable connectivity to MSK clusters. The following diagram demonstrates how to use this service to provide connectivity to MSK cluster. Let’s again consider a VPC in Account A running an MSK cluster, and an Apache Kafka client in a remote VPC in Account B is looking to connect to this MSK cluster. You set up AWS Transit Gateway to connect these VPCs and use route tables on the transit gateway to control the routing.
To extend this architecture to support access from a VPC in another Region, you need to use another transit gateway because this service can’t span Regions. In other words, for the Apache Kafka client in Account C in us-west-2 to connect to the MSK cluster, you need to peer another transit gateway in us-west-2 with the transit gateway in us-east-1 and work with the route tables to manage access to the MSK cluster. If you need to connect another account in us-west-2, you don’t need an additional transit gateway. The Apache Kafka clients in the new account (Account D) simply require a connection to the existing transit gateway in us-west-2 and the appropriate route tables.

The hub and spoke model for AWS Transit Gateway simplifies management at scale because VPCs only need to connect to one transit gateway per Region to gain access to the MSK cluster in the attached VPCs. However, this setup has some drawbacks:
- Unlike VPC peering in which you only pay for data transfer charges, Transit Gateway has an hourly charge per attachment in addition to the data transfer fee.
- This connectivity pattern doesn’t support transitive routing.
- Unlike VPC peering, Transit Gateway is an additional hop between VPCs which may cause more latency.
- It has higher latency (an additional hop between VPCs) comparing to VPC Peering.
- The maximum bandwidth (burst) per Availability Zone per VPC connection is 50 Gbps.
You can use AWS Transit Gateway when you need to provide scalable access to the MSK cluster.
AWS PrivateLink
AWS Private Link enables you to securely share and access services across VPCs while keeping all traffic on the AWS network – eliminating public internet exposure. In November 2024, AWS launched cross-region connectivity for Private Link, removing a key constraint: previously, both service providers and service consumers had to operate within the same AWS Region. Now, you can share VPC endpoint access across regions. You can use AWS Private Link to provide private, unidirectional access from Apache Kafka clients in a consumer VPC to MSK Clusters in a Provider VPC across accounts and regions. This approach eliminates the need to expose your entire VPC or subnet and prevents CIDR blocks conflicts between provider and consumer VPCs, simplifying network management and reducing your security surface.
Let’s do a quick recap of the architecture as explained in blog post How Goldman Sachs builds cross-account connectivity to their Amazon MSK clusters with AWS PrivateLink.
Let’s assume Account A has a VPC with three private subnets and an MSK cluster with three broker nodes in a 3-AZ deployment. You have three ENIs, one for each broker node in each subnet representing the broker nodes, and each ENI gets a private IPv4 address from its subnet’s CIDR block, and an MSK broker DNS endpoint. To expose the MSK cluster in Account A to your Kafka Clients in accounts B and C via AWS PrivateLink, you must create a VPC endpoint service in Account A. The VPC endpoint service requires the entity, in this case the MSK cluster, to be fronted by a Network Load Balancer (NLB). For cross-region connectivity over AWS PrivateLink, you must opt into cross-region PrivateLink connectivity on your endpoint services in the MSK Cluster VPC and on your VPC endpoint in the Kafka Client VPC in Account C. Without opting into this permission, you will retain undisrupted in-region PrivateLink connectivity but sharing or accessing services across regions will fail.
You can choose from two patterns when using AWS PrivateLink to provide cross-account, cross-region access to Amazon MSK: with a single NLB or multiple NLBs.
AWS PrivateLink connectivity pattern with a single NLB
The following diagram illustrates access to an MSK cluster via an AWS PrivateLink connectivity pattern with a single NLB.

In this pattern, you have a single dedicated internal NLB in Account A. The NLB has a separate listener for each MSK broker. Because this pattern has a single NLB endpoint, each listener needs to listen on a unique port. In the preceding diagram, the ports are depicted as 8443, 8444, and 8445. Correspondingly, for each listener, you have a unique target group, each of which has a single registered target: the IP address of an MSK broker ENI. Because the ports are different from the advertised.listeners defined in the MSK cluster for each of the broker nodes, the advertised.listeners configuration for each of the broker nodes in the cluster should be updated. Additionally, one target group has all the broker ENI IPs as targets and a corresponding listener (on port 9094), which means a request coming to the NLB on port 9094 can be routed to any of the MSK brokers.
On the Kafka Client VPCs in Accounts B and C, you need to create a corresponding VPC endpoint for the VPC endpoint service in Account A. The Apache Kafka clients in Accounts B and C can then connect to the MSK cluster in Account A by directing their requests to their respective VPC endpoint. For Transport Layer Security (TLS) to work, you also need an Amazon Route 53 private hosted zone with the domain name kafka.<region of the amazon msk cluster>.amazonaws.com, with alias resource record sets for each broker endpoint pointing to the respective VPC endpoint in Accounts B and C.
In this pattern, for the Apache Kafka clients local to the VPC with the Amazon MSK broker ENIs in Account A to connect to the MSK cluster, you need to set up a Route 53 private hosted zone, similar to Accounts B and C, with alias resource record sets for each of the broker endpoints pointing to the NLB endpoint. This is because the ports in the advertised listener configuration have been changed for the brokers, and the default Amazon MSK broker endpoints won’t work.
AWS PrivateLink connectivity pattern with multiple NLBs
In the second pattern, you don’t share one VPC endpoint service or NLB across multiple MSK brokers. Instead, you have an independent set for each broker. Each NLB has only one listener listening on the same port (9094) for requests to each Amazon MSK broker. Correspondingly, you have a separate VPC endpoint service for each NLB and each broker. Just like in the first pattern, in Accounts B and C, you need a Route53 hosted private zone to alias broker DNS endpoints to VPC endpoints—in this case, they’re aliased to their own specific VPC endpoint.
This pattern has the advantage of not having to modify the advertised listeners configuration in the MSK cluster. However, there is an additional cost of deploying more NLBs, one for each broker. Furthermore, in this pattern, Apache Kafka clients that are local to the VPC with the MSK broker ENIs in Account A can connect to the cluster as usual with no additional setup needed. The following diagram illustrates this setup.

You can use the sample code provided on GitHub to set up the AWS PrivateLink connectivity pattern with multiple NLBs for an MSK cluster. The intent of the code is to automate the creation of multiple resources instead of wiring it manually.
These patterns have the following benefits:
- They are scalable solutions and do not limit the number of consumer VPCs.
- Supports access to the service from cross-region VPC Endpoints.
- AWS PrivateLink allows for VPC CIDR ranges to overlap.
- You don’t need path definitions or a route table (access only to the MSK cluster), therefore it’s easier to manage
The drawbacks are as follows:
- The VPC endpoints support IPv4 traffic only.
- The endpoints can’t be transferred from one VPC to another.
You can use either connectivity pattern when you need your solution to scale to a large number of Amazon VPCs that can consume each service. You can also use either pattern when the cluster and client VPCs have overlapping IP addresses and when you want to restrict access to only the MSK cluster instead of the VPC itself. The single NLB pattern adds relevant complexity to the architecture because you need to maintain an additional target group and listener that has all brokers registered as well as keep the advertised.listeners property up to date. You can offset that complexity with the multiple NLB pattern but at an additional cost for the increased number of NLBs.
Conclusion
In this post, we explored different secure connectivity patterns to access an MSK cluster from a remote VPC. We also discussed the advantages, challenges, and limitations of each connectivity pattern. You can use this post as guidance to help you identify an appropriate connectivity pattern to address your requirements for accessing an MSK cluster. You can also use a combination of connectivity patterns to address your use case.
References
To read more about the solutions that inspired this post, see How Goldman Sachs builds cross-account connectivity to their Amazon MSK clusters with AWS PrivateLink and the webinar Cross-Account Connectivity Options for Amazon MSK.
About the Authors
Dr. Sam Mokhtari is a Senior Solutions Architect in AWS. His main area of depth is data and analytics, and he has published more than 30 influential articles in this field. He is also a respected data and analytics advisor who led several large-scale implementation projects across different industries including energy, health, telecom, and transport.
Pooja Chikkala is a Solutions Architect in AWS. Big data and analytics is her area of interest. She has 13 years of experience leading large-scale engineering projects with expertise in designing and managing both on-premises and cloud-based infrastructures.
Rajeev Chakrabarti is a Principal Developer Advocate with the Amazon MSK team. He has worked for many years in the big data and data streaming space. Before joining the Amazon MSK team, he was a Streaming Specialist SA helping customers build streaming pipelines.
Imtiaz (Taz) Sayed is the WW Tech Leader for Analytics at AWS. He enjoys engaging with the community on all things data and analytics, and can be reached at IN.
Harikumar Sethuraman is a Sr. TAM at AWS.
Audit History
Last reviewed and updated in June 2026 by Harikumar Sethuraman | Sr. TAM