# GCP PrivateLink

::: tip 注意
この機能は EMQX Dedicated エディションでのみ利用可能です。
:::

このページでは、Google Cloud Platform（GCP）上にデプロイされた EMQX プラットフォームで PrivateLink 機能を有効にするための詳細な手順を説明します。PrivateLink を有効にすることで、EMQX のデプロイメントはパブリックインターネットにトラフィックを露出させることなく、VPC ネットワーク内のマネージドサービスにプライベートにアクセスできます。これにより、GCP のプライベートネットワーク内で通信が完結するため、セキュリティとパフォーマンスが向上します。

この構成では、EMQX プラットフォームのデプロイメントが属する VPC がサービスユーザーとして機能し、GCP リソースが存在するサービスプロバイダーの VPC への接続を確立します。

## 前提条件

作業を開始する前に、以下のリソースと権限が整っていることを確認してください。

- EMQX プラットフォームのリソースが既に作成されていること。
- GCP アカウントで以下の操作を行うための十分な権限を持っていること：
  - 内部ロードバランサーの作成
  - Private Service Connect（PSC）エンドポイントの設定
  - VPC ネットワークの管理

## GCP と EMQX プラットフォーム間で PrivateLink を確立する

このセクションでは、GCP のネットワーク設定を行い、EMQX プラットフォームで PrivateLink を有効にする手順を案内します。

### 内部ロードバランサーの作成

1. GCP コンソールの[ロードバランシングページ](https://console.cloud.google.com/net-services/loadbalancing/list/loadBalancers?referrer=search&authuser=3&inv=1&invt=AbsnJw&project=emq-x-cloud)にアクセスし、**+ CREATE LOAD BALANCER** をクリックしてロードバランサーの設定を開始します。

   - **Public facing or internal** オプションで `Internal` を選択します。
   - その他の設定は必要に応じて構成してください。

   設定が完了したら、**Configure** をクリックして **Create internal passthrough Network Load Balancer** ページに進みます。

   <img src="./_assets/gcp_privatelink_create_lb.png" alt="内部ロードバランサー作成画面" style="zoom:67%;" />

2. **Create internal passthrough Network Load Balancer** ページで以下の項目を設定します。

   - **Load Balancer name**：わかりやすい名前を入力します。

   - **Region**：EMQX のデプロイメントと同じリージョンを選択します。

   - **Network**：EMQX とピアリングする VPC ネットワークを選択します。

     ![gcp_privatelink_config_lb](./_assets/gcp_privatelink_config_lb.png)

   - **Backend configuration**：

     - ビジネス要件に応じて **Instance group** を選択します。

     - 適切な **Health check** を設定します。

   - **Frontend configuration**：EMQX リソースサービスで使用されるポート番号 `1883` を設定します。

     ![gcp_privatelink_config_lb_port](./_assets/gcp_privatelink_config_lb_port.png)

   設定が完了したら **CREATE** をクリックしてロードバランサーの作成を完了します。

### Private Service Connect を使った公開サービスの作成

1. **[Private Service Connect](https://console.cloud.google.com/net-services/psc/list/producers?authuser=3&inv=1&invt=AbsnJw&project=emq-x-cloud)** にアクセスします。

2. **+ ADD SERVICE** をクリックして新しい公開サービスを作成します。以下の項目を設定してください。

   - **Internal load balancer**：先ほど作成したロードバランサーを選択します。
   - **Service name**：公開サービスの名前を入力します。
   - **Subnets**：新しいサブネットを作成します。

   ![gcp_privatelink_published_service](./_assets/gcp_privatelink_published_service.png)

   - **Connection preference** では `Accept connections for selected networks` を選択します。

   - **Accepted networks** には、EMQX デプロイメントの **PrivateLink Guidelines** ダイアログに表示されている **Project ID** と **Network** を入力します。ダイアログはデプロイメントの **Network Management** -> **+ PrivateLink** から開けます。

     ![gcp_privatelink_published_service_connection_preference](./_assets/gcp_privatelink_published_service_connection_preference.png)

     ![privatelink_guidelines](./_assets/privatelink_guidelines.png)

   設定が完了したら **ADD SERVICE** をクリックします。完了するとサービスが **Published Services** リストに表示されます。

3. サービス名をクリックして詳細ページに入り、**Service attachment** の値をコピーします。

   ![gcp_privatelink_service_attachment](./_assets/gcp_privatelink_service_attachment.png)

### EMQX プラットフォームで PrivateLink を有効化

1. EMQX のデプロイメントで再度 **PrivateLink Guidelines** ダイアログを開きます。

2. コピーした **Service Attachment** の値を入力欄に貼り付け、**Create PrivateLink** をクリックします。

   ![privatelink_guidelines_service_attachment](./_assets/privatelink_guidelines_service_attachment.png)

3. 少し待ってからデプロイメント詳細で PrivateLink のステータスを確認します。ステータスが `running` に変われば、PrivateLink 接続が正常に確立されています。

   ![privatelink_gcp_address](./_assets/privatelink_gcp_address.png)

セットアップ完了後、EMQX のデプロイメントは生成された PrivateLink アドレスとポート `1883` を使用して、GCP 上のサービスにプライベートにアクセスできるようになります。
