

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Edge の EMQX ブローカーにアプリケーションを接続する AWS IoT SiteWise
<a name="connect-app-to-broker"></a>

EMQX ブローカーは、ポート 8883 の Transport Layer Security (TLS) を使用してすべての通信を暗号化し、転送中にデータを保護します。このセクションでは、アプリケーションと EMQX ブローカー間の接続を確立する手順について説明します。これらのステップに従うことで、産業データの整合性と機密性を維持できます。接続プロセスには、主に 2 つのアプローチがあります。コンポーネントを介した自動 IP 検出の使用、または TLS 証明書のサブジェクト代替名 (SANs) として DNS 名と IP アドレスを手動で設定する方法です。各メソッドには、ネットワークのセットアップとセキュリティ要件に応じて独自の利点があります。このドキュメントでは、両方のオプションについて説明します。

**Topics**
+ [AWS IoT SiteWise Edge の EMQX ブローカーへの安全な接続のために TLS を設定する](#configure-tls-emqx-broker)
+ [AWS IoT SiteWise Edge で EMQX ブローカー接続をテストする](#test-emqx-connection)
+ [独自の CA を使用する](#configure-tls-custom-ca)
+ [外部ファイアウォール接続用のポート 8883 を開く](#emqx-firewall)

## AWS IoT SiteWise Edge の EMQX ブローカーへの安全な接続のために TLS を設定する
<a name="configure-tls-emqx-broker"></a>

デフォルトでは、 はコアデバイス認証局 (CA) によって署名された EMQX ブローカーの TLS サーバー証明書 AWS IoT Greengrass を生成します。詳細については、[「MQTT ブローカーを使用した AWS IoT Greengrass Core デバイスへのクライアントデバイスの](https://docs.aws.amazon.com/greengrass/v2/developerguide/connecting-to-mqtt.html)接続」を参照してください。

### TLS 証明書を取得する
<a name="configure-tls-retrieve-certificate"></a>

CA 証明書を取得するには、ゲートウェイホストで次のコマンドを実行します。

------
#### [ Linux ]

ゲートウェイホストのシェルセッションで次のコマンドを実行します。

```
/greengrass/v2/bin/swe-emqx-cli cert
```

このコマンドは、証明書の場所を表示し、証明書の内容を出力します。

または、次のコマンドを使用して証明書をファイルに保存することもできます。

```
/greengrass/v2/bin/swe-emqx-cli cert --output /path/to/certificate.pem
```

------
#### [ Windows ]

ゲートウェイホストの PowerShell セッションで次のコマンドを実行します。

```
C:\greengrass\v2\bin\swe-emqx-cli.ps1 cert
```

このコマンドは、証明書の場所を表示し、証明書の内容を出力します。

または、次のコマンドを使用して証明書をファイルに保存することもできます。

```
C:\greengrass\v2\bin\swe-emqx-cli.ps1 cert --output C:\path\to\certificate.pem
```

CLI は、システム上の正確なパスに関係なく、証明書を自動的に見つけます。

------

ca.pem ファイルの内容を、ブローカーに接続している外部アプリケーションにコピーします。`BrokerCoreDeviceCA.pem` と名前を付けて保存します。

### TLS サーバー証明書にカスタム DNS 名/IP アドレスを追加する
<a name="configure-tls-custom-dns-ip"></a>

によって生成された証明書のサブジェクト代替名 (SAN) AWS IoT Greengrass は です`localhost`。ゲートウェイホストの外部から TLS 接続を確立すると、ブローカーのホスト名がサーバー証明書`localhost`の のホスト名と一致しないため、TLS 検証ステップは失敗します。

ホスト名の不一致問題に対処するために、 はコアデバイスエンドポイントを管理する 2 つの方法 AWS IoT Greengrass を提供します。このセクションでは、両方のオプションについて説明します。詳細については、「 *AWS IoT Greengrass Version 2 デベロッパーガイド*」の[「 コアデバイスエンドポイントの管理](https://docs.aws.amazon.com/greengrass/v2/developerguide/manage-core-device-endpoints.html)」を参照してください。
+ コアデバイスの IP アドレスを使用して EMQX ブローカーに接続するには、自動 IP 検出セクションを使用します。
+ IP アドレスの代わりに DNS 名を使用して EMQX ブローカーに接続するには、手動管理セクションを使用します。

------
#### [ Automated IP discovery ]

このオプションを使用すると、コアデバイスは IP アドレスを自動的に検出し、それをサブジェクト代替名 (SAN) としてブローカー証明書に追加できます。

1. `aws.greengrass.clientdevices.IPDetector` コンポーネントをコアデバイスのデプロイに追加します。

1. 変更をデバイスにデプロイする

1. デプロイが完了するまで待ちます。

   デプロイが完了したら、ブローカーの IP アドレスを使用して安全な TLS 接続を確立できます。

   IP アドレスは、ブローカー証明書に SAN として自動的に追加されます。

------
#### [ Manual DNS and IP Configuration ]

DNS 名と IP アドレスをサブジェクト代替名 (SANs) として TLS 証明書に手動で追加できます。この方法は、ゲートウェイホストの DNS 名を設定している場合に便利です。

**重要**  
IPDetector コンポーネントを使用している場合は、続行する前にデプロイから削除してください。IPDetector コンポーネントは、手動エンドポイント設定を上書きします。

**エンドポイントを手動で設定するには**

1. <a name="sitewise-open-console"></a>[AWS IoT SiteWise コンソール](https://console.aws.amazon.com/iotsitewise/)に移動します。

1. 左側のナビゲーションで、 **Edge セクションの Edge ゲートウェイ**を選択します。 ****

1. 設定するゲートウェイを選択します。

1. **Edge ゲートウェイ設定**セクションで、**Greengrass コアデバイス** URL を選択します。コアデバイスのページが表示されます。

1. **クライアントデバイス**タブを選択します。

1. **[Manage endpoints]** (エンドポイント管理) を選択します。

1. エンドポイントの管理ダイアログボックスに、DNS 名と SANs として追加する IP アドレスを入力します (複数可）。ポート 8883 を使用します。

1. **[更新]** を選択します。

ブローカーの TLS サーバー証明書は自動的に更新され、新しいエンドポイントが含まれます。

**Linux を使用して TLS サーバー証明書の更新を確認するには**

1. ゲートウェイホストでシェルセッションを開始します。

   ```
   docker exec emqx openssl x509 -in ./data/cert.pem -text -noout | grep -A1 "Subject Alternative Name"
   ```

1. コマンドは、次のような出力を返します。

   ```
   X509v3 Subject Alternative Name: 
   DNS:{{endpoint_you_added}}, DNS:localhost
   ```

1. エンドポイントが SANs のリストに表示されていることを確認します。

**Windows を使用して TLS サーバー証明書の更新を確認するには**

1. ゲートウェイホストでシェルセッションを開始します。

   ```
   (Get-PfxCertificate -FilePath "C:\greengrass\v2\work\aws.greengrass.clientdevices.mqtt.EMQX\v2\data\cert.pem").Extensions | Where-Object { $_.Oid.FriendlyName -eq "Subject Alternative Name" } | ForEach-Object { "Subject Alternative Name:", ($_.Format($true) -split "`n")[0..1] }
   ```

1. コマンドは、次のような出力を返します。

   ```
   Subject Alternative Name:
   DNS Name={{your-endpoint}}
   DNS Name=localhost
   ```

1. 追加したエンドポイントが SANs のリストに含まれていることを確認します。

------

## AWS IoT SiteWise Edge で EMQX ブローカー接続をテストする
<a name="test-emqx-connection"></a>

TLS 証明書と認証情報を使用して EMQX ブローカーを設定したら、セットアップが正しく機能することを確認することが重要です。接続をテストすることで、セキュリティ設定が適切に実装され、クライアントがブローカーへの暗号化された接続を正常に確立できるようになります。このセクションでは、TLS 暗号化と認証をサポートする広く使用されている MQTT クライアントツールである Mosquitto コマンドラインインターフェイス (CLI) クライアントを使用してブローカー接続をテストする方法について説明します。

### Mosquitto CLI クライアントを使用して EMQX ブローカー接続をテストする
<a name="test-emqx-connection-mosquitto"></a>

このステップでは、mosquitto CLI クライアントを使用してセットアップをテストし、前に作成したユーザー名とパスワードを使用してブローカーに正常に接続できることを確認します。ステップ 3: TLS のセットアップの`BrokerCoreDeviceCA.pem`次のステップを取得するには。

```
mosquitto_sub -h {{hostname|ip address}} \
    -p 8883 \
    -t "#" \
    -q 1 \
    -u {{username}} -P {{password}} \
    --cafile BrokerCoreDeviceCA.pem
```

**注記**  
接続先のホスト名/IP アドレスが、クライアントに渡す CA 証明書にあるサブジェクト代替名 (SAN) と一致しない場合、SSL:verify エラーが発生することがあります。正しい SAN で証明書を取得する方法については、「ステップ 3: TLS のセットアップ」の「カスタム DNS 名/IP アドレスを TLS サーバー証明書に追加する」を参照してください。

この時点で、すべてのユーザーはブローカー上のすべてのトピックを公開およびサブスクライブできます。[EMQX で AWS IoT SiteWise Edge の認可ルールを設定する](authorization-rules-emqx-broker.md) に進みます。

## 独自の CA を使用する
<a name="configure-tls-custom-ca"></a>

AWS IoT Greengrass では、独自の認証機関 (CA) を使用するように独自のクライアントデバイス認証コンポーネントを設定する方法について説明します。クライアントデバイス認証コンポーネント (`aws.greengrass.clientdevices.Auth`) がクライアントデバイスを認証し、クライアントデバイスのアクションを承認します。詳細については、「 *AWS IoT Greengrass Version 2 デベロッパーガイド*」の[「独自の認証機関](https://docs.aws.amazon.com/greengrass/v2/developerguide/connecting-to-mqtt.html#use-your-own-CA)の使用」を参照してください。

独自の CA を使用するには、カスタム設定を指定できるように、デプロイに `aws.greengrass.clientdevices.Auth`コンポーネントを追加します。

## 外部ファイアウォール接続用のポート 8883 を開く
<a name="emqx-firewall"></a>

------
#### [ Linux ]

Linux ホストファイアウォールルールで、ポート 8883 のインバウンドルールを追加して、ゲートウェイホストの外部からの着信接続を許可します。ファイアウォールがある場合は、ポート 8883 で受信 TLS 接続が許可されていることを確認します。

------
#### [ Windows ]

Microsoft Windows ホストファイアウォールルールで、ポート 8883 のインバウンドルールを追加して、ゲートウェイホストの外部からの着信接続を許可します。ルールがポート 8883 を指定するポートタイプの許可ルールであることを確認します。これは、外部アプリケーションからブローカーへの接続を許可するようにネットワーク設定に従って設定できます。

------