AWS IoT の証明書を発行しデバイス登録する
当ガイドでは、SORACOM Krypton を設定して AWS IoT で自動的にプロビジョニング(デバイス登録)して、証明書を含む設定を取得します。完了すると IoT SIM および Krypton クライアントを使用したデバイスは自動的に AWS IoT で自身をプロビジョニングし MQTTS を使用して AWS IoT にデータを送信できます。
ステップ 1: AWS IoT ポリシーを作成する
AWS IoT に thing をプロビジョニングするためにはポリシーの定義が必要です。 このセクションでは、SORACOM Krypton でプロビジョニングするデバイスに適用するポリシーを作成する手順を説明します。
AWS IoT Core 管理コンソールにアクセスします。 (画像が英語表記ですが、適宜読み替えてください。)
「安全性」メニューから「ポリシー」を選択します。 「作成」をクリックします。
ポリシーを編集します。 「ステートメントを追加」をクリックすると、より多くのポリシーを追加できます。
「Successfully created」と表示されていることを確認してください。 Krypton の設定で使用するので、ポリシー名を記録してください。
ステップ 2: 証明書を生成する権限を持つ AWS IAM 資格情報を作成する
SORACOM Krypton が thing を作成し、証明書を生成してポリシーを適用するには、適切な権限セットを持つ AWS 資格情報のセットが必要です。 ここでは、AWS IAM ユーザーを作成し、AWS 資格情報を取得します。
AWS IAM コンソールを表示します。
「ユーザー」メニューから「ユーザーを追加」をクリックします。
ユーザー名を入力し、「プログラムによるアクセス」にチェックをつけ「次のステップ:アクセス権限」をクリックします。
「既存のポリシーを直接アタッチ」を選択します。 「AWSIoTThingsRegistration」を検索してチェックします。
「ポリシーの作成」をクリックします。
「IoT」を対象サービスとして選択し [CreateKeysAndCertificate] のチェックボックスを有効にし、 「Review Policy」をクリックします。
名前を入力して「Create policy」をクリックします。
「ユーザーを追加」ウィザードに戻り、最後のステップで作成したポリシーを探します (更新ボタンをクリックする必要があります)。チェックボックスをクリックし、 「次のステップ:確認」をクリックします。
内容を確認し、「ユーザーの作成」をクリックします。
AWS アクセスキー ID とシークレットキーの両方をコピーして、保存します。 (AWS シークレットアクセスキーはこの時点で一度だけ表示されます)
ステップ 3: SORACOM Krypton を設定する
次に、SIM が AWS IoT をプロビジョニングするために IoT SIM グループを設定します。 SORACOM 認証情報ストアにエントリを作成し、資格情報 ID と AWS IoT 関連のパラメータをグループコンフィグレーションで設定します。
SORACOM 認証情報ストアに AWS 資格情報を登録する
SORACOM ユーザーコンソールから、右上のオペレータメニューから「セキュリティ」を選択します。
認証情報ストアから「認証情報を登録」を選択します。
認証情報セットに名前を付け、タイプとして「AWS credentials」を選択します。前のセクションで作成した AWS 認証情報を入力します。
グループコンフィグレーションを作成し、SIM をグループに所属させる
SORACOM ユーザーコンソールから SIM グループを表示します。
「追加」ボタンをクリックしてグループを作成します (または既存のグループを使用する場合はグループを選択します)。
グループをクリックし、グループ設定ビューに移動します。
SIM グループに AWS IoT 情報を設定します。
「ステップ 1」と「ステップ 2」で設定した内容から、次のようにグループを設定します
AWS リージョン: AWS IoT のリージョンを入力します。
認証情報: 当ステップで作成した AWS IoT 用の認証情報を選択します。
Policy name: 新しく作成された証明書に割り当てるポリシー名を入力します。
Thing name pattern: クライアントが指定していない場合に使用する Thing name を入力します。 Thing name には $imsi という文字列を含める必要があります。 $imsi はアクセス元の SIM の IMSI に置換されます。
ホスト名: AWS IoTエンドポイントホスト名(AWSアカウントごとに異なります。)
ルート認証局証明書: ルート認証局証明書を入力します。(入力はオプションです。)
SORACOM ユーザーコンソールの「SIM 管理」メニューに移動します。
対象の SIM を選択し「アクション」メニューから「所属グループ変更」をクリックしてください。
グループを選択し、 「更新」をクリックしてください。
Krypton を使用して Thing を作成し、デバイスを接続する
ここまでで、IoT SIM および Krypton を使用してデバイスをプロビジョニングする設定を行いました。次にデバイスを起動して、MQTTS によって AWS IoT に接続するサンプルスクリプトを実行します。
ここでは、node.js プロジェクトのサンプルを使用します。 当サンプルでは、
- SIM を使用して Krypton のデバイスを認証し、デバイス証明書とキーを含む AWS IoT の設定パラメータをダウンロードして
awsIotConfig
に設定ファイルを含むディレクトリを作成します。 - 設定ファイルを使用して AWS IoT MQTTS エンドポイントに接続します。
設定がプロビジョニングされ、ローカルディレクトリに格納されると、スクリプトは保存された情報を使用して AWS IoT に接続します。
サンプルプロジェクト(nodejs) を同じフォルダにダウンロードして解凍してください。 このサンプルプロジェクトを実行するためには以下のソフトウェアが必要となります。必要に応じてインストールしてください。
- node.js 8.10 以上
- npm
解凍後に作成されたフォルダ「kryptonExamples」内に移動して、以下のコマンドを実行してください。
$ npm install
次に Krypton の認証方法に応じたセットアップを行います。
SORACOM Air のセルラー回線を使用した認証
SORACOM Air のセルラー回線を使用した認証を用いる場合は以下のコマンドを実行してください。
$ ln -sf krypton-iot-cellular krypton-iot
SORACOM Endorse による SIM 認証
SORACOM Endorse による SIM 認証を用いる場合はまず以下の前提条件をご確認ください。
- お使いのデバイスにソラコムのグローバル向け IoT SIM(plan01s, plan01s-ldv)が挿入されていること
- 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
以上で認証方法に応じたセットアップは完了です。
Thing を作成し、デバイスを接続する
SORACOM Air のセルラー回線を使用した認証の場合は、IoT SIM で接続できていることを確認してください。
node iot-bootstrap.js
を実行します。
$ node iot-bootstrap.js
ターミナルで connect
というメッセージが表示されるとデバイスは Krypton が提供するブートストラップ情報を使って AWS IoT に正常に登録および接続しました。 AWS IoT 管理コンソールのトピック topic_1
にメッセージを公開することで、次のように確認できます。