Azure IoT Hub Device Provisioning Service とは
IoT Hub Device Provisioning Service (DPS) は、IoT Hub のヘルパー サービスです。適切な IoT Hub へのゼロタッチの Just-In-Time プロビジョニングを人間の介入を必要とせずに行うことができます。 DPS を使用すると、膨大な数のデバイスを、安全かつスケーラブルな方法でプロビジョニングすることができます。 プロビジョニングに従来必要だった手動の手順の多くは DPS で自動化されるので、IoT デバイスのデプロイにかかる時間を短縮し、手動によるエラーのリスクを軽減できます。
デバイス プロビジョニング サービスのしくみ
次の図は、DPS を使用してデバイスをプロビジョニングする処理の背後でどのような処理が行われているかについて説明しています。
デバイス プロビジョニング フローが開始する前に、準備する手動の手順が 2 つあります。
- デバイス側では、デバイスの製造元が、認証資格情報と割り当てられた Device Provisioning Service ID とエンドポイントを使用してデバイスを事前構成することで、プロビジョニング用にデバイスを準備します。
- クラウド側では、ユーザーまたはデバイスの製造元が、有効なデバイスを識別し、プロビジョニングする方法を定義する個々の登録と登録グループを使用してデバイス プロビジョニング サービス インスタンス を準備します。
デバイスとクラウドをプロビジョニング用に設定すると、初めてデバイスの電源を入れるとすぐに、次の手順が自動的に開始されます。
- 初めてデバイスの電源を入れると、DPS エンドポイントに接続され、認証資格情報が表示されます。
- DPS インスタンスにより、デバイスの ID が登録リストと照合されます。 デバイス ID が検証されると、DPS によってデバイスが IoT ハブに割り当てられ、ハブに登録されます。
- DPS インスタンスは、割り当てられたハブからデバイス ID と登録情報を受け取り、その情報をデバイスに返します。
- デバイスは、その登録情報を使用して、割り当てられた IoT ハブに直接接続し、認証します。
- デバイスと IoT ハブが直接通信を開始します。 デバイスを再プロビジョニングする必要がない限り、DPS インスタンスは中継局としての役割を果たしません。
Device Provisioning Service を使用する場合
デバイスを IoT Hub に接続し、構成する際に DPS が最適な選択肢になるプロビジョニング シナリオは多数あります。次に例を示します。
- 工場 (初期設定) で IoT Hub 接続情報をハードコーディングすることなく、ゼロタッチで単一の IoT ソリューションにプロビジョニングできます
- 複数のハブ間でデバイスの負荷を分散します
- 販売トランザクション データに基づいて、デバイスをデバイス所有者の IoT ソリューションに接続します (マルチテナント)
- ユースケースに応じて特定の IoT ソリューションにデバイスを接続します (ソリューションの分離)
- 最低限の待機時間でデバイスを IoT ハブに接続します (geo シャーディング)
- デバイスの変化に基づいて再プロビジョニングします
- デバイスが IoT Hub に接続するときに使用するキーをローリングします (接続に X.509 証明書を使用しない場合)
入れ子になった IoT Edge デバイス (親子階層) のプロビジョニングは現在、DPS ではサポートされていません。
プロビジョニング プロセス
DPS を使用したデバイス プロビジョニングの前に、次の 2 つの手順が実行されます。
- 製造手順では、工場でデバイスが作成され、準備されます。
- クラウドのセットアップ手順では、Device Provisioning Service が自動プロビジョニング用に構成されます。
これらの手順はどちらも、既存の製造プロセスとデプロイ プロセスに組み込むことができます。 デバイスで接続情報を取得するために手動作業が必要な一部のデプロイ プロセスが、DPS によってさらに簡易化されます。
製造手順
この手順は、製造ラインで実行されるすべての作業です。 この手順にかかわる役割には、シリコン デザイナー、シリコンの製造元、インテグレーター、デバイスの最終製造元などがあります。 この手順は、ハードウェア自体の作成に関係しています。
DPS によって製造プロセスに新しい手順が加わることはありませんが、初期ソフトウェアと (理想的には) ハードウェア セキュリティ モジュール (HSM) をデバイスにインストールする既存の手順に関係しています。 この手順ではデバイス ID は作成されず、プロビジョニング サービス情報がデバイスにプログラミングされます。これにより、デバイスの電源を入れたときに、プロビジョニング サービスを呼び出して接続情報や IoT ソリューションの割り当てを取得することができます。
また、この手順では、製造元がデバイスのデプロイ担当者やオペレーターに識別キー情報を提供します。 この情報提供は、デバイスのデプロイ担当者やオペレーターによって指定された署名証明書から生成された X.509 証明書がすべてのデバイスにインストールされていることを確認するだけの単純な処理であることもあれば、各 TPM デバイスから TPM 保証キーの公開部分を抽出するほどの複雑な処理であることもあります。 多くのシリコン メーカーがこれらのサービスを提供しています。
クラウドのセットアップ手順
これは、適切な自動プロビジョニングのためにクラウドを構成する手順です。 通常、クラウドのセットアップ手順には 2 種類のユーザーが関係します。初期段階でデバイスをどのようにセットアップする必要があるかを把握しているユーザー (デバイス オペレーター) と、デバイスを IoT ハブ間で分割する方法を把握しているユーザー (ソリューション オペレーター) です。
プロビジョニング サービスの 1 回限りの初期セットアップがあり、ソリューション オペレーターが通常処理します。 プロビジョニング サービスを構成した後は、ユース ケースが変わらない限り、構成を変更する必要はありません。
自動プロビジョニング用にサービスを構成した後は、デバイスの登録を準備する必要があります。 この手順は、デバイスの必要な構成を認識し、プロビジョニング サービスがデバイスの ID を正しく証明できることを確認するデバイス オペレーターによって行われます。 デバイス オペレーターは、製造元から識別キー情報を取得し、登録一覧に追加します。 以降、新しいエントリが追加されたときや、デバイスに関する最新情報があり、既存のエントリが更新されたときに、登録が更新される可能性があります。
登録とプロビジョニング
プロビジョニングとは、この用語が使用される業界によって意味する処理が異なります。 IoT デバイスをクラウド ソリューションにプロビジョニングするという文脈では、プロビジョニングには 2 つのプロセスがあります。
- 最初のプロセスでは、デバイスを登録することで、デバイスと IoT ソリューション間の初期接続を確立します。
- 2 つ目のプロセスでは、登録先のソリューションが持つ特定の要件に基づいて、デバイスに適切な構成を適用します。
この 2 つのステップを両方とも完了すると、デバイスが完全にプロビジョニングされたことになります。 一部のクラウド サービスは、プロビジョニング プロセスの最初の手順 (デバイスを IoT ソリューション エンドポイントに登録する) のみを提供していますが、初期構成は提供していません。 DPS では、デバイスにシームレスなプロビジョニング エクスペリエンスを提供するために、両方のステップを自動化しています。
Device Provisioning Service の機能
DPS は多くの機能を備えているため、デバイスのプロビジョニングに最適です。
- 安全な構成証明。X.509 と TPM ベースの ID の両方をサポートしています。
- 登録一覧。任意の時点で登録できるデバイスまたはデバイス グループの完全なレコードが含まれます。 登録一覧には、デバイスが登録されたときのデバイスの望ましい構成に関する情報が含まれています。いつでも更新することができます。
- 複数の割り当てポリシー。実際のシナリオに合わせて DPS がデバイスを IoT ハブに割り当てる方法を制御できます。最短待ち時間、均等に重み付けされた分布 (既定)、静的な構成。 待ち時間は Traffic Manager と同じ方法を使用して決定されます。 Azure Functions でホストされている Webhook を使用して独自の割り当てポリシーを実装できるカスタム割り当てもサポートされています。
- 監視および診断ログ。すべての機能が正常に動作していることを確認できます。
- マルチハブのサポート。DPS でデバイスを複数の IoT ハブに割り当てることができます。 DPS は、複数の Azure サブスクリプションにわたってハブと対話できます。
- リージョン間のサポート。DPS でデバイスを他のリージョンの IoT ハブに割り当てることができます。
- 保存データの暗号化。DPS 内のデータは、利用可能な最強のブロック暗号の 1 つである 256 ビット AES 暗号化を使って透過的に暗号化および暗号化解除され、FIPS 140-2 に準拠しています。
デバイス プロビジョニングに関連する概念と機能の詳細については、DPS の用語に関する記事、および同じセクション内の他の概念に関する記事をご確認ください。
クロスプラットフォームのサポート
DPS は、他のあらゆる Azure IoT サービスとまったく同じように、さまざまなオペレーティング システムとクロスプラットフォームで動作します。 Azure ではさまざまな言語でオープン ソース SDK が提供されており、容易にデバイスを接続して、サービスを管理できます。 DPS は、次のプロトコルを使ったデバイスの接続をサポートしています。
- HTTPS
- AMQP
- Web ソケット経由の AMQP
- MQTT
- WebSocket 経由の MQTT
DPS は、サービス操作の HTTPS 接続のみをサポートしています。
リージョン
DPS は多数のリージョンで利用できます。 すべてのサービスでサポートされているリージョンのリストは、Azure リージョンで利用できます。 Device Provisioning Service の状態は、[Azure の状態] ページで確認できます。
回復性と信頼性を確保するために、Availability Zones をサポートするリージョンのいずれかにデプロイすることをお勧めします。
データ所在地に関する考慮事項
デバイス プロビジョニング サービスでは、顧客データが格納されます。 既定では、ディザスター リカバリー シナリオをサポートするために、顧客データがセカンダリ リージョンにレプリケートされます。 東南アジアとブラジル南部のデプロイの場合、ディザスター リカバリーを無効にすることで、お客様はそのリージョン内でのみデータを保持することを選択できます。 詳細については、Azure でのリージョン間レプリケーションに関するページを参照してください。
Microsoft System Center Data Protection Manager は、すべてのプロビジョニング サービス インスタンスに対して同じデバイス プロビジョニング エンドポイントを使用し、使用可能な最も近いサービス エンドポイントへのトラフィック負荷分散を実行します。 このため、認証シークレットは、DPS インスタンスが最初に作成されたリージョンの外部に一時的に転送される可能性があります。 ただし、デバイスが接続されると、デバイス データは DPS インスタンスの元のリージョンに直接送られます。 データが元のリージョンや セカンダリーリージョンから離れないようにするために、プライベート エンドポイントを使用します。 プライベート エンドポイントを設定する方法については、「仮想ネットワーク向けの DPS サポート」を参照してください。
クォータと制限
各 Azure サブスクリプションには既定のクォータ制限が設けられており、IoT ソリューションの範囲に影響する可能性があります。 現在の制限は、サブスクリプションあたり 10 個のデバイス プロビジョニング サービス インスタンスです。
クォータ制限の詳細については、「Azure サブスクリプション サービスの制限」を参照してください。
次の表は、Azure IoT Hub Device Provisioning Service のリソースに適用される制限の一覧です。
リソース | 制限 | 調整可能? |
---|---|---|
Azure サブスクリプションあたりのデバイス プロビジョニング サービスの最大数 | 10 | いいえ |
登録の最大数 | 1,000,000 | いいえ |
個々の加入の最大数 | 1,000,000 | いいえ |
加入グループの最大数 (X.509 証明書) | 100 | いいえ |
加入グループの最大数 (対称キー) | 100 | いいえ |
CA の最大数 | 25 | いいえ |
リンクされた IoT Hub の最大数 | 50 | いいえ |
メッセージの最大サイズ | 96 KB | いいえ |
ヒント
対称キー加入グループのハード制限がブロックの問題である場合は、個々の加入を回避策として使用することをお勧めします。
Device Provisioning Service には、次のレートの制限があります。
料金 | ユニットあたりの値 | 調整可能? |
---|---|---|
操作 | 1,000/分/サービス | いいえ |
デバイス登録 | 1,000/分/サービス | いいえ |
デバイスのポーリング操作 | 5/10 秒/デバイス | いいえ |
課金されるサービス操作と価格
DPS での各 API 呼び出しは、1 回の "操作" として課金されます。 これには、すべてのサービス API とデバイス登録 API が含まれます。
次の表は、各 DPS サービス API 操作の現在の課金対象の状態を示しています。 DPS の価格の詳細については、Azure IoT Hub の価格 ページ上部の [価格表] を選択し、 [IoT Hub Device Provisioning Service] タブを選択して、お使いのサービスの通貨と地域を選択します。
API | 操作 | 課金対象? |
---|---|---|
デバイス API | デバイスの登録状態の検索 | No |
デバイス API | 操作の状態の検索 | No |
デバイス API | Register Device | はい |
DPS サービス API (登録の状態) | 削除 | はい |
DPS サービス API (登録の状態) | Get | はい |
DPS サービス API (登録の状態) | クエリ | はい |
DPS サービス API (登録グループ) | Create or Update | はい |
DPS サービス API (登録グループ) | 削除 | はい |
DPS サービス API (登録グループ) | Get | はい |
DPS サービス API (登録グループ) | 構成証明メカニズムの取得 | はい |
DPS サービス API (登録グループ) | クエリ | はい |
DPS サービス API (登録グループ) | 一括操作の実行 | はい |
DPS サービス API (個別の登録) | Create or Update | はい |
DPS サービス API (個別の登録) | 削除 | はい |
DPS サービス API (個別の登録) | Get | はい |
DPS サービス API (個別の登録) | 構成証明メカニズムの取得 | はい |
DPS サービス API (個別の登録) | クエリ | はい |
DPS サービス API (個別の登録) | 一括操作の実行 | はい |
DPS 証明書 API | Create or Update | No |
DPS 証明書 API | 削除 | No |
DPS 証明書 API | 確認コードの生成 | No |
DPS 証明書 API | Get | No |
DPS 証明書 API | リスト | No |
DPS 証明書 API | 証明書の確認 | No |
IoT DPS リソース API | プロビジョニング サービス名の可用性の確認 | No |
IoT DPS リソース API | Create or Update | No |
IoT DPS リソース API | 削除 | No |
IoT DPS リソース API | Get | No |
IoT DPS リソース API | 操作の結果を取得します。 | No |
IoT DPS リソース API | List By Resource Group | No |
IoT DPS リソース API | List By Subscription | No |
IoT DPS リソース API | キー別の一覧表示 | No |
IoT DPS リソース API | キー名のキーの一覧表示 | No |
IoT DPS リソース API | 有効な SKU の一覧表示 | No |
IoT DPS リソース API | アップデート | No |
関連する Azure のコンポーネント
DPS は Azure IoT Hub を使用してデバイス プロビジョニングを自動化しています。 詳細については、「IoT Hub のドキュメント」を参照してください。
注意
入れ子になったエッジ デバイス (親子階層) のプロビジョニングは現在、DPS ではサポートされていません。
IoT Central アプリケーションでは、内部 DPS インスタンスを使用してデバイス接続を管理します。 詳細については、「デバイスが IoT Central に接続する方法」を参照してください。
次のステップ
ここでは、Azure で IoT デバイスをプロビジョニングする方法の概要について説明しました。 次の手順では、エンドツーエンドの IoT シナリオを試します。