AWS IoT でデバイス (モノ) を利用するには、デバイスごとにプロビジョニングが必要です。
SORACOM Krypton (以下、Krypton) を利用すると、デバイスを自動的にプロビジョニングし、デバイス証明書を発行して、AWS IoT に登録できます。あらかじめデバイス証明書をデバイスごとに登録する必要はありません。デバイスを起動する際に初期設定として、プロビジョニングを実行できます。
あらかじめ以下の手順で設定を行います。
この手順が完了すると、IoT SIM および Krypton クライアントをインストールしたデバイスは、自動的に AWS IoT で自身をプロビジョニングし、MQTTS でデータを送信できるようになります。
ステップ 1: AWS IoT ポリシーを作成する
AWS IoT でデバイス (モノ) をプロビジョニングするために、デバイスに適用するポリシーを作成します。
AWS IoT コンソール にアクセスします。
に「IoT Core」を入力し、 をクリックして、→ → の順にクリックします。
ポリシーステートメントを編集します。
項目 説明 AWS IoT ポリシーの名前を入力します。例: myThingsPolicy
許可
を選択します。このポリシーで許可するアクションを指定します。詳しくは、以下の ポリシーリソースの設定について を参照してください。 このポリシーで許可するリソースを指定します。詳しくは、以下の ポリシーリソースの設定について を参照してください。 ポリシーステートメントを追加するには、
をクリックします。ポリシーリソースの設定について
と は、最初は*
(すべて) を指定してください。後続のサンプルプログラムでは、以下のトピックに対するアクションを実行します。topic_1
への SUBSCRIBEtopic_2
への PUBLISH
Krypton の動作が確認できたら、徐々に必要なリソースのみに変更することを推奨します。詳しくは、AWS IoT Core アクションリソース を参照してください。
をクリックします。
ステップ 2: 証明書を生成する権限を持つ AWS IAM 資格情報を作成する
Krypton が、AWS IoT にモノを作成し、デバイス証明書を生成して、モノにポリシーを適用するには、適切な権限セットを持つ AWS IAM 資格情報のセットが必要です。ここでは、AWS IAM ユーザーを作成し、AWS IAM 資格情報を取得します。
AWS IAM ポリシーを作成する
AWS IAM コンソール にアクセスします。
に「IAM」を入力し、 をクリックして、→ → の順にクリックします。
の をクリックし、「IoT」を入力して、 をクリックします。
に「CreateKeysAndCertificate」を入力し、 にチェックを入れて、 をクリックします。
にポリシー名 (例:AWSIoTCreateKeysAndCertificate
) を入力して、 をクリックします。
AWS IAM ユーザーを作成する
AWS IAM コンソール にアクセスします。
→ の順にクリックします。
(例:krypton-aws-iot-provisioner
) を入力して、 をクリックします。をクリックし、以下の 2 つのポリシー にチェックを入れ、 をクリックします。
AWS IAM ポリシーを作成する で作成した AWS IAM ポリシー (例:
AWSIoTCreateKeysAndCertificate
)
内容を確認し、
をクリックします。ユーザー画面に戻ります。
作成したユーザー (手順 3 で入力したユーザー名) をクリックし、
をクリックします。アクセスキーを作成する画面が表示されます。
→ の順にクリックします。
をクリックします。
アクセスキーが作成されます。
表示されたアクセスキーとシークレットアクセスキーを保存します。
シークレットアクセスキーは再表示できません
シークレットアクセスキーは、この時点で一度だけ表示されます。安全な場所に保存してください。
ステップ 3: SORACOM Krypton を設定する
IoT SIM が Krypton を使って AWS IoT をプロビジョニングするための設定を行います。
認証情報ストアに AWS 資格情報を登録する
ステップ 1 で作成したルート CA 証明書、中間 CA 証明書、中間 CA 証明書の秘密鍵を SORACOM ユーザーコンソールの認証情報ストアに登録します。認証情報ストアの「認証情報を登録」画面の表示方法については、認証情報を登録する を参照してください。
認証情報は、以下のように登録します。
項目 | 説明 |
---|---|
認証情報を識別するために任意の名前を入力します。例: aws-iot-provisioning | |
「AWS 認証情報」を選択します。 | |
AWS IAM ユーザーを作成する で保存したアクセスキー ID を入力します。 | |
AWS IAM ユーザーを作成する で保存したシークレットアクセスキーを入力します。 |
IoT SIM に対して Krypton を有効化して AWS IoT 認証情報を紐づける
Krypton の設定はグループに対して行います
ここでは、グループの設定を変更する操作のみを説明します。グループの仕組みやグループを作成する操作について詳しくは、グループ設定 を参照してください。
SIM グループ画面で
をクリックします。SIM グループ画面を表示する操作について詳しくは、グループの設定を変更する を参照してください。
スイッチをクリックして「ON」にします。
→ の順にクリックします。
以下の項目を設定します。
項目 説明 AWS IoT のリージョンを入力します。例: ap-northeast-1
SORACOM 認証情報ストアに登録した認証情報を選択します。例: aws-iot-provisioning
ステップ 1: AWS IoT ポリシーを作成する で作成した AWS IoT ポリシーの名前を入力します。例: myThingsPolicy
クライアントが指定していない場合に使用する Thing name を入力します。Thing name には $imsi
という文字列を含めてください。$imsi
はデバイスで利用する IoT SIM の IMSI に置換されます。例:myDevice-$imsi
AWS IoT エンドポイントホスト名を入力します。AWS アカウントごとに異なります。AWS IoT コンソール にアクセスし、 をクリックして、 に表示されているエンドポイントをコピーしてください。例: xxx.iot.ap-northeast-1.amazonaws.com
デバイス証明書に署名するルート CA 証明書を入力できます。空欄の場合は、Amazon Trust Services のルート CA 証明書が利用されます。 → の順にクリックします。
IoT SIM の Krypton が有効化されます。
SORACOM CLI / SORACOM API の場合
SORACOM CLI または SORACOM API を利用しても、SORACOM Krypton を有効化して AWS IoT 認証情報を紐づけられます。
soracom groups put-config
(Group:putConfigurationParameters API
) を使用します。
{namespace}
は、SoracomKrypton
です。
ボディで指定するプロパティについては、以下の key
と value
のペアを配列で指定します。
"SoracomKrypton": {
"enabled": true | false, // 機能自体のオンオフ、デフォルトは false
"AwsIot": {
"region": "ap-northeast-1", // 使用する AWS IoT のリージョンとなります。
"credentialsId": "aws-iot-provisioning", //ソラコムに設定した認証情報ストア名を指定します。
"policyName": "myThingPolicy", //新しく作成された証明書に割り当てるポリシー名を入力します。
"thingNamePattern": "myDevice-$imsi", // クライアントが指定していない場合に使用する Thing name を入力します。`$imsi` と指定するとプレースホルダーとして IMSI に置き換えます。
"host": "xxx.iot.ap-northeast-1.amazonaws.com"
}
}
設定例
[
{
"key": "enabled",
"value": true
},
{
"key": "AwsIot",
"value": {
"region": "ap-northeast-1",
"credentialsId": "aws-iot-provisioning",
"policyName": "myThingPolicy",
"thingNamePattern": "myDevice-$imsi",
"host": "xxx.iot.ap-northeast-1.amazonaws.com"
}
}
]
Krypton を使用して AWS IoT にモノを作成してデバイスを接続する
ここまでで、IoT SIM および Krypton を使用してデバイスをプロビジョニングする準備ができました。次に、デバイスを起動して MQTTS によって、AWS IoT に接続するサンプルプロジェクトを実行してみます。
ここでは、以下のように動作するサンプルプロジェクトを実行します。
- Krypton を使用して、IoT SIM を利用するデバイスを認証し、AWS IoT からデバイス証明書とキーを含む AWS IoT の設定パラメータをダウンロードします (プロビジョニング)。なお、ダウンロードしたファイルは、
awsIotConfig
ディレクトリに保存されます。 - ダウンロードしたファイルを使用して、AWS IoT MQTTS エンドポイントに接続します。
- AWS IoT コンソールで PUBLISH するトピック
topic_1
を SUBSCRIBE し、topic_1
が更新されたときに、その内容を表示します。
サンプルプロジェクトをインストールする
IoT SIM を利用するデバイスに、サンプルプロジェクトをインストールします。
サンプルプロジェクトを実行するためには、以下のソフトウェアをインストールします。
- node.js 8.10 以上
- npm
サンプルプロジェクト(nodejs) をダウンロードして解凍します。
$ wget https://soracom-files.s3-ap-northeast-1.amazonaws.com/kryptonExamples.zip $ unzip kryptonExamples.zip
サンプルプロジェクトをインストールします。
$ cd kryptonExamples $ npm install
認証方法に応じてセットアップする
Krypton の認証方法によってセットアップ手順が異なります。
SORACOM Air のセルラー回線を使用した認証
以下のコマンドを実行します。
$ ln -sf krypton-iot-cellular krypton-iot
IoT SIM で接続できていることを確認します。
ネットワークに接続する機能が IoT SIM だけの場合は、SORACOM プラットフォームに接続できることを PING 応答サービス で確認してください。
ネットワークに接続する機能が IoT SIM 以外にもある場合は、メタデータサービスを使って IoT SIM で接続できていることを確認 できます。
SORACOM Endorse による SIM 認証
SORACOM Endorse による SIM 認証を用いる場合はまず以下の前提条件をご確認ください。
- お使いのデバイスに IoT SIM (plan01s、plan01s - Low Data Volume、planP1、planX3 X3-5MB、plan-K2 K2-300MB) が挿入されていること
- SIM カードリーダーもしくは USB ドングルが必要となります。現在のところ以下のデバイスで使用を確認しています。
- MS2131i-8 (Huawei USB ドングル)
- Gemalto カードリーダー USB-TR HWP119316 (カードリーダー)
問題なければ CLI ツールをダウンロードします。現在 Java 版と Go 言語版の 2 種類の CLI ツールがあります。Java 版の CLI ツールは Java で実装されているためポータビリティがありますが実行には Java のランタイム環境が必要となります。一方で Go 言語版の CLI ツールはビルド済みの実行可能ファイルをお使いの環境にコピーしていただければご利用いただけます。お使いのデバイス、環境に合わせて使い分けてください。
Java 版の CLI ツールの場合は、soracom-krypton-client-for-java より soracom-krypton.jar
を「kryptonExamples」と同じフォルダ内にダウンロードしてください。
その後「kryptonExamples」内に移動し以下のコマンドを実行してください。
$ ln -sf krypton-iot-endorse-java krypton-iot
Go 言語版の CLI ツールの場合は、krypton-client-go よりお使いの環境にあったバイナリファイルを「kryptonExamples」と同じフォルダ内にダウンロードしてください。 その後「kryptonExamples」内に移動し以下のコマンドを実行してください。
$ ln -sf krypton-iot-endorse-go krypton-iot
以上で認証方法に応じたセットアップは完了です。
AWS IoT にモノを作成してデバイスを接続する
トピック
topic_1
の SUBSCRIBE を始めます。$ node iot-bootstrap.js
keyPath
などが表示され、デバイスは Krypton が提供するブートストラップ情報を使って AWS IoT が提供するブローカーに登録および接続されます。登録および接続に成功すると、connect
というメッセージが表示されます。SIM グループの設定を変更したときは awsIotConfig ディレクトリを削除してください
awsIotConfig/config.json
が存在する場合は、awsIotConfig
ディレクトリ以下のファイルは変更されません。その結果、SIM グループの設定を変更しても、その内容がiot-bootstrap.js
の動作に反映されません。変更内容を反映するには、
node iot-bootstrap.js
を実行する前にawsIotConfig
ディレクトリを削除してください。AWS IoT コンソール にアクセスし、 → の順にクリックします。
をクリックします。
にtopic_1
を入力し、 を編集して、 をクリックします。手順 1 で表示された
connect
の次にメッセージペイロードが表示されます。