

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 連線至 Amazon MSK 佈建叢集
<a name="client-access"></a>

根據預設，只有在用戶端與叢集位於相同的 VPC 中時，用戶端才能存取 MSK 佈建叢集。根據預設，Kafka 用戶端和 MSK 佈建叢集之間的所有通訊都是私有的，串流資料絕不會周遊網際網路。若要從與叢集位於相同 VPC 的用戶端連線至 MSK 佈建叢集，請確定叢集的安全群組具有接受來自用戶端安全群組流量的傳入規則。如需設定這些規則的資訊，請參閱[安全群組規則](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 佈建的叢集，請參閱[從叢集 VPC 內部存取， 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 ACL 的詳細資訊，請參閱 [Apache Kafka ACL](msk-acls.md)。

確保 MSK 叢集符合上述條件後，您可以使用 AWS 管理主控台 AWS CLI、 或 Amazon MSK API 來開啟公有存取。開啟對叢集的公開存取後，您可以為其取得公用引導代理程式字串。如需有關取得叢集引導代理程式的詳細資訊，請參閱[取得 Amazon MSK 叢集的引導代理程式](msk-get-bootstrap-brokers.md)。

**重要**  
除了開啟公開存取之外，請確定叢集的安全群組具有傳入 TCP 規則，允許從 IP 地址進行公開存取。建議您盡可能嚴格設定這些規則。如需有關安全群組和傳入規則的詳細資訊，請參閱《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. 登入 AWS 管理主控台，並在 [https://console.aws.amazon.com/msk/home?region=us-east-1\$1/home/](https://console.aws.amazon.com/msk/home?region=us-east-1#/home/)：// 開啟 Amazon MSK 主控台。

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) 操作或 [describe-cluster](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/kafka/describe-cluster.html) AWS CLI 命令。範例版本為`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` 操作的結果，請執行下列命令，使用您在 `update-connectivity` 命令輸出中取得的 ARN 取代 *ClusterOperationArn*。

   ```
   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 叢集，您可以建立兩個 VPC 之間的對等連線。如需 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 AWS 會透過標準 1 GB 或 10 GB 乙太網路光纖纜線，將您的內部部署網路連結至 。纜線的一端連接到您的路由器，另一端連接到 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>

以下文件說明位於不同區域中多個 VPC 的連線選項：[多區域多 VPC 連線](https://aws.amazon.com/answers/networking/aws-multiple-region-multi-vpc-connectivity/)。

## 單一區域多 VPC 私有連線
<a name="multi-vpc-single-region"></a>

Amazon Managed Streaming for Apache Kafka (Amazon MSK) 叢集的多 VPC 私有連線能力 （採用 [AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/what-is-privatelink.html) 技術） 是一項功能，可讓您更快速地將託管於不同虛擬私有雲端 (VPCs) 和 AWS 帳戶中的 Kafka 用戶端連線至 Amazon MSK 叢集。

請參閱[跨帳戶用戶端的單一區域多 VPC 連線](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 正在淘汰 – 以下是準備方法](https://aws.amazon.com/blogs/aws/ec2-classic-is-retiring-heres-how-to-prepare/)。

# Amazon MSK 的單一區域多 VPC 私有連線
<a name="aws-access-mult-vpc"></a>

Amazon Managed Streaming for Apache Kafka (Amazon MSK) 叢集的多 VPC 私有連線能力 （採用 [AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/what-is-privatelink.html) 技術） 是一項功能，可讓您更快速地將託管於不同虛擬私有雲端 (VPCs) 和 AWS 帳戶中的 Kafka 用戶端連線至 Amazon MSK 叢集。

多 VPC 私有連線是一種受管解決方案，可簡化多 VPC 和跨帳戶連線的網路基礎設施。用戶端可以透過 PrivateLink 連線至 Amazon MSK 叢集，同時保留 AWS 網路中的所有流量。Amazon 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 連線解決方案的操作管理。
+ 它允許在不同 VPC 連線之間重疊 IP，不需要像其他 VPC 連線解決方案那樣，要維護不重疊的 IP、複雜的對等互連以及路由表。

您可以使用 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 ACL。首先，為叢集設定 Apache Kafka ACL。然後，更新叢集的組態，將叢集的屬性 `allow.everyone.if.no.acl.found` 設定為 false。如需有關更新叢集組態的資訊，請參閱[中介裝置組態操作](msk-configuration-operations.md)。如果您正在使用 IAM 存取控制，而且想要套用授權政策或更新授權政策，請參閱 [IAM 存取控制](iam-access-control.md)。如需有關 Apache Kafka ACL 的詳細資訊，請參閱 [Apache Kafka ACL](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 連線，從叢集內部 AWS但在 VPC 外部將 Apache Kafka 用戶端私下連線至 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_tw/msk/latest/developerguide/images/mvpc-network.png)


# 步驟 1：在帳戶 A 中的 MSK 叢集上，針對叢集上的 IAM 身分驗證機制開啟多 VPC 連線
<a name="mvpc-cluster-owner-action-turn-on"></a>

MSK 叢集擁有者需要在叢集建立並處於 ACTIVE 狀態之後，在 MSK 叢集上進行組態設定。

叢集擁有者針對將在叢集上處於作用中狀態的任何身分驗證機制，開啟 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 ACL 屬性 "`allow.everyone.if.no.acl.found=false`"。請參閱 [Apache Kafka ACL](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 API，會開啟叢集上身分驗證機制的多 VPC 私有連線**  
作為 MSK 主控台的替代方案，您可以使用 [UpdateConnectivity API](https://docs.aws.amazon.com/msk/1.0/apireference/clusters-clusterarn-connectivity.html)，來開啟多 VPC 私有連線，並在 ACTIVE 叢集上設定身分驗證機制。下列範例顯示針對此叢集開啟 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。請參閱 [Amazon MSK 如何與 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 政策編輯器中顯示的預設政策類似。下列政策會授予叢集、主題和群組層級存取的許可。    
****  

```
{
  "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 後，系統會自動將該 ID 複製到顯示的政策 JSON 語法中。在我們的範例叢集政策中，帳戶 ID 為 *111122223333*。

1. 選取**儲存變更**。

如需有關叢集政策 API 的相關資訊，請參閱 [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. 從叢集系統管理員取得帳戶 A 中 MSK 叢集的**叢集 ARN**，以便帳戶 B 中的用戶端連線到該叢集。記下叢集 ARN 以供稍後使用。

1. 在帳戶 B 用戶端的 MSK 主控台中，選擇**受管 VPC 連線**，然後選擇**建立連線**。

1. 在**連線設定**窗格中，將叢集 ARN 貼至叢集 ARN 文字欄位，然後選擇**驗證**。

1. 為帳戶 B 中的用戶端選取**身分驗證類型**。在此使用案例中，請在建立用戶端 VPC 連線時選擇 IAM。

1. 選擇用戶端的 **VPC**。

1. 至少選擇兩個可用**區域**和關聯的**子網路**。您可以從 AWS 管理主控台叢集詳細資訊或使用 [DescribeCluster](https://docs.aws.amazon.com/msk/1.0/apireference/clusters-clusterarn.html#DescribeCluster) API 或 [describe-cluster](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/kafka/describe-cluster.html) AWS CLI 命令取得可用區域 IDs。您為用戶端子網路指定的區域 ID 必須與叢集子網路的區域 ID 相符。如果遺失子網路的值，請先建立具有與 MSK 叢集相同區域 ID 的子網路。

1. 選擇此 VPC 連線的**安全群組**。您可以使用預設的安全群組。如需有關設定安全群組的詳細資訊，請參閱[使用安全群組控制資源的流量](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 連接埠範圍。請參閱 [Network Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/network-load-balancers.html)。

1. 設定帳戶 B 中的用戶端，使用多 VPC 私有連線的新引導代理程式，以連線到帳戶 A 中的 MSK 叢集。請參閱[生產和取用資料](https://docs.aws.amazon.com/msk/latest/developerguide/produce-consume.html)。

授權完成後，Amazon MSK 會為每個指定的 VPC 和身分驗證機制建立受管 VPC 連線。所選的安全群組會與每個連線相關聯。Amazon MSK 會設定此受管 VPC 連線，以私密連線至代理程式。您可以使用一組新的引導代理程式，私密連線到 Amazon MSK 叢集。

# 更新叢集上的授權機制
<a name="mvpc-cross-account-update-authschemes"></a>

多 VPC 私有連線支援多種授權機制：SASL/SCRAM、IAM 和 TLS。叢集擁有者可以開啟/關閉一個或多個身分驗證機制的私有連線。此叢集必須處於 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 使用 API 開啟/關閉身分驗證機制**  
作為 MSK 主控台的替代方案，您可以使用 [UpdateConnectivity API](https://docs.aws.amazon.com/msk/1.0/apireference/clusters-clusterarn-connectivity.html)，來開啟多 VPC 私有連線，並在 ACTIVE 叢集上設定身分驗證機制。下列範例顯示開啟叢集的 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 連線必須處於 AVAILABLE 狀態，您才能拒絕此連線。您可能想要拒絕來自不再有權連線至叢集的用戶端的受管 VPC 連線。若要防止新的受管 VPC 連線連接至用戶端，請在叢集政策中拒絕對該用戶端的存取。在連線擁有者刪除連線前，遭拒的連線仍會產生成本。請參閱[刪除與 Amazon MSK 叢集的受管 VPC 連線](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 連線刪除後就不會再產生成本。

**使用 MSK 主控台刪除受管 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 ACL 屬性 `allow.everyone.if.no.acl.found=false`。為叢集設定 [Apache Kafka ACL](msk-acls.md) 之後，請更新該叢集的組態，以將該叢集屬性 `allow.everyone.if.no.acl.found` 設為 false。如需有關更新叢集組態的資訊，請參閱[中介裝置組態操作](msk-configuration-operations.md)。

**跨帳戶叢集政策許可**  
如果 Kafka 用戶端位於與 MSK 叢集不同的 AWS 帳戶中，請將叢集型政策連接到授權用戶端根使用者進行跨帳戶連線的 MSK 叢集。您可以使用 MSK 主控台中的 IAM 政策編輯器 (叢集**安全設定** > **編輯叢集政策**)，編輯多 VPC 叢集政策，或使用下列 API 來管理叢集政策：

**PutClusterPolicy**  
將叢集政策連接至叢集。您可以使用此 API，來建立或更新指定的 MSK 叢集政策。如果您要更新政策，則必須在請求承載中包含 currentVersion 欄位。

**GetClusterPolicy**  
擷取與叢集連接之叢集政策文件的 JSON 文字。

**DeleteClusterPolicy**  
刪除叢集政策。

以下是基本叢集政策的 JSON 範例，其與在 MSK 主控台 IAM 政策編輯器中顯示的政策類似。下列政策會授予叢集、主題和群組層級存取的許可。

------
#### [ 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 從內部存取 AWS ，並使用連接埠 9196 進行公開存取。
+ 若要與叢集中設定為使用 的代理程式通訊[IAM 存取控制](iam-access-control.md)，請使用連接埠 9098 從內部存取 AWS ，並使用連接埠 9198 進行公開存取。
+ 若要使用純文字 IPv6 網路類型與中介裝置通訊，請使用連接埠 20092
+ 若要與叢集中設定為使用 IPv6 的 IAM 存取控制的代理程式通訊，請使用連接埠 20098。
+ 若要使用 IPv6 與 SASL/SCRAM 代理程式通訊，請使用連接埠 20096。
+ 若要使用 IPv6 透過 TLS 加密與代理程式通訊，請使用連接埠 20094。