次の方法で共有


IoT Hub での ADR 統合と Microsoft がサポートする X.509 証明書管理の概要 (プレビュー)

この記事では、 Azure Device Registry (ADR) 統合と Microsoft がサポートする X.509 証明書管理を使用して新しい IoT Hub を作成する方法について説明します。

Important

ADR 統合と Microsoft がサポートする X.509 証明書管理を備えた Azure IoT Hub は パブリック プレビュー 段階であり、運用環境のワークロードには推奨されません。 詳細については、「 FAQ: IoT Hub の新機能」を参照してください。

[前提条件]

  • 有効な Azure サブスクリプション。 Azure サブスクリプションをお持ちでない場合は、無料アカウントを作成してください。

  • Azure CLI がインストールされていない場合は、手順に従って Azure CLI をインストールします。

  • プレビューが 有効になっている Azure IoT CLI 拡張機能 をインストールして、IoT Hub の ADR 統合と証明書管理機能にアクセスします。

    1. 既存の Azure CLI 拡張機能のインストールを確認します。

      az extension list
      
    2. 既存の azure-iot インストールをすべて削除します。

      az extension remove --name azure-iot
      
    3. プレビューが有効になっているインデックスから azure-iot 拡張機能をインストールします。

      az extension add --name azure-iot --allow-preview
      

      または、GitHub リリース ページから .whl ファイルをダウンロードして、拡張機能を手動でインストールします。

      az extension add --upgrade --source https://github.com/Azure/azure-iot-cli-extension/releases/download/v0.30.0b1/azure_iot-0.30.0b1-py3-none-any.whl
      
    4. インストール後、azure-iot 拡張機能のバージョンが 0.30.0b1 より大きいかどうかを検証します。

      az extension list
      
  • ターゲット スコープ内でロールの割り当てを実行する権限があることを確認します。 Azure でロールの割り当てを実行するには、適切なスコープで所有者やユーザー アクセス管理者などの 特権ロールが必要です。

展開方法を選択する

証明書管理を使用するには、IoT Hub、ADR、 Device Provisioning Service (DPS) も設定する必要があります。 必要に応じて、証明書管理を有効にせず、ADR を使用して IoT Hub のみを構成することもできます。

ADR 統合と証明書管理を使用して IoT Hub を設定するには、Azure CLI またはセットアップ プロセスを自動化するスクリプトを使用できます。

デプロイ方法 Description
ページの上部にある Azure CLI を選択する Azure CLI を使用して、新しい IoT Hub、DPS インスタンス、ADR 名前空間を作成し、必要なすべての設定を構成します。
ページの上部にある PowerShell スクリプト を選択する PowerShell スクリプト (Windows のみ) を使用して、新しい IoT Hub、DPS インスタンス、ADR 名前空間の作成を自動化し、必要なすべての設定を構成します。

概要

Azure CLI コマンドを使用して、ADR 統合と証明書管理を使用して IoT Hub を作成します。

この記事のセットアップ プロセスには、次の手順が含まれています。

  1. リソース グループを作成する
  2. 必要なアプリ特権を構成する
  3. ユーザー割り当てマネージド ID を作成する
  4. システム割り当てマネージド ID を使用して ADR 名前空間を作成する
  5. その名前空間をスコープとする資格情報 (ルート CA) とポリシー (発行元 CA) を作成する
  6. リンクされた名前空間とマネージド ID を使用して IoT Hub (プレビュー) を作成する
  7. リンクされた IoT Hub と名前空間を使用して DPS を作成する
  8. 資格情報とポリシー (CA 証明書) を ADR 名前空間に同期する
  9. 登録グループを作成し、ポリシーにリンクして証明書のプロビジョニングを有効にする

Important

プレビュー期間中は、IoT Hub 上で ADR 統合機能と証明書管理機能が有効になっている IoT Hub を 無料で利用できます。 Device Provisioning Service (DPS) は個別に課金され、プレビュー オファーには含まれません。 DPS の価格の詳細については、 Azure IoT Hub の価格に関するページを参照してください。

環境を準備する

Azure Device Registry を使用するように環境を準備するには、次の手順を実行します。

  1. ターミナル ウィンドウを開きます。

  2. Azure アカウントにサインインするには、 az loginを実行します。

  3. アクセス権を持つすべてのサブスクリプションとテナントを一覧表示するには、 az account listを実行します。

  4. 複数の Azure サブスクリプションにアクセスできる場合は、次のコマンドを実行して、IoT デバイスが作成されるアクティブなサブスクリプションを設定します。

    az account set --subscription "<your subscription name or ID>"
    
  5. 現在のアカウントの詳細を表示するには、 az account show実行します。 コマンドの出力から次の値の両方をコピーし、安全な場所に保存します。

    • id GUID。 この値を使用して、サブスクリプション ID を指定します。
    • tenantId GUID。 この値を使用して、テナント ID を使用してアクセス許可を更新します。

リソース グループ、アクセス許可、およびマネージド ID を構成する

IoT ソリューションのリソース グループ、ロール、アクセス許可を作成するには、次の手順を実行します。

  1. 環境のリソース グループを作成します。

    az group create --name <RESOURCE_GROUP_NAME> --location <REGION>
    
  2. リソース グループ レベルで IoT Hub に共同作成者ロールを割り当てます。 AppId値 (IoT Hub のプリンシパル ID) は89d10474-74af-4874-99a7-c23c2f643083され、すべてのハブ アプリで同じです。

    az role assignment create --assignee "89d10474-74af-4874-99a7-c23c2f643083" --role "Contributor" --scope "/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP_NAME>"
    
  3. 新しいユーザー割り当てマネージド ID (UAMI) を作成します。

    az identity create --name <USER_IDENTITY> --resource-group <RESOURCE_GROUP_NAME> --location <REGION>
    
  4. マネージド ID のリソース ID を取得します。 ロールの割り当て、アクセス ポリシーの構成、または ID を他のリソースにリンクするには、リソース ID が必要です。

    UAMI_RESOURCE_ID=$(az identity show --name <USER_IDENTITY> --resource-group <RESOURCE_GROUP_NAME> --query id -o tsv)
    

新しい ADR 名前空間を作成する

このセクションでは、システム割り当てマネージド ID を使用して新しい ADR 名前空間を作成します。 このプロセスにより、ルート CA 資格情報と、名前空間の発行元 CA ポリシーが自動的に生成されます。 プロビジョニング中に資格情報とポリシーを使用してデバイス リーフ証明書に署名する方法の詳細については、「 証明書の管理」を参照してください。

資格情報は省略可能です。 --enable-credential-policyフラグと--policy-name フラグを省略して、マネージド ID を持たない名前空間を作成することもできます。

  1. 新しい ADR 名前空間を作成します。 名前空間 name には、名前の中央に小文字とハイフン ('-') のみを含めることができますが、先頭または末尾には含めません。 たとえば、"msft-namespace" という名前は有効です。
    --enable-credential-policy コマンドは、この名前空間の資格情報 (ルート CA) と既定のポリシー (発行元 CA) を作成します。 このポリシーの名前は、 --policy-name コマンドを使用して構成できます。 既定では、ポリシーは有効期間が 30 日の証明書を発行できます。

    az iot adr ns create --name <NAMESPACE_NAME> --resource-group <RESOURCE_GROUP_NAME> --location <REGION> --enable-credential-policy true --policy-name <POLICY_NAME>
    

    ヒント

    必要に応じて、 --cert-subject パラメーターと --cert-validity-days パラメーターを追加することで、カスタム ポリシーを作成できます。 詳細については、「 カスタム ポリシーの作成」を参照してください。

    システム割り当てマネージド ID を持つ ADR 名前空間の作成には、最大で 5 分かかる場合があります。

  2. システム割り当てマネージド ID またはプリンシパル ID を持つ名前空間が作成されていることを確認します。

    az iot adr ns show --name <NAMESPACE_NAME> --resource-group <RESOURCE_GROUP_NAME>
    
  3. 名前付きの資格情報とポリシーが作成されていることを確認します。

    az iot adr ns credential show --namespace <NAMESPACE_NAME> --resource-group <RESOURCE_GROUP_NAME>
    az iot adr ns policy show --namespace <NAMESPACE_NAME> --resource-group <RESOURCE_GROUP_NAME> --name <POLICY_NAME>
    

    ポリシー名を割り当てなかった場合、ポリシーは "default" という名前で作成されます。

ADR 名前空間にアクセスするための UAMI ロールの割り当て

このセクションでは、 Azure Device Registry 共同作成者 ロールをマネージド ID に割り当て、名前空間にスコープを設定します。 このカスタム ロールを使用すると、ADR 名前空間内の IoT デバイスにフル アクセスできます。

  1. User-Assigned マネージド アイデンティティのプリンシパル ID を取得します。 この ID は、ID にロールを割り当てるために必要です。

    UAMI_PRINCIPAL_ID=$(az identity show --name <USER_IDENTITY> --resource-group <RESOURCE_GROUP> --query principalId -o tsv)
    
  2. ADR 名前空間のリソース ID を取得します。 この ID は、ロールの割り当てのスコープとして使用されます。

    NAMESPACE_RESOURCE_ID=$(az iot adr ns show --name <NAMESPACE_NAME> --resource-group <RESOURCE_GROUP> --query id -o tsv)
    
  3. マネージド ID に Azure Device Registry 共同作成者 ロールを割り当てます。 このロールは、名前空間をスコープとして、必要なアクセス許可をマネージド ID に付与します。

    az role assignment create --assignee $UAMI_PRINCIPAL_ID --role "a5c3590a-3a1a-4cd4-9648-ea0a32b15137" --scope $NAMESPACE_RESOURCE_ID
    

ADR 統合を使用して IoT Hub を作成する

  1. ADR 名前空間にリンクされ、先ほど作成した UAMI を使用して新しい IoT Hub を作成します。

    az iot hub create --name <HUB_NAME> --resource-group <RESOURCE_GROUP> --location <HUB_LOCATION> --sku GEN2 --mi-user-assigned $UAMI_RESOURCE_ID --ns-resource-id $NAMESPACE_RESOURCE_ID --ns-identity-id $UAMI_RESOURCE_ID
    

    Important

    IoT ハブは DNS エンドポイントとして公開されるため、名前を付ける際に機密情報や個人を特定できる情報を入力しないように注意してください。

  2. IoT Hub に正しい ID と ADR プロパティが構成されていることを確認します。

    az iot hub show --name <HUB_NAME> --resource-group <RESOURCE_GROUP> --query identity --output json
    

IoT Hub ロールを割り当てて ADR 名前空間にアクセスする

  1. ADR 名前空間のマネージド ID のプリンシパル ID を取得します。 この ID には、IoT Hub と対話するためのアクセス許可が必要です。

    ADR_PRINCIPAL_ID=$(az iot adr ns show --name <NAMESPACE_NAME> --resource-group <RESOURCE_GROUP> --query identity.principalId -o tsv)
    
  2. IoT Hub のリソース ID を取得します。 この ID は、ロールの割り当てのスコープとして使用されます。

    HUB_RESOURCE_ID=$(az iot hub show --name <HUB_NAME> --resource-group <RESOURCE_GROUP> --query id -o tsv)
    
  3. ADR ID に "共同作成者" ロールを割り当てます。 これにより、ADR 名前空間のマネージド ID 共同作成者が IoT Hub にアクセスできるようになります。 このロールを使用すると、リソースの管理を含む広範なアクセスが可能になりますが、ロールの割り当ては許可されません。

    az role assignment create --assignee $ADR_PRINCIPAL_ID --role "Contributor" --scope $HUB_RESOURCE_ID
    
  4. "IoT Hub レジストリ共同作成者" ロールを ADR ID に割り当てます。 これにより、IoT Hub でデバイス ID を管理するためのより具体的なアクセス許可が付与されます。 これは、ADR がハブ内のデバイスを登録して管理するために不可欠です。

    az role assignment create --assignee $ADR_PRINCIPAL_ID --role "IoT Hub Registry Contributor" --scope $HUB_RESOURCE_ID
    

ADR 統合を使用して Device Provisioning Service インスタンスを作成する

  1. 前のセクションで作成した ADR 名前空間にリンクされた新しい DPS インスタンスを作成します。 DPS インスタンスは、ADR 名前空間と同じリージョンに配置する必要があります。

    az iot dps create --name <DPS_NAME> --resource-group <RESOURCE_GROUP> --location <LOCATION> --mi-user-assigned $UAMI_RESOURCE_ID --ns-resource-id $NAMESPACE_RESOURCE_ID --ns-identity-id $UAMI_RESOURCE_ID
    
  2. DPS に正しい ID と ADR プロパティが構成されていることを確認します。

    az iot dps show --name <DPS_NAME> --resource-group <RESOURCE_GROUP> --query identity --output json
    
  1. IoT Hub を DPS にリンクします。

    az iot dps linked-hub create --dps-name <DPS_NAME> --resource-group <RESOURCE_GROUP> --hub-name <HUB_NAME>
    
  2. DPS のリンクされたハブの一覧に IoT Hub が表示されることを確認します。

    az iot dps linked-hub list --dps-name <DPS_NAME> --resource-group <RESOURCE_GROUP>
    

ADR 資格情報の同期を実行する

資格情報とポリシーを IoT Hub に同期します。 この手順により、IoT Hub によって CA 証明書が登録され、構成済みのポリシーによって発行されたすべてのリーフ証明書が信頼されます。

az iot adr ns credential sync --namespace <NAMESPACE_NAME> --resource-group <RESOURCE_GROUP>

ハブ CA 証明書を検証する

IoT Hub が CA 証明書を登録したことを確認します。

az iot hub certificate list --hub-name <HUB_NAME> --resource-group <RESOURCE_GROUP>

DPS で登録を作成する

リーフ証明書を使用してデバイスをプロビジョニングするには、DPS で登録グループを作成し、 --credential-policy パラメーターを使用して適切な資格情報ポリシーに割り当てます。

次のコマンドは、既定で対称キー構成証明を使用して登録グループを作成します。

"default" とは異なる名前のポリシーを作成した場合は、そのポリシー名を --credential-policy パラメーターの後に必ず使用してください。

az iot dps enrollment-group create --dps-name <DPS_NAME> --resource-group <RESOURCE_GROUP> --enrollment-id <ENROLLMENT_ID> --credential-policy <POLICY_NAME>

ADR 統合と証明書管理を備えた IoT Hub がセットアップされ、使用する準備が整いました。

省略可能なコマンド

次のコマンドは、ADR 名前空間の管理、デバイスの無効化、カスタム ポリシーの作成、不要になったリソースの削除に役立ちます。

名前空間を管理する

  1. リソース グループ内のすべての名前空間を一覧表示します。

    az iot adr ns list --resource-group <RESOURCE_GROUP_NAME>
    
  2. 特定の名前空間の詳細を表示します。

    az iot adr ns show --name <NAMESPACE_NAME> --resource-group <RESOURCE_GROUP_NAME>
    
  3. 名前空間内のすべてのポリシーを一覧表示します。

    az iot adr ns policy list --namespace <NAMESPACE_NAME> --resource-group <RESOURCE_GROUP_NAME>
    
  4. 特定のポリシーの詳細を表示します。

    az iot adr ns policy show --namespace <NAMESPACE_NAME> --resource-group <RESOURCE_GROUP_NAME> --name <POLICY_NAME>
    
  5. 名前空間内のすべての資格情報を一覧表示します。

    az iot adr ns credential list --namespace <NAMESPACE_NAME> --resource-group <RESOURCE_GROUP_NAME>
    

デバイスを無効にする

  1. IoT Hub 内のすべてのデバイスを一覧表示します。

    az iot hub device-identity list --hub-name <HUB_NAME> --resource-group <RESOURCE_GROUP_NAME>
    
  2. デバイスの状態を disabledに更新して、デバイスを無効にします。 <MY_DEVICE_ID>は、無効にするデバイス ID に置き換えてください。

    az iot hub device-identity update --hub-name <HUB_NAME> --resource-group <RESOURCE_GROUP_NAME> -d <MY_DEVICE_ID> --status disabled
    
  3. デバイスをもう一度実行し、IoT Hub に接続できないことを確認します。

カスタム ポリシーの作成

az iot adr ns policy create コマンドを使用してカスタム ポリシーを作成します。 次の規則に従って、ポリシーの名前、証明書のサブジェクト、および有効期間を設定します。

  • ポリシー name 値は、名前空間内で一意である必要があります。 既に存在する名前のポリシーを作成しようとすると、エラー メッセージが表示されます。
  • 証明書サブジェクト cert-subject 値は、名前空間内のすべてのポリシーで一意である必要があります。 既に存在する件名のポリシーを作成しようとすると、エラー メッセージが表示されます。
  • cert-validity-days 有効期間は 1 日から 30 日の間である必要があります。 有効期間がこの範囲外のポリシーを作成しようとすると、エラー メッセージが表示されます。

次の例では、"CN=TestDevice" の件名と有効期間が 30 日間の "custom-policy" という名前のポリシーを作成します。

az iot adr ns policy create --name "custom-policy" --namespace <NAMESPACE_NAME> --resource-group <RESOURCE_GROUP_NAME> --cert-subject "CN=TestDevice" --cert-validity-days "30"

リソースを削除する

ADR 名前空間を削除するには、まず、名前空間にリンクされている IoT Hub と DPS インスタンスを削除する必要があります。

az iot hub delete --name <HUB_NAME> --resource-group <RESOURCE_GROUP_NAME>
az iot adr ns delete --name <NAMESPACE_NAME> --resource-group <RESOURCE_GROUP_NAME>
az iot dps delete --name <DPS_NAME> --resource-group <RESOURCE_GROUP_NAME> 
az identity delete --name <USER_IDENTITY> --resource-group <RESOURCE_GROUP_NAME>

概要

提供されている PowerShell スクリプトを使用して、Azure Device Registry 統合を使用して IoT Hub のセットアップを自動化します。 スクリプトは、必要なリソースを作成し、それらをリンクするために必要なすべての手順を実行します。

  1. リソース グループを作成する
  2. 必要なアプリ特権を構成する
  3. ユーザー割り当てマネージド ID を作成する
  4. システム割り当てマネージド ID を使用して ADR 名前空間を作成する
  5. その名前空間をスコープとする資格情報 (ルート CA) とポリシー (発行元 CA) を作成する
  6. リンクされた名前空間とマネージド ID を使用して IoT Hub (プレビュー) を作成する
  7. リンクされた IoT Hub と名前空間を使用して DPS を作成する
  8. 資格情報とポリシー (CA 証明書) を ADR 名前空間に同期する
  9. 登録グループを作成し、ポリシーにリンクして証明書のプロビジョニングを有効にする

Important

プレビュー期間中は、IoT Hub 上で ADR 統合機能と証明書管理機能が有効になっている IoT Hub を 無料で利用できます。 Device Provisioning Service (DPS) は個別に課金され、プレビュー オファーには含まれません。 DPS の価格の詳細については、 Azure IoT Hub の価格に関するページを参照してください。

環境を準備する

  1. PowerShell 7 for Windows をダウンロードします。
  2. GitHub リポジトリに移動し、スクリプト ファイルが含まれている Scripts フォルダーをダウンロードiothub-adr-certs-setup-preview.ps1

スクリプト変数をカスタマイズする

テキスト エディターでスクリプト ファイルを開き、目的の構成に合わせて次の変数を変更します。

  • TenantId: テナントID。 この値は、ターミナルで az account show を実行することで確認できます。
  • SubscriptionId: サブスクリプション ID。 この値は、ターミナルで az account show を実行することで確認できます。
  • ResourceGroup: リソース グループの名前。
  • Location: リソースを作成する Azure リージョン。 プレビュー機能の利用可能な場所については、「 サポートされているリージョン 」セクションを参照してください。
  • NamespaceName: 名前空間名には、名前の中央に小文字とハイフン ('-') のみを含めることができますが、先頭または末尾には含めません。 たとえば、"msft-namespace" は有効な名前です。
  • HubName: ハブ名には小文字と数字のみを含めることができます。
  • DpsName: Device Provisioning Service インスタンスの名前。
  • UserIdentity: ユーザーが割り当てたマネージド ID はリソース用です。
  • WorkingFolder: スクリプトが配置されているローカル フォルダー。

Important

IoT ハブは DNS エンドポイントとして公開されるため、名前を付ける際に機密情報や個人を特定できる情報を入力しないように注意してください。

スクリプトを対話形式で実行する

  1. スクリプトを開き、 管理者として PowerShell 7 以降で実行します。 スクリプトが含まれているフォルダーに移動し、 .\iothub-adr-certs-setup-preview.ps1実行します。

  2. 実行ポリシーの問題が発生した場合は、 powershell -ExecutionPolicy Bypass -File .\iothub-adr-certs-setup-preview.ps1を実行してみてください。

  3. ガイド付きプロンプトに従います。

    • Enterキーを押して手順を続行します
    • sまたはSを押して手順をスキップする
    • Ctrl + Cを押して中止する

ADR 名前空間、IoT Hub、DPS、その他のリソースの作成には、それぞれ最大 5 分かかる場合があります。

実行を監視し、リソースを検証する

  1. このスクリプトは、警告が発生したときに実行を続行し、コマンドが 0 以外の終了コードを返した場合にのみ停止します。 注意が必要な問題を示す赤い エラー メッセージをコンソールで監視します。

  2. スクリプトが完了したら、Azure portal で新しいリソース グループにアクセスして、リソースの作成を検証します。 次のリソースが作成されていることがわかります。

    • IoT Hub インスタンス
    • Device Provisioning Service (DPS) インスタンス
    • Azure Device Registry (ADR) 名前空間
    • ユーザー割り当て型マネージドID (UAMI)

次のステップ

この時点で、ADR 統合と証明書管理を備えた IoT Hub が設定され、使用できる状態になります。 Device Provisioning Service (DPS) インスタンスを使用して IoT デバイスのハブへのオンボードを開始し、設定したポリシーと登録を使用して IoT デバイスを安全に管理できるようになりました。

新規: 証明書の管理は、選択した DPS デバイス SDK でサポートされています。 次の SDK サンプルを使用して、Microsoft がサポートする X.509 証明書管理を使用してデバイスをオンボードできるようになりました。