AzureでかんたんにIoT #02 - IoTハブにデバイスを追加する

## はじめに
本記事では、AzureのIoTハブにデバイスを追加する方法について解説します。

IoTハブのサービス作成の方法については、前記事の [AzureでかんたんにIoT #01 - IoTハブを作成する](https://qiita.com/taiponrock/items/e3c103a3514342c429ab) で解説していますのでそちらをご覧ください。

## CA証明書を作成する
AzureのIoTハブを使ってデバイスと接続するために、デバイスでクライアント証明書が必要になります。
ここでは [チュートリアル: Microsoft 提供のスクリプトを使用してテスト証明書を作成する](https://docs.microsoft.com/ja-jp/azure/iot-hub/tutorial-x509-scripts) の **Bashスクリプト** を参考にしました。

### GitHubリポジトリからソースを取得
[こちらのGithubリポジトリ](https://github.com/Azure/azure-iot-sdk-c) からソースを取得してください。

![Screen Shot 2022-11-16 at 13.37.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81226/b704f060-8ee2-98e4-5d3a-b1dbdccecfc0.png)

### シェルを実行し証明書を生成
ソース内にある `tools/CACertificates/` に移動し `./certGen.sh` を使って証明書を生成します。
`./certGen.sh create_root_and_intermediate` を実行してください。

![Screen Shot 2022-11-16 at 13.43.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81226/7e6d03fa-46fb-7e7e-0298-aff16ac37300.png)
〜中略〜
![Screen Shot 2022-11-16 at 13.43.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81226/1c9b0db2-1ad1-054d-52c0-86fd50483b71.png)

### 証明書の追加
Azure IoTハブの画面から **セキュリティ設定** 配下にある ** 証明書 ** を選択し **＋追加** ボタンをクリックします。
**証明書の追加** 画面が表示されたら、先程生成された証明書から `./tools/CACertificates/certs/azure-iot-test-only.root.ca.cert.pem` を選択します。
**アップロード時に証明書の状態を確認済みに設定する** にはチェックを入れず、任意の名前を付けて保存します。
※ [チュートリアル：CA証明書の所有を証明する](https://learn.microsoft.com/ja-jp/azure/iot-hub/tutorial-x509-prove-possession) では自動検証と手動検証の両方が説明されていますが、ここでは手動検証にしています。
![Screen Shot 2022-11-16 at 14.23.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81226/cadf31fe-c213-18fe-d9e8-b71b2c518035.png)
![Screen Shot 2022-11-16 at 13.59.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81226/3e731e5d-1623-4ffb-57f4-179f193d219f.png)

### 証明書の検証
追加した証明書を選択し、詳細パネルを開き、下へスクロールして **確認コードを生成する** ボタンをクリックして確認コードを表示させます。
![Screen Shot 2022-11-16 at 14.26.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81226/beff0706-9ad8-c583-3878-d4e55834da45.png)

次の通りシェルを実行して検証を行います。
`./certGen.sh create_verification_certificate <Azureで生成した確認コード>`

生成されたverification-code.cert.pemをAzureのIoTハブから、先程追加した証明書の **検証証明書ファイル** としてアップロードします。

![Screen Shot 2022-11-16 at 14.32.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81226/10671c3f-a3e7-b318-710c-98b70ef95b61.png)
〜中略〜
![Screen Shot 2022-11-16 at 14.33.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81226/3c15cb81-5569-9ead-3d40-c8453115f475.png)

![Screen Shot 2022-11-16 at 14.36.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81226/1a39e2b6-ef9b-e947-b94f-cbc135fc0c3c.png)

## デバイスを作成する
次に、IoTハブ用のデバイスを作成していきます。これは、IoTハブで物理デバイスと接続した際にデバイスを認識させるための準備です。

### デバイス証明書の作成
次の通りシェルを実行します。デバイス名は任意の名称でOKです。ここでは **mydevice** としています。
`./certGen.sh create_device_certificate mydevice`

このシェルの実行で `cert/new-device.cert.pem` と `cert/new-device.cert.pfx` が生成されます。

![Screen Shot 2022-11-16 at 14.46.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81226/7c2a0c51-707f-d5b0-7bdb-9d5bcdce16b8.png)
〜中略〜
![Screen Shot 2022-11-16 at 14.46.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81226/473b26e9-a37a-065b-3699-0efb6cdaa049.png)

### デバイスの追加
Azure IoTハブから **デバイス** メニューを選択し **デバイスの追加** をクリックしてデバイスの追加画面を表示させます。
![Screen Shot 2022-11-16 at 14.51.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81226/a5e4b4db-e0d8-1614-a992-0f0fb8e3e3e2.png)

デバイスIDには、先ほどデバイス証明書で付与したデバイス名を入力します。ここでは **mydevice** になります。 **X.509 CA 署名済み** を選択し **このデバイスをIoTハブに接続する** を有効化にし(デフォルトで有効化です) **保存** ボタンをクリックします。
![Screen Shot 2022-11-16 at 14.53.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81226/0004e95e-0b83-daee-2a1b-6dc5b643879d.png)

デバイスが追加されていれば成功です。
![Screen Shot 2022-11-16 at 14.58.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81226/c12b10d8-cca8-8980-54a9-2f6a804f6806.png)

## デバイス追加完了
これで、Azure IoTハブへのデバイス追加は完了しました。
実際に接続してテストする手順については、また次の記事で解説しますのでそちらをご覧ください。

## 参考サイト
https://learn.microsoft.com/ja-jp/azure/iot-hub/tutorial-x509-scripts

https://learn.microsoft.com/ja-jp/azure/iot-hub/tutorial-x509-prove-possession