Amazon Web Services ブログ
AWS IoT を利用して IoT デバイスの証明書の更新を管理する方法
この記事は Ryan Dsouza と Lukasz Malinowski によって投稿された How to manage IoT device certificate rotation using AWS IoT を翻訳したものです。
はじめに
IoT (Internet of Things) は、さまざまな業界でビジネスオペレーションやカスタマーエクスペリエンスを変化させています。この無限のチャンスはビジネスの変革を可能にしますが、正しく導入されなければ、セキュリティ、リスク、プライバシーの懸念をもたらし、データやブランドを危険にさらすことにもなります。産業設備では OT(Operational Technology) 環境は、生産高と効率を向上させるために、より多くの IT ソリューションを活用しています。デジタルトランスフォーメーションの取り組みが IT/OT の融合を加速させ続ける中 IT と OT 環境の間のリスクも混在しています。コンシューマー、企業、産業用アプリケーションで接続されたデバイスの数が増え、データが生成されるにつれて、IoT デバイスやクラウドとのデバイス通信がもたらすセキュリティリスクにどのように対処するかという疑問が発生します。
顧客、デバイスそして企業を守るために、すべての IoT ソリューションはセキュリティで始まり、セキュリティで終わるべきです。最適な IoT セキュリティソリューションは、エッジからクラウドまで多層的な保護を提供し IoT デバイス、接続、データを保護します。 IoT デバイスとシステムに固有のアイデンティティとクレデンシャルをプロビジョニングすることは、あらゆる IoT ソリューションの中核となるビルディングブロックの1つです。 AWS IoT セキュリティモデルでは、接続された各デバイスが AWS IoT と対話するためのクレデンシャルを持ち AWS IoT との間のすべてのトラフィックが TLS(Transport Layer Security) 上で安全に送信されることが要求されています。
お客様は AWS IoT におけるデバイスの認証情報 (X.509 証明書、 AWS 認証情報、 Amazon Cognito ID 、フェデレーティッド ID 、またはカスタム認証トークン)および、ポリシーを管理する責任を負います。 X.509 証明書を使うことで クライアントと接続を認証する機能を AWS IoT で利用することができます。 AWS はデバイスをプロビジョニングし、それに固有のクライアント証明書をインストールするためのいくつかの方法を提供します。 IoT デバイスの強力なアイデンティティに加えて AWS は認証情報の保存と認証操作の実行に TPM(Trusted Platform Modules) や HSM(Hardware Security Module) などのハードウェア保護モジュールの使用を推奨しています。 X.509 証明書は更新可能でパスワード不要の認証で、強力で標準化されたメカニズムを提供します。これらの証明書は、信頼できる公開鍵基盤 (PKI) からプロビジョニングされ、ビジネスのセキュリティ要件に適した有効期限を持つ必要があります。証明書の更新は手動ローテーションによるアクセスの中断の可能性を最小限にするため、(多くの場合、デバイスの健全性に基づく)自動更新でなければなりません。
TPM または HSM がデバイス上で利用できない場合、ビジネスユースケースに基づいてクレデンシャルをより頻繁にローテーションすることを検討してください。デバイスに付与されるすべてのアクセス権は、その強力なアイデンティティに基づいて付与される必要があります。デバイスへのアクセスを即座に削除できるように、クレデンシャルの監査と監視、ローテーション、および失効をサポートする必要があります(たとえば、侵害に対応するためなど)。このブログでは AWS IoT に接続する IoT デバイスとエッジゲートウェイにおけるデバイスクレデンシャルの監査とローテーションに関するセキュリティの懸念に対処するための規範的なガイダンスを提供します。
ソリューションの概要
今回は AWS が管理する認証局をベースとした証明書のローテーションプロセスについて説明します。以下の図でソリューションの全体像を説明します。
シーケンス図(クリックで拡大出来ます)は、証明書ローテーションの全工程を示したものです。以降の図では、このシーケンスに含まれるステップ番号を使用して、このプロセスの一部を説明します。
ソリューションの説明
1. 有効期限が切れるおそれのある証明書を持つデバイスの特定
この IoT Thing 証明書ローテーションのソリューションは AWS IoT Device Defender Scheduled Audit 機能とサーバーレスアーキテクチャのベストプラクティスを活用したものです。
AWS IoT Device Defender Audit は、デバイス関連のリソース (X.509 証明書、 IoT ポリシー、クライアント ID など) を AWS IoT セキュリティベストプラクティス(最小権限の権限やデバイスごとの固有 ID など)に対して監査する機能です。ここでは定義済みの監査チェックの1つである DEVICE_CERTIFICATE_EXPIRING_CHECK を使用します。このチェックはデバイス証明書の有効期限が 30 日以内であるかどうか、または有効期限が切れているかどうかを確認します。
Audit notification で Amazon SNS にアラートを送信し、自動化アクションをトリガーするように設定することで、自動化された構成を有効にすることができます。
Amazon SNS Subscription with Lambda Endpoint は、新しいメッセージが到着すると自動的に Lambda 関数をトリガーします。
トリガーされた Lambda 関数は、以下の属性を含むイベントを受け取ります。
{
…
"taskId": "e843de58c4f7536021030936fb83d04a",
"nonCompliantChecksCount": 1,
"checkName": "DEVICE_CERTIFICATE_EXPIRING_CHECK"
…
}
Lambda 関数は taskId
を用いて AWS IoT Core に問い合わせ、期限切れの証明書の識別子をリストアップし、取得したプリンシパル(証明書)に関連するクライアント ID を検索します。
この段階で Lambda 関数は証明書ローテーションのプロセスを開始するために必要なすべての情報を収集しています。
2. デバイスが新しいCertificate Signing Request (CSR) を生成する
Lambda関数は指定されたトピックに対して MQTT メッセージを送信します。
Topic: management/topic/{clientId}/csr_req
Message: {}
デバイスは CSR_REQ
メッセージを受信し、証明書のローテーションルーチンを開始します。
IoT デバイスが使用する秘密鍵のローテーションはオプションですが、推奨されており、ビジネスユースケースに基づき必要な場合はローテーションされるべきです。
デバイスは新しい CSR(Certificate Signing Request) を生成し MQTT メッセージのペイロードとして送信します。
Topic: management/topic/{clientId}/csr_res
Message: {'CSR': CSR}
AWS IoT Core は Rule を使用して MQTT メッセージを適切な Lambda 関数に転送します。
組み込みの clientid()
関数は、メッセージを送信した MQTT クライアントの ID を返します。
これは、シングルレベルワイルドカード ('+'
) を使用して、ルール内の任意のクライアント ID にマッチさせるために重要です。このようにして、1つの IoT ルールを使用して、フリート内のすべての接続デバイスの証明書ローテーションを管理することができます。
Rule のクエリ文:
SELECT clientid() as clientid, * FROM 'management/topic/+/csr_res'
3. 新しいデバイス証明書が作成され、デバイスに送信される
Lambda 関数は AWS IoT Core を呼び出し、受け取った CSR に基づいて新しい証明書を作成し、期限切れの証明書で使用されていたのと同じ IoT Policy を新しい証明書にアタッチします。このプロセスでは、デバイスで使用される証明書に署名するために Amazon Root 認証局 (CA) を利用しています。一方でお客様が所有する認証局を使い証明書を署名することも可能ですが、その場合は顧客側で証明書のローテーションプロセスを実装する必要があり、Device Defender Audit を使用してそれをトリガーすることができます。
最後に、Lambda 関数は証明書を MQTT メッセージのペイロードとしてデバイスに返します。
デバイスは新しい証明書を保存し、ローテーションされた認証情報を使用して新しい MQTT セッションを確立します。
新しい証明書を使用した接続が成功した場合、デバイスは以下の MQTT メッセージを送信してローテーション処理を終了します。
Topic: management/topic/{clientId}/crt_ack
Message: {}
何らかの問題が発生した場合、デバイスは既存の認証情報を使用して AWS IoT Core に接続し、エラーを報告します。
Topic: management/topic/{clientId}/crt_err
Message: {'error': error_msg}
IoT Rule は 自動エラー解決のための Lambda 関数を実行し Amazon Simple Notification Service(SNS) を使用してサポートチームに通知を送信します。
証明書のローテーションが成功した最終ステップとして、Lambda 関数は IoT デバイスが以前使用していた古い証明書を非アクティブにして削除します。
このソリューションは、証明書のローテーションプロセスで何らかの障害が発生した場合にも柔軟です。新しい証明書の受信中に IoT デバイスがクラッシュした場合(またはその他の問題が発生した場合)、翌日の Device Defender Audit の結果に表示され、プロセスは最初から開始されます。
監査チェックには 30 日以内に証明書の有効期限が切れるデバイスも含まれるため、サポートスタッフがローテーションの潜在的な問題を調査する時間がある間、デバイスは本番ワークロードに影響を与えることなく動作させることができます。
まとめ
AWS は IoT ソリューションを安全にするために、強力な ID の使用、最小のアクセス権限、デバイスの健全性と異常の継続的な監視、問題を修正するためのデバイスへの安全な接続、デバイスを最新かつ健全に保つための更新の適用など、多層的なセキュリティアプローチを推奨しています。デジタル・アイデンティティと認証に X.509 証明書を使用する場合、デバイスの有効期間中に証明書を更新する必要がある場合があります。証明書の有効期間は、デバイスの健全性とビジネスコンテキストに依存し、証明書の更新のための戦略が必要になります。証明書の有効期間が短いとより多くの関与が必要になりますが AWS IoT ではデバイス証明書のローテーションを簡単に実行でき、さらに IoT システムの Security Posture を向上させるのに役立ちます。
IoT セキュリティのベストプラクティスについて詳しく知りたい方は、The Internet of Things on AWS – Official Blog をご覧ください。
著者について
Ryan Dsouza は AWS の IoT のプリンシパルソリューションアーキテクトです。ニューヨーク市に拠点を置く Ryan は AWS の機能の幅と深さを使用して、より安全でスケーラブルで革新的なソリューションを設計、開発、運用し、測定可能なビジネス成果を実現できるよう支援します。 Ryan はデジタルプラットフォーム、スマート製造、エネルギー管理、建築および産業自動化、さまざまな業界にわたる OT/IIoT セキュリティで25年以上の経験があります。 AWS の前 Ryan は Accenture 、 SIEMENS 、 General Electric 、 IBM 、および AECOM に勤務し、デジタルトランスフォーメーションイニシアチブで顧客にサービスを提供していました。
Lukasz Malinowski はポーランドに拠点を置く AWS Professional Services の IoT コンサルタントです。Lukasz はオンプレミスデバイス、セキュアエッジゲートウェイサーバからネイティブクラウドコンポーネントまで、分散システムの設計、構築、セキュリティ確保において15年以上の経験を有しています。
この記事はソリューションアーキテクトの市川が翻訳しました。