Amazon Web Services ブログ
AWS IoT Greengrass コアデバイス証明書の管理方法
はじめに
AWS IoT Greengrass の Greengrass Software Catalog に新たに追加されたコンポーネント、Certificate Rotator を紹介します。
AWS IoT Greengrass は、エッジデバイスと AWS クラウド間の距離を縮め、ローカルでのデータ処理や低レイテンシーが必要なアプリケーションをサポートします。一般消費者向けや企業、産業の各領域におけるエッジデバイスの増加によって、IoT エッジデバイスやクラウドとの通信がもたらすセキュリティリスクを、どのように対処するかといった課題が出て来ます。数十年前に構築されたようなサイバーセキュリティを考慮していない産業用制御システム (ICS) が稼働する運用技術 (OT) 環境では、こういったセキュリティ性能の低いシステムを、エッジデバイスが保護しつつゲートウェイ役を担う事がよくあります。
AWS は IoT ソリューションのセキュリティとして、多層的なセキュリティアプローチを推奨しています。IoT エッジデバイスからクラウドへのデータ転送暗号化と保護をするために、AWS IoT Core は X.509 証明書を使用した TLS (Transport Layer Security) ベースの相互認証をサポートしています。お客様は IoT エッジデバイス毎に、個別の秘密鍵と X.509 証明書を含む固有 ID をプロビジョニングする必要があります。証明書の有効期限は長いですが、デバイスの稼働中に証明書を更新する必要が出てくる場合があります。デバイス証明書と秘密鍵の定期的な更新を考慮した、デバイス証明書のライフサイクル管理は AWS Well-Architected Framework の IoT Lens におけるセキュリティベストプラクティスの 1 つです。
この記事では、Certificate Rotator の使用方法と、AWS サービスを使って AWS IoT Greengrass コアデバイス証明書と秘密鍵を更新する方法について学びます。この記事のソリューションはそのままデプロイ可能ですが、オープンソースのリファレンス実装として公開しているので、ニーズに合わせてカスタマイズすることができます。
背景
AWS IoT Greengrass は IoT エッジランタイムとクラウドサービスで構成され、お客様のインテリジェントな IoT デバイスソフトウェアの構築やデプロイそして管理をサポートします。AWS IoT Greengrass には共通機能としてビルド済みコンポーネントがあり、ローカル / クラウドの MQTT メッセージや機械学習 (ML) の推論を含むローカルエッジ処理のサポート、ログと監視、AWS サービスとの連携、そしてローカルデータの集約・フィルタリング・クラウドへ転送といった機能が提供されています。開発が完了すれば、数百万台のデバイスにデバイスソフトウェアをシームレスにデプロイし、リモートで管理することができます。
AWS IoT Greengrass コアデバイスは、AWS IoT Core との認証と接続にデバイス証明書と秘密鍵を使用します。AWS IoT ポリシーによって、AWS IoT Core と AWS IoT Greengrass データプレーンへのアクセスが許可されます。コアデバイスが許可されると、AWS IoT Greengrass コンポーネントは プロセス間通信を使って AWS IoT Core と MQTT メッセージを送受信でき、その際に追加または別の認証認可は必要ありません。AWS IoT Greengrass は、AWS IoT サービス以外の AWS サービスへのアクセス許可を得るために、X.509 デバイス証明書を使ってトークン交換サービス (Token Exchange Service) と AWS IoT Core 認証情報プロバイダー (AWS IoT Core credential provider) から期限付き AWS 認証情報を取得します。この期限付き AWS 認証情報によって、AWS IoT Greengrass コアデバイスロール (トークン交換ロールとも言います) で定義されたアクションを実行できます。
したがって X.509 デバイス証明書と秘密鍵は、AWS IoT Greengrass コアデバイスの認証認可基盤になっています。運用上の必要性に基づいて、デバイス証明書と秘密鍵を更新する事がお客様の責任となります。その実装方法をご理解頂くために、AWS はデバイス証明書更新についての記事、IoT Jumpstart Workshop、Connected Device Framework (CDF) Certificate Vendor モジュールを公開しています。これらは更新手順や実装の参考となるものです。
デバイスソフトウェアはハードウェアへの依存が特に高いため、多くの AWS IoT デバイスタイプに対応した、デバイス証明書更新のリファレンス実装提供は難易度が高いです。特に証明書と秘密鍵のストレージと API は、ハードウェアとその HAL (Hardware Abstraction Layer) に強く影響を受けています。しかし AWS IoT Greengrass では、AWS IoT Greengrass コアソフトウェアのインストール構成をもとに、証明書と秘密鍵のストレージを標準化しています。また、証明書と秘密鍵の保管場所は、certificateFilePath と privateKeyPath の設定パラメータで定義されます。そのため、この記事ではデバイス証明書更新のリファレンス実装を、多くの AWS IoT デバイスタイプにデプロイ可能な形で提供できています。
ソリューション概要
Certificate Rotator は 2 つのパーツで構成されています。1 つは aws.greengrass.labs.CertificateRotator という デバイス側の処理を担う AWS IoT Greengrass コンポーネントと、もう 1 つはクラウド側で必要になるバックエンドを構築する AWS Cloud Development Kit (CDK) スタックです。クラウド側バックエンドは、Lambda 関数が 3 つ、AWS IoT Core ルールが 3 つ、AWSLabsCertificateRotator という AWS IoT カスタムジョブテンプレートが 1 つ、Amazon Simple Notification Service (SNS) トピックが 1 つで構成されています。証明書は AWS IoT Core または AWS Private Certificate Authority (CA) から発行されます。
図に示されているように、Certificate Rotator とクラウド側バックエンドは、MQTT を使用して通信をします。AWS IoT ジョブは、1 つまたは複数デバイスに送信して実行できる、リモート操作セットを定義しています。クラウド側アプリケーションは、カスタムジョブテンプレートをベースに AWS IoT ジョブを作成し、証明書と秘密鍵の更新を開始します。ジョブ作成の実行条件やビジネス上の条件は、お客様またはアプリケーション開発者に任されています。つまり、このソリューションはデバイス証明書と秘密鍵を更新する手段は提供しますが、実施するタイミングや条件については明示されていません。実施するタイミングの例としては、AWS IoT Device Defender Audit による監査や異常検出、定期実行、コンプライアンス要件の変更によって別の秘密鍵暗号アルゴリズムが必要になった、等があります。
SNS トピックは証明書の更新失敗をユーザーに通知するために使用されます。お客様は SNS サブスクリプションを活用して、ビジネスに応じた適切な障害対応や復旧の処理を導入できます。
本ソリューションの特徴:
- ディスク上のファイル、またはハードウェアセキュリティモジュール (HSM) 内の PKCS#11 オブジェクトとして保管されている証明書を更新することができます。お客様のセキュリティ対策に応じて、適切なストレージタイプを選択頂く事がお客様側で必要になります。認証情報を保護するために、AWS は HSM の使用を推奨しています。
- ソリューションをデプロイする際に選択した CDK コンテキスト変数によって、クラウド側バックエンドは、AWS IoT Core または AWS Private CA からデバイス証明書を発行します。AWS Private CA を選択すると、独自 CA を使用して発行する証明書の有効期限をコントロールできます。
- 証明書更新のプロセスは、提供されているジョブテンプレートをもとに、1 つの AWS IoT ジョブとして扱われます。これはデバイスフリートの認証情報といった大規模な管理を行う場合に、ジョブ設定や断続的に接続するデバイスの管理といった、ジョブの優れた機能が利用できる事を意味します。
- このコンポーネントは、Linux または Windows 上のコアデバイスにデプロイすることができます。AWS IoT Greengrass がシステムサービスとしてインストールされている必要があります。
- ユースケースやリスクアセスメント、セキュリティ戦略に基づいて、お客様は証明書更新のタイミングを柔軟に決めることができ、自動化によって手動更新で発生するアクセス中断の可能性を低減することができます。
- レジリエンスがあり、SNS を使った通知機能を提供します。
ソリューションのデプロイ
詳細なデプロイ手順と前提条件は、Certificate Rotator のリポジトリと “Certificate Rotator for AWS IoT Greengrass” の動画で説明しています。本ソリューションは IoT/IIoT ワークロードを実行している各リージョンの各 AWS アカウントにデプロイする必要があります。デプロイ処理は 2 つのパーツで構成されています。1 つはクラウド側バックエンドのデプロイ用 CDK アプリケーションと、もう 1 つは AWS IoT Greengrass コンポーネントのビルド・パブリッシュ・デプロイ、で構成されています。
デバイス証明書の更新
コンポーネントとクラウド側バックエンドがデプロイされた状態で、ジョブテンプレート AWSLabsCertificateRotator を使用してジョブを作成することで、証明書の更新を簡単に実行することができます。このジョブ作成は、以下のような方法で行うことができます:
ソリューションのカスタマイズとテスト
本ソリューションはそのままでデプロイ可能な形で提供されていますが、お客様のユースケースに合わせて変更することも可能です。またコンポーネントとクラウド側バックエンドは、下記項目が一緒に提供されます:
- 命令行と条件分岐のカバレッジが 100% の単体テスト一式
- AWS IoT Greengrass コアデバイスのユーザー定義グループに対して、証明書更新のテストを行う、自動化された統合テスト一式
- 自動でコンポーネントとクラウド側バックエンドのビルド・パブリッシュ・デプロイを行い、自動で回帰テストとして全ての単体テストと統合テストを行う開発環境用 CI/CD パイプライン
まとめ
IoT ソリューションをセキュアに保つために、強固な ID の使用、最小権限でのアクセス、デバイスの健康状態や異常の監視、問題修正が行える安全な接続経路、そしてデバイスを最新かつセンキュアに保つためのアップデート適用など、多層的なセキュリティアプローチを AWS は推奨しています。認証認可に X.509 証明書を利用する場合は、デバイスの健康状態とビジネス状況に基づいて、証明書と秘密鍵を更新する必要が出て来ます。
AWS IoT Device Defender を使用して、デバイス証明書の有効期限に関する監査や、証明書に関するキー品質とその他ベストプラクティスを確認することができ、IoT エッジデバイス証明書と秘密鍵を更新する条件として利用できます。証明書の有効期間が短くなると対処する回数が増えますが、この AWS IoT Greengrass Certificate Rotator を使うことで、AWS IoT では IoT エッジデバイス証明書と秘密鍵の更新を簡単に実行でき、さらにお客様は IoT システムのセキュリティ対策を向上させることができます。
さらに詳しく
著者について
Greg Breen は、Amazon Web Services の シニア IoT スペシャリストソリューションアーキテクトです。オーストラリアを拠点に、アジア太平洋地域のお客様の IoT ソリューション構築を支援。組込みシステムの経験が豊富で、特に製品開発チームの製品市場投入を支援することに関心があります。 |
Ryan Dsouza は、AWS の IoT 関連のプリンシパルソリューションアーキテクトです。ニューヨークを拠点に、豊富な AWS 機能を活かした、より安全で拡張性の高い革新的なソリューションの設計、開発、運用を支援し、測定可能なビジネス成果を提供しています。Ryan は、デジタルプラットフォーム、スマート製造、エネルギー管理、ビル・産業オートメーション、OT/IIoT セキュリティなど、多様な業界において 25 年以上の経験を有しています。AWS 以前は、Accenture、SIEMENS、General Electric、IBM、AECOM に勤務し、お客様の DX 施策に貢献しました。 |
この記事は Greg Breen, Ryan Dsouza によって書かれた How to manage AWS IoT Greengrass core device certificates の日本語訳です。この記事はソリューションアーキテクトの 山岡 卓紀夫 が翻訳しました。