次の方法で共有


仮想ネットワークに対する Azure IoT Hub Device Provisioning Service (DPS) のサポート

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

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

イントロダクション

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

いくつかの理由から、お客様は DPS などの Azure リソースへの接続を制限したい場合があります。 その理由は次のとおりです。

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

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

  • 機密性の高いオンプレミス ネットワークからの流出攻撃を防ぎます。

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

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

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

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

[前提条件]

続行する前に、次の前提条件が満たされていることを確認してください。

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

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

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

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

  • 現時点では、Azure Functions for DPS を使用したカスタム割り当てポリシー は、Azure 関数が仮想ネットワークとプライベート エンドポイントにロックダウンされている場合は機能しません。

  • 現在の DPS 仮想ネットワークのサポートは、DPS へのデータイングレス専用です。 DPS から IoT Hub へのトラフィックであるデータ エグレスでは、専用の仮想ネットワークではなく、サービス間の内部メカニズムが使用されます。 DPS と IoT Hub 間の完全な仮想ネットワーク ベースのエグレス ロックダウンのサポートは、現在利用できません。

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

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

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

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

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

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

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

  1. Azure portal で、DPS リソースに移動します。

  2. サービス メニューの [設定] で、[ネットワーク] タブ 選択します。

  3. 作業ウィンドウで、[ プライベート アクセス ] タブを選択し、[ + プライベート エンドポイントの作成] を選択します。

    Azure portal での DPS インスタンスの新しいプライベート エンドポイントの追加を示すスクリーンショット。

  4. [プライベート エンドポイントの作成] ページの [基本] タブで、次の表に示す情報を入力します。

    [プライベート エンドポイントの作成] ページの [基本] タブを示すスクリーンショット。

    フィールド 価値
    Subscription プライベート エンドポイントを含める目的の Azure サブスクリプションを選択します。
    リソース グループ プライベート エンドポイントを含むリソース グループを選択または作成します。
    名前 プライベート エンドポイントの名前を入力します。
    ネットワーク インターフェイス名 必要に応じて、プライベート エンドポイントのネットワーク インターフェイスの名前を入力します。
    リージョン プライベート エンドポイントのリージョンを選択します。 選択するリージョンは、仮想ネットワークを含むリージョンと同じである必要がありますが、DPS リソースと同じである必要はありません。

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

  5. [プライベート エンドポイントの作成] ページの [リソース] タブで、次の表に示す情報を入力します。

    [プライベート エンドポイントの作成] ページの [リソース] タブを示すスクリーンショット。

    フィールド 価値
    Subscription まだ選択されていない場合は、プライベート エンドポイントが指す DPS リソースを含む Azure サブスクリプションを選択します。
    リソースの種類 まだ選択されていない場合は、 Microsoft.Devices/ProvisioningServices を選択します。
    資源 まだ選択されていない場合は、プライベート エンドポイントがマップされる DPS リソースを選択します。
    ターゲット サブリソース [iotDps] を選択します

    ヒント

    リソース ID またはエイリアス設定による Azure リソースへの接続に関する情報については、この記事の「プライベート エンドポイントの要求」セクションを参照してください。

    [次へ: 仮想ネットワーク] を選択して、プライベート エンドポイントの仮想ネットワークを構成します。

  6. [プライベート エンドポイントの作成] ページの [仮想ネットワーク] タブで、プライベート エンドポイントを作成する仮想ネットワークとサブネットを選択します。

    [プライベート エンドポイントの作成] ページの [仮想ネットワーク] タブを示すスクリーンショット。

    [次へ: DNS] を選択して、プライベート エンドポイントに必要なプライベート DNS 統合オプションを選択します。

  7. [プライベート エンドポイントの作成] ページの [DNS] タブで、プライベート エンドポイントに必要なプライベート DNS 統合オプションを選択します。

    [プライベート エンドポイントの作成] ページの [DNS] タブを示すスクリーンショット。

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

  8. [ 次へ: 確認と作成] を選択し、[ 作成 ] を選択してプライベート エンドポイント リソースを作成します。

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

デバイス プロビジョニング コードでプライベート エンドポイントを使用するには、プロビジョニング コードで、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 は、次のスクリーンショットに示すように、Azure portal の DPS リソースの [プロパティ] ページに表示されます。

    Azure portal の DPS インスタンスの [プロパティ] ページを示すスクリーンショット。DPS インスタンスのリソース ID が強調表示されています。

    注意事項

    リソース 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

    [次へ: 仮想ネットワーク] を選択して、プライベート エンドポイントの仮想ネットワークを構成します。

  3. [プライベート エンドポイントの作成] ページの [仮想ネットワーク] タブで、プライベート エンドポイントを作成する仮想ネットワークとサブネットを選択します。

    [プライベート エンドポイントの作成] ページの [仮想ネットワーク] タブを示すスクリーンショット。

    [次へ: DNS] を選択して、プライベート エンドポイント要求に必要なプライベート DNS 統合オプションを選択します。

  4. [プライベート エンドポイントの作成] ページの [DNS] タブで、プライベート エンドポイント要求に必要なプライベート DNS 統合オプションを選択します。

    [プライベート エンドポイントの作成] ページの [DNS] タブを示すスクリーンショット。

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

  5. [ 次へ: 確認と作成] を選択し、[ 作成 ] を選択してプライベート エンドポイント要求を作成します。

  6. DPS 所有者は、Azure portal の DPS インスタンスの [ネットワーク] ページの [プライベート エンドポイント接続] リストにプライベート エンドポイント要求を表示します。 そのページで、所有者はプライベート エンドポイント要求を 承認 または 拒否 できます。

    Azure portal の DPS インスタンスの [ネットワーク] ページを示すスクリーンショット。プライベート エンドポイント要求が強調表示されています。

プライベート エンドポイントの価格

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

次のステップ

DPS セキュリティ機能の詳細については、以下をご覧ください。