

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

# 開始使用多 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 叢集。