Deguゲートウェイのセットアップ
Deguゲートウェイをセットアップし、これにDeguを接続する手順を示します。
AWSの設定
この手順は、既に AWSのアカウントを作成し、AWSマネジメントコンソールにログインできていること を前提としています。AWSアカウントの作成方法については、 こちら を参照してください。
IAMユーザー作成
AWSマネジメントコンソールへログインし、サービス一覧からIAMを選択してください。その後、ユーザータブを開き、「ユーザーを追加」をクリックします。
ユーザーを追加
下記の通り入力、選択し「次のステップ: アクセス権限」に進みます。
- ユーザー名
- AWSアクセスの種類を両方選択
- コンソールのパスワードは自動生成パスワードを選択
- 「パスワードのリセットが必要」にチェックを入れる

アクセス許可の設定
下記の手順でポリシーをアタッチし、「次のステップ: アクセス権限」に進みます。
- 「既存のポリシーを直接アタッチ」を選択
- ポリシーのフィルタにAWSIoTConfigAccessと入力
- 表示されたAWSIoTConfigAccessにチェック
タグの追加(オプション)
今回は設定不要です。「次のステップ: 確認」に進みます。
確認画面
確認画面が表示されます。設定した通りの内容になっていることを確認し、「ユーザーの作成」をクリックしてください。
IAMユーザー作成完了
成功すると下記のような画面が表示されます。
後ほどDeguゲートウェイの設定で使用するため、ここでは必ずcsvのダウンロードを忘れずに行ってください。
行わなかった場合、再度IAMユーザーを作成する必要があります。

ダウンロードしたファイル(accessKey.csv)の内容は、以下の様なカンマ区切りの文字列になります。
この例の場合、Access key IDの値は AWS123 で、Secret access keyの値は asdfghjkl です。
Access key ID,Secret access key
AWS123,asdfghjkl
Deguゲートウェイの設定
Deguゲートウェイの操作方法や設定ファイルの編集方法については、各製品のマニュアルを参照してください。
rootのパスワードの変更
Deguゲートウェイの設定は、スーパーユーザーで実行します。
初期パスワードのままだとセキュリティリスクが高まるため、必ず初期パスワードを変更してください。
# passwd
Enter new UNIX password: # 新しいパスワードを入力
Retype new UNIX password: # 再入力
DeguゲートウェイをAWS IoTへ登録する
Deguゲートウェイは、AWS IoTへの登録・通信にECDSA署名の証明書を使う必要がある為、AWSへ登録する際に独自のCA証明書を準備する必要があります。
この手順の概要は、AWS IoT 開発者ガイド 『自前の証明書を使用する』 を参照ください。
以下2パターンのどちらかで実施する必要があります。
- 
    CA証明書のみを準備・登録する 
 CA証明書の生成とAWS IoTへの登録を事前に行い、デバイス証明書はDeguゲートウェイが自動生成します。
 DeguゲートウェイにはCA証明書とCA証明書のキーペアを設置する必要があります。
- 
    CA証明書とデバイス証明書を事前に準備する 
 CA証明書の生成とAWS IoTへの登録、及びDeguゲートウェイのデバイス証明書を事前に生成します。
 DeguゲートウェイにはCA証明書、デバイス証明書そしてデバイス証明書のキーペアを設置する必要があります。
ここでは「CA証明書のみを準備・登録する」手順を紹介します。
CA証明書の作成、AWS IoTへの登録、Deguゲートウェイへの設置
暗号化方式がECDSAの証明書を購入する手段もありますが、ここではOpenSSL バージョン1.0.2以上をインストールしてあるLinux PC上で、opensslコマンドを使用し証明書を作成する手順を紹介します。
関連するファイルの名称と意味を以下に示します。
| ファイル名 | ファイルの意味 | 
|---|---|
| ca.pem.key | CA証明書用キーペア | 
| ca.pem.crt | CA証明書 | 
| verification.pem.key | CA証明書プライベートキー検証用キーペア | 
| verification.pem.csr | CA証明書プライベートキー検証用CSR | 
| verification.pem.crt | CA証明書プライベートキー検証用証明書 | 
Linux PCは、Debian系Linuxで動作確認をしています。  
Debian系Linux以外のディストリビューションをご利用の場合、コマンドが異なる可能性があります。
awscliのインストール
aws関連のコマンドを使用する為に、Linux PCにawscliをインストールします。
```
LinuxPC $ sudo apt install awscli
```
CA証明書の作成
この証明書は、同一のAWSアカウントで管理する全てのDeguゲートウェイで使用します。
- 
    CA証明書用キーペアを作成します。 LinuxPC $ openssl ecparam -genkey -name prime256v1 -out ca.pem.key
- 
    CA証明書を作成します。CN(Common Name) ####は任意の値を設定できます。LinuxPC $ openssl req -x509 -new -nodes -key ca.pem.key -sha256 -days 3650 -out ca.pem.crt -subj "/CN=####"CNに Degu Gateway CAと設定する場合は以下の様になります。LinuxPC $ openssl req -x509 -new -nodes -key ca.pem.key -sha256 -days 3650 -out ca.pem.crt -subj "/CN=Degu Gateway CA"
CA証明書プライベートキー検証用証明書の作成
AWS IoTへCA証明書を登録する為にCA証明書プライベートキー検証用証明書を作成します。
- 
    CA証明書プライベートキー検証用キーペアを作成します。 LinuxPC $ openssl ecparam -genkey -name prime256v1 -out verification.pem.key
- 
    Linux PCで、AWSのコンフィグレーションを行っていない場合は実施します。 aws configureコマンドの後に各パラメーターの入力を求められます。 
 パラメーター入力例は、以下の通りです。LinuxPC $ aws configure AWS Access Key ID [None]: AWS123 AWS Secret Access Key [None]: asdfghjkl Default region name [None]: ap-northeast-1 Default output format [None]: json- AWS Access Key IDとAWS Secret Access Keyは、
 IAMユーザー作成時にダウンロードしたcsvファイル(accessKey.csv)に記載されています。 accessKey.csvの内容が、Access key ID,Secret access key AWS123,asdfghjklの場合、Secret access keyは asdfghjkl、Access key IDはAWS123となります。
- Default region nameは、エンドポイントから取得できます。
 エンドポイントの確認方法は、- AWSマネジメントコンソールへログインし、
- サービス一覧からIoT Coreを選択してください。
- 画面左下の「設定」タブを開き、カスタムエンドポイントに表示されている文字列がエンドポイントです。
 表示されているエンドポイントが、 xxxxxxx-xxx.iot.ap-northeast-1.amazonaws.comの場合、
 Default region nameはap-northeast-1になります。
- Default output formatは、jsonを設定してください。
 
- AWS Access Key IDとAWS Secret Access Keyは、
- 
    AWS IoT registration codeを取得します。 LinuxPC $ aws iot get-registration-code { "registrationCode": "##MY_REGISTRATION_CODE##" }aws iot get-registration-codeコマンドの結果が以下の場合、 
 ##MY_REGISTRATION_CODE##は1234567890abcdefです。atmark@armadillo:~$ aws iot get-registration-code { "registrationCode": "1234567890abcdef" }
- 
    CA証明書プライベートキー検証用CSRを作成します。 LinuxPC $ openssl req -new -key verification.pem.key -subj "/CN=##MY_REGISTRATION_CODE##" -out verification.pem.csr##MY_REGISTRATION_CODE##が1234567890abcdefであれば、以下の様に入力します。LinuxPC $ openssl req -new -key verification.pem.key -subj "/CN=1234567890abcdef" -out verification.pem.csr
- 
    CA証明書プライベートキー検証用証明書を作成します。 LinuxPC $ openssl x509 -req -in verification.pem.csr -CA ca.pem.crt -CAkey ca.pem.key -CAcreateserial -out verification.pem.crt -days 500 -sha256
CA証明書をAWS IoTへ登録
- 
    CA証明書をAWS IoTへ登録します。 LinuxPC $ aws iot register-ca-certificate --ca-certificate file://ca.pem.crt --verification-cert file://verification.pem.crt { "certificateId": "##MY_CERT_ID##" "certificateArn": "##MY_CERT_ARN##", }aws iot register-ca-certificateコマンドの結果、以下の様に表示された場合、 
 ##MY_CERT_ID##はabc123def456です。LinuxPC $ aws iot register-ca-certificate --ca-certificate file://ca.pem.crt --verification-cert file://verification.pem.crt { "certificateId": "abc123def456", "certificateArn": "arn:aws:iot:ap-northeast-1:12345678:cacert/abcdefghijklm" }
- 
    CA証明書を有効化し、自動登録を有効化します。 ##MY_CERT_ID##は、AWS IoTへ登録した際”certificateId”に表示された値を設定します。LinuxPC $ aws iot update-ca-certificate --certificate-id ##MY_CERT_ID## --new-status ACTIVE LinuxPC $ aws iot update-ca-certificate --certificate-id ##MY_CERT_ID## --new-auto-registration-status ENABLE##MY_CERT_ID##がabc123def456の場合、以下の様に入力します。LinuxPC $ aws iot update-ca-certificate --certificate-id abc123def456 --new-status ACTIVE LinuxPC $ aws iot update-ca-certificate --certificate-id abc123def456 --new-auto-registration-status ENABLE
CA証明書をDeguゲートウェイへコピー
CA証明書用キーペア、CA証明書をDeguゲートウェイ内の所定の場所へコピーします。
- 
    Linux PCからDeguゲートウェイへコピーします。 LinuxPC $ scp ca.pem.key ユーザーID@IPアドレス:/home/ユーザー名/. LinuxPC $ scp ca.pem.crt ユーザーID@IPアドレス:/home/ユーザー名/.
- 
    Deguゲートウェイ内で、後述するAWS情報設定ファイル(mqtt_info.json)に記載する場所へ移動します。 /etc/coap-mqtt/に設置する場合のコマンドは以下の通りです。 DeguGW # mv /home/ユーザー名/ca.pem.key /etc/coap-mqtt/. DeguGW # mv /home/ユーザー名/ca.pem.crt /etc/coap-mqtt/.
DeguゲートウェイをAWS IoTへ登録
以下に示す『AWS情報設定ファイルの編集』実施後、Deguゲートウェイを再起動すると、
自動的にAWS IoTへDeguゲートウェイが登録されます。
AWS情報設定ファイルの編集
- 設定ファイル mqttinfo.jsonをテキストエディタで開きます。
DeguGW # vi /etc/coap-mqtt/mqttinfo.json
- 
    mqttinfo.json <デフォルト>デフォルト> { "key" : "/etc/coap-mqtt/private.pem.key", "cert" : "/etc/coap-mqtt/certificate.pem.crt", "cafile" : "/etc/coap-mqtt/RootCA.crt", "aws_endpoint" : "", "secretaccesskey" : "", "accesskeyid" : "", "region" : "", "gw": { "preset": { "ca": { "=comment=" : [ "you must set ca certificate file and put it.", "if you do not create device certificate,", "you must set key file path and put it."], "key" : "", "cert" : "/etc/coap-mqtt/..." }, "device": { "=comment=" : [ "if you already create device certificate,", "set certificate and key pair on this device and write file path."], "key" : "", "cert" : "" } }, "=comment=" : "===== do not change below properties. =====", "mqtt": { "cert" : "/etc/coap-mqtt/deviceAndCa.crt.pem", "key" : "/etc/coap-mqtt/device.ref.key.pem", "ca" : "/etc/coap-mqtt/AmazonRootCA3.pem" } } }6項目を編集します。 - aws_endpoint
- secretaccesskey
- accesskeyid
- region
- gw: preset: ca: cert
- gw: preset: ca: key
 
aws_endpoint
IoT Coreのエンドポイントを指定します。
AWSマネジメントコンソールへログインし、サービス一覧からIoT Coreを選択してください。
「設定」タブを開き、カスタムエンドポイントに表示されているエンドポイントをコピー、下記の通り修正します。
- エンドポイントが xxxxx.iot.ap-northeast-1.amazonaws.comの場合"aws_endpoint" : "xxxxx.iot.ap-northeast-1.amazonaws.com",
secretaccesskey
シークレットアクセスキーを指定します。
IAMユーザー作成時にダウンロードしたcsvファイル(accessKey.csv)に記載されています。
- accessKey.csvの内容が、
    Access key ID,Secret access key AWS123,asdfghjklの場合、Secret access keyは asdfghjklとなりますので、以下のように設定します。"secretaccesskey" : "asdfghjkl",
accesskeyid
アクセスキーIDを指定します。
IAMユーザー作成時にダウンロードしたcsvファイル(accessKey.csv)に記載されています。
- accessKey.csvの内容が、
    Access key ID,Secret access key AWS123,asdfghjklの場合、Access key IDは AWS123となりますので、以下のように設定します。"accesskeyid" : "AWS123",
region
リージョンを指定します。
エンドポイントから取得できます。
- エンドポイントが xxxxx.iot.ap-northeast-1.amazonaws.com の場合
    "region" : "ap-northeast-1"
gw: preset: ca: key
CA証明書キーペアの設置先を指定します。
- 設置したパスが/etc/coap-mqtt/ca.pem.keyの場合"preset": { "ca": { ... "key" : "/etc/coap-mqtt/ca.pem.key",
gw: preset: ca: cert
CA証明書の設置先を指定します。
- 設置したパスが/etc/coap-mqtt/ca.pem.crtの場合"preset": { "ca": { ... "cert" : "/etc/coap-mqtt/ca.pem.crt",
mqttinfo.json <編集後>編集後>
{
  "key" : "/etc/coap-mqtt/private.pem.key",
  "cert" : "/etc/coap-mqtt/certificate.pem.crt",
  "cafile" : "/etc/coap-mqtt/RootCA.crt",
  "aws_endpoint" : "xxxxx.iot.ap-northeast-1.amazonaws.com",
  "secretaccesskey" : "asdfghjkl",
  "accesskeyid" : "AWS123",
  "region" : "ap-northeast-1",
  "gw": {
    "preset": {
      "ca": {
        "=comment=" : [
          "you must set ca certificate file and put it.",
          "if you do not create device certificate,",
          "you must set key file path and put it."],
        "key"  : "/etc/coap-mqtt/ca.pem.key",
        "cert" : "/etc/coap-mqtt/ca.pem.crt"
      },
      "device": {
        "=comment=" : [
          "if you already create device certificate,",
          "set certificate and key pair on this device and write file path."],
        "key"  : "",
        "cert" : ""
      }
    },
    "=comment=" : "===== do not change below properties. =====",
    "mqtt": {
      "cert" : "/etc/coap-mqtt/deviceAndCa.crt.pem",
      "key"  : "/etc/coap-mqtt/device.ref.key.pem",
      "ca"   : "/etc/coap-mqtt/AmazonRootCA3.pem"
    }
  }
}
アクセスポイント情報を変更する
Deguゲートウェイは各Deguを接続するために無線LANアクセスポイントとして動作します。デフォルトでは、次のSSIDとパスフレーズが設定されています。
| SSID | パスフレーズ | 
|---|---|
| MyAccessPoint | 12345678 | 
デフォルトの設定のままで運用すると、パスフレーズを把握している誰もがアクセスできてしまいます。必ずアクセスポイント情報を任意のものに再設定してください。
アクセスポイント設定ファイルの編集
- 
    設定ファイル create_ap.confをテキストエディターで開いてください。DeguGW # vi /etc/create_ap.conf
- 
    create_ap.confを編集してください。- /etc/create_ap.conf
 CHANNEL=default GATEWAY=10.0.0.1 WPA_VERSION=2 ETC_HOSTS=0 DHCP_DNS=gateway NO_DNS=0 NO_DNSMASQ=0 HIDDEN=0 MAC_FILTER=0 MAC_FILTER_ACCEPT=/etc/hostapd/hostapd.accept ISOLATE_CLIENTS=0 SHARE_METHOD=nat IEEE80211N=0 IEEE80211AC=0 HT_CAPAB=[HT40+] VHT_CAPAB= DRIVER=nl80211 NO_VIRT=0 COUNTRY= FREQ_BAND=2.4 NEW_MACADDR= DAEMONIZE=0 NO_HAVEGED=0 WIFI_IFACE=wlan0 INTERNET_IFACE=eth0 SSID=MyAccessPoint PASSPHRASE=12345678 USE_PSK=02点の項目を編集します。 - SSID
- PASSPHRASE
 SSIDを “DeguGW”、パスフレーズを “degu-pass” とする場合、次のように変更します。 SSID=DeguGW PASSPHRASE=degu-pass※SSIDは1〜32文字、パスフレーズは8〜63文字の間で指定して下さい。 
- 
    create_ap.confの編集後、Deguゲートウェイを再起動してください。DeguGW # reboot
- 
    再起動後、設定したアクセスポイントにスマートフォンやPCで接続できることを確認します。 
DeguをAWS IoT Coreに登録する
Deguゲートウェイに無線LANで接続したスマートフォンやPCを使って、Deguの登録を行うことができます。
- 
    アクセスポイントに接続後、Webブラウザで http://10.0.0.1/degu/にアクセスすると、次のようなページが表示されます。 アクセスできない場合は次の項目を確認してください。 - アクセスポイントが正しく設定されているか
- 異なるアクセスポイントに接続していないか
 
- 
    DeguのMACアドレスを登録します。 MACアドレスを登録するには2つの方法があります。 - QRコードを読み取る
- MACアドレスを直接入力する
 
QRコードを読み取る
- 
    QRコードを読み取るボタンをタップすると、カメラが起動します。もし、カメラへのアクセスが許可されていない場合はアクセス許可の設定を行ってください。 PCで接続した場合は、ファイル選択画面が表示されます。このときは、QRコードを撮影した画像をアップロードしてください。
- 
    Degu本体ケース裏面のQRコードをカメラで撮影します。 QRコードが小さいと読み込みを行うことができないため、拡大して撮影してください。読み取れない場合は下記のエラーが表示されます。  
- 
    正しく読み込めた場合、 読み取ったQRコードにMACアドレスが表示されます。表示されている内容がQRコードの左側に記載されている12桁の英数字と一致しているか確認し、登録をタップしてください。なお、QRコードの読み込みが失敗した状態(読み取ったQRコードが空欄)で登録をタップすると、No mac addressと表示されます。このときは、再度QRコードの読み込みを行ってください。 
MACアドレスを直接入力する
- 
    読み取ったQRコードの下の欄は、直接MACアドレスを入力することができます。この時、アルファベットは大文字で入力してください。空欄の状態で登録をタップするとNo mac addressと表示されます。このときは、再度入力を行ってください。なお、入力したMACアドレスの正当性確認は行っておりません。誤った内容で登録をタップすると入力した内容のままAWS IoTに登録されてしまい、AWS IoT上での削除操作等が必要になるためご注意ください。
- 
    登録をタップ後、読み取ったQRコードの下の欄が空欄になったら登録完了です。AWS IoT Coreの「モノ」に、現在登録したDeguのMACアドレスがデバイスとして登録されていることを確認してください。 次の場合は、AWS IoTに登録されたデバイスを削除し、再度デバイスの登録作業を行ってください。 - アルファベットの大文字・小文字両方のデバイス名が登録されている
- MACアドレスと異なる名前で登録されている
 デバイスを削除するには、登録されているモノのページで、 アクション->削除をクリックしてください。 
DeguをDeguゲートウェイへ接続する
- 
    DeguをAWS IoT Coreに登録してから、5分以内にDeguの電源を入れてください。既にDeguの電源が入っていた場合は、再度電源を入れ直してください。 
- 
    数十秒後、DeguとDeguゲートウェイとの接続が確立します。接続が確立すると、DeguのLED1が点灯します。 
- 
    Deguゲートウェイが正しくインターネットに接続されている場合、Deguが送信したJSONメッセージが、AWS IoT Core上のモノのシャドウに反映されます。  
