IoT デバイスのセキュアな通信を実現。X.509 証明書のプロビジョニング方法とは ?

2022-04-04
AWS ソリューション紹介

米倉 裕基 (監修 : 三平 悠磨, 市川 純)

近年、私たちの生活基盤を支えるインフラとして IoT (Internet of Things - モノのインターネット) 技術を活用したシステムの存在感が増してきています。IoT 技術を活用したシステムが複雑化、大規模化するにつれ、セキュリティの重要性がますます高まってきています。そのため、IoT デバイスメーカーとユーザー双方にとってセキュリティ対策は IoT プロジェクトを進める上での最大の関心事の一つになっています。

AWS IoT Core では、IoT デバイスから転送されるデータを安全に保護、暗号化するために、X.509証明書を使ったTLSベースの相互認証をサポートしています。

本記事では、IoT デバイスの開発・製造の各フェーズにおいて、AWS IoT Core および IoT デバイスに X.509 証明書をプロビジョニングする手順をご紹介します。

なお本記事は、ホワイトペーパー「デバイスの製造と AWS IoT Core での X.509 証明書のプロビジョニング」の内容を要約したものになります。AWS IoT Core における認証情報のプロビジョニングについてより詳しい情報をお知りになりたい場合は、上記のホワイトペーパーをご確認ください。

ご注意

本記事で紹介する AWS サービスを起動する際には、料金がかかります。builders.flash メールメンバー特典の、クラウドレシピ向けクレジットコードプレゼントの入手をお勧めします。

*ハンズオン記事およびソースコードにおける免責事項 »

この記事のデモを無料でお試しいただけます »

毎月提供されるデベロッパー向けアップデート情報とともに、クレジットコードを受け取ることができます。 


X.509 証明書のプロビジョニングに必要なリソース

X.509 証明書を使って IoT デバイスを AWS IoT Core に接続するために必要なリソースはこちらのとおりです。

環境

リソース

説明

AWS IoT Core

IoT Thing

AWS IoT コンソール、AWS IoT API、または AWS CLI を使って Thing Registry に登録した Thing (モノ)です。

X.509 証明書

公開鍵証明書の標準フォーマットです。Thing ごとに X.509 証明書のアタッチが必要です。

IoT ポリシー

Thing に対してどのアクションを許可するかを定義した JSON 形式のドキュメントです。X.509 証明書にアタッチします。

IoT デバイス

X.509 証明書

AWS IoT に登録した X.509 証明書と同じものを IoT デバイスにも書き込む必要があります。

秘密鍵

X.509 証明書とペアになる秘密鍵です。デバイスから外部に漏れないようにします。

CA 証明書

ジャストインタイムプロビジョニング (JITP) または ジャストインタイム登録 (JITR) を使用する場合、IoT デバイスは AWS IoT Core への初回接続時に、X.509 証明書の発行元 CA 証明書をTLS 接続で送信します。(オプション)

ATS サーバー証明書

Amazon Trust Services CA によって署名されたサーバー証明書です。IoT デバイスが、正規の AWS IoT ATS エンドポイントに接続していることを検証するために必要です。


開発フェーズのデバイスプロビジョニング

IoT プロジェクトの初期段階においては、セキュリティやスケーラビリティー以上に利便性が重視されます。開発フェーズのデバイスプロビジョニングでは、デバイスプロビジョニングに必要なすべてのリソースを、AWS IoT コンソール、AWS IoT API、または AWS CLI を使って簡易的に生成できます。開発者は AWS クラウド上で生成した X.509 証明書と秘密鍵、公開鍵をローカルマシンにダウンロードし、 IoT デバイスのファイルシステムやファームウェアに直接書き込むことができます。

注意 :
悪意ある第三者にローカルマシンが侵害される恐れがあるため、上記のプロセスは本番環境では使用しないでください。上記のプロセスでプロビジョニングを行った IoT デバイスは、セキュアなラボ環境内で厳重に管理してください。


デバイス製造フェーズのデバイスプロビジョニング

IoT プロジェクトが、開発フェーズからデバイス製造フェーズに移行すると、デバイスの製造から流通、エンドカスタマーへの販売に至る複雑なサプライチェーンが構成されます。

大量のデバイスを製造する施設を持たない多くのデバイスメーカーは、外部の大量受託製造業者にデバイスの製造をアウトソースすることが考えられます。また、製造された製品の流通や販売を、専門のディストリビューターに委託することもあります。

クリックすると拡大します

一般的な IoT デバイスの製造プロセスは、上図のとおりさまざまなサプライチェーンを経由して行われるため、デバイスメーカーは認証情報 (X.509 証明書および秘密鍵) をプロビジョニングするタイミングを指定する必要があります。

認証情報のプロビジョニングのタイミング

各サプライチェーンの担当するさまざまなプロセスで、認証情報 (X.509 証明書および秘密鍵) のプロビジョニングができます。ここでは、代表的なプロビジョニングのシナリオをご紹介します。

プロビジョニングの実行者 シナリオ
デバイスメーカー

デバイスメーカーは、デバイスごとに一意の認証情報を書き込んだファームウェアイメージを作成します。

受託製造業者は、ファームウェアイメージをデバイスのプロセッサに書き込みます。

クリックすると拡大します

プロビジョニングの実行者 シナリオ
受託製造業者

受託製造業者は、デバイス製造時にカスタマイズした認証情報をデバイスに組み込みます。

その際、デバイスメーカーは、デバイス上に書き込まれた認証情報を受け取れるようにファームウェアイメージを設計する必要があります。

クリックすると拡大します

プロビジョニングの実行者 シナリオ
ハードウェアセキュリティモジュール (HSM) ベンダー

コストやセキュリティ上の理由により、受託製造業者は認証情報の組み込みを、外部の HSM ベンダー に委託することができます。

受託製造業者は、認証情報を組み込んだモジュール (セキュアエレメント) をデバイスに追加します。

デバイスメーカーは、HSM との通信を可能にする設計を行った単一の標準ファームウェアイメージを複数のデバイスで流用でき、コスト削減に繋げられます。

クリックすると拡大します

プロビジョニングの実行者 シナリオ
サプライチェーン/
ディストリビューター

デバイスメーカーは、信頼できるサプライチェーンやディストリビューターに認証情報の組み込みを委託することができます。デバイスの製造時や、顧客販売時に、各サプライチェーンのセキュアな環境下で認証情報のプロビジョニングを行います。

クリックすると拡大します

補足 :
IoT デバイスの製造フェーズにおいて、認証情報のプロビジョニング設計が確定せず、一意の認証情報なしでデバイスの製造が完了する場合があります。このようなシナリオでは、デバイスが販売され、現場に設置された後で、フリートプロビジョニングと呼ばれるサービスを利用して、認証情報のプロビジョニングを行います。フリートプロビジョニングに関する詳細は、AWS IoT Core デベロッパーガイドの「フリートプロビジョニングを使用したデバイス証明書がないデバイスのプロビジョニング」をご覧ください。


認証局 (CA) による証明書の署名

X.509 証明書は、特定の認証局 (CA) によって署名される必要があります。利用できる認証局 (CA) は複数の選択肢があります。デバイスメーカーは、AWS IoT CA 、自己署名ルート CA、サードパーティーの CA のいずれかでデバイス証明書の発行と署名を行い、AWS IoT レジストリに登録します。

ここでは、認証局 (CA) ごとのデバイス証明書の発行および署名の手順について説明します。

AWS IoT CA による署名

AWS IoT では、クラウド上で直接デバイス証明書と秘密鍵を生成できます。X.509 証明書は AWS IoT CA によって署名され、デバイスメーカーの AWS IoT レジストリに事前登録されます。デバイスメーカーはデバイス証明書と秘密鍵を AWS IoT からダウンロードし、デバイスにプロビジョニングします。

証明書の署名リクエスト (CSR) による署名

すでにデバイスに秘密鍵が組み込まれている場合、証明書の署名リクエスト (CSR) を、デバイスからデバイスメーカーを経由して AWS IoT Core へ送信することで、秘密鍵を外部に晒すことなく、安全にデバイス証明書を発行できます。デバイスメーカーは、デバイス証明書を AWS IoT からダウンロードし、デバイスにプロビジョニングします。

自己署名 ルート CA による署名

X.509 証明書は、デバイスメーカーが持つ独自の自己署名ルート CA を使って署名できます。自己署名証明書を使う場合は、デバイスから安全なネットワークを経由して、自己署名ルート認証局によって署名された中間 CA 証明書に署名リクエストを送信することでデジタル証明書を発行します。

サードパーティー CA による署名

デバイスメーカーが独自の自己署名ルート CA を持たない場合、サードパーティーの CA サービスを利用することも可能です。サードパーティーの CA サービスベンダーは、デバイスメーカー向けに中間 CA 証明書を発行するか、独自のルート CA からカスタム証明書を発行できます。

デバイスメーカーはサードパーティーの CA サービスベンダーから提供されたCA 証明書 を使って X.509 証明書の署名を行います。このケースでは、CA の物理的なセキュリティーの保証はサードパーティーの CA サービスベンダーが担います。


AWS IoT Core へのデバイス登録

一意のデバイス証明書と秘密鍵がプロビジョニングされた IoT デバイスを、AWS IoT Core に登録する方法は複数あります。デバイスメーカーは、ジャストインタイムプロビジョニング、ジャストインタイム登録、またはマルチアカウント登録を使用して、認証情報が組み込まれたデバイスを登録します。

ジャストインタイムプロビジョニング (JITP)

デバイスメーカーは、事前に、デバイス証明書を署名した CA を AWS IoT に登録します。

デバイスは AWS IoT Core へ初めてアクセスする際に、デバイス証明書と事前登録された署名者 CA を TLS ハンドシェイク中に送付します (オプション)。AWS IoT Core は、署名者 CA とデバイスを照合した上で、デバイス証明書を登録し、アクティベートします。

初回アクセス時点では、AWS IoT Core にデバイス証明書がアクティベートされていないため、デバイスによる接続試行は失敗に終わりますが、2 回目以降は正しく接続できるようになります。

ジャストインタイム登録 (JITR)

AWS IoT Core へのアクセス時に、デバイスとユーザーの関連付けなど追加のカスタムロジックが必要な場合は、ジャストインタイム登録 (JITR) を使用します。

ジャストインタイム登録 (JITR) では、ジャストインタイムプロビジョニング (JITP) と同様、AWS IoT Core への初回接続時に署名者 CA 証明書とデバイス証明書の照合とデバイス証明書の登録が行われますが、デバイス証明書のアクティベートは行われません。

AWS IoT Core は、MQTT トピック “$aws/events/certificates/registered/<caCertificateID>” でライフサイクルイベントを生成します。

デバイスメーカーは、ライフサイクルイベントのメッセージが AWS Lambda 関数のトリガーとなるように IoT ルールを設定します。AWS Lambda 関数は追加のカスタムロジックを実行した上で、デバイス証明書のアクティベートを行います。

ジャストインタイムプロビジョニング (JITP) と同様、初回の接続試行は失敗に終わりますが、2 回目以降は正しく接続できるようになります。

マルチアカウント登録 (MAR)

デバイスを複数の AWS アカウントに迅速に接続したい場合、マルチアカウント登録 (MAR) が利用できます。

マルチアカウント登録 (MAR) では、複数の AWS アカウントに同じデバイス証明書を登録することで、単一のデバイスでも複数アカウントの AWS IoT Core にアクセスできるようになります。

デバイスは、TLS SNI 文字列を使って AWS IoT エンドポイントに接続します。接続先のエンドポイントを変えることで、デバイスを 1 つのアカウントから別のアカウントへ移動できます。

なおマルチアカウント登録 (MAR) を利用する場合、デバイスの TLS スタックは、サービス名インジケータ (SNI) をサポートしている必要があります。


まとめ

AWS IoT Core における認証情報のプロビジョニングは、多様なユースケースや大規模な構成のサプライチェーンに対応するために、複雑なプロセスになります。セキュリティリスクや無用なコストを避けるために、デバイスメーカーはデバイスの開発プロセスの早い段階で、自社にとって最適なプロビジョニングの方法を検討する必要があります。

本記事では、認証情報のプロビジョニングに関する一般的な方法をご紹介しました。本記事では割愛したフリートプロビジョニングの方法など、より詳しい情報をお知りになりたい場合は、ホワイトペーパー「デバイスの製造と AWS IoT Core での X.509 証明書のプロビジョニング」や、AWS IoT Core デベロッパーガイドの「デバイスプロビジョニング」をご覧ください。


builders.flash メールメンバーへ登録することで
AWS のベストプラクティスを毎月無料でお試しいただけます

筆者プロフィール

米倉 裕基
アマゾン ウェブ サービス ジャパン合同会社
テクニカルライター・イラストレーター

日英テクニカルライター・イラストレーター・ドキュメントエンジニアとして、各種エンジニア向け技術文書の制作を行ってきました。
趣味は娘に隠れてホラーゲームをプレイすることと、暗号通貨自動取引ボットの開発です。
現在、AWS や機械学習、ブロックチェーン関連の資格取得に向け勉強中です。

監修者プロフィール

三平 悠磨 (みひら ゆうま)
アマゾン ウェブ サービス ジャパン合同会社
IoT スペシャリスト ソリューションアーキテクト

ソフトウェアエンジニアとして会話 AI やロボット開発を経験しました。AWS では IoT スペシャリストソリューションアーキテクトとして、お客様の IoT 関連案件を支援しています。趣味はバンドと作曲で、プログラミングやテクノロジーを駆使して音楽をもっと楽しくしたいと思っています。 

市川 純
アマゾン ウェブ サービス ジャパン合同会社
技術統括本部 プロトタイピング ソリューションアーキテクト

2018年 に AWS へ入社した、Web サービスから家のデッキ作りまで、モノを作るという事であれば何でも好きな DIY おじさんです。最近は週末にバイクをイジるのにハマっています。

AWS を無料でお試しいただけます

AWS 無料利用枠の詳細はこちら ≫
5 ステップでアカウント作成できます
無料サインアップ ≫
ご不明な点がおありですか?
日本担当チームへ相談する