Skip to content

Commit 3426298

Browse files
authored
Merge pull request #190095 from jlian/master
Fix several doc bugs
2 parents b582027 + 94fb906 commit 3426298

7 files changed

+49
-16
lines changed

articles/iot-edge/how-to-configure-proxy-support.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ title: Configure devices for network proxies - Azure IoT Edge | Microsoft Docs
33
description: How to configure the Azure IoT Edge runtime and any internet-facing IoT Edge modules to communicate through a proxy server.
44
author: kgremban
55
ms.author: kgremban
6-
ms.date: 09/03/2020
6+
ms.date: 02/28/2022
77
ms.topic: how-to
88
ms.service: iot-edge
99
services: iot-edge
@@ -383,6 +383,10 @@ If the proxy you're attempting to use performs traffic inspection on TLS-secured
383383

384384
To use a proxy that performs traffic inspection, you must use either shared access signature authentication or have IoT Hub and the IoT Hub device provisioning service added to an allowlist to avoid inspection.
385385

386+
## Fully qualified domain names (FQDNs) of destinations that IoT Edge communicates with
387+
388+
If your proxy has a firewall that requires you to allow-list all FQDNs for internet connectivity, review the list from [Allow connections from IoT Edge devices](production-checklist.md#allow-connections-from-iot-edge-devices) to determine which FQDNs to add.
389+
386390
## Next steps
387391

388392
Learn more about the roles of the [IoT Edge runtime](iot-edge-runtime.md).

articles/iot-edge/how-to-connect-downstream-iot-edge-device.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ description: How to configure an IoT Edge device to connect to Azure IoT Edge ga
44
author: kgremban
55

66
ms.author: kgremban
7-
ms.date: 01/09/2022
7+
ms.date: 02/28/2022
88
ms.topic: conceptual
99
ms.service: iot-edge
1010
services: iot-edge
@@ -159,6 +159,10 @@ Make sure that the user **iotedge** has read permissions for the directory holdi
159159
160160
1. *If this device is a child device*, find the **Parent hostname** section. Uncomment and update the `parent_hostname` parameter to be the FQDN or IP address of the parent device, matching whatever was provided as the hostname in the parent device's config file.
161161
162+
```toml
163+
parent_hostname = "my-parent-device"
164+
```
165+
162166
1. Find the **Trust bundle cert** section. Uncomment and update the `trust_bundle_cert` parameter with the file URI to the root CA certificate on your device.
163167
164168
1. Verify your IoT Edge device will use the correct version of the IoT Edge agent when it starts up.

articles/iot-edge/how-to-provision-devices-at-scale-linux-symmetric.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ Have the following information ready:
8282

8383
1. Update the values of `scope_id`, `registration_id`, and `symmetric_key` with your DPS and device information.
8484

85-
1. Optionally, use the `always_reprovision_on_startup` or `dynamic_reprovisioning` lines to configure your device's reprovisioning behavior. If a device is set to reprovision on startup, it will always attempt to provision with DPS first and then fall back to the provisioning backup if that fails. If a device is set to dynamically reprovision itself, IoT Edge will restart and reprovision if a reprovisioning event is detected. For more information, see [IoT Hub device reprovisioning concepts](../iot-dps/concepts-device-reprovision.md).
85+
1. Optionally, use the `always_reprovision_on_startup` or `dynamic_reprovisioning` lines to configure your device's reprovisioning behavior. If a device is set to reprovision on startup, it will always attempt to provision with DPS first and then fall back to the provisioning backup if that fails. If a device is set to dynamically reprovision itself, IoT Edge (and all modules) will restart and reprovision if a reprovisioning event is detected, like if the device is moved from one IoT Hub to another. Specifically, IoT Edge checks for `bad_credential` or `device_disabled` errors from the SDK to detect the reprovision event. To trigger this event manually, disable the device in IoT Hub. For more information, see [IoT Hub device reprovisioning concepts](../iot-dps/concepts-device-reprovision.md).
8686

8787
1. Restart the IoT Edge runtime so that it picks up all the configuration changes that you made on the device.
8888

articles/iot-edge/how-to-provision-devices-at-scale-linux-tpm.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ After the runtime is installed on your device, configure the device with the inf
202202

203203
1. Update the values of `scope_id` and `registration_id` with your device provisioning service and device information. The `scope_id` value is the **ID Scope** from your device provisioning service instance's overview page.
204204

205-
1. Optionally, use the `always_reprovision_on_startup` or `dynamic_reprovisioning` lines to configure your device's reprovisioning behavior. If a device is set to reprovision on startup, it will always attempt to provision with the device provisioning service first and then fall back to the provisioning backup if that fails. If a device is set to dynamically provision itself, IoT Edge will restart and reprovision if a reprovisioning event is detected. For more information, see [IoT Hub device reprovisioning concepts](../iot-dps/concepts-device-reprovision.md).
205+
1. Optionally, use the `always_reprovision_on_startup` or `dynamic_reprovisioning` lines to configure your device's reprovisioning behavior. If a device is set to reprovision on startup, it will always attempt to provision with DPS first and then fall back to the provisioning backup if that fails. If a device is set to dynamically reprovision itself, IoT Edge (and all modules) will restart and reprovision if a reprovisioning event is detected, like if the device is moved from one IoT Hub to another. Specifically, IoT Edge checks for `bad_credential` or `device_disabled` errors from the SDK to detect the reprovision event. To trigger this event manually, disable the device in IoT Hub. For more information, see [IoT Hub device reprovisioning concepts](../iot-dps/concepts-device-reprovision.md).
206206

207207
1. Save and close the file.
208208

articles/iot-edge/how-to-provision-devices-at-scale-linux-x509.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ title: Create and provision IoT Edge devices at scale using X.509 certificates o
33
description: Use X.509 certificates to test provisioning devices at scale for Azure IoT Edge with device provisioning service
44
author: kgremban
55
ms.author: kgremban
6-
ms.date: 10/29/2021
6+
ms.date: 02/28/2022
77
ms.topic: conceptual
88
ms.service: iot-edge
99
services: iot-edge
@@ -120,7 +120,7 @@ Have the following information ready:
120120

121121
1. Optionally, provide the `registration_id` for the device, which needs to match the common name (CN) of the identity certificate. If you leave that line commented out, the CN will automatically be applied.
122122

123-
1. Optionally, use the `always_reprovision_on_startup` or `dynamic_reprovisioning` lines to configure your device's reprovisioning behavior. If a device is set to reprovision on startup, it will always attempt to provision with DPS first and then fall back to the provisioning backup if that fails. If a device is set to dynamically reprovision itself, IoT Edge will restart and reprovision if a reprovisioning event is detected. For more information, see [IoT Hub device reprovisioning concepts](../iot-dps/concepts-device-reprovision.md).
123+
1. Optionally, use the `always_reprovision_on_startup` or `dynamic_reprovisioning` lines to configure your device's reprovisioning behavior. If a device is set to reprovision on startup, it will always attempt to provision with DPS first and then fall back to the provisioning backup if that fails. If a device is set to dynamically reprovision itself, IoT Edge (and all modules) will restart and reprovision if a reprovisioning event is detected, like if the device is moved from one IoT Hub to another. Specifically, IoT Edge checks for `bad_credential` or `device_disabled` errors from the SDK to detect the reprovision event. To trigger this event manually, disable the device in IoT Hub. For more information, see [IoT Hub device reprovisioning concepts](../iot-dps/concepts-device-reprovision.md).
124124

125125
1. Save and close the config.yaml file.
126126

articles/iot-edge/production-checklist.md

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -205,20 +205,24 @@ If your networking setup requires that you explicitly permit connections made fr
205205
* **IoT Edge hub** opens a single persistent AMQP connection or multiple MQTT connections to IoT Hub, possibly over WebSockets.
206206
* **IoT Edge service** makes intermittent HTTPS calls to IoT Hub.
207207

208-
In all three cases, the DNS name would match the pattern \*.azure-devices.net.
208+
In all three cases, the fully-qualified domain name (FQDN) would match the pattern `\*.azure-devices.net`.
209209

210-
Additionally, the **Container engine** makes calls to container registries over HTTPS. To retrieve the IoT Edge runtime container images, the DNS name is mcr.microsoft.com. The container engine connects to other registries as configured in the deployment.
210+
Additionally, the **Container engine** makes calls to container registries over HTTPS. To retrieve the IoT Edge runtime container images, the FQDN is `mcr.microsoft.com`. The container engine connects to other registries as configured in the deployment.
211211

212212
This checklist is a starting point for firewall rules:
213213

214-
| URL (\* = wildcard) | Outbound TCP Ports | Usage |
214+
| FQDN (\* = wildcard) | Outbound TCP Ports | Usage |
215215
| ----- | ----- | ----- |
216-
| mcr.microsoft.com | 443 | Microsoft Container Registry |
217-
| global.azure-devices-provisioning.net | 443 | DPS access (optional) |
218-
| \*.azurecr.io | 443 | Personal and third-party container registries |
219-
| \*.blob.core.windows.net | 443 | Download Azure Container Registry image deltas from blob storage |
220-
| \*.azure-devices.net | 5671, 8883, 443 | IoT Hub access |
221-
| \*.docker.io | 443 | Docker Hub access (optional) |
216+
| `mcr.microsoft.com` | 443 | Microsoft Container Registry |
217+
| `global.azure-devices-provisioning.net` | 443 | [Device Provisioning Service](../iot-dps/about-iot-dps.md) access (optional) |
218+
| `\*.azurecr.io` | 443 | Personal and third-party container registries |
219+
| `\*.blob.core.windows.net` | 443 | Download Azure Container Registry image deltas from blob storage |
220+
| `\*.azure-devices.net` | 5671, 8883, 443<sup>1</sup> | IoT Hub access |
221+
| `\*.docker.io` | 443 | Docker Hub access (optional) |
222+
223+
<sup>1</sup>Open port 8883 for secure MQTT or port 5671 for secure AMQP. If you can only make connections via port 443 then either of these protocols can be run through a WebSocket tunnel.
224+
225+
Since the IP address of an IoT hub can change without notice, always use the FQDN to allow-list configuration. To learn more, see [Understanding the IP address of your IoT hub](../iot-hub/iot-hub-understand-ip-address.md).
222226

223227
Some of these firewall rules are inherited from Azure Container Registry. For more information, see [Configure rules to access an Azure container registry behind a firewall](../container-registry/container-registry-firewall-access-rules.md).
224228

articles/iot-edge/troubleshoot-common-errors.md

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ description: Use this article to resolve common issues encountered when deployin
44
author: kgremban
55

66
ms.author: kgremban
7-
ms.date: 03/01/2021
7+
ms.date: 02/28/2022
88
ms.topic: conceptual
99
ms.service: iot-edge
1010
services: iot-edge
@@ -470,6 +470,27 @@ IoT Edge devices behind a gateway get their module images from the parent IoT Ed
470470
471471
Make sure the parent IoT Edge device can receive incoming requests from the child IoT Edge device. Open network traffic on ports 443 and 6617 for requests coming from the child device.
472472
473+
## IoT Edge behind a gateway cannot connect when migrating from one IoT hub to another
474+
475+
**Observed behavior:**
476+
477+
When attempting to migrate a hierarchy of IoT Edge devices from one IoT hub to another, the top level parent IoT Edge device can connect to IoT Hub, but downstream IoT Edge devices cannot. The logs report `Unable to authenticate client downstream-device/$edgeAgent with module credentials`.
478+
479+
**Root cause:**
480+
481+
The credentials for the downstream devices were not updated properly when the migration to the new IoT hub happened. Because of this, `edgeAgent` and `edgeHub` modules were set to have authentication type of `none` (default if not set explicitly). During connection, the modules on the downstream devices use old credentials, causing the authentication to fail.
482+
483+
**Resolution:**
484+
485+
When migrating to the new IoT hub (assuming not using DPS), follow these steps in order:
486+
1. Follow [this guide to export and then import device identities](../iot-hub/iot-hub-bulk-identity-mgmt.md) from the old IoT hub to the new one
487+
1. Reconfigure all IoT Edge deployments and configurations in the new IoT hub
488+
1. Reconfigure all parent-child device relationships in the new IoT hub
489+
1. Update each device to point to the new IoT hub hostname (`iothub_hostname` under `[provisioning]` in `config.toml`)
490+
1. If you chose to exclude authentication keys during the device export, reconfigure each device with the new keys given by the new IoT hub (`device_id_pk` under `[provisioning.authentication]` in `config.toml`)
491+
1. Restart the top-level parent Edge device first, make sure it's up and running
492+
1. Restart each device in hierarchy level by level from top to the bottom
493+
473494
:::moniker-end
474495
<!-- end 1.2 -->
475496

0 commit comments

Comments
 (0)