Soracom

Users

ドキュメント

AWS IoT の証明書を発行しデバイス登録する

AWS IoT でデバイス (モノ) を利用するには、デバイスごとにプロビジョニングが必要です。

SORACOM Krypton (以下、Krypton) を利用すると、デバイスを自動的にプロビジョニングし、デバイス証明書を発行して、AWS IoT に登録できます。あらかじめデバイス証明書をデバイスごとに登録する必要はありません。デバイスを起動する際に初期設定として、プロビジョニングを実行できます。

あらかじめ以下の手順で設定を行います。

  1. AWS IoT ポリシーを作成する
  2. AWS IAM ユーザーを作成する
  3. Krypton を設定する

この手順が完了すると、IoT SIM および Krypton クライアントをインストールしたデバイスは、自動的に AWS IoT で自身をプロビジョニングし、MQTTS でデータを送信できるようになります。

ステップ 1: AWS IoT ポリシーを作成する

AWS IoT でデバイス (モノ) をプロビジョニングするには、デバイスに適用するポリシーを作成します。

  1. AWS IoT コンソール にアクセスします。

    Krypton-awsiot Krypton-awsiot

  2. [安全性][ポリシー][ポリシーを作成] の順にクックします。

    Krypton-awsiot Krypton-awsiot

  3. ポリシーを編集します。

    項目説明
    [Name]AWS IoT ポリシーの名前を入力します。例: myThingsPolicy
    [ポリシーアクション]このポリシーで許可するアクションを指定します。
    [ポリシーリソース]このポリシーで許可するリソースを指定します。

    Krypton-awsiot Krypton-awsiot

    [新しいステートメントを追加] をクリックすると、ポリシーを追加できます。

    ポリシーリソースの設定について

    [ポリシーアクション][ポリシーリソース] は、最初は * (すべて) を指定してください。後続のサンプルプログラムでは以下のトピックに対するアクションを実行します。

    • topic_1 への SUBSCRIBE
    • topic_2 への PUBLISH

    Krypton の動作が確認できたら、徐々に必要なリソースのみに変更することを推奨します。詳しくは、AWS IoT Core アクションリソース を参照してください。

  4. [作成] をクリックします。

ステップ 2: 証明書を生成する権限を持つ AWS IAM 資格情報を作成する

Krypton が、AWS IoT にモノを作成し、デバイス証明書を生成して、モノにポリシーを適用するには、適切な権限セットを持つ AWS IAM 資格情報のセットが必要です。ここでは、AWS IAM ユーザーを作成し、AWS IAM 資格情報を取得します。

AWS IAM ポリシーを作成する

  1. AWS IAM コンソール にアクセスします。

    Krypton-awsiot Krypton-awsiot

  2. [ポリシー][ポリシーを作成] の順にクリックします。

  3. [サービス][サービスの選択] をクリックし、[IoT] をクリックして、[CreateKeysAndCertificate] にチェックを入れて、[次のステップ: タグ] をクリックします。

    Krypton-awsiot Krypton-awsiot

  4. [次のステップ: 確認] をクリックします。

  5. [名前] にポリシー名 (例: AWSIoTCreateKeysAndCertificate) を入力して、[ポリシーの作成] をクリックします。

    Krypton-awsiot Krypton-awsiot

AWS IAM ユーザーを作成する

  1. AWS IAM コンソール にアクセスします。

  2. [ユーザー][ユーザーを追加] の順にクリックします。

    Krypton-awsiot Krypton-awsiot

  3. [ユーザー名] (例: krypton-aws-iot-provisioner) を入力し、[アクセスキー - プログラムによるアクセス] にチェックを入れて、[次のステップ: アクセス権限] をクリックします。

    Krypton-awsiot Krypton-awsiot

  4. [既存のポリシーを直接アタッチ] をクリックし、以下の 2 つのポリシーにチェックを入れます。

    Krypton-awsiot Krypton-awsiot

    Krypton-awsiot Krypton-awsiot

  5. [次のステップ: タグ][次のステップ: 確認] の順にクリックします。

  6. 内容を確認し、[ユーザーの作成] をクリックします。

    Krypton-awsiot Krypton-awsiot

  7. [表示] をクリックし、[アクセスキー ID][シークレットアクセスキー] を保存します。

    Krypton-awsiot Krypton-awsiot

    シークレットアクセスキーは再表示できません

    シークレットアクセスキーは、この時点で一度だけ表示されます。安全な場所に保存してください。

ステップ 3: SORACOM Krypton を設定する

IoT SIM が Krypton を使って AWS IoT をプロビジョニングするための設定を行います。

認証情報ストアに AWS 資格情報を登録する

ステップ 1 で作成したルート CA 証明書、中間 CA 証明書、中間 CA 証明書の秘密鍵を SORACOM ユーザーコンソールの認証情報ストアに登録します。認証情報ストアの「認証情報を登録」画面の表示方法については、認証情報を登録する を参照してください。

認証情報は、以下のように登録します。

項目説明
[認証情報 ID]認証情報を識別するために任意の名前を入力します。例: aws-iot-provisioning
[種別]「AWS 認証情報」を選択します。
[AWS ACCESS KEY ID]AWS IAM ユーザーを作成する で保存したアクセスキー ID を入力します。
[AWS SECRET ACCESS KEY]AWS IAM ユーザーを作成する で保存したシークレットアクセスキーを入力します。

Krypton-awsiot Krypton-awsiot

IoT SIM に対して Krypton を有効化して AWS IoT 認証情報を紐づける

Krypton の設定はグループに対して行います

ここでは、グループの設定を変更する操作のみを説明します。グループの仕組みやグループを作成する操作について詳しくは、グループ設定 を参照してください。

  1. SIM グループ画面で [SORACOM Krypton 設定] をクリックします。

    SIM グループ画面を表示する操作について詳しくは、グループの設定を変更する を参照してください。

  2. スイッチをクリックして「ON」にします。

  3. [+ Add Configuration][AWS IoT] の順にクリックします。

  4. 各項目を設定します。

    項目説明
    [AWS リージョン]AWS IoT のリージョンを入力します。例: ap-northeast-1
    [認証情報]SORACOM 認証情報ストアに登録した認証情報を選択します。例: aws-iot-provisioning
    [POLICY NAME]ステップ 1: AWS IoT ポリシーを作成する で作成した AWS IoT ポリシーの名前を入力します。例: myThingsPolicy
    [THING NAME PATTERN]クライアントが指定していない場合に使用する 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 証明書が利用されます。
  5. [保存][保存] の順にクリックします。

  6. IoT SIM が所属するグループを切り替えます。

    IoT SIM の Krypton が有効化されます。

SORACOM CLI / SORACOM API の場合

SORACOM CLI または SORACOM API を利用しても、SORACOM Krypton を有効化して AWS IoT 認証情報を紐づけられます。

soracom groups put-config (Group:putConfigurationParameters API) を使用します。

{namespace} は、SoracomKrypton です。

ボディで指定するプロパティについては、以下の keyvalue のペアを配列で指定します。

"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 に接続するサンプルプロジェクトを実行してみます。

ここでは、以下のように動作するサンプルプロジェクトを実行します。

  1. Krypton を使用して、IoT SIM を利用するデバイスを認証し、AWS IoT からデバイス証明書とキーを含む AWS IoT の設定パラメータをダウンロードします (プロビジョニング)。なお、ダウンロードしたファイルは、awsIotConfig ディレクトリに保存されます。
  2. ダウンロードしたファイルを使用して、AWS IoT MQTTS エンドポイントに接続します。
  3. AWS IoT コンソールで PUBLISH するトピック topic_1 を SUBSCRIBE し、topic_1 が更新されたときに、その内容を表示します。

サンプルプロジェクトをインストールする

IoT SIM を利用するデバイスに、サンプルプロジェクトをインストールします。

  1. サンプルプロジェクトを実行するためには、以下のソフトウェアをインストールします。

    • node.js 8.10 以上
    • npm
  2. サンプルプロジェクト(nodejs) をダウンロードして解凍します。

    $ wget https://s3-ap-northeast-1.amazonaws.com/soracom-files/kryptonExamples.zip
    $ unzip kryptonExamples.zip
    
  3. サンプルプロジェクトをインストールします。

    $ cd kryptonExamples
    $ npm install
    

認証方法に応じてセットアップする

Krypton の認証方法によってセットアップ手順が異なります。

SORACOM Air のセルラー回線を使用した認証

  1. 以下のコマンドを実行します。

    $ ln -sf krypton-iot-cellular krypton-iot
    
  2. 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 にモノを作成してデバイスを接続する

  1. トピック 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 ディレクトリを削除してください。

  2. AWS IoT コンソール にアクセスし、[テスト][MQTT テストクライアント] の順にクリックします。

  3. [トピックに公開する] をクリックします。

  4. [トピック名]topic_1 を入力し、[メッセージペイロード] を編集して、[発行] をクリックします。

    手順 1 で表示された connect の次にメッセージペイロードが表示されます。

    Krypton-awsiot Krypton-awsiot