マネージド ID は、Microsoft Entra ID で自動的に管理される ID を安全な方法で Azure サービスに提供します。 この機能により、開発者は ID を指定して資格情報を管理する必要がなくなります。 マネージド ID には、システム割り当てとユーザー割り当ての 2 種類があります。 IoT Hub では両方がサポートされます。
IoT Hub では、メッセージ ルーティング、ファイルのアップロード、デバイスの一括インポートおよびエクスポートなどの機能のために、IoT Hub を他の Azure サービスに接続するためにマネージド ID を使用できます。 この記事では、IoT ハブでさまざまな機能にシステム割り当ておよびユーザー割り当てのマネージド ID を使用する方法について説明します。
前提条件
「Azure リソース用マネージド ID とは?」のシステム割り当てとユーザー割り当てのマネージド ID の違いを理解する
Azure サブスクリプション内の IoT ハブ。 ハブがまだない場合は、「IoT ハブの作成」の手順に従うことができます。
システム割り当てマネージド ID
Azure portal でシステム割り当てマネージド ID を有効または無効にできます
Azure Portal にサインインし、IoT Hub に移動します。
ナビゲーション メニューの [セキュリティの設定] セクションで [ID] を選択します。
[システム割り当て済み] タブを選択します。
システム割り当てマネージド ID の [状態] を [オン] または [オフ] に設定し、[保存] を選択します。
注
使用中のシステム割り当てマネージド ID をオフにすることはできません。 機能を無効にする前に、システム割り当てマネージド ID 認証を使用しているカスタム エンドポイントがないことを確認してください。
ユーザー割り当てマネージド ID
このセクションでは、Azure portal を使用して、IoT ハブとの間でユーザー割り当てマネージド ID を追加および削除する方法について説明します。
最初に、スタンドアロン リソースとしてユーザー割り当てマネージド ID を作成する必要があります。 それを行うには、「ユーザー割り当てマネージド ID を管理する」の手順に従います。
IoT ハブに移動し、Azure portal のサービス メニューから [セキュリティ設定] で [ID] を選択します。
[ ユーザー割り当て ] タブで、[ ユーザー割り当てマネージド ID の関連付け] を選択します。 ハブに追加するユーザー割り当てマネージド ID を選択し、[ 追加] を選択します。
IoT ハブからユーザー割り当て ID を削除できます。 削除するユーザー割り当て ID を選択し、[削除] を選択 します。 削除するのは IoT ハブからのみであり、この削除によってユーザー割り当て ID がリソースとして削除されることはありません。 リソースとしてのユーザー割り当て ID を削除するには、「ユーザー割り当てマネージド ID を管理する」の手順に従います。
IoT Hub から他の Azure リソースへのエグレス接続
マネージド ID は、IoT Hub から他の Azure サービスへのエグレス接続に使用できます。 顧客所有のエンドポイント (ストレージ アカウント、イベント ハブ、サービス バス エンドポイントなど) への IoT Hub エグレス接続ごとに、使用するマネージド ID を選択できます。
注
システム割り当てマネージド ID を使用する場合にのみ、IoT Hub にプライベート リソースへのアクセスが許可されます。 ユーザー割り当てマネージド ID を使用する場合、接続を許可するには、そのようなプライベート アクセスに対するパブリック アクセスを有効にする必要があります。
マネージド ID を使用してメッセージ ルーティングを構成する
このセクションでは、例として、Event Hubs カスタム エンドポイントへのメッセージ ルーティングを使用します。 この例は、他のルーティング カスタム エンドポイントにも当てはまります。
Azure portal でご使用のイベント ハブに移動し、マネージド ID に適切なアクセス権を割り当てます。
[アクセス制御 (IAM)] を選択します。
[追加] > [ロールの割り当ての追加] の順に選択します。
[ロール] タブで、[Azure Event Hubs のデータ送信者] を選択します。
[メンバー] タブで、[マネージド ID] を選択し、[メンバーの選択] を選択します。
ユーザー割り当てマネージド ID の場合は、サブスクリプションを選択し、[ユーザー割り当てマネージド ID] を選択してから、ユーザー割り当てマネージド ID を選択します。
システム割り当てマネージド ID の場合は、サブスクリプションを選択し、[すべてのシステム割り当てマネージド ID] を選択してから、IoT Hub のリソース名を選択します。
[確認と 割り当て] タブで、 [確認と割り当て] を選択して ロールを割り当てます。
ロールの割り当ての詳細については、「Azure portal を使用して Azure ロールを割り当てる」を参照してください。
仮想ネットワーク経由でカスタム エンドポイントへの接続を制限する必要がある場合は、信頼された Microsoft ファースト パーティの例外を有効にして、IoT ハブに特定のエンドポイントへのアクセス権を付与する必要があります。 たとえば、イベント ハブ カスタムエンド ポイントを追加する場合、イベント ハブの [ファイアウォールと仮想ネットワーク] タブに移動し、[選択したネットワークからのアクセスを許可する] オプションを有効にします。 [ 例外 ] ボックスの一覧で、[ 信頼できる Microsoft サービスがイベント ハブにアクセスできるようにする] チェック ボックスをオンにし、[保存] を選択 します。 この要件は、ストレージ アカウントと Service Bus にも適用されます。 Azure Private Link を使用した仮想ネットワークに対する IoT Hub のサポートの詳細について説明します。
注
イベント ハブを IoT Hub のカスタム エンドポイントとして追加する前に、上記の手順を完了して、マネージ ID に適切なアクセスを割り当てる必要があります。 ロールの割り当てが反映されるまで数分待ちます。
次に、IoT ハブに移動します。 ご使用のハブで、[メッセージ ルーティング] に移動し、[追加] を選択します。
[エンドポイント] タブで、次の情報を指定して、イベント ハブのエンドポイントを作成します。
パラメーター 値 [エンドポイントの種類] [Event Hubs] を選択します。 [エンドポイント名] 新しいエンドポイントの一意の名前を指定するか、[既存のものを選択] を選択して既存の Event Hubs エンドポイントを選択します。 Event Hubs 名前空間 ドロップダウン メニューを使用して、サブスクリプション内の既存の Event Hubs 名前空間を選択します。 イベント ハブのインスタンス ドロップダウン メニューを使用して、名前空間内の既存のイベント ハブを選択します。 認証の種類 [ユーザー割り当て] を選択し、ドロップダウン メニューを使用して、イベント ハブで作成した [ユーザー割り当て ID] を選択します。 [作成 + 次へ] を選択します。 ウィザードを続行して、このエンドポイントを指すルートを作成するか、ウィザードを閉じることができます。
既存のカスタム エンドポイントの認証の種類を変更できます。 エンドポイントを変更するには、次の手順を実行します。
IoT ハブで、左側のナビゲーション ペインの [メッセージ ルーティング] を選択し、[カスタム エンドポイント] を選択します。
変更するカスタム エンドポイントのチェック ボックスをオンにし、[認証の種類の変更] を選択します。
このエンドポイントの新しい認証の種類を選択し、[保存] をクリックします。
マネージド ID を使用してファイルのアップロードを構成する
IoT Hub のファイルのアップロード機能を使用すると、デバイスで顧客所有のストレージ アカウントにファイルをアップロードできます。 ファイルのアップロードを機能させるには、IoT Hub でストレージ アカウントに接続する必要があります。 メッセージ ルーティングと同様に、Azure Storage アカウントへの IoT Hub エグレス接続のための優先する認証の種類とマネージド ID を選択できます。
Azure Portal のストレージ アカウントに移動します。
[アクセス制御 (IAM)] を選択します。
[追加] > [ロールの割り当ての追加] の順に選択します。
[ロール] タブで [ストレージ BLOB データ共同作成者] を選択します。 ([共同作成者] や [ストレージ アカウント共同作成者] は選択しないでください。)
[メンバー] タブで、[マネージド ID] を選択し、[メンバーの選択] を選択します。
ユーザー割り当てマネージド ID の場合は、サブスクリプションを選択し、[ユーザー割り当てマネージド ID] を選択してから、ユーザー割り当てマネージド ID を選択します。
システム割り当てマネージド ID の場合は、サブスクリプションを選択し、[すべてのシステム割り当てマネージド ID] を選択してから、IoT Hub のリソース名を選択します。
[確認と 割り当て] タブで、 [確認と割り当て] を選択して ロールを割り当てます。
ロールの割り当ての詳細については、「Azure portal を使用して Azure ロールを割り当てる」を参照してください。
仮想ネットワーク経由でストレージ アカウントへの接続を制限する必要がある場合は、信頼された Microsoft ファースト パーティの例外を有効にして、IoT ハブにストレージ アカウントへのアクセス権を付与する必要があります。 ご使用のストレージ アカウントのリソース ページで、[ファイアウォールと仮想ネットワーク] タブに移動し、[選択したネットワークからのアクセスを許可する] オプションを有効にします。 [ 例外 ] ボックスの一覧で、[ 信頼できる Microsoft サービスがこのストレージ アカウントにアクセスすることを許可する] チェック ボックスをオンにし、[保存] を選択 します。 Azure Private Link を使用した仮想ネットワークに対する IoT Hub のサポートの詳細について説明します。
注
マネージド ID を使用するファイルのアップロードのためにストレージ アカウントを IoT Hub に保存する前に、上記の手順を完了して、マネージド ID に適切なアクセスを割り当てる必要があります。 ロールの割り当てが反映されるまで数分待ちます。
ご使用の IoT Hub のリソース ページで、[ファイルのアップロード] タブに移動します。
表示されたページで、BLOB ストレージで使用する予定のコンテナーを選択し、必要に応じて [ファイル通知の設定]、[SAS TTL]、[既定の TTL]、[最大配信回数] を構成します。 優先する認証の種類を選択し、[ 保存] を選択します。 この手順でエラーが発生した場合は、一時的にストレージ アカウントを設定して、すべてのネットワークからのアクセスを許可してから、再試行してください。 ファイルのアップロードの構成が完了したら、ストレージ アカウントでファイアウォールを構成できます。
注
ファイルのアップロードのシナリオでは、ハブとデバイスの両方がストレージ アカウントに接続する必要があります。 前の手順では、必要な認証の種類を使用して IoT ハブをストレージ アカウントに接続します。 SAS URI を使用してデバイスをストレージに接続する必要があります。 現在、SAS URI は接続文字列を使用して生成されます。 「IoT Hub を使用してファイルをアップロードする」の手順に従います。
マネージド ID を使用してデバイスの一括インポートとエクスポートを構成する
IoT Hub では、お客様が提供するストレージ BLOB との 間でデバイス情報を一括でインポートおよびエクスポート する機能がサポートされています。 この機能では、IoT Hub からストレージ アカウントへの接続が必要です。
Azure Portal のストレージ アカウントに移動します。
[アクセス制御 (IAM)] を選択します。
[追加] > [ロールの割り当ての追加] の順に選択します。
[ロール] タブで [ストレージ BLOB データ共同作成者] を選択します。 ([共同作成者] や [ストレージ アカウント共同作成者] は選択しないでください。)
[メンバー] タブで、[マネージド ID] を選択し、[メンバーの選択] を選択します。
ユーザー割り当てマネージド ID の場合は、サブスクリプションを選択し、[ユーザー割り当てマネージド ID] を選択してから、ユーザー割り当てマネージド ID を選択します。
システム割り当てマネージド ID の場合は、サブスクリプションを選択し、[すべてのシステム割り当てマネージド ID] を選択してから、IoT Hub のリソース名を選択します。
[確認と 割り当て] タブで、 [確認と割り当て] を選択して ロールを割り当てます。
ロールの割り当ての詳細については、「Azure portal を使用して Azure ロールを割り当てる」を参照してください
インポートおよびエクスポートのジョブに REST API または SDK を使用する
インポートおよびエクスポート ジョブを作成するために Azure IoT REST API を使用できるようになりました。 要求本文で次のプロパティを指定する必要があります。
- storageAuthenticationType: 値を identityBased に設定します。
- inputBlobContainerUri: このプロパティは、インポート ジョブでのみ設定します。
- outputBlobContainerUri: このプロパティは、インポートとエクスポートの両方のジョブに対して設定します。
- identity: 値を、使用するマネージド ID に設定します。
Azure IoT Hub SDK では、サービス クライアントのレジストリ マネージャーでもこの機能がサポートされます。 次のコード スニペットでは、C# SDK を使用してインポート ジョブまたはエクスポート ジョブを開始する方法を示しています。
C# のコード スニペット
// Create an export job
JobProperties jobProperties = JobProperties.CreateForExportJob(
outputBlobContainerUri: blobContainerUri,
excludeKeysInExport: false,
storageAuthenticationType: StorageAuthenticationType.IdentityBased,
identity: new ManagedIdentity
{
userAssignedIdentity = userDefinedManagedIdentityResourceId
});
// Create an import job
JobProperties jobProperties = JobProperties.CreateForImportJob(
inputBlobContainerUri: blobContainerUri,
outputBlobContainerUri: blobContainerUri,
storageAuthenticationType: StorageAuthenticationType.IdentityBased,
identity: new ManagedIdentity
{
userAssignedIdentity = userDefinedManagedIdentityResourceId
});
Python のコード スニペット
# see note below
iothub_job_manager = IoTHubJobManager("<IoT Hub connection information>")
# Create an import job
result = iothub_job_manager.create_import_export_job(JobProperties(
type="import",
input_blob_container_uri="<input container URI>",
output_blob_container_uri="<output container URI>",
storage_authentication_type="identityBased",
identity=ManagedIdentity(
user_assigned_identity="<resource ID of user assigned managed identity>"
)
))
# Create an export job
result = iothub_job_manager.create_import_export_job(JobProperties(
type="export",
output_blob_container_uri="<output container URI>",
storage_authentication_type="identityBased",
exclude_keys_in_export=True,
identity=ManagedIdentity(
user_assigned_identity="<resource ID of user assigned managed identity>"
)
))
注
- storageAuthenticationType が identityBased に設定されていて、userAssignedIdentity プロパティがnull でない場合、ジョブは指定されたユーザー割り当てマネージド ID を使用します。
- userAssignedIdentity で指定されたユーザー割り当てマネージド ID で IoT ハブが構成されていない場合、ジョブは失敗します。
- storageAuthenticationType が identityBased に設定されている場合、userAssignedIdentity プロパティが null の場合、ジョブはシステム割り当て ID を使用します。
- IoT ハブがユーザー割り当てマネージド ID で構成されていない場合、ジョブは失敗します。
- storageAuthenticationType が identityBased に設定されていて、ユーザー割り当てマネージド ID またはシステム割り当てマネージド ID がハブで構成されていない場合、ジョブは失敗します。
SDK のサンプル
次のステップ
IoT Hub の機能の詳細については、次のリンクを参照してください。