仮想ネットワーク向けの Azure IoT Hub Device Provisioning Service (DPS) サポート

この記事では、DPS を使用した IoT ハブでの IoT デバイス プロビジョニングの仮想ネットワーク (VNET) 接続パターンについて説明します。 このパターンは、顧客が所有する Azure VNET 内のデバイス、DPS、IoT ハブ間のプライベート接続を提供します。

DPS が VNET で構成されているほとんどのシナリオでは、IoT Hub も同じ VNET で構成されます。 IoT Hub の VNET のサポートと構成の詳細については、IoT Hub 仮想ネットワークのサポートに関するページを参照してください。

はじめに

既定では、DPS ホスト名は、インターネット経由でパブリックにルーティング可能な IP アドレスを持つパブリック エンドポイントにマップされます。 このパブリック エンドポイントは、すべての顧客に表示されます。 IoT デバイスは、ワイドエリア ネットワークやオンプレミス ネットワークを経由してパブリック エンドポイントへのアクセスを試行できます。

いくつかの理由から、お客様は DPS などの Azure リソースへの接続を制限することをお勧めします。 これらの理由には以下のものが含まれます。

  • パブリック インターネット経由での接続の露出を防止します。 IoT ハブと DPS リソースのネットワーク レベルの分離によって追加のセキュリティ レイヤーを導入することで、露出を減らすことができます

  • オンプレミスのネットワーク資産からのプライベート接続エクスペリエンスを有効にし、データとトラフィックが Azure バックボーン ネットワークに直接送信されるようにする。

  • 機微なオンプレミス ネットワークからの抜き取り攻撃を防ぐ。

  • プライベート エンドポイントを使用して確立された Azure 全体の接続パターンに従う。

接続を制限するための一般的な方法としては、DPS IP フィルター規則プライベート エンドポイントを使用した仮想ネットワーク (VNET) があります。 この記事の目的は、プライベート エンドポイントを使用した DPS の VNET アプローチについて説明することです。

オンプレミス ネットワークで動作するデバイスは、仮想プライベートネットワーク (VPN) または ExpressRoute プライベート ピアリングを使用して Azure の VNET に接続し、プライベート エンドポイントを介して DPS リソースにアクセスできます。

プライベート エンドポイントは、Azure リソースにアクセス可能な、顧客所有の VNET 内に割り当てられたプライベート IP アドレスです。 DPS リソース向けのプライベート エンドポイントがあると、VNET 内で動作するデバイスが、パブリック エンドポイントへのトラフィックを許可することなく、DPS リソースによるプロビジョニングを要求できます。 各 DPS リソースは複数のプライベート エンドポイントをサポートでき、それぞれが異なるリージョンの VNET に配置される可能性があります。

前提条件

続行する前に、確実に次の前提条件が満たされているようにしてください。

プライベート エンドポイントの制限事項

プライベート エンドポイントを使用する場合、DPS に関する次の制限事項に注意してください。

  • DPS リソースと、リンクされた IoT ハブが異なるクラウドにある場合、プライベート エンドポイントは動作しません。 たとえば、Azure Government とグローバル Azure です。

  • DPS のプライベート エンドポイントでは、パブリック リージョンでのみサポートされている Azure Private Link が使用されます。 詳細については、Azure Private Link の提供状況に関する記事を参照してください。

  • 現時点では、DPS 向けの Azure Functions のカスタム割り当てポリシーは、Azure Functions が VNET とプライベート エンドポイントにロックダウンされている場合には機能しません。

  • 現在の DPS VNET のサポートは、DPS へのデータ イングレスのみが対象です。 データ エグレス (DPS から IoT Hub へのトラフィック) は、専用の VNET ではなく、内部のサービス間のメカニズムを使用します。 DPS と IoT Hub 間での VNET ベースの完全なエグレス ロックダウンのサポートは、現在使用できません。

  • 最短待機時間割り当てポリシーを使用して、待機時間が最も短いデバイスを IoT ハブに割り当てます。 この割り当てポリシーは、仮想ネットワーク環境では信頼できません。

  • 通常、1 つ以上のプライベート エンドポイントを有効にするには、DPS インスタンスへのパブリック アクセスを無効にする必要があります。 パブリック アクセスが無効になると、Azure portal を使用して登録を管理できなくなります。 代わりに、DPS インスタンスで構成された仮想ネットワークやプライベート エンドポイントの内部のマシンから、Azure CLI、PowerShell、またはサービス API を使って登録を管理できます。

  • プライベート エンドポイントを使用している場合は、Availability Zones をサポートするリージョンのいずれかに DPS をデプロイすることをお勧めします。 そうしないと、プライベート エンドポイントが有効な DPS インスタンスは、障害発生時に可用性が低下する可能性があります。

Note

データ所在地に関する考慮事項:

DPS ではグローバル デバイス エンドポイント (global.azure-devices-provisioning.net) が提供されます。 ただし、グローバル エンドポイントを使用すると、DPS インスタンスが最初に作成されたリージョンの外部にデータがリダイレクトされる可能性があります。 最初の DPS リージョン内にデータ所在地を確保するには、プライベートエンド ポイントを使用します。

プライベート エンドポイントを設定する

プライベート エンドポイントを設定するには、これらの手順に従います。

  1. Azure portal で、DPS リソースを開き、[ネットワーク] タブを選択します。[プライベート エンドポイント接続][+ プライベート エンドポイント] を選択します。

    Screenshot that shows adding a new private endpoint for DPS.

  2. プライベート エンドポイントの作成の基本ページで、次の表に記載されている情報を入力します。

    Screenshot that shows the private endpoints basics page.

    フィールド
    サブスクリプション プライベート エンドポイントを含める Azure サブスクリプションを選択します。
    リソース グループ サービスが含まれるプライベート エンドポイントを選択または作成します
    名前 プライベート エンドポイントの名前を入力します
    リージョン 選択したリージョンは、VNET を含むリージョンと同じである必要がありますが、DPS リソースと同じである必要はありません。

    [次へ: リソース] を選択して、プライベート エンドポイントが指すリソースを構成します。

  3. プライベート エンドポイント リソースの作成ページで、次の表に記載されている情報を入力します。

    Screenshot that shows the private endpoint resource page.

    フィールド
    サブスクリプション プライベート エンドポイントがポイントする DPS リソースを含む Azure サブスクリプションを選択します。
    リソースの種類 Microsoft.Devices/ProvisioningServices を選択します。
    リソース プライベート エンドポイントがマップされる DPS リソースを選択します。
    ターゲット サブリソース iotDps を選択します。

    ヒント

    [リソース ID またはエイリアス設定による Azure リソースへの接続についての情報は、この記事のプライベート エンドポイントを要求するセクションで説明しています。

    [次へ: 構成] を選択して、プライベート エンドポイントの VNET を構成します。

  4. プライベート エンドポイントの構成の作成ページで、プライベート エンドポイントの作成先となる仮想ネットワークとサブネットを指定します。

    [次へ: タグ] を選択し、必要に応じて、リソースのタグを指定します。

    Screenshot that shows the private endpoint configuration page.

  5. [確認と作成][作成] の順に選択し、プライベート エンドポイント リソースを作成します。

デバイスでプライベート エンドポイントを使用する

デバイス プロビジョニング コードでプライベート エンドポイントを使用するには、Azure portal 内の DPS インスタンスの概要ページに示されているように、DPS インスタンスの特定のサービス エンドポイントを使用する必要があります。 サービス エンドポイントは次のように設定されています。

<Your DPS Tenant Name>.azure-devices-provisioning.net

ドキュメントと SDK で示されているほとんどのサンプル コードでは、グローバル デバイス エンドポイント (global.azure-devices-provisioning.net) と ID スコープを使用して、特定の DPS インスタンスを解決します。 プライベート エンドポイントを使用して DPS インスタンスに接続し、デバイスをプロビジョニングするときに、グローバル デバイス エンドポイントの代わりにサービス エンドポイントを使用します。

たとえば、Azure IoT C SDK のプロビジョニング デバイス クライアント サンプル (pro_dev_client_sample) は、prov_dev_client_sample.c のグローバル プロビジョニング URI (global_prov_uri) としてグローバル デバイス エンドポイントを使用するように設計されています。

MU_DEFINE_ENUM_STRINGS_WITHOUT_INVALID(PROV_DEVICE_RESULT, PROV_DEVICE_RESULT_VALUE);
MU_DEFINE_ENUM_STRINGS_WITHOUT_INVALID(PROV_DEVICE_REG_STATUS, PROV_DEVICE_REG_STATUS_VALUES);

static const char* global_prov_uri = "global.azure-devices-provisioning.net";
static const char* id_scope = "[ID Scope]";
}

PROV_DEVICE_RESULT prov_device_result = PROV_DEVICE_RESULT_ERROR;
PROV_DEVICE_HANDLE prov_device_handle;
if ((prov_device_handle = Prov_Device_Create(global_prov_uri, id_scope, prov_transport)) == NULL)
{
    (void)printf("failed calling Prov_Device_Create\r\n");

プライベート エンドポイントでサンプルを使用するには、DPS リソースにサービス エンドポイントを使用するように、上記の強調表示されたコードを変更します。 たとえば、サービス エンドポイントが mydps.azure-devices-provisioning.net の場合、コードは次のようになります。

static const char* global_prov_uri = "global.azure-devices-provisioning.net";
static const char* service_uri = "mydps.azure-devices-provisioning.net";
static const char* id_scope = "[ID Scope]";
    PROV_DEVICE_RESULT prov_device_result = PROV_DEVICE_RESULT_ERROR;
    PROV_DEVICE_HANDLE prov_device_handle;
    if ((prov_device_handle = Prov_Device_Create(service_uri, id_scope, prov_transport)) == NULL)
    {
        (void)printf("failed calling Prov_Device_Create\r\n");
    }

プライベート エンドポイントを要求する

リソース ID によって、DPS インスタンスに対してプライベート エンドポイントを要求できます。 この要求を行うには、リソースの所有者にリソース ID を提供してもらう必要があります。

  1. 次に示すように、リソース ID は DPS リソースの [プロパティ] タブに表示されます。

    Screenshot that shows the DPS Properties tab.

    注意事項

    リソース ID にはサブスクリプション ID が含まれていることに注意してください。

  2. リソース ID を取得したら、上記のプライベート エンドポイントを設定するのステップからプライベート エンドポイントリソースを作成するページのステップ 3 までに従います。 [リソース ID またはエイリアスを使って Azure リソースに接続します] を選択し、次の表に示す情報を入力します。

    フィールド
    リソース ID またはエイリアス DPS リソースのソース ID を入力します。
    ターゲット サブリソース iotDps を入力します
    要求メッセージ DPS リソース所有者への要求メッセージを入力します。
    たとえば、 のように指定します。
    Please approve this new private endpoint
    for IoT devices in site 23 to access this DPS instance

    [次へ: 構成] を選択して、プライベート エンドポイントの VNET を構成します。

  3. プライベート エンドポイントの構成の作成ページで、プライベート エンドポイントの作成先となる仮想ネットワークとサブネットを指定します。

    [次へ: タグ] を選択し、必要に応じて、リソースのタグを指定します。

  4. [確認と作成][作成] の順に選択し、プライベート エンドポイント要求を作成します。

  5. DPS 所有者は、[DPS ネットワーク] タブの [プライベートエンドポイント接続] 一覧でプライベート エンドポイント要求を確認できます。そのページで、所有者はプライベート エンドポイント要求の承認または拒否ができます。

    Screenshot that shows the private endpoint request approval.

プライベート エンドポイントの料金

料金の詳細については、「Azure Private Link の料金」をご覧ください。

次のステップ

DPS セキュリティ機能の詳細について、下記のリンク使用してください。