IoT Hub の設定
0. はじめに
IoT Hub の設定には、次の3つの作業があります。
- IoT Hub リソースの作成
Azure PortalにてIoT Hub リソースを作成します。 - X.509 CA 証明書の準備
Windows PC でX.509 CA 証明書を作成し、IoT Hubに登録します。 - デバイスの登録Azure IoT エクスプローラーを用いてIoT Hubにデバイスを登録します。
info
Azure IoT Hub を使用するためには、Azure Portalのアカウント並びにAzure サブスクリプションの取得が必要となります。
1. IoT Hub リソースの作成
Azure PortalにてIoT Hub リソースを作成します。
1-1. IoT ハブ画面へのアクセス
IoT Hub リソースを作成するIoTハブ画面へのアクセス方法を説明します。
Azure Portal にサインインしポータルサイト画面を表示させます。
ポータルサイト画面左上のリソースの作成
アイコンをクリックしリソース作成画面を表示させます。
リソース作成画面の サービスとマーケットプレスを検索してください。 フィールドに"iot hub"と入力します。
Marketplace画面が表示されます。
Marketplace画面のIoT Hub
アイコンをクリックしIoT Hub画面を表示します。
IoT Hub画面のプランにてIoT Hubを選択し作成
ボタンをクリックするとIoTハブ⇒基本タブが表示されます。
1-2. IoTハブ⇒基本 タブにおける設定
IoTハブ⇒基本タブにて以下の設定を行います。
- サブスクリプションフィールドで使用するサブスクリプションを選択します。
チュートリアルではMicrosoft Azure エンタープライズとしていますが、プルダウンメニューに表示される選択肢の中から適当なものを選択して下さい。 - リソースグループフィールドで使用するリソース グループを選択します。
プルダウンメニューから既存のリソース グループを選択するか新規作成をクリックして新規にリソース グループを作成します。
チュートリアルでは、リソース グループtryResourceGroupを新規に作成しています。 - IoT Hub 名フィールドには、お好みの文字列を入力して下さい。
チュートリアルでは、ph-fx1 としています。 - 領域フィールドでは、ハブを配置するリージョンをプルダウンメニューから選択します。ユーザーに最も近い場所を選択します。
チュートリアルでは、Japan Eastを選択しています。 - 設定を終えたら
次へ: ネットワーク >
をクリックします。IoTハブ⇒ネットワークタブが表示されます。
ここで、設定する IoT Hub 名ph-fx1は、以降の説明でタブやペインを示す名詞として登場します。
1-3. IoTハブ⇒ネットワーク タブにおける設定
IoTハブ⇒ネットワークタブにて以下の設定を行います。
- 接続の構成フィールドでパブリック エンドポイント(すべてのネットワーク)を選択します。
- 設定を終えたら
次へ: 管理 >
をクリックします。IoTハブ⇒管理タブが表示されます。
1-4. IoTハブ⇒管理 タブにおける設定
IoTハブ⇒管理タブにて以下の設定を行います。
IoTハブ⇒管理 タブの設定項目
- 価格とスケールティアでは、価格とスケールティアを選択します。
チュートリアルでは(実運用ではないため)、Free レベルを選択しています。
ここで、Free レベルは1つのサブスクリプションに対し1つに制限されているにも関わらず、2つめの選択を行ってもデプロイは正常に完了できてしまう点に注意して下さい。 Free レベルを複数選択した場合、組み込みエンドポイントの構成が正しく行われず Azure IoT エクスプローラーによるテレメトリーのモニタリングができないなどの問題が生じます。 - ロールベースのアクセス制御は共有アクセス ポリシー + RBACを選択します。
- Device-to-cloud パーティションは、デフォルト値の 2 のままです。
- 設定を終えたら
次へ: タグ >
をクリックします。IoTハブ⇒タグタブが表示されます。
1-5. IoTハブ⇒タグ タブにおける設定
チュートリアルにおいてIoTハブ⇒タグタブでの設定事項はありません。
次へ: 確認および作成 >
をクリックします。IoTハブ⇒確認および作成タブが表示されます。
1-6. IoTハブ⇒確認および作成 タブにおける確認
IoTハブ⇒確認および作成タブにて、設定内容を確認します。
確認を終えたら、作成
をクリックし新しいハブを作成します。デプロイが完了するまで、数分かかります。
1-7. デプロイの完了
デプロイが完了すると次のように表示されます。
2. X.509 CA 証明書の準備
IoT Hub には、デバイスが IoT Hub に接続するための認証に、対称キーを用いる方式とX.509 CA 証明書を用いる方式があります。
一般的にセキュリティの強度は、対称キーを用いる方式よりもX.509 CA 証明書を用いる方式の方が高いとされていますが、その反面X.509 CA 証明書を用いる方式では、
予めX.509 CA 証明書を作成し IoT Hub に登録しておく必要があります。
また、接続するデバイスの数だけX.509 CA 証明書で署名したデバイス証明書とそのプライベートキーを用意しておく必要があります。
ここでは、X.509 CA 証明書の作成と IoT Hubへの登録、並びにデバイス証明書、プライベートキーの作成について説明します。
対称キーを使用する場合は、3. デバイスの登録に進んで下さい。
証明書を用いる接続認証には次の証明書とプライベートキーが必要となります。
- X.509ルート証明書
- X.509 CA 証明書
- デバイス証明書(接続するデバイス毎)
- デバイス証明書のプライベートキー(接続するデバイス毎)
2-1. X.509 ルート証明書の取得
BaltimoreCyberTrustRoot ルート証明書をダウンロードし適当なディレクトリに保存して下さい。
チュートリアルでは、C:\Users\user\Downloads\BaltimoreCyberTrustRoot.crt.pem として保存するものとします。
- BaltimoreCyberTrustRoot.crt.pem
Azure におけるX.509 ルート証明書(TLS 証明書)の詳細についてはAzure 証明機関の詳細をご覧下さい。
Azure TLS 証明書の変更について
Microsoft社では、X.509ルート証明書をルート証明書あるいはTLS証明書と呼んでいますが、 Azure TLS 証明書の変更について にてアナウンスされている通り、2020年7月よりTLS証明書の変更が進められており、IoT HubについてはAzure IoT TLS: Critical changes are almost here!に記載されている通り2023年2月15日から2023年9月頃の予定で BaltimoreCyberTrustRoot ルート証明書から DigiCert Global Root G2 ルート証明書への移行が進められます。
移行期間中は、次の様にBaltimoreCyberTrustRoot ルート証明書とDigiCert Global Root G2 ルート証明書を併記したファイルを適当な名前で保存し、これをBaltimoreCyberTrustRoot ルート証明書に代えて使用して下さい。
なお、移行期間終了後はBaltimoreCyberTrustRoot ルート証明書に代えてDigiCert Global Root G2 ルート証明書を使用して下さい。
2-2. X.509 CA 証明書の作成
Microsoft 提供のスクリプトを使用してテスト証明書を作成する に基づき、 Windows PC の PowerShell 上でX.509 CA 証明書とデバイス証明書、デバイス証明書のプライベートキーを作成します。
2-2-1. OpenSSL のインストール
X.509 証明書の作成には、OpenSSLが必要となります。
証明書を作成する Windows PC に OpenSSL がインストールされていない場合は、
wiki(Binaries)に示される適当なサイト(Binary Distributions)から Windows PC 用の適当なバイナリパッケージを入手しインストールして下さい。
(例えば、Shining Light ProductionsのWin64 OpenSSL v1.1.1q Light)
PowerShellから使用するためには、Path 環境変数の設定が必要となります。
PCのシステム⇒システムの詳細設定⇒環境変数(N)タブのシステム環境変数(S)ペインからPath 環境変数に OpenSSLがインストールされたパス(C:\OpenSSL-Win64\bin等)を設定して下さい。
また、OpenSSL を使用するためには、OpenSSLの設定ファイル(openssl.cnf)が必要となります。
openssl.cnf が置かれるフォルダ(パス名)はバイナリーパッケージによって異なり、パッケージに含まれていない場合もあります。
パッケージに含まれていない場合は、このファイルをダウンロードし、C:\OpenSSL-Win64\openssl.cnf 等にコピーして置いて下さい。
openssl.cnf のパス名(インストール先)は、2-2-3項で環境変数 OPENSSL_CONF に設定しますので確認しておいて下さい。
なお、openssl.cnf は証明書を作成する際のデフォルト値などが記載されています。
実運用で使用する際には166~191行目前後に記載されている次のパラメタを予め運用に即した値に変更しておくと便利です。
変更すべきパラメタ
- countryName
- stateOrProvinceName
- localityName
- 0.organizationName
- organizationalUnitName
- emailAddress
openssl.cnf の166~191行目
2-2-2. 作業用ディレクトの作成
OpenSSL のインストールが完了したら、PowerShell を管理者権限で立ち上げ作業用ディレクトリを作成します。
2-2-3. 環境変数 OPENSSL_CONF の設定
OpenSSL の設定ファイルのパス名を環境変数に設定します。
パス名は、インストールしたパッケージによって異なりますので注意して下さい。
2-2-4. ca-certs.ps1 スクリプトの入手
https://github.com/Azure/azure-iot-sdk-c/blob/main/tools/CACertificates/ より次のPoewrShellスクリプトを入手し、作成した作業ディレクトリに置きます。
Copy raw contents
アイコンをクリックしてクリックボードにコピーし、メモ帳(notepad.exe)等にペーストすると良いでしょう。
2-2-5. スクリプトの実行を許可
PowerShellでスクリプトの実行を許可するため次のコマンドを実行します。
2-2-6. ca-certs.ps1 スクリプトの実行 (証明書作成ファンクションのロード)
ca-certs.ps1 スクリプトを実行し、証明書を作成するためのファンクションをロードします。
警告メッセージにある通り、このスクリプトで作成される証明書は試験用のものです。 実運用には、使用しないで下さい。
実運用に用いる証明書を作成する場合は、2-2-1項目に示すopenssl.cnfの166~191行目と以下に示すca-certs.ps1 の15~18行目にある次のパラメタを変更して下さい。
変更すべきパラメタ
- $_rootCertCommonName
- $_intermediateCertCommonName
ca-certs.ps1 の15~18行目
2-2-7. Test-CACertsPrerequisites ファンクションの実行 (証明書作成環境の確認)
ca-certs.ps1 スクリプトの実行により読み込まれた Test-CACertsPrerequisites ファンクションを実行し、証明書を作成する環境が整っているか確認します。
証明書を作成する環境か正常に準備されていれば、上記のように表示されます。
Test-CACertNotInstalledAlready : のエラーが返る場合は、PowerShellにcertlm(または、スタートメニューからcertlm.msc)と入力し
ローカルコンピュータの証明書ストアを開き、個人⇒証明書、信頼されたルート証明機関⇒証明書、中間証明期間⇒証明書 の各ペインから、Azure IoT CA TestOnly Root CA と表記される証明書を削除します。
なお、certlm とは別に証明書・現在のユーザーストアを管理するcertmgrというツールがありますが、個人⇒証明書ペインにAzure IoT CA TestOnly Root CAの証明書が表示されず、削除することができませんので注意して下さい。
その他のエラーメッセージが返される場合は、ここまでに手順を見直して下さい。
2-2-8. New-CACertsCertChain ファンクションの実行(X.509 CA 証明書の作成)
ca-certs.ps1 スクリプトの実行により読み込まれたNew-CACertsCertChainファンクションを実行しX.509 CA 証明書を作成します。
ここで、New-CACertsCertChainファンクションのコマンドライン引数としてeccを与えて下さい。
New-CACertsCertChain ファンクションの実行により作業用ディレクトリには次の6つのファイルが作成されます。
- algorithmUsed.txt
- Intermediate1.pem
- Intermediate2.pem
- Intermediate3.pem
- RootCA.cer
- RootCA.pem (X.509 CA 証明書)
ここで作成されるファイルの名称はRootCA.pemですが、X.509 ルート証明書ではなくX.509 CA 証明書である点に注意して下さい。
2-3. X.509 CA 証明書の登録
作成した X.509 CA 証明書を IoT ハブに登録します。
2-3-1. ph-fx1 | 証明書 画面へのアクセス
IoTハブにX.509 CA 証明書を登録する作成する証明書画面へのアクセス方法を説明します。
Azure Portalへサインインするか、画面左上のホームをクリックしてポータルサイト画面を表示させます。
ポータルサイト画面のリソース一覧のph-fx1アイコンをクリックします。
ここで、ph-fx1は、1-2項目で設定したIoT Hub名です。
ph-fx1画面が表示されます。
ph-fx1画面左のメニューバーを下にスクロールしセキュリティ設定ペインの証明書をクリックします。
ph-fx1 | 証明書画面が表示されます。
2-3-1. X.509 CA 証明書の登録
ph-fx1 | 証明書画面にてph-fx1⇒ph-fx1画面左の +追加 をクリックします。
証明書の追加画面がポップアップされます。
- 証明書名フィールドには、同一ハブ内で重複しない適当な文字列を入力して下さい。
チュートリアルではpf-fx1-RootCAとしています。 - .pemまたは.cerフィールドでは、2-2-8項で作成した C:\Users\user\iothub-cert\RootCA.pem を選択しアップロードします。
- アップロード時に証明書の状態を確認済みに設定する。チェックボックスは、未チェツクのままとします。
- 設定を終えたら
保存
をクリックします。
ph-fx1 | 証明書画面に追加した証明書名pf-fx1-RootCAが表示されます。
ここの段階では状態が未検証となっています。
2-4. X.509 CA 証明書の検証
アップロードした X.509 CA 証明書の検証を行います。
検証作業は次の流れとなります。
- 証明書 ph-fx1-RootCA画面で確認コードを作成します。
- 作成した確認コードを用いPowerShellにて検証証明書verifyCert4.cerを作成します。
- 作成したverifyCert4.cerを証明書 ph-fx1-RootCAにアップロードし検証を行います。
2-4-1. 確認コードの作成
証明書 ph-fx1-RootCA画面で確認コードを作成します。
ph-fx1 | 証明書画面にてpf-fx1-RootCAをクリックします。
証明書 f-fx1-RootCA画面がポップアップされます。
確認コード作成する
をクリックすると確認コードが作成されます。
確認コードのクリックボートにコピーするアイコンをクリックし確認コードをクリックボートにコピーします。
2-4-2. 検証証明書 verifyCert4.cer の作成
クリックボートにコピーした確認コードを用いて検証証明書verifyCert4.cerを作成します。
2-2-8項のPowerShellにて確認コードを引き数としてNew-CACertsVerificationCertファンクションを実行します。
検証証明書verifyCert4.cerを作成します。
検証証明書verifyCert4.cerが作成されます。
2-4-3. 検証証明書 verifyCert4.cer による検証
作成したverifyCert4.cerを証明書 ph-fx1-RootCAにアップロードし検証を行います。
証明書 ph-fx1-RootCA画面の .pemまたは.cerの検証証明書にて C:\Users\user\iothub-cert\ をverifyCert4.cer 選択しアップロードします。
確認
をクリックするとX.509 CA証明書の検証が行われます。
検証が完了すると証明書 ph-fx1-RootCA画面が閉じ、 ph-fx1 | 証明書画面のph-fx1-RootCAの状態が確認済みとなります。
3. デバイスの登録
Azure IoT エクスプローラーを用いてIoT Hubにデバイスを登録します。
ここでは、次の3つの作業を行います。
- Azure IoT エクスプローラーを Windows PC にインストールします。
- Azure IoT エクスプローラーが IoT Hub (ph-fx1)に接続するために必要となる接続文字列を取得します。
- デバイスの登録を行います。対称キーを用いる場合とX.509 CA 証明書を用いる場合で手順が異なります。
3-1. Azure IoT エクスプローラーのインストール
Azure IoT エクスプローラーを Windows PC にインストールします。
https://github.com/Azure/azure-iot-explorer/releases から、最新バージョンをダウンロードしインストールします。
- Azure.IoT.Explorer.Preview-0.15.0.msiをクリックしダウンロードします。
- ダウンロードしたAzure.IoT.Explorer.Preview-0.15.0.msiファイルをダブルクリックしインストールします。
3-2. 接続文字列の取得
Azure IoT エクスプローラーが IoT Hub (ph-fx1)に接続するために必要となる接続文字列を取得します。
3-2-1. ph-fx1 | 共有アクセス ポリシー 画面へのアクセス
接続文字列を取得する共有アクセス ポリシー画面へのアクセス方法を説明します。
Azure Portalへサインインするか、画面左上のホームをクリックしてポータルサイト画面を表示させます。
ポータルサイト画面のリソース一覧のph-fx1アイコンをクリックします。
ここで、ph-fx1は、1-2項で設定したIoT Hub名です。
ph-fx1画面が表示されます。
ph-fx1画面左のメニューバーを下にスクロールしセキュリティ設定ペインの共有アクセス ポリシーをクリックします。
ph-fx1 | 共有アクセス ポリシー画面が表示されます。
3-2-2. 接続文字列の取得
ph-fx1 | 共有アクセス ポリシー画面の共有アクセス ポリシーの管理ペインのiothubowner をクリックします。
iothubowner画面がポップアップされます。
プライマリ接続文字列のクリックボートにコピーするアイコンをクリックしプライマリ接続文字列をクリックボートにコピーします。
3-3. デバイスの登録
Azure IoT エクスプローラーを起動しデバイスを登録します。
3-3-1. Azure IoT エクスプローラーの起動
Azure IoT エクスプローラーを起動します。
Windows PC のスタートメニュー⇒すべてのアプリ⇒Azure IoT Explorer PreviewをクリックしAzure IoT エクスプローラーを起動します。
Homeタブが表示されます。
HomeタブにてConection via IoT Hub connection stringをクリックします。
Home > IoT hubsタブが表示されます。
誤ってConnection via Azure Active Directoryをクリックしてしまった場合は、Switch authentication methodをクリックすることで*Homeタブに戻ることができます。
3-3-2. 接続文字列の設定
Home > IoT hubsタブにて +Add connectionをクリックします。
Add connection string画面がポップアップされます。
Connection stringフィールドに3-3-2項でクリックボートにコピーしたプライマリ接続文字列をペースト(Ctrl+v)します。
Add connection string画面にHost name, Shard access policy name, Shard access policy keyが表示されます。
ph-fx1に設定されている情報と齟齬が無いか確認しSaveをクリックします。
Home > IoT hubs > Deviceタブが表示されます。
3-3-3. デバイスの登録(対称キー)
IoT Hubに接続するための認証に対称キーを用いる方式を使用するデバイスの登録方法を説明します。
X.509 CA 証明書を用いる場合、このステップは不要です。
Home > IoT hubs > Deviceタブにて+ Newアイコンをクリックします。
Home > IoT hubs > Device > Create new identityタブが表示されます。
- Device IDフィールドにデバイスのIDを入力します。チュートリアルではet9ocs-1としています。
- Authentication typeラジオボタンは、Symmetric keyを選択します。
- Auto-generate keysチェックボックスはチェックをいれます。
- Connect this device to IoT hubは、enableを選択します。
- 設定を終え左上のCreateアイコンをクリックします。
Home > IoT hubs > Device > et9ocs-1 > Device identityタブが表示されます。
Device ID, Primary key が、OpenBlocksに設定するパラメタとなります。
3-3-4. デバイスの登録(X.509 CA 証明書)
IoT Hubに接続するための認証にX.509 CA 証明書を用いる方式を使用するデバイスの登録方法を説明します。
対称キーを用いる場合、このステップは不要です。
Home > IoT hubs > Deviceタブにて+ Newアイコンをクリックします。
Home > IoT hubs > Device > Create new identity**タブが表示されます。
- Device IDフィールドにデバイスのIDを入力します。チュートリアルではet9ocs-x509-1としています。
- Authentication typeラジオボタンは、X.509 CA signedを選択します。
- Connect this device to IoT hubは、enableを選択します。
- 設定を終えたら左上のCreateアイコンをクリックします。
Home > IoT hubs > Device > et9ocs-x509-1 > Device identityタブが表示されます。
デバイス証明書とプライベートキーの作成
登録したDevice ID(et9ocs-x509-1)のデバイス証明書とそのプライベートキーを作成します。
2-2-8項のPowerShellにて3-3-4項で登録した*Device ID(et9ocs-x509-1)を引き数としてNew-CACertsDeviceファンクションを実行します。
- New-CACertsDevice et9ocs-x509-1を実行するとcertPassword:プロンプトが表示され処理がサスペンドします。 適当なパスフレーズを入力します。
- certPassword:プロンプトに適当なパスフレーズを入力すると処理が再開し、Enter Import Password:プロンプトが表示され再びサスペンドします。 1項で入力したパスフレーズを入力します。
次のファイルが作成されます。
- et9ocs-x509-1-all.pem
- et9ocs-x509-1-private.pem (デバイス証明書のプライベートキー)
- et9ocs-x509-1-public.pem (デバイス証明書)
- et9ocs-x509-1.pfx