重要
このページには、プレビュー段階にある Kubernetes デプロイ マニフェストを使用して Azure IoT Operations コンポーネントを管理する手順が含まれます。 この機能は、いくつかの制限を設けて提供されているため、運用環境のワークロードには使用しないでください。
ベータ版、プレビュー版、または一般提供としてまだリリースされていない Azure の機能に適用される法律条項については、「Microsoft Azure プレビューの追加使用条件」を参照してください。
MQTT データ フロー エンドポイントは、MQTT の送信元と送信先に使われます。 エンドポイントの設定、トランスポート層セキュリティ (TLS)、認証、その他の設定を構成できます。
前提条件
Azure IoT Operations ローカル MQTT ブローカー
Azure IoT Operations で提供されている組み込みのローカル MQTT ブローカーをデータ フローで使用できます。 MQTT ブローカーは、他のシステムからメッセージを受信するソースとして、または他のシステムにメッセージを送信する宛先として使用できます。
既定のエンドポイント
Azure IoT Operations をデプロイすると、"default" という名前の MQTT ブローカー データ フロー エンドポイントが既定の設定で作成されます。 このエンドポイントを、データ フローの送信元または送信先として使用できます。
既定のエンドポイントでは、次の設定が使用されます。
- ホスト:
aio-broker:18883
を使用する
- 認証: 既定の BrokerAuthentication リソースを使用するサービス アカウント トークン (SAT)
- TLS: 有効
- 信頼された CA 証明書:
azure-iot-operations-aio-ca-trust-bundle
からの既定の CA 証明書
注意
既定のエンドポイントは削除しないでください。 既定のエンドポイントを削除した場合は、同じ設定を使用して再作成する必要があります。
既定の MQTT ブローカー エンドポイント設定を表示または編集するには、以下を行います。
操作エクスペリエンスで、[データ フロー エンドポイント] を選択します。
既定のエンドポイントを選択して、設定を表示または編集します。
az iot ops データフロー エンドポイント apply コマンドを使用して、既定の MQTT ブローカー データ フロー エンドポイントを作成または変更します。
az iot ops dataflow endpoint apply --resource-group <ResourceGroupName> --instance <AioInstanceName> --name default --config-file <ConfigFilePathAndName>
--config-file
パラメーターは、リソース プロパティを含む JSON 構成ファイルのパスとファイル名です。
この例では、ユーザーのホーム ディレクトリに格納されている次のコンテンツを含む default-mqtt-endpoint.json
という名前の構成ファイルを想定しています。
{
"endpointType": "Mqtt",
"mqttSettings": {
"host": "aio-broker:18883",
"authentication": {
"method": "ServiceAccountToken",
"serviceAccountTokenSettings": {
"audience": "aio-internal"
}
},
"tls": {
"mode": "Enabled",
"trustedCaCertificateConfigMapRef": "azure-iot-operations-aio-ca-trust-bundle"
}
}
}
既定の MQTT ブローカー データ フロー エンドポイントを作成または更新するコマンドの例を次に示します。
az iot ops dataflow endpoint apply --resource-group myResourceGroup --instance myAioInstance --name default --config-file ~/default-mqtt-endpoint.json
既定のエンドポイントを編集するには、次の内容を含む Bicep .bicep
ファイルを作成します。 必要に応じて設定を更新し、<AIO_INSTANCE_NAME>
などのプレースホルダーの値を独自の値に置き換えます。
param aioInstanceName string = '<AIO_INSTANCE_NAME>'
param customLocationName string = '<CUSTOM_LOCATION_NAME>'
resource aioInstance 'Microsoft.IoTOperations/instances@2024-11-01' existing = {
name: aioInstanceName
}
resource customLocation 'Microsoft.ExtendedLocation/customLocations@2021-08-31-preview' existing = {
name: customLocationName
}
resource defaultMqttBrokerDataflowEndpoint 'Microsoft.IoTOperations/instances/dataflowEndpoints@2024-11-01' = {
parent: aioInstance
name: 'default'
extendedLocation: {
name: customLocation.id
type: 'CustomLocation'
}
properties: {
endpointType: 'Mqtt'
mqttSettings: {
host: 'aio-broker:18883'
authentication: {
method: 'ServiceAccountToken'
serviceAccountTokenSettings: {
audience: 'aio-internal'
}
}
tls: {
mode: 'Enabled'
trustedCaCertificateConfigMapRef: 'azure-iot-operations-aio-ca-trust-bundle'
}
}
}
}
次に、Azure CLI を使用してデプロイします。
az deployment group create --resource-group <RESOURCE_GROUP> --template-file <FILE>.bicep
Kubernetes クラスターでは、既定の MQTT ブローカー エンドポイント設定を表示できます。 設定を表示するには、次のコマンドを使用します。
kubectl get dataflowendpoint default -n azure-iot-operations -o yaml
新しいエンドポイントを作成する
カスタム設定を使って、新しいローカル MQTT ブローカー エンドポイントを作成することもできます。 たとえば、異なるポート、認証、または認可の設定を使って、新しい MQTT ブローカー エンドポイントを作成できます。 ただし、新しいエンドポイントを作成する場合でも、常にすべてのデータ フローで既定のエンドポイントを送信元または送信先として使用する必要があります。
操作エクスペリエンスで、[データ フロー エンドポイント] を選択します。
[Create new data flow endpoint]\(データ フロー エンドポイントの新規作成\) で、[Azure IoT Operations ローカル MQTT]>[新規] を選びます。
エンドポイントに関する次の設定を入力します。
設定 |
説明 |
名前 |
データ フロー エンドポイントの名前。 |
ホスト |
MQTT ブローカーのホスト名とポート。
<hostname>:<port> の形式を使用します |
認証方法 |
認証に使用する方式。 "サービス アカウント トークン" または "X509 証明書" を選択します |
サービス対象ユーザー |
サービス アカウント トークンの対象ユーザー。 "サービス アカウント トークン" を使用する場合に必要です。 |
X509 クライアント証明書 |
認証に使用する X.509 クライアント証明書。 "X509 証明書" を使う場合に必要です。 業界標準の複数行の X509 証明書をアップロードすると、デバイスの認証管理、セキュリティ、柔軟性が向上します。 |
X509 クライアント キー |
X.509 クライアント証明書に対応する秘密キー。 "X509 証明書" を使う場合に必要です。 |
X509 中間証明書 |
X.509 クライアント証明書チェーンの中間証明書。 "X509 証明書" を使う場合に必要です。 |
作成または置換
az iot ops データフロー エンドポイント create fabric-onelake コマンドを使用して、ローカル MQTT ブローカー データ フロー エンドポイントを作成または置き換えます。
az iot ops dataflow endpoint create local-mqtt --resource-group <ResourceGroupName> --instance <AioInstanceName> --name <EndpointName> --port <Port> --host <Host>
このコマンドは、既定の設定でローカル MQTT ブローカー エンドポイントを作成します。 必要に応じて、追加のオプションを指定できます。
local-mqtt-endpoint
という名前のローカル MQTT ブローカー データ フロー エンドポイントを作成または置き換えるコマンドの例を次に示します。
az iot ops dataflow endpoint create local-mqtt --resource-group myResourceGroup --instance myAioInstance --name local-mqtt-endpoint --port 1883 --host aio-broker --auth-type ServiceAccountToken --audience aio-internal
作成または変更
az iot ops dataflow endpoint apply コマンドを使用して、ローカル MQTT ブローカーのデータ フロー エンドポイントを作成または変更します。
az iot ops dataflow endpoint apply --resource-group <ResourceGroupName> --instance <AioInstanceName> --name <EndpointName> --config-file <ConfigFilePathAndName>
--config-file
パラメーターは、リソース プロパティを含む JSON 構成ファイルのパスとファイル名です。
この例では、ユーザーのホーム ディレクトリに格納されている次のコンテンツを含む local-mqtt-endpoint.json
という名前の構成ファイルを想定しています。
{
"endpointType": "Mqtt",
"mqttSettings": {
"host": "aio-broker:1883",
"authentication": {
"method": "ServiceAccountToken",
"serviceAccountTokenSettings": {
"audience": "aio-internal"
}
},
"tls": {
"mode": "Enabled",
"trustedCaCertificateConfigMapRef": "azure-iot-operations-aio-ca-trust-bundle"
}
}
}
local-mqtt-endpoint
という名前のローカル MQTT ブローカー データ フロー エンドポイントを作成または更新するコマンドの例を次に示します。
az iot ops dataflow endpoint apply --resource-group myResourceGroup --instance myAioInstance --name local-mqtt-endpoint --config-file ~/local-mqtt-endpoint.json
param aioInstanceName string = '<AIO_INSTANCE_NAME>'
param customLocationName string = '<CUSTOM_LOCATION_NAME>'
param endpointName string = '<ENDPOINT_NAME>'
param mqttBrokerHostname string = '<HOSTNAME>:<PORT>'
param trustedCA string = '<TRUST_BUNDLE>'
param serviceAccountAudience string = '<SA_AUDIENCE>'
resource aioInstance 'Microsoft.IoTOperations/instances@2024-11-01' existing = {
name: aioInstanceName
}
resource customLocation 'Microsoft.ExtendedLocation/customLocations@2021-08-31-preview' existing = {
name: customLocationName
}
resource MqttBrokerDataflowEndpoint 'Microsoft.IoTOperations/instances/dataflowEndpoints@2024-11-01' = {
parent: aioInstance
name: endpointName
extendedLocation: {
name: customLocation.id
type: 'CustomLocation'
}
properties: {
endpointType: 'Mqtt'
mqttSettings: {
host: mqttBrokerHostname
authentication: {
method: 'ServiceAccountToken'
serviceAccountTokenSettings: {
audience: serviceAccountAudience
}
}
tls: {
mode: 'Enabled'
trustedCaCertificateConfigMapRef: trustedCA
}
}
}
}
apiVersion: connectivity.iotoperations.azure.com/v1
kind: DataflowEndpoint
metadata:
name: <ENDPOINT_NAME>
namespace: azure-iot-operations
spec:
endpointType: Mqtt
mqttSettings:
host: "<HOSTNAME>:<PORT>"
tls:
mode: Enabled
trustedCaCertificateConfigMapRef: <TRUST_BUNDLE>
authentication:
method: ServiceAccountToken
serviceAccountTokenSettings:
audience: <SA_AUDIENCE>
Azure Event Grid
Azure IoT Operations データ フローで動作するフル マネージド MQTT ブローカーが Azure Event Grid で提供されています。 Azure Event Grid MQTT ブローカー エンドポイントを構成するには、認証にマネージド ID を使うことをお勧めします。
まだ行っていない場合は、まず Event Grid 名前空間を作成します。
MQTT を有効にする
Event Grid 名前空間を作成したら、[構成] に移動し、次のことを確認します。
-
MQTT を有効にする: チェック ボックスをオンにします。
-
認証名あたりの最大クライアント セッション数: 3 以上に設定します。
最大クライアント セッション オプションは、データ フローがスケールアップしても接続できるようにするために重要です。 詳細については、Event Grid MQTT マルチセッションのサポートに関するページを参照してください。
トピック空間を作成する
データ フローが Event Grid MQTT ブローカーにメッセージを送受信するには、Event Grid 名前空間に少なくとも 1 つのトピック空間を作成する必要があります。 Event Grid 名前空間にトピック空間を作成するには、[トピック空間]>[新しいトピック空間] を選択します。
すぐに開始してテストするために、トピック テンプレートとしてワイルドカード トピック #
を使用してトピック空間を作成できます。
マネージド ID にアクセス許可を割り当てる
Event Grid MQTT ブローカーのデータ フロー エンドポイントを構成するには、ユーザー割り当てマネージド ID またはシステム割り当てマネージド ID のいずれかを使用することをお勧めします。 この方法は安全であり、認証情報を手動で管理する必要がありません。
トピック空間が作成されたら、Event Grid MQTT ブローカーとの間でメッセージを送受信するためのアクセス許可を付与するロールを、Azure IoT Operations マネージド ID に割り当てる必要があります。
システム割り当てマネージド ID を使用する場合は、Azure portal で、Azure IoT Operations インスタンスに移動し、[概要] を選択します。
Azure IoT Operations Arc 拡張機能の後に一覧表示されている拡張機能の名前をコピーします。 たとえば、azure-iot-operations-xxxx7 などです。 システム割り当てマネージド ID は、Azure IoT Operations Arc 拡張機能と同じ名前を使用して、見つけることができます。
次に、Event Grid 名前空間 >[アクセス制御 (IAM)]>[ロールの割り当ての追加] に移動します。
-
[ロール] タブで、
EventGrid TopicSpaces Publisher
、EventGrid TopicSpaces Subscriber
などの適切なロールを選択します。 これにより、名前空間内のすべてのトピック空間のメッセージを送受信するために必要なアクセス許可がマネージド ID に付与されます。 詳細については、MQTT メッセージを発行またはサブスクライブするための Microsoft Entra JWT 認証と Azure RBAC 認可に関する記事をご覧ください。
-
[メンバー] タブで次の操作を行います。
- システム割り当てマネージド ID を使用している場合、[アクセスの割り当て先] で [ユーザー、グループ、またはサービス プリンシパル] オプションを選択し、[+ メンバーの選択] を選択して、Azure IoT Operations Arc 拡張機能の名前を検索します。
- ユーザー割り当てマネージド ID を使用している場合、[アクセスの割り当て先] で [マネージド ID] オプションを選択し、[+ メンバーの選択] を選択して、クラウド接続用に設定されたユーザー割り当てマネージド ID を検索します。
または、トピック空間レベルでロールを割り当てることもできます。
>
[アクセス制御 (IAM)]>[ロールの割り当ての追加] に移動します。
EventGrid TopicSpaces Publisher
や EventGrid TopicSpaces Subscriber
などの適切なロールを持つマネージド ID を割り当てます。 これにより、特定のトピック空間のメッセージを送受信するために必要なアクセス許可がマネージド ID に付与されます。
注
同じデータ フロー構成を持つ 2 番目のデプロイは接続できず、認可エラーが発生します。 この問題に対処するには、2 番目の構成のデータ フロー名を変更します。 この問題は、MQTT セッションの有効期限が切れるまでの間に、2 番目のデプロイが最初のデプロイと同時に、または直後に発生した場合にのみ発生します。
Event Grid MQTT ブローカーのデータ フロー エンドポイントを作成する
Event Grid 名前空間を構成したら、Event Grid MQTT ブローカーのデータ フロー エンドポイントを作成できます。
操作エクスペリエンスで、[データ フロー エンドポイント] タブを選択します。
[データ フロー エンドポイントの新規作成] で、[Azure Event Grid MQTT]>[新規] を選びます。
エンドポイントに関する次の設定を入力します。
設定 |
説明 |
名前 |
データ フロー エンドポイントの名前。 |
ホスト |
Event Grid MQTT ブローカーのホスト名とポート。
<NAMESPACE>.<REGION>-1.ts.eventgrid.azure.net:8883 の形式を使用します |
認証方法 |
認証に使用する方式。
[システム割り当てマネージド ID] または [ユーザー割り当てマネージド ID] を選択することをお勧めします。 |
[適用] を選択してエンドポイントをプロビジョニングします。
作成または置換
az iot ops データフロー エンドポイント create eventgrid コマンドを使用して、Azure Event Grid MQTT データ フロー エンドポイントを作成または置換します。
az iot ops dataflow endpoint create eventgrid --resource-group <ResourceGroupName> --instance <AioInstanceName> --name <EndpointName> --host <Namespace>.<Region>-1.ts.eventgrid.azure.net --port 9092
このコマンドは、既定の設定とシステム割り当てマネージド ID 認証を使用して Event Grid MQTT ブローカー エンドポイントを作成します。 必要に応じて、追加のオプションを指定できます。
event-grid-endpoint
という名前の Event Grid MQTT ブローカー データ フロー エンドポイントを作成または置換するコマンドの例を次に示します。
az iot ops dataflow endpoint create eventgrid --resource-group myResourceGroup --instance myAioInstance --name event-grid-endpoint --host mynamespace.eastus-1.ts.eventgrid.azure.net --port 9092
作成または変更
az iot ops データフロー エンドポイント apply コマンドを使用して、Azure Event Grid MQTT ブローカー のデータ フロー エンドポイントを作成または変更します。
az iot ops dataflow endpoint apply --resource-group <ResourceGroupName> --instance <AioInstanceName> --name <EndpointName> --config-file <ConfigFilePathAndName>
--config-file
パラメーターは、リソース プロパティを含む JSON 構成ファイルのパスとファイル名です。
この例では、ユーザーのホーム ディレクトリに格納されている次のコンテンツを含む event-grid-endpoint.json
という名前の構成ファイルを想定しています。
{
"endpointType": "Mqtt",
"mqttSettings": {
"host": "mynamespace.eastus-1.ts.eventgrid.azure.net:9092",
"authentication": {
"method": "SystemAssignedManagedIdentity",
"systemAssignedManagedIdentitySettings": {}
},
"tls": {
"mode": "Enabled"
}
}
}
event-grid-endpoint
という名前の Event Grid MQTT ブローカー データ フロー エンドポイントを作成または更新するコマンドの例を次に示します。
az iot ops dataflow endpoint apply --resource-group myResourceGroup --instance myAioInstance --name event-grid-endpoint --config-file ~/event-grid-endpoint.json
次の内容を含む Bicep .bicep
ファイルを作成します。
param aioInstanceName string = '<AIO_INSTANCE_NAME>'
param customLocationName string = '<CUSTOM_LOCATION_NAME>'
param endpointName string = '<ENDPOINT_NAME>'
param eventGridHostName string = '<NAMESPACE>.<REGION>-1.ts.eventgrid.azure.net:8883'
resource aioInstance 'Microsoft.IoTOperations/instances@2024-11-01' existing = {
name: aioInstanceName
}
resource customLocation 'Microsoft.ExtendedLocation/customLocations@2021-08-31-preview' existing = {
name: customLocationName
}
resource remoteMqttBrokerDataflowEndpoint 'Microsoft.IoTOperations/instances/dataflowEndpoints@2024-11-01' = {
parent: aioInstance
name: endpointName
extendedLocation: {
name: customLocation.id
type: 'CustomLocation'
}
properties: {
endpointType: 'Mqtt'
mqttSettings: {
host: eventGridHostName
authentication: {
// See available authentication methods section for method types
// method: <METHOD_TYPE>
}
tls: {
mode: 'Enabled'
}
}
}
}
次に、Azure CLI を使用してデプロイします。
az deployment group create --resource-group <RESOURCE_GROUP> --template-file <FILE>.bicep
次の内容を含む Kubernetes マニフェスト .yaml
ファイルを作成します。
apiVersion: connectivity.iotoperations.azure.com/v1
kind: DataflowEndpoint
metadata:
name: <ENDPOINT_NAME>
namespace: azure-iot-operations
spec:
endpointType: Mqtt
mqttSettings:
host: <NAMESPACE>.<REGION>-1.ts.eventgrid.azure.net:8883
authentication:
# See available authentication methods section for method types
# method: <METHOD_TYPE>
tls:
mode: Enabled
次に、このマニフェスト ファイルを Kubernetes クラスターに適用します。
kubectl apply -f <FILE>.yaml
エンドポイントが作成されたら、それをデータ フローで使って、送信元または送信先としての Event Grid MQTT ブローカーに接続できます。 MQTT トピックは、データ フローで構成されます。
Event Grid で X.509 証明書認証を使用する
Event Grid MQTT ブローカーで X.509 認証を使用する場合は、[Event Grid 名前空間] >[構成] に移動し、次の設定を確認します。
-
MQTT を有効にする: チェック ボックスをオンにします。
-
代替クライアント認証名ソースを有効にする: チェック ボックスをオンにします。
-
証明書のサブジェクト名: ドロップダウン リストでこのオプションを選択します。
-
認証名あたりの最大クライアント セッション数: 3 以上に設定します。
代替クライアント認証オプションと最大クライアント セッション数オプションを使用すると、データ フローでは、MQTT CONNECT Username
の代わりにクライアント証明書のサブジェクト名を認証に使用できます。 この機能は、データ フローが複数のインスタンスを生成して接続を維持できるようにするために重要です。 詳細については、「Event Grid MQTT クライアント証明書認証」および「マルチセッションのサポート」を参照してください。
次に、X.509 証明書の手順に従って、X.509 証明書の設定でエンドポイントを構成します。
Event Grid の共有サブスクリプションの制限
Azure Event Grid MQTT ブローカーでは共有サブスクリプションはサポートされていません。つまり、Event Grid がデータ フローの送信元 (データ フローがメッセージをサブスクライブする場所) として使用されている場合、データ フロー プロファイルで instanceCount
を 1
より大きく設定することはできません。 この場合、instanceCount
を 1
より大きい値に設定すると、データ フローの開始に失敗します。
カスタム MQTT ブローカー
その他の MQTT ブローカーの場合は、必要に応じてエンドポイント、TLS、認証、その他の設定を構成できます。
操作エクスペリエンスで、[データ フロー エンドポイント] タブを選択します。
[データ フロー エンドポイントの新規作成] で、[カスタム MQTT ブローカー]>[新規] を選びます。
エンドポイントに関する次の設定を入力します。
設定 |
説明 |
名前 |
データ フロー エンドポイントの名前 |
ホスト |
<hostname>.<port> 形式での MQTT ブローカー エンドポイントのホスト名。 |
認証方法 |
認証に使用する方式。 "サービス アカウント トークン" または "X509 証明書" を選択します。 |
サービス対象ユーザー |
サービス アカウント トークンの対象ユーザー。 "サービス アカウント トークン" を使用する場合に必要です。 |
X509 クライアント証明書 |
認証に使用する X.509 クライアント証明書。 "X509 証明書" を使う場合に必要です。 業界標準の複数行の X509 証明書をアップロードすると、デバイスの認証管理、セキュリティ、柔軟性が向上します。 |
X509 クライアント キー |
X.509 クライアント証明書に対応する秘密キー。 "X509 証明書" を使う場合に必要です。 |
X509 中間証明書 |
X.509 クライアント証明書チェーンの中間証明書。 "X509 証明書" を使う場合に必要です。 |
[適用] を選択してエンドポイントをプロビジョニングします。
作成または置換
az iot ops データフロー エンドポイント create custom-mqtt コマンドを使用して、カスタム MQTT ブローカー データ フロー エンドポイントを作成または置換します。
az iot ops dataflow endpoint create custom-mqtt --resource-group <ResourceGroupName> --instance <AioInstanceName> --name <EndpointName> --host <Host> --port <Port>
このコマンドは、既定の設定とシステム割り当てマネージド ID 認証を使用して、カスタム MQTT ブローカー エンドポイントを作成します。 必要に応じて、追加のオプションを指定できます。
custom-mqtt-endpoint
という名前のカスタム MQTT ブローカー データ フロー エンドポイントを作成または置換するコマンドの例を次に示します。
az iot ops dataflow endpoint create custom-mqtt --resource-group myResourceGroup --instance myAioInstance --name custom-mqtt-endpoint --host mycustombroker.contoso.com --port 8883
作成または変更
az iot ops データフロー エンドポイント apply コマンドを使用して、カスタム MQTT ブローカー データ フロー エンドポイントを作成または変更します。
az iot ops dataflow endpoint apply --resource-group <ResourceGroupName> --instance <AioInstanceName> --name <EndpointName> --config-file <ConfigFilePathAndName>
--config-file
パラメーターは、リソース プロパティを含む JSON 構成ファイルのパスとファイル名です。
この例では、ユーザーのホーム ディレクトリに格納されている次のコンテンツを含む custom-mqtt-endpoint.json
という名前の構成ファイルを想定しています。
{
"endpointType": "Mqtt",
"mqttSettings": {
"host": "mycustombroker.contoso.com:8883",
"authentication": {
"method": "SystemAssignedManagedIdentity",
"systemAssignedManagedIdentitySettings": {}
},
"tls": {
"mode": "Enabled"
}
}
}
custom-mqtt-endpoint
という名前のカスタム MQTT ブローカー データ フロー エンドポイントを作成または更新するコマンドの例を次に示します。
az iot ops dataflow endpoint apply --resource-group myResourceGroup --instance myAioInstance --name custom-mqtt-endpoint --config-file ~/custom-mqtt-endpoint.json
mqttSettings: {
authentication: {
// See available authentication methods section for method types
// method: <METHOD_TYPE>
}
host: '<HOST>:<PORT>'
tls: {
mode: 'Enabled' // or 'Disabled'
trustedCaCertificateConfigMapRef: '<TRUSTED_CA_CERT_CONFIGMAP>'
}
}
spec:
endpointType: Mqtt
mqttSettings:
host: <HOST>:<PORT>
authentication:
# See available authentication methods section for method types
# method: <METHOD_TYPE>
tls:
mode: Enabled # or Disabled
trustedCaCertificateConfigMapRef: <TRUSTED_CA_CERT_CONFIGMAP>
MQTT エンドポイントの設定のカスタマイズについて詳しくは、以降のセクションを参照してください。
使用可能な認証方法
MQTT ブローカー データ フローのエンドポイントでは、次の認証方法を使用できます。
システム割り当てマネージド ID
データ フロー エンドポイントを構成する前に、MQTT ブローカーに接続するためのアクセス許可を付与するロールを Azure IoT Operations マネージド ID に割り当てます。
- Azure portal で、Azure IoT Operations インスタンスに移動し、[概要] を選択します。
-
Azure IoT Operations Arc 拡張機能の後に一覧表示されている拡張機能の名前をコピーします。 たとえば、azure-iot-operations-xxxx7 などです。
- アクセス許可を付与する必要があるクラウド リソースに移動します。 たとえば、[Event Grid 名前空間] >[アクセス制御 (IAM)]>[ロールの割り当てを追加] に移動します。
-
[ロール] タブで、適切なロールを選択します。
-
[メンバー] タブの [アクセスの割り当て先] で [ユーザー、グループ、またはサービス プリンシパル] オプションを選択し、[+ メンバーの選択] を選択して、Azure IoT Operations マネージド ID を検索します。 たとえば、azure-iot-operations-xxxx7 などです。
次に、システム割り当てマネージド ID の設定を使用してデータ フロー エンドポイントを構成します。
操作エクスペリエンスのデータ フロー エンドポイント設定ページで、[基本] タブを選択し、[認証方法]>[システム割り当てマネージド ID] を選択します。
作成または置換
az iot ops dataflow endpoint create コマンドを使用し、--auth-type
パラメーターをシステム割り当てマネージド ID 認証のSystemAssignedManagedIdentity
に設定します。
az iot ops dataflow endpoint create <Command> --auth-type SystemAssignedManagedIdentity --audience <Audience> --resource-group <ResourceGroupName> --instance <AioInstanceName> --name <EndpointName>
作成または変更
az iot ops dataflow endpoint apply コマンドを --config-file
パラメーターと共に使用します。
この例では、次の内容を含む構成ファイルを想定しています。
{
"endpointType": "Mqtt",
"mqttSettings": {
"host": "mycustombroker.contoso.com:8883",
"authentication": {
"method": "SystemAssignedManagedIdentity",
"systemAssignedManagedIdentitySettings": {}
},
"tls": {
"mode": "Enabled"
}
}
}
mqttSettings: {
authentication: {
method: 'SystemAssignedManagedIdentity'
systemAssignedManagedIdentitySettings: {}
}
}
mqttSettings:
authentication:
method: SystemAssignedManagedIdentity
systemAssignedManagedIdentitySettings:
{}
ユーザー割り当てマネージド ID
認証にユーザー割り当てマネージド ID を使用するには、まず、セキュリティで保護された設定を有効にして Azure IoT Operations を展開する必要があります。 次に、クラウド接続用にユーザー割り当てマネージド ID を設定する必要があります。 詳細については、Azure IoT Operations デプロイでの安全な設定の有効化に関する記事を参照してください。
データ フロー エンドポイントを構成する前に、MQTT ブローカーに接続するためのアクセス許可を付与するロールをユーザー割り当てマネージド ID に割り当てます。
- Azure portal で、アクセス許可を付与する必要があるクラウド リソースに移動します。 たとえば、[Event Grid 名前空間] >[アクセス制御 (IAM)]>[ロールの割り当てを追加] に移動します。
-
[ロール] タブで、適切なロールを選択します。
-
[メンバー] タブの [アクセスの割り当て先] で [マネージド ID] オプションを選択し、[+ メンバーの選択] を選択して、ユーザー割り当てマネージド ID を検索します。
次に、ユーザー割り当てマネージド ID の設定を使用してデータ フロー エンドポイントを構成します。
操作エクスペリエンスのデータ フロー エンドポイント設定ページで、[基本] タブを選択し、[認証方法]>[ユーザー割り当てマネージド ID] を選択します。
作成または置換
az iot ops dataflow endpoint create コマンドを使用し、--auth-type
パラメーターをユーザー割り当てマネージド ID 認証のUserAssignedManagedIdentity
に設定します。
az iot ops dataflow endpoint create <Command> --auth-type UserAssignedManagedIdentity --client-id <ClientId> --tenant-id <TenantId> --resource-group <ResourceGroupName> --instance <AioInstanceName> --name <EndpointName>
作成または変更
パラメーターで --config-file
を使用する
この例では、次の内容を含む構成ファイルを想定しています。
{
"endpointType": "Mqtt",
"mqttSettings": {
"authentication": {
"method": "UserAssignedManagedIdentity",
"userAssignedManagedIdentitySettings": {
"clientId": "<ID>",
"tenantId": "<ID>",
// Optional
"scope": "https://<Scope_Url>"
}
}
}
}
mqttSettings: {
authentication: {
method: 'UserAssignedManagedIdentity'
userAssignedManagedIdentitySettings: {
clientId: '<ID>'
tenantId: '<ID>'
// Optional, defaults to 'https://eventgrid.azure.net/.default'
// scope: 'https://<SCOPE_URL>'
}
}
}
mqttSettings:
authentication:
method: UserAssignedManagedIdentity
userAssignedManagedIdentitySettings:
clientId: <ID>
tenantId: <ID>
# Optional, defaults to 'https://eventgrid.azure.net/.default'
# scope: https://<SCOPE_URL>
Kubernetes サービス アカウント トークン (SAT)
認証に Kubernetes サービス アカウント トークン (SAT) を使う場合は、シークレットを作成する必要はありません。 SAT は、オーディエンスを照合するという方法での MQTT ブローカーでの認証に使われます。
操作エクスペリエンスのデータ フロー エンドポイント設定ページで、[基本] タブを選択し、[認証方法]>[サービス アカウント トークン] を選択します。
サービスの対象ユーザーを入力します。
作成または置換
az iot ops dataflow endpoint create コマンドを使用して、--auth-type
パラメーターを ServiceAccountToken
に設定し、Kubernetes サービス アカウント トークン認証を行います。
az iot ops dataflow endpoint create <Command> --auth-type ServiceAccountToken --audience <Audience> --resource-group <ResourceGroupName> --instance <AioInstanceName> --name <EndpointName>
作成または変更
パラメーターで --config-file
を使用します。
この例では、次の内容を含む構成ファイルを想定しています。
{
"endpointType": "Mqtt",
"mqttSettings": {
"authentication": {
"method": "ServiceAccountToken",
"serviceAccountTokenSettings": {
"audience": "<ServiceAccountAudience>"
}
}
}
}
mqttSettings: {
authentication: {
method: 'ServiceAccountToken'
serviceAccountTokenSettings: {
audience: '<YOUR_SERVICE_ACCOUNT_AUDIENCE>'
}
}
}
mqttSettings:
authentication:
method: ServiceAccountToken
serviceAccountTokenSettings:
audience: <YOUR_SERVICE_ACCOUNT_AUDIENCE>
X.509 証明書
Event Grid などの多くの MQTT ブローカーでは、X.509 認証がサポートされています。 データ フローでは、クライアント X.509 証明書を提示して、TLS 通信をネゴシエートすることができます。
証明書と秘密キーは、PEM 形式であること、パスワードで保護されていないことが必要です。
ヒント
PEM 形式は、証明書とキーの一般的な形式です。 PEM 形式の証明書とキーは、base64 でエンコードされた ASCII ファイルであり、-----BEGIN CERTIFICATE-----
や -----BEGIN EC PRIVATE KEY----
などのヘッダーがあります。
証明書が別の形式であっても、OpenSSL を使用して PEM 形式に変換できます。 詳細については、証明書を適切な形式に変換する方法を参照してください。
データ フロー エンドポイントを構成する前に、証明書と秘密キーを使用したシークレットを作成します。
操作ポータルを使用すると、シークレットが自動的にフォーマットされ、Kubernetes クラスターに同期されます。
Bicep または Kubernetes を使用する場合は、MQTT データ フロー エンドポイントと同じ名前空間に、証明書と秘密キーを使用してシークレットを手動で作成します。
kubectl create secret generic <X509_SECRET_NAME> -n azure-iot-operations --from-file=client_cert.pem=<CLIENT_CERT_FILE>.pem --from-file=client_key.pem=<PRIVATE_KEY_FILE>.pem --from-file=client_intermediate_certs.pem=<INTERMEDIATE_CERT_FILE>.pem
ここでは、シークレットには、証明書と秘密キーのキー名として client_cert.pem
と client_key.pem
が必要です。 必要に応じて、シークレットには、中間証明書のキー名として client_intermediate_certs.pem
を使用することもできます。
重要
操作エクスペリエンス Web UI を使用してシークレットを管理するには、まず、安全な設定で Azure IoT Operations を有効にする必要があります。それには Azure Key Vault を構成し、ワークロード ID を有効にします。 詳細については、Azure IoT Operations デプロイでの安全な設定の有効化に関する記事を参照してください。
重要
現在、操作エクスペリエンス Web UI には、X.509 シークレットを作成すると、誤ってエンコードされたデータを含むシークレットが生成されるという既知の問題があります。 詳細と回避策については、既知の問題を参照してください。
操作エクスペリエンスのデータ フロー エンドポイント設定ページで、[基本] タブを選択し、[認証方法]>[X509 証明書] を選択します。
ここで、[同期されたシークレット名] にシークレットの名前を入力します。 この名前は、データ フロー エンドポイントの設定でシークレットの参照に使われ、Kubernetes クラスターに格納されているシークレットの名前です。
次に、[X509 クライアント証明書]、[X509 クライアント キー]、[X509 中間証明書] で、[参照の追加] を選択して証明書、秘密キー、中間証明書を追加します。 次のページで、Azure Key Vault のシークレットを選択し、Azure Key Vault から追加するか、シークレットを新規作成します。
[新規作成] を選択した場合は、次の設定を入力します。
設定 |
説明 |
シークレット名 |
Azure Key Vault 内のシークレットの名前。 覚えやすい名前にして、後でリストからそのシークレットを選択できるようにしてください。 |
シークレット値 |
PEM 形式の証明書、秘密キー、または中間証明書。 業界標準の複数行の X509 証明書をアップロードすると、デバイスの認証管理、セキュリティ、柔軟性が向上します。 |
アクティブ化する日を設定する |
オンにした場合、シークレットがアクティブになる日付。 |
有効期限を設定する |
オンにした場合、シークレットの有効期限が切れる日付。 |
シークレットの詳細については、「Azure IoT Operations でのシークレットの作成と管理」を参照してください。
作成または置換
az iot ops データフロー エンドポイント作成 コマンドを使用し、--auth-type
パラメーターを X509Certificate
に設定して x.509 証明書認証を行います。
az iot ops dataflow endpoint create <Command> --auth-type X509Certificate --secret-name <X509SecretName> --resource-group <ResourceGroupName> --instance <AioInstanceName> --name <EndpointName>
作成または変更
パラメーターで --config-file
を使用します。
この例では、次の内容を含む構成ファイルを想定しています。
{
"endpointType": "Mqtt",
"mqttSettings": {
"authentication": {
"method": "X509Certificate",
"x509CertificateSettings": {
"secretRef": "<X509SecretName>"
}
}
}
}
mqttSettings: {
authentication: {
method: 'X509Certificate'
x509CertificateSettings:
secretRef: '<X509_SECRET_NAME>'
}
}
mqttSettings:
authentication:
method: X509Certificate
x509CertificateSettings:
secretRef: <X509_SECRET_NAME>
匿名
匿名認証を使うには、認証方法を Anonymous
に設定します。
操作エクスペリエンスのデータ フロー エンドポイント設定ページで、[基本] タブを選択し、[認証方法]>[なし] を選択します。
作成または置換
匿名認証には、 パラメーターを指定して --no-auth
コマンドを使用します。
az iot ops dataflow endpoint create <Command> --no-auth --resource-group <ResourceGroupName> --instance <AioInstanceName> --name <EndpointName>
作成または変更
パラメーターで --config-file
を使用します。
この例では、次の内容を含む構成ファイルを想定しています。
{
"endpointType": "Mqtt",
"mqttSettings": {
"authentication": {
"method": "Anonymous"
}
}
}
mqttSettings: {
authentication: {
method: 'Anonymous'
}
}
mqttSettings:
authentication:
method: Anonymous
anonymousSettings:
{}
詳細設定
TLS、信頼された証明機関証明書、MQTT メッセージの設定、CloudEvents など、MQTT ブローカー データ フロー エンドポイントの詳細設定を設定できます。 これらの設定は、データ フロー エンドポイントのカスタム リソース内のデータ フロー エンドポイントの [詳細設定] ポータル タブで設定できます。
操作エクスペリエンスで、データ フロー エンドポイントの [詳細] タブを選択します。
{
"mqttSettings": {
"qos": 1,
"retain": "Keep",
"sessionExpirySeconds": 3600,
"keepAliveSeconds": 60,
"maxInflightMessages": 100,
"protocol": "WebSockets",
"clientIdPrefix": "dataflow",
"cloudEventAttributes": "Propagate",
"tls": {
"mode": "Enabled"
}
}
}
// See sections below for explanation of each setting
mqttSettings: {
qos: 1
retain: 'Keep'
sessionExpirySeconds: 3600
keepAliveSeconds: 60
maxInflightMessages: 100
protocol: WebSockets
clientIdPrefix: 'dataflow'
cloudEventAttributes : 'Propagate' // or 'CreateOrRemap'
}
# See sections below for explanation of each setting
mqttSettings:
qos: 1
retain: Keep
sessionExpirySeconds: 3600
keepAliveSeconds: 60
maxInflightMessages: 100
protocol: WebSockets
clientIdPrefix: dataflow
cloudEventAttributes : Propagate # or CreateOrRemap
TLS の設定
TLS モード
MQTT エンドポイントの TLS を有効または無効にするには、TLS 設定の mode
設定を更新します。
操作エクスペリエンスのデータ フロー エンドポイント設定ページで、[詳細] タブを選択し、[TLS モードが有効] の横にあるチェックボックスを使用します。
{
"mqttSettings": {
"tls": {
"mode": "Enabled"
}
}
}
mqttSettings: {
tls: {
mode: 'Enabled' // or 'Disabled'
}
}
mqttSettings:
tls:
mode: Enabled # or Disabled
TLS モードは、Enabled
または Disabled
に設定できます。 モードが Enabled
に設定されている場合、データ フローは MQTT ブローカーに対して安全な接続を使用します。 モードが Disabled
に設定されている場合、データ フローは MQTT ブローカーに対して安全ではない接続を使用します。
信頼された証明機関証明書
MQTT ブローカーへのセキュリティで保護された接続を確立するために、MQTT エンドポイントの信頼された CA 証明書を構成します。 この設定は、MQTT ブローカーが自己署名証明書または既定では信頼されていないカスタム証明機関によって署名された証明書を使用する場合に重要です。
操作エクスペリエンスのデータ フロー エンドポイント設定ページで、[詳細] タブを選択し、[信頼された CA 証明書構成マップ] フィールドを使用して、信頼された CA 証明書を含む ConfigMap を指定します。
mqttSettings: {
tls: {
trustedCaCertificateConfigMapRef: '<YOUR_CA_CERTIFICATE>'
}
}
{
"mqttSettings": {
"tls": {
"trustedCaCertificateConfigMapRef": "<YOUR_CA_CERTIFICATE>"
}
}
}
mqttSettings:
tls:
trustedCaCertificateConfigMapRef: <YOUR_CA_CERTIFICATE>
この ConfigMap には、PEM 形式の証明機関証明書が含まれている必要があります。 この ConfigMap は、MQTT データ フロー リソースと同じ名前空間に存在する必要があります。 次に例を示します。
kubectl create configmap client-ca-configmap --from-file root_ca.crt -n azure-iot-operations
ヒント
Event Grid MQTT ブローカーに接続するときに CA 証明書は必要ありません。Event Hubs サービスでは、既定で信頼されているパブリック CA によって署名された証明書が使用されるからです。
クライアント ID プレフィックス
MQTT クライアントのクライアント ID プレフィックスを設定できます。 プレフィックスの後にデータ フロー インスタンス名を追加してクライアント ID が生成されます。
注意
ほとんどのアプリケーションでは、クライアント ID プレフィックスを変更しないでください。 最初の IoT 操作のデプロイ後にこれを変更しないでください。 デプロイ後にクライアント ID プレフィックスを変更すると、データが失われる可能性があります。
操作エクスペリエンスのデータ フロー エンドポイント設定ページで、[詳細設定] タブを選択し、[クライアント ID プレフィックス] フィールドを使用してプレフィクスを指定します。
{
"mqttSettings": {
"clientIdPrefix": "<YOUR_PREFIX>"
}
}
mqttSettings: {
clientIdPrefix: '<YOUR_PREFIX>'
}
mqttSettings:
clientIdPrefix: <YOUR_PREFIX>
QoS
MQTT メッセージのサービス品質 (QoS) レベルを 1 または 0 に設定できます。 既定値は 1 です。
操作エクスペリエンスのデータ フロー エンドポイント設定ページで、[詳細設定] タブを選択し、[サービスの品質 (QoS)] フィールドを使用して QoS レベルを指定します。
{
"mqttSettings": {
"qos": 1
}
}
mqttSettings: {
qos: 1 // Or 0
}
mqttSettings:
qos: 1 # Or 0
保存
retain
の設定は、データ フローが MQTT メッセージで保持フラグを維持する必要があるかどうかを指定するために使います。 既定値は、Keep
です。
このフィールドを Keep
に設定することは、リモート ブローカーでもローカル ブローカーと同じメッセージを確実に保持するのに役立ちます。このことは、統合名前空間 (UNS) のシナリオで重要になる可能性があります。
Never
に設定すると、保持フラグは MQTT メッセージから削除されます。 これは、リモート ブローカーにメッセージを保持させたくない場合や、リモート ブローカーが保持をサポートしていない場合に役立ちます。
保持設定を構成するには、以下を行います。
操作エクスペリエンスのデータ フロー エンドポイント設定ページで、[詳細設定] タブを選択し、[保持] フィールドを使用して保持設定を指定します。
{
"mqttSettings": {
"retain": "Keep"
}
}
mqttSettings: {
retain: Keep // or Never
}
mqttSettings:
retain: Keep # or Never
"保持" 設定は、データ フローが MQTT エンドポイントを送信元と送信先の両方として使う場合にのみ有効です。 たとえば、MQTT ブリッジのシナリオの場合です。
重要
Azure Event Grid MQTT ブローカーは、現在は保持フラグをサポートしていません。 つまり、Event Grid MQTT ブローカー エンドポイントで保持フラグを Keep
に設定した場合、それが宛先として使われると、メッセージは拒否されます。 Event Grid MQTT ブローカーを宛先として使うときは、これを避けるため、保持フラグを Never
に設定します。
セッションの有効期間
データ フロー MQTT クライアントのセッションの有効期間を設定できます。 セッションの有効期間は、データ フロー クライアントが切断された場合に MQTT セッションが維持される最大時間です。 既定値は、600 秒です。 セッションの有効期限間隔を構成するには、以下を行います。
操作エクスペリエンスのデータ フロー エンドポイント設定ページで、[詳細設定] タブを選択し、[セッションの有効期間] フィールドを使用してセッションの有効期間間隔を指定します。
{
"mqttSettings": {
"sessionExpirySeconds": 600
}
}
mqttSettings: {
sessionExpirySeconds: 600
}
mqttSettings:
sessionExpirySeconds: 600
MQTT または WebSocket プロトコル
既定では、WebSocket は有効にされません。 WebSocket 経由で MQTT を使うには、protocol
フィールドを WebSockets
に設定します。
操作エクスペリエンスのデータ フロー エンドポイント設定ページで、[詳細設定] タブを選択し、[プロトコル] フィールドを使用してプロトコルを指定します。
{
"mqttSettings": {
"protocol": "WebSockets"
}
}
mqttSettings: {
protocol: 'WebSockets'
}
mqttSettings:
protocol: WebSockets
最大フライト中メッセージ数
データ フロー MQTT クライアントが保持できるフライト中メッセージの最大数を設定できます。 既定値は、100 です。
操作エクスペリエンスのデータ フロー エンドポイント設定ページで、[詳細設定] タブを選択し、[フライト中のメッセージの最大数] フィールドを使用して配信中のメッセージの最大数を指定します。
{
"mqttSettings": {
"maxInflightMessages": 100
}
}
mqttSettings: {
maxInflightMessages: 100
}
mqttSettings:
maxInflightMessages: 100
MQTT エンドポイントが送信元として使われているときのサブスクライブの場合、これは受信の最大値です。 MQTT エンドポイントが送信先として使われているときのパブリッシュの場合、これは受信確認を待機する前に送信するメッセージの最大数です。
キープ アライブ
データ フロー MQTT クライアントのキープ アライブ間隔を設定できます。 キープ アライブ間隔は、PINGREQ メッセージがブローカーに送信されるまで、データ フロー クライアントがアイドル状態になっていられる最大時間です。 既定値は、60 秒です。
操作エクスペリエンスのデータ フロー エンドポイント設定ページで、[詳細設定] タブを選択し、[キープ アライブ] フィールドを使用してキープ アライブ間隔を指定します。
{
"mqttSettings": {
"keepAliveSeconds": 60
}
}
mqttSettings: {
keepAliveSeconds: 60
}
mqttSettings:
keepAliveSeconds: 60
CloudEvents
CloudEvents は、イベント データを一般的な方法で記述する方法です。 CloudEvents の設定は、CloudEvents 形式でメッセージを送受信するために使われます。 CloudEvents は、同じ、または異なるクラウド プロバイダー内にある異なるサービスが相互に通信する必要があるイベント駆動型アーキテクチャに使用できます。
cloudEventAttributes
オプションは、Propagate
または CreateOrRemap
です。 CloudEvents の設定を構成するには、以下を行います。
操作エクスペリエンスのデータ フロー エンドポイント設定ページで、[詳細] タブを選択し、[クラウド イベント属性] フィールドを使用して CloudEvents 設定を指定します。
{
"mqttSettings": {
"cloudEventAttributes": "Propagate"
}
}
mqttSettings: {
cloudEventAttributes : 'Propagate' // or 'CreateOrRemap'
}
mqttSettings:
cloudEventAttributes : Propagate # or CreateOrRemap
以降のセクションでは、CloudEvents設定の詳細について説明します。
設定の伝達
CloudEvent プロパティは、必要なプロパティを含むメッセージではパススルーされます。 メッセージに必要なプロパティが含まれていない場合、メッセージはそのまま渡されます。
名前 |
必須 |
値の例 |
出力値 |
specversion |
はい |
1.0 |
そのまま渡されます |
type |
はい |
ms.aio.telemetry |
そのまま渡されます |
source |
はい |
aio://mycluster/myoven |
そのまま渡されます |
id |
はい |
A234-1234-1234 |
そのまま渡されます |
subject |
いいえ |
aio/myoven/sensor/temperature |
そのまま渡されます |
time |
いいえ |
2018-04-05T17:31:00Z |
そのまま渡されます。 再スタンプされません。 |
datacontenttype |
いいえ |
application/json |
オプションの変換ステージの後で、出力データのコンテンツ タイプに変更されます。 |
dataschema |
いいえ |
sr://fabrikam-schemas/123123123234234234234234#1.0.0 |
変換構成に出力データ変換スキーマが指定されている場合、dataschema は出力スキーマに変更されます。 |
CreateOrRemap の設定
CloudEvent プロパティは、必要なプロパティを含むメッセージではパススルーされます。 メッセージに必要なプロパティが含まれていない場合は、プロパティが生成されます。
名前 |
必須 |
不足している場合に生成される値 |
specversion |
はい |
1.0 |
type |
はい |
ms.aio-dataflow.telemetry |
source |
はい |
aio://<target-name> |
id |
はい |
ターゲット クライアントで生成された UUID |
subject |
いいえ |
メッセージが送信される出力トピック |
time |
いいえ |
ターゲット クライアントで RFC 3339 として生成 |
datacontenttype |
いいえ |
オプションの変換ステージの後で、出力データのコンテンツ タイプに変更 |
dataschema |
いいえ |
スキーマ レジストリで定義されているスキーマ |
次のステップ
データ フローの詳細については、「データ フローの作成」を参照してください。