# Azure PrivateLink

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

このページでは、Microsoft Azure プラットフォーム上の EMQX Platform デプロイメントで PrivateLink 機能を有効にする手順を説明します。PrivateLink を有効にすると、EMQX Platform デプロイメントは仮想ネットワーク内のプライベート接続を介して Azure PaaS サービスおよび Azure 上にホストされた顧客所有／パートナーのサービスにアクセスできます。このプライベート接続では、EMQX Platform デプロイメントの仮想プライベートクラウド（VPC）がサービスユーザーとして機能し、クラウドベースのリソースが存在するサービスプロバイダーの VPC にリクエストを送信します。

本ページで説明する内容は以下の通りです。

- [Azure ポータルを使用した Private Link サービスの作成](#create-a-private-link-service-using-the-azure-portal)
  - [ロードバランサーの作成](#create-load-balancer)
  - [Private Link サービスの作成](#create-a-private-link-service)
- [デプロイメントでの PrivateLink 有効化](#enable-privatelink-in-your-deployment)
- [PrivateLink 接続のテスト](#test-privatelink-connection)
- [PrivateLink の削除](#remove-privatelink)

## Azure ポータルを使用した Private Link サービスの作成

EMQX Platform からプライベート接続を介して Azure サービスにアクセスするには、Azure で Private Link サービスを作成し、そのサービスを EMQX Platform に公開する必要があります。本セクションでは、Azure ポータルを使用して Private Link サービスを作成する方法を説明します。

::: tip 前提条件

本デモでは、すでに Azure アカウントをお持ちで、仮想ネットワークを作成済みであることを前提としています。仮想ネットワークの作成方法については、[Azure ドキュメント](https://learn.microsoft.com/en-us/azure/private-link/create-private-link-service-portal?tabs=dynamic-ip#load-balancer-virtual-network)をご参照ください。

:::

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

仮想マシンの負荷分散を行う内部ロードバランサーを作成します。

ロードバランサーの作成時に以下を設定します：

- フロントエンド IP アドレス
- バックエンドプール
- インバウンド負荷分散ルール

1. [Azure ポータル](https://portal.azure.com/#home)にサインインします。
2. ポータル上部の検索ボックスに「**Load balancer**」と入力し、検索結果の「Load balancers」をクリックします。
3. 「Load balancer」ページで「+ Create」をクリックします。
4. 「Create load balancer」ページの「Basics」タブで以下を入力または選択します：
   - **Subscription**：ご利用の Azure サブスクリプションを選択します。
   - **Resource Group**：仮想ネットワーク作成時に設定したリソースグループ名を選択します。
   - **Name**：ロードバランサーの名前を入力します。
   - **Type**：ネットワークタイプとして `Internal` を選択します。
   - その他のオプションはデフォルトのままにします。

![azure private](./_assets/azure_privatelink_1.png)

5. 「Next: Frontend IP configuration」をクリックします。

6. 「Frontend IP configuration」で「+ Add a frontend IP configuration」をクリックし、以下の設定を行います：

   - **Name**：フロントエンド IP 構成の名前を入力します。

     ::: tip

     本デモでは、[PrivateLink 接続のテスト](#test-privatelink-connection)での検証に関連付けるため、`demo-redis` という名前を使用しています。

     :::

   - **Virtual network**：ご自身の仮想ネットワークを選択します。

   - **Subnet**：仮想ネットワークのサブネットを選択します。

![azure private](./_assets/azure_privatelink_2.png)

7. 「Add」をクリックします。
8. 「Next: Backend pools」をクリックします。
9. 「Backend pools」で「+ Add a backend pool」をクリックします。
10. **Backend Pool Configuration** に `NIC` を選択し、「+Add」をクリックしてバックエンドの仮想マシンを関連付けます。仮想マシンとして `demo-redis` を選択します。

![azure private](./_assets/azure_privatelink_3.png)

11. 「Save」をクリックします。

12. 「Next: Inbound rules」をクリックします。

13. 「Inbound rules」で「+ Add an Inbound nat rule」をクリックし、ポートフォワーディング用のルールを設定します。

    ::: tip

    ネットワークアドレス変換（NAT）ルールは、特定のポートから仮想マシンの特定ポートへの外部トラフィックのリダイレクト方法を定義し、外部ユーザーが仮想マシン上のサービスにアクセスできるようにします。

    :::

    - **Frontend IP configuration**：先ほど「Frontend IP configuration」タブで設定した名前を選択します。
    - **Frontend Port** と **Backend port**：本デモでは [PrivateLink 接続のテスト](#test-privatelink-connection)での検証を容易にするため `6379` を使用しています。別のリソースをデータ統合でテストする場合は適宜ポートを変更してください。
    - その他の設定は実際の環境に合わせて設定してください。

![azure private](./_assets/azure_privatelink_4.png)

14. 青色の「Review + create」ボタンをクリックします。

15. 「Create」をクリックします。

![azure private](./_assets/azure_privatelink_5.png)

### Private Link サービスの作成

前節で作成したロードバランサーの背後に Private Link サービスを作成します。

1. ポータル上部の検索ボックスに「**Private link**」と入力し、検索結果から「Private link services」を選択します。
2. 「+ Create」を選択します。
3. 「Create private link service」ページの「Basics」タブで、先に作成したリソースグループを選択し、Private Link サービス名に `demo` と入力します。
   ![azure private](./_assets/azure_privatelink_6.png)

4. 「Next: Outbound settings」を選択します。
5. 「Outbound settings」タブで以下を入力または選択します：
   - **Load balancer**：先に作成したロードバランサー名 `test01` を入力します。
   - **Load balancer frontend IP address**：先に設定したフロントエンド IP アドレス `demo-redis (10.1.0.9)` を選択します。
   - **Source NAT subnet**： [ロードバランサーの作成](#create-load-balancer)の「Frontend IP configuration」で設定したサブネットを選択します。
   - **Enable TCP proxy V2**：デフォルトの「No」のままにします。アプリケーションが TCP proxy v2 ヘッダーを期待する場合は「Yes」を選択してください。
   - **Private IP address settings**：デフォルト設定のままにします。

![azure private](./_assets/azure_privatelink_7.png)

6. 「Next: Access security」を選択します。
7. 「Access security」タブではデフォルトの「Role-based access control only」のままにします。
8. 「Next: Tags」を選択します。
9. 「Next: Review + create」を選択します。
10. 「Create」を選択します。

<img src="./_assets/azure_privatelink_8.png" alt="azure private" style="zoom:67%;" />

## デプロイメントでの PrivateLink 有効化

デプロイメント内で PrivateLink 接続を作成することで、PrivateLink 機能を有効化します。

1. EMQX Platform コンソールで対象のデプロイメントに移動します。

2. デプロイメントの左メニューから **Network Management** をクリックします。

3. **Privatelink** エリアに移動し、**+ PrivateLink** をクリックします。ポップアップダイアログで、**Subscription ID** フィールドに表示されている Azure サブスクリプション ID をコピーします。

   <img src="./_assets/azure_privatelink_9.png" alt="azure private" style="zoom:67%;" />

4. Azure ポータルで先ほど作成した Private Link サービス `demo` に移動します。

5. **Settings** の下にある **Access security** をクリックします。「Restricted by subscription」を選択し、**Add subscription** をクリックします。EMQX Platform コンソールからコピーした Azure サブスクリプション ID を **Subscription** テキストボックスに貼り付けます。

   ![azure private](./_assets/azure_privatelink_10.png)

6. 「OK」をクリックします。**Overview** ページに移動し、Private Link サービスのエイリアスをコピーします。

   ![azure private](./_assets/azure_privatelink_11.png)

7. EMQX Platform コンソールに戻り、「Next Step」をクリックし、コピーしたエイリアスを **Enter the ID of Private Link Service** テキストボックスに貼り付けます。**Create PrivateLink** をクリックします。

   <img src="./_assets/azure_privatelink_12.png" alt="azure private" style="zoom:67%;" />

8. 完了後、Azure ポータルの Private Link サービス `demo` に戻り、**Private endpoint connections** をクリックします。接続を選択し、**Approve** をクリックします。

   ![azure private](./_assets/azure_privatelink_13.png)

9. 少し待ってから、デプロイメントの詳細画面で PrivateLink のステータスを確認します。ステータスが `running` に変われば、PrivateLink の作成が正常に完了したことを示します。

10. 後の設定で使用するため、PrivateLink の IP アドレスをコピーします。

![azure private](./_assets/azure_privatelink_14.png)

## PrivateLink の削除

PrivateLink 接続を削除する前に、以下を確認してください：

- PrivateLink のステータスが `running` であること。
- デプロイメント内にリンクされたリソースが存在しないこと。これを怠ると予期せぬリスクが発生する可能性があります。

> Azure プラットフォームから Private Link サービスを削除する場合は、必ず先に EMQX Platform コンソールから PrivateLink を削除してください。これを行わないと、デプロイメントの PrivateLink ステータスが「Failed」になる可能性があります。

1. デプロイメントの Network Management ページに移動します。

2. **PrivateLink** エリアで、対象の PrivateLink の **Actions** 列にある削除アイコンをクリックし、確認ダイアログで **Confirm** をクリックして削除します。

![azure private](./_assets/azure_privatelink_16.png)
