Microsoft Entra ID を使って Azure IoT Hub Device Provisioning Service (DPS) へのアクセスを制御する (プレビュー)

Microsoft Entra ID を使用して、デバイス ID の作成やダイレクト メソッドの呼び出しといった、Azure IoT Hub Device Provisioning Service (DPS) API に対する要求を認証できます。 Azure のロールベースのアクセス制御 (Azure RBAC) を使用して、これらの同じサービス API を認可することもできます。 これらのテクノロジを一緒に使用すると、Azure IoT Hub Device Provisioning Service (DPS) API にアクセスするためのアクセス許可を Microsoft Entra のセキュリティ プリンシパルに付与できます。 このセキュリティ プリンシパルは、ユーザー、グループ、またはアプリケーション サービス プリンシパルの場合があります。

Microsoft Entra ID を使用してアクセスを認証し、Azure RBAC を使用してアクセス許可を制御することで、セキュリティ トークンよりも優れたセキュリティと使いやすさを実現できます。 セキュリティ トークンに固有の潜在的なセキュリティ問題を最小限に抑えるために、可能な限り、Microsoft Entra ID と共に Azure IoT Hub Device Provisioning Service (DPS) を使用することをお勧めします。

注記

Azure IoT Hub Device Provisioning Service (DPS) デバイス API では、Microsoft Entra ID を使った認証はサポートされていません (デバイスの登録やデバイス登録状態のルックアップなど)。 対称キー、X.509、または TPM を使って、Azure IoT Hub Device Provisioning Service (DPS) に対してデバイスを認証します。

認証と権限承認

Microsoft Entra セキュリティ プリンシパルで Azure IoT Hub Device Provisioning Service (DPS) API へのアクセスを要求すると、プリンシパルの ID が最初に "認証" されます。 認証では、実行時にその要求に OAuth 2.0 アクセス トークンが含まれている必要があります。 トークンを要求する場合のリソース名は https://azure-devices-provisioning.net です。 アプリケーションは、Azure VM、Azure Functions アプリ、Azure App Service アプリなどの Azure リソース内で実行される場合、マネージド ID として表すことができます。

Microsoft Entra プリンシパルが認証されたら、次の手順は "認可" です。 この手順で、Azure IoT Hub Device Provisioning Service (DPS) は Microsoft Entra ロールの割り当てサービスを使って、プリンシパルが持つアクセス許可を判断します。 プリンシパルのアクセス許可が要求されたリソースまたは API と一致する場合、Azure IoT Hub Device Provisioning Service (DPS) はその要求を認可します。 そのため、このステップでは、セキュリティ プリンシパルに 1 つ以上の Azure ロールを割り当てる必要があります。 Azure IoT Hub Device Provisioning Service (DPS) には、共通のアクセス許可グループがある組み込みロールがいくつか用意されています。

Azure RBAC ロールの割り当てを使って Azure IoT Hub Device Provisioning Service (DPS) へのアクセスを管理する

Microsoft Entra ID と RBAC を使用する場合、Azure IoT Hub Device Provisioning Service (DPS) では、API を要求するプリンシパルに、認可のために適切なレベルのアクセス許可があることが求められます。 プリンシパルにアクセス許可を付与するには、ロールの割り当てを付与します。

特権を最小限にするには、常に、可能な限り最も低いリソースのスコープ (おそらく、Azure IoT Hub Device Provisioning Service (DPS) のスコープ) で適切なロールを割り当てます。

Azure IoT Hub Device Provisioning Service (DPS) には、Microsoft Entra ID と RBAC を使って DPS API へのアクセスを認可するために、次の Azure 組み込みロールが用意されています。

役割 説明
Device Provisioning Service データ共同作成者 Device Provisioning Service のデータ プレーンの操作への完全なアクセスを許可します。
デバイス プロビジョニング サービス データ閲覧者 Device Provisioning Service データ プレーン プロパティへのフル読み取りアクセスを許可します。

また、必要なアクセス許可を組み合わせて、Azure IoT Hub Device Provisioning Service (DPS) で使うカスタム ロールを定義することもできます。 詳細については、Azure のロールベースのアクセス制御のためのカスタム ロールを作成するに関するページを参照してください。

コントロールプレーンの書き込みキーおよび共有アクセス ポリシー キー

Microsoft.Devices/provisioningServices/write アクションにより、プリンシパルは authorizationPolicies コレクションを含む DPS リソースの任意のプロパティを作成または更新できるようになります。 CreateOrUpdateのAzure Resource Manager(ARM)コントラクトは、各ポリシーに対して呼び出し元からのprimaryKey値とsecondaryKey値を受け入れているため、DPSリソースにwriteを保持するプリンシパルは以下のことができます。

  • 共有アクセスポリシー(ルート provisioningserviceowner ポリシーを含む)のプライマリまたはセカンダリキーを選択した値に設定し、そのポリシーとして認証します。
  • 共有アクセスポリシーのキーをローテーションし、既存の利用者を無効化します。
  • 選択したキー値付きの新しい名前付き共有アクセスポリシーを追加してください。

このため、 Microsoft.Devices/provisioningServices/write は、主体が Microsoft.Devices/provisioningServices/listkeys/action を保有しているか Microsoft.Devices/provisioningServices/listkey/actionかに関わらず、リソースの共有アクセスポリシー認証情報の完全な管理と機能的に同等です。

Important

DPS リソースに対して Microsoft.Devices/provisioningServices/write を付与し、 を付与しないカスタム ロールでは、資格情報管理をリソース構成からlistkeys/action。 プリンシパルは書き込みパスを通じて共有アクセスポリシーキーの素材を完全に制御できます。 このパターンに最低権限設定に頼らないでください。

リソース設定を共有アクセスポリシーの認証情報管理から分離する必要がある場合は、以下のいずれかのパターンを用いてください。

  • データプレーンにはMicrosoft Entra ID認証を優先してください。 組み込みの デバイスプロビジョニングサービスデータコントリビューター または デバイスプロビジョニングサービスデータリーダー の役割を登録管理に割り当て、可能な限りリソースの共有アクセス署名アクセスを無効にしてください。
  • リソーススコープで write を制限しましょう。 writeキー制御を意味するため、共有アクセスポリシーの認証情報を信頼しているプリンシパルにのみ付与してください。
  • コントロール プレーンのアクティビティを監査します。 制御プレーンPUTを通じて行われたauthorizationPoliciesの変更は、Microsoft.Devices/provisioningServices/write操作の下にあるAzureアクティビティログに記録されます。 認証情報アクセスの監査時に、これらのイベントと listkeys/action イベントを併せて確認してください。

同じ点がAzure IoT Hubにも当てはまります。 詳細については、「Microsoft Entra ID を使って IoT Hub へのアクセスを制御する」をご覧ください。

リソースのスコープ

セキュリティ プリンシパルに Azure RBAC ロールを割り当てる前に、セキュリティ プリンシパルに必要なアクセスのスコープを決定します。 常にできるだけ狭いスコープのみを付与するのが最善の方法です。 より広い範囲で定義されている Azure RBAC ロールは、その下のリソースによって継承されます。

次の一覧で、IoT Hub へのアクセスのスコープとして指定できるレベルを、最も狭いスコープから順に示します。

  • Azure IoT Hub Device Provisioning Service (DPS)。 このスコープでは、ロールの割り当ては Azure IoT Hub Device Provisioning Service (DPS) に適用されます。 登録グループや個人登録のような、より小さなスコープでのロールの割り当てはサポートされていません。
  • リソース グループです。 このスコープでは、ロールの割り当てがリソース グループ内のすべての IoT ハブに適用されます。
  • サブスクリプション。 このスコープでは、ロールの割り当てがサブスクリプションにあるすべてのリソース グループ内のすべての IoT ハブに適用されます。
  • 管理グループ。 このスコープでは、ロールの割り当てが、管理グループ内のすべてのサブスクリプションにあるすべてのリソース グループ内のすべての IoT ハブに適用されます。

Azure IoT Hub Device Provisioning Service (DPS) API のアクセス許可

次の表は、Azure IoT Hub Device Provisioning Service (DPS) の API 操作に使用できるアクセス許可について説明したものです。 クライアントで特定の操作を呼び出せるようにするには、クライアントの割り当て済み RBAC ロールで、その操作に十分なアクセス許可が提供されることを確認します。

RBAC アクション 説明
Microsoft.Devices/provisioningServices/attestationmechanism/details/action 構成証明メカニズムの詳細を取得します
Microsoft.Devices/provisioningServices/enrollmentGroups/read 登録グループを読み取ります
Microsoft.Devices/provisioningServices/enrollmentGroups/write 登録グループを書き込みます
Microsoft.Devices/provisioningServices/enrollmentGroups/delete 登録グループを削除します
Microsoft.Devices/provisioningServices/enrollments/read 登録情報の読み取り
Microsoft.Devices/provisioningServices/enrollments/write 登録情報を書き込む
Microsoft.Devices/provisioningServices/enrollments/delete 登録を削除します
Microsoft.Devices/provisioningServices/registrationStates/read 登録状態を読み取ります
Microsoft.Devices/provisioningServices/registrationStates/delete 登録状態を削除します

Azure CLI 用 Azure IoT 拡張機能

Azure IoT Hub Device Provisioning Service (DPS) に対するコマンドのほとんどは、Microsoft Entra 認証をサポートしています。 --auth-type または key 値を受け取る login パラメーターを使用して、コマンドの実行に使用される認証の種類を制御できます。 key 値が既定値です。

  • --auth-type の値が key である場合、CLI が Azure IoT Hub Device Provisioning Service (DPS) と対話するときに適切なポリシーが自動的に検出されます。

  • --auth-type の値が login の場合、プリンシパルでログインした Azure CLI からのアクセス トークンがこの操作に使用されます。

  • 現在、次のコマンドは --auth-type をサポートしています。

    • az iot dps enrollment
    • az iot dps enrollment-group
    • az iot dps registration

詳細については、Azure CLI 用の Azure IoT 拡張機能のリリース ページを参照してください。

SDK とサンプル

Azure portal からの Microsoft Entra ID アクセス

注記

Azure portal からの Microsoft Entra アクセスは、プレビュー段階である現在は使用できません。

次のステップ

  • アプリケーションで Microsoft Entra ID を使用する利点の詳細については、Microsoft Entra ID との統合に関する記事を参照してください。
  • Microsoft Entra ID からユーザーやサービス プリンシパルのアクセス トークンを要求する方法の詳細については、「Microsoft Entra ID の認証シナリオ」をご覧ください。