Beam の MQTT エントリポイント の multi credentials per group 機能を利用して、同じ SIM グループ内で認証情報を IoT SIM ごとに使い分けて AWS IoT にデータを送信します。
AWS IoT とは
AWS IoT とは、デバイス (Thing) から安全にデータをクラウドに送信し、また送信されたデータに対してルールベースで各種 AWS サービスを連携させることができるプラットフォームです。
デバイス (Thing) からクラウドへのデータ送信の方法には 2 種類用意されています。
- MQTTS : X.509 証明書を使用した TLS (Transport Layer Security) のクライアント認証
- HTTPS : IAM ユーザーやロール・Cognito を利用した認証
Beam の multi credentials per group 機能とは
Beam で認証情報を使用する場合に、単一の認証情報ではなく、IoT SIM ごとに認証情報を使い分けることができる機能です。
たとえば、AWS IoT で複数のデバイスを用途に応じてデバイスごとにポリシーを使い分けたい場合に有用です。
AWS IoT では、用途に合わせて必要なポリシーを各デバイスで使うクライアント証明書に割り当てます。 Beam を使用することで各デバイスにクライアント証明書を配置する必要はありませんが、通常の Beam 設定では単一の認証情報を使用するため、デバイスごとにクライアント証明書を使い分けたい場合、それぞれのデバイス用にグループを作る必要がありました。
一方、Beam の multi credentials per group 機能を使用すると、一つのグループの Beam 設定で、デバイスで使用する IoT SIM ごとにクライアント証明書を使い分けることができます。
ここでは 2 つのデバイスを Beam の multi credentials per group 機能を使用して、2 つのデバイスで使用する IoT SIM ごとにクライアント証明書を使い分けます。
また今回は AWS IoT で認証情報を使い分けますが、SORACOM に登録できる認証情報であればどのような形式でも multi credentials per group 機能を利用できます。
multi credentials per group 機能は Beam の他に、Funk においても使用できます。その場合には、必要に応じて ステップ 2: SORACOM Beam の multi credentials per group 機能を設定する 以降を Funk に読み替えてください。
操作を始める前に準備が必要です (クリックして確認してください)
(1) 複数の IoT SIM をお持ちであること
(2) MQTT を使用できるデバイスを複数お持ちであること
Raspberry Pi + AK-020 / Wio LTE などは、MQTT を使用できます。
(3) AWS アカウントをお持ちであること
準備完了ステップ 1: AWS IoT を設定する
AWS IoT Core にモノ (Thing) を作成する
AWS IoT Core でデバイスを管理するために、AWS IoT Core にモノ (Thing) を作成して、モノに対応する証明書をダウンロードします。操作手順について詳しくは、AWS IoT Core を利用する の AWS IoT Core にモノ (Thing) を作成する を参照してください。
具体的には以下のように設定します。
1 つ目のモノ (デバイス 1):
項目 | 説明 | ||||||
---|---|---|---|---|---|---|---|
任意の文字列を入力します。2 つのデバイスを区別するために、デバイス 1 が利用する IoT SIM の IMSI を含めると良いでしょう。これ以降、この IMSI を ${imsi1} と表記します。例: raspi-${imsi1} | |||||||
|
2 つ目のモノ (デバイス 2):
項目 | 説明 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
任意の文字列を入力します。2 つのデバイスを区別するために、デバイス 2 が利用する IoT SIM の IMSI を含めると良いでしょう。これ以降、この IMSI を ${imsi2} と表記します。例: raspi-${imsi2} | |||||||||||||
|
AWS IoT Core のデフォルトのデータエンドポイントを確認する
AWS IoT Core へデータを送信するためのデフォルトのデータエンドポイントを確認します。詳しくは、AWS IoT Core のデフォルトのデータエンドポイントを確認する を参照してください。
このエンドポイントをこれ以降、${default_endpoint} と表記します。例: xxxxxxxxxxxxxx-ats.iot.ap-northeast-1.amazonaws.com
ステップ 2: Beam の multi credentials per group 機能を設定する
認証情報ストアに X.509 証明書を登録する
Beam から AWS IoT に登録したモノを利用するために、AWS IoT Core にモノ (Thing) を作成する で作成した証明書を、SORACOM ユーザーコンソールに登録します。
具体的には、認証情報ストアの「認証情報を登録」画面で以下のように登録します。この画面の表示方法については、認証情報を登録する を参照してください。
1 つ目のモノ (デバイス 1):
項目 | 説明 |
---|---|
認証情報を識別するために任意の名前を入力します。なお、multi credentials per group 機能を利用するために、1 つ目のモノが利用する IoT SIM の IMSI を含める必要があります。例: awsiot-${imsi1} | |
「X.509 証明書」を選択します。 | |
1 つ目のモノのプライベートキーファイル (例: xxx...xxx-private.pem.key ) の内容を貼り付けます。(*1) | |
1 つ目のモノのデバイス証明書 (例: xxx...xxx-certificate.pem.crt ) の内容を貼り付けます。(*1) | |
ルート CA 証明書の Amazon ルート CA 1 (例: AmazonRootCA1.pem ) の内容を貼り付けます。(*1) |
- (*1) ファイル名ではなく、テキストエディタなどで ファイルの内容をコピーし 貼り付けてください。
2 つ目のモノ (デバイス 2):
項目 | 説明 |
---|---|
認証情報を識別するために任意の名前を入力します。なお、multi credentials per group 機能を利用するために、デバイス 2 が利用する IoT SIM の IMSI を含める必要があります。例: awsiot-${imsi2} | |
「X.509 証明書」を選択します。 | |
デバイス 2のプライベートキーファイル (例: xxx...xxx-private.pem.key ) の内容を貼り付けます。(*1) | |
デバイス 1のデバイス証明書 (例: xxx...xxx-certificate.pem.crt ) の内容を貼り付けます。(*1) | |
ルート CA 証明書の Amazon ルート CA 1 (例: AmazonRootCA1.pem ) の内容を貼り付けます。(*1) |
- (*1) ファイル名ではなく、テキストエディタなどで ファイルの内容をコピーし 貼り付けてください。
SORACOM Beam を有効化する
Beam の設定はグループに対して行います
ここでは、グループの設定を変更する操作のみを説明します。グループの仕組みやグループを作成する操作について詳しくは、グループ設定 を参照してください。
SIM グループ画面で
をクリックします。SIM グループ画面を表示する操作について詳しくは、グループの設定を変更する を参照してください。
→ の順にクリックします。
以下の項目を設定します。
項目 説明 任意の文字列を入力します。わかりやすい名前を設定します。例: MQTT → 「Standard」を選択します。 → 「MQTTS」を選択します。 → ${default_endpoint} を入力します。例: xxxxxxxxxxxxxx-ats.iot.ap-northeast-1.amazonaws.com
→ 「8883」を入力します。 スイッチをクリックして、オンにします。 multi credentials per group 機能を利用するために、認証情報ストアに X.509 証明書を登録する で登録した X.509 証明書の の IMSI 部分 (${IMSI1} や ${IMSI2}) を #{imsi} に置き換えた文字列を入力します。例: awsiot-#{imsi} → オンに設定します。オンにすると、publish した際の topic 名の末尾に、IMSI が自動的に追加されます。 #{imsi} のかわりに #{imei} も使用できます
今回はプレースホルダーとして IMSI (#{imsi}) を使用しますが、IMEI (#{imei}) を使用することもできます。
デフォルト証明書を利用できます
にプレースホルダー (#{imsi} や #{imei}) を利用した場合、対応する証明書が存在しなかった際はプレースホルダー部分を default に置換した証明書が利用されます (例: awsiot-default)。これをデフォルト証明書と呼びます。
デフォルト証明書を登録しておくと、対応する IMSI または IMEI の証明書を登録しない場合でも通信できます。ただし、AWS IoT 側ではモノを区別することはできません。
をクリックします。
デバイス 1 とデバイス 2 で利用する IoT SIM が所属するグループを切り替えます。
IoT SIM の Beam の設定が完了しました。
SORACOM CLI / SORACOM API の場合
SORACOM CLI または SORACOM API を利用しても、multi credentials per group 機能を使用できます。詳しくは、MQTT エントリポイントを設定する の SORACOM CLI / SORACOM API の場合 を参照してください。なお、multi credentials per group 機能を利用する場合は、clientCerts.default.$credentialsId
に awsiot-#{imsi}
のように、#{imsi}
や #{imei}
を含む文字列を指定します。
ステップ 3: Beam を使用して同じ SIM グループ内で認証情報を IoT SIM ごとに使い分けて AWS IoT にデータを Publish する (送信)
では、実際にデータを送信してみましょう。 ここでは 2 枚の IoT SIM がデバイス 1 とデバイス 2 に挿入されている状況を想定しています。もしデバイスが 1 台しかない場合は、IoT SIM を差し替えることでも動作を確認できます。
AWS IoT Core とデバイス 2 でトピックを Subscribe する (受信)
デバイス 1 でデータを送信する前に、AWS IoT Core とデバイス 2 でトピックを Subscribe します。
AWS IoT Core の MQTT テストクライアントで対象のトピックを Subscribe します。
項目 説明 「beamdemo」を入力します。 詳しくは、AWS IoT Core の MQTT テストクライアントでトピックを Subscribe する (受信) を参照してください。
Beam を有効化した SIM グループ に所属する IoT SIM を利用するデバイス 2 で、以下の設定でトピックを Subscribe します。
項目 説明 ホスト名 beam.soracom.io
トピック名 beamdemo
たとえば、デバイスが Raspberry Pi の場合は、
mosquitto_sub
を使用してトピックを Subscribe できます。mosquitto_sub
の具体的な操作については、mosquitto_sub でトピックを Subscribe する (受信) を参照してください。
デバイス 1 でデータを Publish する (送信)
Beam の MQTT エントリポイントを利用するデバイス 1 で、データを Publish (送信) してみましょう。
Beam を有効化した SIM グループ に所属する IoT SIM を利用するデバイス 1 で、以下の設定でデータを Publish します。
項目 説明 ホスト名 beam.soracom.io
トピック名 beamdemo
データ Hello, World
たとえば、デバイスが Raspberry Pi の場合は、
mosquitto_pub
を使用してデータを Publish できます。mosquitto_pub
の具体的な操作については、mosquitto_pub でトピックにデータを Publish する (送信) を参照してください。データを Publish すると、同じトピックを Subscribe している MQTT テストクライアントとデバイス 2 にデータが出力されます。
AWS IoT Core の MQTT テストクライアントで Subscribe した場合の表示は、AWS IoT Core の MQTT テストクライアントでトピックを Subscribe する (受信) を参照してください。
デバイス 2 で
mosquitto_sub
で Subscribe した場合は、以下のように表示されます。なお、Beam の設定で
をオンに設定したため、デバイス 1 が Publish したトピックの末尾に自動的に/${imsi1}
が追加されています。Client mosqsub/XXXX-XXXXXXXXXX received PUBLISH (d0, q0, r0, m0, 'beamdemo/xxxxxXXXXXXXXXX', ... (12 bytes)) Hello, World
デバイス 2 でトピック beamdemo にデータを Publish する (送信)
では、次に Beam の MQTT エントリポイントを利用するデバイス 2 で、データを Publish (送信) してみましょう。
Beam を有効化した SIM グループ に所属する IoT SIM を利用するデバイス 2 で、以下の設定でデータを Publish します。
項目 説明 ホスト名 beam.soracom.io
トピック名 beamdemo
データ Hello, World
たとえば、デバイスが Raspberry Pi の場合は、
mosquitto_pub
を使用してデータを Publish できます。mosquitto_pub
の具体的な操作については、mosquitto_pub でトピックにデータを Publish する (送信) を参照してください。データを Publish すると、同じトピックを Subscribe している MQTT テストクライアントにデータが出力されます。
- AWS IoT Core の MQTT テストクライアントで Subscribe した場合の表示は、AWS IoT Core の MQTT テストクライアントでトピックを Subscribe する (受信) を参照してください。
デバイス 1 で同じトピックを Subscribe すればデバイス 1 にもデータが出力されます
デバイス 1 で
mosquitto_sub
を利用した場合は、以下のように表示されます。なお、Beam の設定で
をオンに設定したため、デバイス 1 が Publish したトピックの末尾に自動的に/${imsi1}
が追加されています。Client mosqsub/XXXX-XXXXXXXXXX received PUBLISH (d0, q0, r0, m0, 'beamdemo/xxxxxXXXXXXXXXX', ... (12 bytes)) Hello, World
デバイス 2 から許可されていないトピック beamdemo2 にデータを Publish する (送信)
最後に、デバイス 2 で AWS IoT のポリシーで許可されていないトピック (beamdemo2) にデータを Publish (送信) してみましょう。デバイス 2 のポリシーについては、AWS IoT Core にモノ (Thing) を作成する を参照してください。
Publish 時にエラーは表示されませんが、AWS IoT の MQTT テストクライアントでデータが受信されない ことが確認できます。
以上のように、multi credentials per group 機能を利用することで、1 つの SIM グループで認証情報をデバイスに応じて使いわけたり、デバイス (AWS IoT Core のモノ) ごとにポリシーを変えたりできます。