この記事では、プライベート ネットワークを使用して Azure Storage アカウントにファイルをアップロードする方法について説明します。
一般的な Azure IoT デプロイでは、IoT クライアント デバイスがストレージ アカウントと直接通信してファイルをアップロードする必要があります。 通常、IoT クライアント デバイスは異なる場所に分散され、プライベート ネットワークの一部ではないため、パブリック インターネット経由で接続します。 これらのデバイスをプライベート ネットワークに統合することはできないため、ストレージ アカウントでは受信インターネット トラフィックを許可する必要があります。
ただし、より厳密なネットワーク セグメント化要件がある場合は、プライベート ネットワーク内からストレージ アカウントへのアクセスを制限できます。 このソリューションは、ストレージ アカウントへの直接インターネット トラフィックをブロックして、ストレージ アカウントが受信 Azure アプリlication Gateway インスタンスを通過するトラフィックのみを受け入れるようにします。 hub-spoke ネットワーク トポロジを実装する場合通常、Azure Firewall はトラフィックを検査する必要があり、これによってセキュリティが強化されます。
Architecture
このアーキテクチャの Visio ファイルをダウンロードします。
ワークフロー
次のワークフローは、上の図に対応しています。
ハブスポーク ネットワーク トポロジには、各リソース仮想ネットワークにピアリングするハブ仮想ネットワークがあります( 特注とも呼ばれます)。 すべてのトラフィックは、トラフィック検査のために Azure Firewall を通過します。
Azure Blob Storage アカウントは、パブリック インターネット アクセスを拒否します。 他の仮想ネットワークからの接続のみが許可されます。 リソース インスタンス ルールでは、選択した Azure IoT Hub サービスがマネージド ID 経由で接続できます。 Blob Storage アカウントでは、データ プレーン アクセスに対して Azure ロールベースのアクセス制御 (RBAC) のみがサポートされます。
アプリケーション ゲートウェイにはカスタム ドメイン ネーム システム (DNS) があり、トランスポート層セキュリティ (TLS) トラフィックを終了します。 仮想ネットワーク内に存在します。 この仮想ネットワークは、Blob Storage アカウントのプライベート リンクが使用する仮想ネットワークとピアリングします。 ハブ仮想ネットワーク経由の強制トンネルによって接続が確立されます。
IoT Hub SDK を使用する IoT クライアント デバイスは、IoT Hub にファイルをアップロードするための Shared Access Signature (SAS) URI を要求します。 IoT クライアント デバイスは、パブリック インターネット経由で要求を送信します。
IoT Hub は、デバイスに対するこの要求を処理します。 マネージド ID 認証を使用して Blob Storage アカウントに直接接続します。このアカウントには、ユーザー委任キー要求に対する Storage BLOB データ共同作成者 アクセス許可があります。
IoT Hub は、Blob Storage アカウントにユーザー委任キーを要求します。 有効期間の短い SAS トークンは、BLOB コンテナー内の要求された BLOB に対する読み取り/書き込みアクセス許可をデバイスに付与します。
IoT Hub は、関連付け ID と共に、パブリック Blob Storage アカウント URI と SAS トークンを IoT クライアント デバイスに送信します。
IoT クライアント デバイスには、パブリック Blob Storage URI をカスタム ドメイン (たとえば、 device ツインに置き換えるロジックがあります。 IoT デバイスは、標準の Blob Storage SDK を使用して、カスタム Blob Storage DNS を介してファイルをアップロードします。
Application Gateway は、クライアント デバイスから HTTP POST を受信し、Azure Private Link 経由で BLOB ストレージ アカウントに送信します。
ファイルのアップロードが完了すると、IoT クライアント デバイスは Azure IoT SDK を使用して IoT Hub に通知します。
IoT クライアント デバイスは、通知が構成されている場合に、IoT Hub がバックエンド サービスへのファイル アップロード通知をトリガーできるように、ファイルのアップロード状態を更新します。 クライアント デバイスは、IoT Hub でのファイルのアップロードに関連付けられているリソースも解放します。
コンポーネント
Application Gateway はサービスとしてのプラットフォーム (PaaS) で管理されるソリューションであり、高度にセキュリティで保護され、スケーラブルで高可用性のフロントエンドを構築するために使用できます。 このアーキテクチャでは、Application Gateway は受信インターネット HTTPS トラフィックを処理し、TLS 終了を適用し、TLS を Blob Storage アカウントとネゴシエートし、プライベート ネットワーク経由で Blob Storage アカウントにトラフィックを転送します。
Azure Firewall は、Azure Virtual Network リソースの保護を提供します。 このアーキテクチャでは、Azure Firewall は境界ネットワークとスポーク ネットワーク間のトラフィックをフィルター処理してルーティングします。
IoT Hub は PaaS で管理されるソリューションであり、IoT アプリケーションとそれが管理するデバイス間の双方向通信のための中央メッセージ ハブとして機能します。 このアーキテクチャでは、IoT Hub は、IoT クライアント デバイスが制御およびデータ プレーン操作のために接続する中央エンドポイントです。
Private Link は、データを Microsoft ネットワーク上に保持しながら、Azure プラットフォームでホストされているサービスへのプライベート アクセスを提供します。 このアーキテクチャでは、Private Link は Application Gateway と Blob Storage アカウント間のプライベート通信を提供します。
Storage は、耐久性と可用性に優れ、非常にスケーラブルなクラウド ストレージ ソリューションを提供します。 これには、オブジェクト、ファイル、ディスク、キュー、テーブルのストレージ機能が含まれます。 このアーキテクチャでは、デバイスは Blob Storage を使用して、IoT Hub がユーザー委任を通じて提供する有効期間の短い SAS トークンを使用してクラウドにファイルをアップロードします。
プライベート DNSゾーンカスタム DNS ソリューションを必要とせずに、仮想ネットワーク内のドメイン名を管理および解決するための信頼性の高いセキュリティ強化 DNS サービスを提供します。 このアーキテクチャでは、プライベート DNS ゾーンは Blob Storage のプライベート DNS エントリを提供し、ストレージ BLOB エンドポイントがネットワーク内のプライベート IP エンドポイントに変換されるようにします。
Virtual Network は、Azure のプライベート ネットワークの基本的な構成要素です。 このサービスを使用すると、Azure 仮想マシンなど、さまざまな種類の Azure リソースが、セキュリティを強化された状態で相互、インターネット、およびオンプレミス ネットワークと通信できます。 このアーキテクチャでは、仮想ネットワークを使用してプライベート ネットワーク トポロジを構築します。これにより、Azure ベースのサービスのインターネット パブリック エンドポイントが回避されます。
シナリオの詳細
通常のデプロイでは、Azure IoT クライアント デバイスがストレージ アカウントと直接通信してファイルをアップロードする必要があります。 ストレージ アカウントでインターネット トラフィックを無効にすると、クライアント IoT クライアント デバイスによるファイルのアップロードがブロックされます。 IoT Hub ファイルのアップロード機能は、BLOB に対する読み取り/書き込みアクセス許可を持つ SAS トークンを生成するためのユーザー委任としてのみ機能します。 ファイルのアップロード自体が IoT Hub を通過しません。 IoT クライアント デバイスは、実際のアップロードに通常の Blob Storage SDK を使用します。
このシナリオでは、IoT Hub とストレージ アカウント間の通信は引き続きパブリック エンドポイントを経由します。 この例外は、リソース インスタンスのストレージ ネットワーク構成によって発生する可能性があります。 ストレージ アカウントへのパブリック インターネット アクセスを無効にし、Azure サービスとリソースの特定のインスタンスが Azure バックボーン経由で接続できるようにすることができます。 このネットワーク境界は、Azure RBAC を使用してデータ プレーンアクセスを制限する Microsoft Entra ID ベースの ID 境界とペアになっています。
このアーキテクチャでは、マネージド ID が IoT Hub に割り当てられます。 マネージド ID には、 Storage BLOB データ共同作成者 のロールが、指定されたストレージ アカウントに割り当てられます。 このアクセス許可を使用すると、IoT Hub はユーザー委任キーを要求して SAS トークンを構築できます。 IoT クライアント デバイスは、ファイル アップロード プロセスの SAS トークンを受け取ります。
Application Gateway は、ストレージ アカウントのプライベート エンドポイントに移動する要求のエントリ ポイントとして機能します。これは、唯一のバックエンドとして構成されます。 Application Gateway はパブリック IP アドレスを使用します。 パブリック IP アドレスを A レコードまたは CNAME レコードにマップするようにカスタム DNS プロバイダーを構成できます。
多くの Azure PaaS サービスにプライベート エンドポイントを使用するための内部セキュリティ要件がある場合は、このシナリオを実装して、IoT ソリューションを運用環境にデプロイするための検証サイクルを短くすることができます。
考えられるユース ケース
このアーキテクチャは、パブリックに公開されていないストレージ アカウントと通信する必要があるデバイスを使用するすべてのシナリオに適用できます。
たとえば、産業用オートメーション ベンダーは、マネージド接続エッジ コントローラーとセンサーを提供しています。 これらのセンサーはパブリック インターネット経由で Azure クラウドと通信する必要がありますが、ベンダーのセキュリティ チームは、ストレージ アカウントにパブリック インターネット アクセスを拒否する必要があります。 このアーキテクチャは、この要件を満たしています。
代替
Azure Firewall トラフィック検査を備えたハブスポーク ネットワーク トポロジが不要な場合は、このアプローチのメリットを得るために簡略化されたネットワーク トポロジを実装できます。 Application Gateway、Private Link、プライベート DNS ゾーンに対応するために、個別のサブネットを持つ 1 つの仮想ネットワークを使用できます。 ストレージ アカウントと IoT Hub では、元のアーキテクチャと同じ構成を使用できます。
簡素化されたアーキテクチャの利点には、複雑さとコストの削減が含まれます。 ハブスポーク トポロジの特定のビジネスまたはエンタープライズ要件がない場合は、簡略化されたアーキテクチャを使用して、ストレージ アカウントからパブリック インターネット エンドポイントを排除します。 また、この方法は、IoT Hub ファイルアップロード機能を使用する IoT アプリケーションが正しく動作することを保証するのにも役立ちます。
同様のアーキテクチャをデプロイするサンプルについては、「 プライベート エンドポイントを介してストレージに IoT Hub ファイルのアップロードを設定するを参照してください。 このサンプルでは、シミュレートされた IoT クライアント デバイスをデプロイし、デバイス ツインを使用してストレージ アカウントのカスタム ドメイン名を置き換えます。
共同作成者
この記事は、Microsoft によって保守されています。 当初の寄稿者は以下のとおりです。
プリンシパルの作成者:
- カトリエン・デ・グレーヴ |ソフトウェア エンジニア
- ビンセント・ミソン |クラウド ソリューション アーキテクト
その他の共同作成者:
- ナシム・アロウシェ |クラウド ソリューション アーキテクト
パブリックでない LinkedIn プロファイルを表示するには、LinkedIn にサインインします。
次のステップ
IoT Hub でファイルを アップロードする方法について説明。