3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【備忘録】Greengrass(V1)のMQTTサーバ証明書について

Last updated at Posted at 2021-03-29

1 概要

Greengrass(V1)では、GreengrassデバイスがGreengrassコアデバイス(以下、コアデバイス)接続する際にグループ証明書を使っています。
Greengrassデバイスはデバイス証明書を用いてコアデバイスのMQTTサーバ証明書を検証します。
参考:AWS IoT Greengrass セキュリティの概要

コアデバイスのMQTTサーバ証明書はデフォルトの有効期限が7日間となっています。
有効期限が切れる前のタイミングでコアデバイスがIoT Greengrassサービス(クラウド側)に接続し、新たなMQTTサーバ証明書を取得します。
当然、このタイミングでクラウド側と接続できる必要があります。

MQTTサーバ証明書の有効期限はデフォルトの7日から30日まで変更できます。
ベストプラクティスは短い期間でのローテーションです。
※ただし、申請すれば31日以上にもできるとのこと
参考:AWS IoT Greengrass のデバイス認証と認可 - ローカル MQTT サーバーの証明書ローテーション

MQTTサーバ証明書の更新はマネジメントコンソールから手動でも可能です。
今回は触ってみた際の結果を残しておきます。

2 更新してみる

MQTTサーバ証明書を更新すると、MQTTサーバがいったん再起動するため、接続がいったん切断されます。
また、Greengrassデバイスはグループ証明書の再取得が必要になります。
今回は、AWS IoT Device SDK for PythonのSample実行時にどのような挙動をしたか備忘録として残します。
※サンプルコードの中身をまだ十分咀嚼できていないので、目に見える動きと試した手順を残すに留める

1.IoT Coreのマネジメントコンソールで左のメニューから Greengrass > クラシック(V1) > グループ の順にクリック
2.対象のグループをクリックし、設定 をクリック
image.png
3.「CAのローテーション」をクリックし、モーダルウィンドウで「今すぐローテーションと切断」をクリック
image.png
4.画面上部に「グループのCAが正常にローテーションされました」と表示されたら完了
image.png

3 結果

どのファイルが更新されているのか、ローテーション時に動いていたコアデバイス-Greengrassデバイス間のメッセージのやり取りがどうなっていたかの備忘録です。

更新されたファイル

ローテーションの実行は /greengrass/ggc/var/log/system/GGDeviceCertificateManager.log に記載がありました。

GGDeviceCertificateManager.log
[2021-03-29T21:17:54.888+09:00][INFO]-Message from cloud        {"topic": "$aws/things/Greengrass_Test_Core_20210308-gcm/shadow/update/delta"}
[2021-03-29T21:17:54.888+09:00][INFO]-New CertificateManagerService version: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
[2021-03-29T21:17:54.888+09:00][INFO]-Starting the workflow of Certificate generation

ファイルとしては、以下が更新されていました。

  • /greengrass/ggc/var/state/server/server.crt
  • /greengrass/ggc/var/state/server/server.key

グループ内でのMQTTのやり取り

今回は、AWS IoT SDK for Pythonの samples/greengrass にある basicDiscovery.py を実行しています。
GitHub:AWS IoT SDK for Python
※AWS IoT SDK for Pythonのインストールと basicDiscovery.pyの実行までの手順は以下を参照のこと
 モジュール 4: AWS IoT Greengrass グループでのデバイスの操作

MQTTサーバ証明書をローテーションする前のタイミングから、2台のGreengrassデバイス(ラズパイとMac)でそれぞれ以下を実施していました。

  • ラズパイ:MQTTメッセージを送り続ける
  • Mac:MQTTメッセージをサブスクライブし続ける

結果として、ローテーションのタイミングでいずれもいったん処理が止まりました。
ラズパイは少しの停止後、再度メッセージを送り続けていましたが、Mac側はサブスクライブは再開しませんでした。

なお、グループ証明書は basicDiscovery.py を実行したディレクトリ(カレントディレクトリで実行した)に groupCA/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx_CA_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.crt として取得されました。

4 おわりに

MQTTサーバ証明書のローテーション後、再接続、グループCAの再取得が必要になります。
サンプルコードでどのようにしているか整理し、次は自身でプログラムを書いてみようと思います。

5 参考文献(文中で登場していないもの)

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?