FleetProvisioning とは
AWSIOT事始め編のデバイス認証部分の応用技術です。
FleetProvisioningを使用すると、デバイスをAWSIoTに事前に登録を行わなくても自動的にデバイス証明書とプライベートキーの発行とthingの登録が行われ、デバイスをAWSIoTと接続できる状態にプロビジョニングが行われます。
詳細な設定方法に関しては以下の記事がとても分かりやすかったです。
https://qiita.com/takmot/items/eda7c2f519581b40ec3f
モノに設定する名前に関して
self.unique_id = socket.gethostname()
の様にunique_idにデバイスのhostname等を設定すれば登録されるthing_nameを自由に設定できます。
(MQTTのclientIDに関してはグループ等に関係せずAWSIoT内での重複が許されないため、clientIDも同様の値で設定する場合には値が重複しないよう設定を行う必要がある。)
FleetProvisioningの利点
1台から10台くらいまでのデバイスをAWSIoTに接続しようと考えると、通常の認証方法だと以前行ったAWSIoT事始め編のデバイス登録手順をデバイスの台数分繰り返し行うことになります。
管理するデバイスの数が少なければ手作業で登録を繰り返してもいいが、IoTのデバイスを扱う場合、100台以上のデバイスを纏めて管理導入することも可能性としてあると思います。
その際に今回のFleetProvisioningを利用することで一回作ったソースコードをデバイスに展開しておくだけで、デバイスがネットワークに接続された際に自動的にAWSIoTへのデバイス登録を行うことができるようになります。
また登録されたデバイス事に証明書を発行しているので、デバイスの盗難や紛失などが確認された際にそのデバイスの証明書のみを無効化することも可能です。
FleetProvisioning時の認証情報
FleetProvisioningを行う際には以下の証明書が必要になる。
- AWS IoT のルート CA
- パブリックキー
認証後にAWSIoTにアクセスする際の認証情報
プロビジョニングが終了して、AWSIoTと接続を行う際には、
- AWS IoT のルート CA(共通)
- FleetProvisioningで発行されたデバイス証明書
- パブリックキー(共通)
- FleetProvisioningで発行されたプライベートキー
の4つが必要。
FleetProvisioningの注意点
一度プロビジョニングを行った後は発行された証明書を使ってAWSIoTに接続を行います。
FleetProvisioning自体は認証を行うわけではないので、実行する度に証明書が発行されます。
以前触ったことのあったAzureのIoTにも同じような機能があって(AzureDPS),Azureの方はトークンの発行からAzureIoTへの認証までを自動で行ってくれます。
自分はAzureの機能とAWSの機能だいたい一緒だろうと勘違いしてFleetProvisioningを使用したら
デバイス1台に対して大量の証明書を発行してしまいました。
AWSのFleetProvisioningはあくまで、IoTCoreへ接続するための準備を行うためのツールになるよう設計する必要があります。(一回目の接続のみFleetprovisioningを行って、以降は生成された証明書を使ってAWSIoTへ接続を行う等)
今回の機能紹介で大体の機能を紹介できたと思うので、
次回はAWSIoTのベストプラクティス等についてご紹介したいと思います。
AWSIoTCore検証メモ⑥:デバイス管理の方法、ベストプラクティス・面倒なところの整理