Updates from: 07/11/2022 01:05:35
Service Microsoft Docs article Related commit history on GitHub Change details
active-directory How To Connect Group Writeback V2 https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/hybrid/how-to-connect-group-writeback-v2.md
It's recommended that you follow the [swing migration](how-to-upgrade-previous-v
>[!NOTE] > If you are using an older build of group writeback in Azure AD Connect, the M365 groups being written back as universal distribution groups, will continue to be written back. The new version of group writeback is backwards compatible.
-## Enable group writeback using Azure AD Connect
+## Enable group writeback
+Enabling group writeback's new features is a two step process. One step is done via Azure AD Connect. This step enables the original group writeback features. The second one is done using PowerShell and enables the new writeback features once the original features are enabled. To enable group writeback complete the steps in the table below
+
+Steps|Description|
+|--|--|
+|[Enable group writeback using Azure AD Connect](#enable-group-writeback-using-azure-ad-connect)|Enables group writeback with the original features included in Azure AD Connect. That is, it will writeback M365 groups as distribution groups. This option is **only** available if you have Exchange present in your on-premises Active Directory.|
+|[Enabling group writeback using PowerShell](#enable-group-writeback-using-powershell)|Enables the new group writeback features outlined in this article.
+
+>[!NOTE]
+>You must enable group writeback via Azure AD Connect before enabling group writeback via PowerShell to receive the new features outlined in this article. You must do both and in the correct order.
+
+### Enable group writeback using Azure AD Connect
To enable group writeback, use the following steps:
To enable group writeback, use the following steps:
For more information on configuring the Microsoft 365 groups, see [Configure Microsoft 365 Groups with on-premises Exchange hybrid](/exchange/hybrid-deployment/set-up-microsoft-365-groups#enable-group-writeback-in-azure-ad-connect).
-## Enabling group writeback using PowerShell
+### Enable group writeback using PowerShell
To enable group writeback via PowerShell:
app-service Configure Authentication Oauth Tokens https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/app-service/configure-authentication-oauth-tokens.md
When your provider's access token (not the [session token](#extend-session-token
- **Twitter**: Access tokens don't expire (see [Twitter OAuth FAQ](https://developer.twitter.com/en/docs/authentication/faq)). - **Microsoft**: In [https://resources.azure.com](https://resources.azure.com), do the following steps: 1. At the top of the page, select **Read/Write**.
- 2. In the left browser, navigate to **subscriptions** > **_\<subscription\_name_** > **resourceGroups** > **_\<resource\_group\_name>_** > **providers** > **Microsoft.Web** > **sites** > **_\<app\_name>_** > **config** > **authsettingsV2**.
+ 2. In the left browser, navigate to **subscriptions** > **_\<subscription\_name>_** > **resourceGroups** > **_\<resource\_group\_name>_** > **providers** > **Microsoft.Web** > **sites** > **_\<app\_name>_** > **config** > **authsettingsV2**.
3. Click **Edit**. 4. Modify the following property.
application-gateway Tutorial Ingress Controller Add On Existing https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/application-gateway/tutorial-ingress-controller-add-on-existing.md
Title: 'Tutorial: Enable Ingress Controller Add-On for existing AKS cluster with existing Azure Application Gateway'
+ Title: 'Tutorial: Enable ingress controller add-on for existing AKS cluster with existing Azure application gateway'
description: Use this tutorial to enable the Ingress Controller Add-On for your existing AKS cluster with an existing Application Gateway Previously updated : 03/02/2021 Last updated : 07/09/2022 +
-# Tutorial: Enable Application Gateway Ingress Controller add-on for an existing AKS cluster with an existing Application Gateway
+# Tutorial: Enable application gateway ingress controller add-on for an existing AKS cluster with an existing application gateway
-You can use Azure CLI or Portal to enable the [Application Gateway Ingress Controller (AGIC)](ingress-controller-overview.md) add-on for an existing [Azure Kubernetes Services (AKS)](https://azure.microsoft.com/services/kubernetes-service/) cluster. In this tutorial, you'll learn how to use AGIC add-on to expose your Kubernetes application in an existing AKS cluster through an existing Application Gateway deployed in separate virtual networks. You'll start by creating an AKS cluster in one virtual network and an Application Gateway in a separate virtual network to simulate existing resources. You'll then enable the AGIC add-on, peer the two virtual networks together, and deploy a sample application that will be exposed through the Application Gateway using the AGIC add-on. If you're enabling the AGIC add-on for an existing Application Gateway and existing AKS cluster in the same virtual network, then you can skip the peering step below. The add-on provides a much faster way of deploying AGIC for your AKS cluster than [previously through Helm](ingress-controller-overview.md#difference-between-helm-deployment-and-aks-add-on) and also offers a fully managed experience.
+You can use Azure CLI or portal to enable the [application gateway ingress controller (AGIC)](ingress-controller-overview.md) add-on for an existing [Azure Kubernetes Services (AKS)](https://azure.microsoft.com/services/kubernetes-service/) cluster. In this tutorial, you'll learn how to use AGIC add-on to expose your Kubernetes application in an existing AKS cluster through an existing application gateway deployed in separate virtual networks. You'll start by creating an AKS cluster in one virtual network and an application gateway in a separate virtual network to simulate existing resources. You'll then enable the AGIC add-on, peer the two virtual networks together, and deploy a sample application that will be exposed through the application gateway using the AGIC add-on. If you're enabling the AGIC add-on for an existing application gateway and existing AKS cluster in the same virtual network, then you can skip the peering step below. The add-on provides a much faster way of deploying AGIC for your AKS cluster than [through Helm](ingress-controller-overview.md#difference-between-helm-deployment-and-aks-add-on) and also offers a fully managed experience.
In this tutorial, you learn how to: > [!div class="checklist"] > * Create a resource group > * Create a new AKS cluster
-> * Create a new Application Gateway
+> * Create a new application gateway
> * Enable the AGIC add-on in the existing AKS cluster through Azure CLI
-> * Enable the AGIC add-on in the existing AKS cluster through Portal
-> * Peer the Application Gateway virtual network with the AKS cluster virtual network
-> * Deploy a sample application using AGIC for Ingress on the AKS cluster
-> * Check that the application is reachable through Application Gateway
+> * Enable the AGIC add-on in the existing AKS cluster through Azure portal
+> * Peer the application gateway virtual network with the AKS cluster virtual network
+> * Deploy a sample application using AGIC for ingress on the AKS cluster
+> * Check that the application is reachable through application gateway
[!INCLUDE [quickstarts-free-trial-note](../../includes/quickstarts-free-trial-note.md)]
In this tutorial, you learn how to:
## Create a resource group
-In Azure, you allocate related resources to a resource group. Create a resource group by using [az group create](/cli/azure/group#az-group-create). The following example creates a resource group named *myResourceGroup* in the *canadacentral* location (region).
+In Azure, you allocate related resources to a resource group. Create a resource group by using [az group create](/cli/azure/group#az-group-create). The following example creates a resource group named **myResourceGroup** in the **canadacentral** location (region).
```azurecli-interactive az group create --name myResourceGroup --location canadacentral
az group create --name myResourceGroup --location canadacentral
You'll now deploy a new AKS cluster, to simulate having an existing AKS cluster that you want to enable the AGIC add-on for.
-In the following example, you'll be deploying a new AKS cluster named *myCluster* using [Azure CNI](../aks/concepts-network.md#azure-cni-advanced-networking) and [Managed Identities](../aks/use-managed-identity.md) in the resource group you created, *myResourceGroup*.
+In the following example, you'll be deploying a new AKS cluster named **myCluster** using [Azure CNI](../aks/concepts-network.md#azure-cni-advanced-networking) and [Managed Identities](../aks/use-managed-identity.md) in the resource group you created, **myResourceGroup**.
```azurecli-interactive az aks create -n myCluster -g myResourceGroup --network-plugin azure --enable-managed-identity ```
-To configure additional parameters for the `az aks create` command, visit references [here](/cli/azure/aks#az-aks-create).
+To configure other parameters for the `az aks create` command, visit references [here](/cli/azure/aks#az-aks-create).
-## Deploy a new Application Gateway
+## Deploy a new application gateway
-You'll now deploy a new Application Gateway, to simulate having an existing Application Gateway that you want to use to load balance traffic to your AKS cluster, *myCluster*. The name of the Application Gateway will be *myApplicationGateway*, but you will need to first create a public IP resource, named *myPublicIp*, and a new virtual network called *myVnet* with address space 11.0.0.0/8, and a subnet with address space 11.1.0.0/16 called *mySubnet*, and deploy your Application Gateway in *mySubnet* using *myPublicIp*.
+You'll now deploy a new application gateway, to simulate having an existing application gateway that you want to use to load balance traffic to your AKS cluster, **myCluster**. The name of the application gateway will be **myApplicationGateway**, but you'll need to first create a public IP resource, named **myPublicIp**, and a new virtual network called **myVnet** with address space 11.0.0.0/8, and a subnet with address space 11.1.0.0/16 called **mySubnet**, and deploy your application gateway in **mySubnet** using **myPublicIp**.
-When using an AKS cluster and Application Gateway in separate virtual networks, the address spaces of the two virtual networks must not overlap. The default address space that an AKS cluster deploys in is 10.0.0.0/8, so we set the Application Gateway virtual network address prefix to 11.0.0.0/8.
+When you use an AKS cluster and application gateway in separate virtual networks, the address spaces of the two virtual networks must not overlap. The default address space that an AKS cluster deploys in is 10.0.0.0/8, so we set the application gateway virtual network address prefix to 11.0.0.0/8.
```azurecli-interactive az network public-ip create -n myPublicIp -g myResourceGroup --allocation-method Static --sku Standard
az network application-gateway create -n myApplicationGateway -l canadacentral -
``` > [!NOTE]
-> Application Gateway Ingress Controller (AGIC) add-on **only** supports Application Gateway v2 SKUs (Standard and WAF), and **not** the Application Gateway v1 SKUs.
+> application gateway ingress controller (AGIC) add-on **only** supports application gateway v2 SKUs (Standard and WAF), and **not** the application gateway v1 SKUs.
## Enable the AGIC add-on in existing AKS cluster through Azure CLI
-If you'd like to continue using Azure CLI, you can continue to enable the AGIC add-on in the AKS cluster you created, *myCluster*, and specify the AGIC add-on to use the existing Application Gateway you created, *myApplicationGateway*.
+If you'd like to continue using Azure CLI, you can continue to enable the AGIC add-on in the AKS cluster you created, **myCluster**, and specify the AGIC add-on to use the existing application gateway you created, **myApplicationGateway**.
```azurecli-interactive appgwId=$(az network application-gateway show -n myApplicationGateway -g myResourceGroup -o tsv --query "id") az aks enable-addons -n myCluster -g myResourceGroup -a ingress-appgw --appgw-id $appgwId ```
-## Enable the AGIC add-on in existing AKS cluster through Portal
+## Enable the AGIC add-on in existing AKS cluster through Azure portal
-If you'd like to use Azure portal to enable AGIC add-on, go to [(https://aka.ms/azure/portal/aks/agic)](https://aka.ms/azure/portal/aks/agic) and navigate to your AKS cluster through the Portal link. From there, go to the Networking tab within your AKS cluster. You'll see an Application Gateway ingress controller section, which allows you to enable/disable the ingress controller add-on using the Portal UI. Check the box next to "Enable ingress controller", and select the Application Gateway you created, *myApplicationGateway* from the dropdown menu.
+If you'd like to use Azure portal to enable AGIC add-on, go to [(https://aka.ms/azure/portal/aks/agic)](https://aka.ms/azure/portal/aks/agic) and navigate to your AKS cluster through the portal link. From there, go to the Networking tab within your AKS cluster. You'll see an application gateway ingress controller section, which allows you to enable/disable the ingress controller add-on using the Azure portal. Select the box next to **Enable ingress controller**, and then select the application gateway you created, **myApplicationGateway** from the dropdown menu. Select **Save**.
-![Application Gateway Ingress Controller Portal](./media/tutorial-ingress-controller-add-on-existing/portal-ingress-controller-add-on.png)
## Peer the two virtual networks together
-Since we deployed the AKS cluster in its own virtual network and the Application Gateway in another virtual network, you'll need to peer the two virtual networks together in order for traffic to flow from the Application Gateway to the pods in the cluster. Peering the two virtual networks requires running the Azure CLI command two separate times, to ensure that the connection is bi-directional. The first command will create a peering connection from the Application Gateway virtual network to the AKS virtual network; the second command will create a peering connection in the other direction.
+Since you deployed the AKS cluster in its own virtual network and the Application gateway in another virtual network, you'll need to peer the two virtual networks together in order for traffic to flow from the Application gateway to the pods in the cluster. Peering the two virtual networks requires running the Azure CLI command two separate times, to ensure that the connection is bi-directional. The first command will create a peering connection from the Application gateway virtual network to the AKS virtual network; the second command will create a peering connection in the other direction.
```azurecli-interactive nodeResourceGroup=$(az aks show -n myCluster -g myResourceGroup -o tsv --query "nodeResourceGroup")
az network vnet peering create -n AKStoAppGWVnetPeering -g $nodeResourceGroup --
## Deploy a sample application using AGIC
-You'll now deploy a sample application to the AKS cluster you created that will use the AGIC add-on for Ingress and connect the Application Gateway to the AKS cluster. First, you'll get credentials to the AKS cluster you deployed by running the `az aks get-credentials` command.
+You'll now deploy a sample application to the AKS cluster you created that will use the AGIC add-on for Ingress and connect the application gateway to the AKS cluster. First, you'll get credentials to the AKS cluster you deployed by running the `az aks get-credentials` command.
```azurecli-interactive az aks get-credentials -n myCluster -g myResourceGroup ```
-Once you have the credentials to the cluster you created, run the following command to set up a sample application that uses AGIC for Ingress to the cluster. AGIC will update the Application Gateway you set up earlier with corresponding routing rules to the new sample application you deployed.
+Once you have the credentials to the cluster you created, run the following command to set up a sample application that uses AGIC for Ingress to the cluster. AGIC will update the application gateway you set up earlier with corresponding routing rules to the new sample application you deployed.
```azurecli-interactive kubectl apply -f https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/master/docs/examples/aspnetapp.yaml
kubectl apply -f https://raw.githubusercontent.com/Azure/application-gateway-kub
## Check that the application is reachable
-Now that the Application Gateway is set up to serve traffic to the AKS cluster, let's verify that your application is reachable. You'll first get the IP address of the Ingress.
+Now that the application gateway is set up to serve traffic to the AKS cluster, let's verify that your application is reachable. You'll first get the IP address of the Ingress.
```azurecli-interactive kubectl get ingress ```
-Check that the sample application you created is up and running by either visiting the IP address of the Application Gateway that you got from running the above command or check with `curl`. It may take Application Gateway a minute to get the update, so if the Application Gateway is still in an "Updating" state on Portal, then let it finish before trying to reach the IP address.
+Check that the sample application you created is up and running by either visiting the IP address of the application gateway that you got from running the above command or check with `curl`. It may take application gateway a minute to get the update, so if the application gateway is still in an "Updating" state on Azure portal, then let it finish before trying to reach the IP address.
## Clean up resources
-When no longer needed, remove the resource group, application gateway, and all related resources.
+When no longer needed, delete the resource group and all related resources.
```azurecli-interactive az group delete --name myResourceGroup
attestation Quickstart Portal https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/attestation/quickstart-portal.md
Follow this quickstart to get started with Azure Attestation. Learn how to manag
## Prerequisites
-If you don't have an Azure subscription, create a [free account](https://azure.microsoft.com/free/?WT.mc_id=A261C142F) before you begin.
+If you don't have an Azure subscription, create a [free account](https://azure.microsoft.com/free/?WT.mc_id=A261C142F) before you begin. The user creating an attestation provider should have sufficient access levels on the subscription to create a resource (e.g: owner/contributor). Please refer [Azure built-in roles](../role-based-access-control/built-in-roles.md) for more information.
## Attestation provider
azure-maps Tutorial Creator Feature Stateset https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/tutorial-creator-feature-stateset.md
This tutorial uses the [Postman](https://www.postman.com/) application, but you can use a different API development environment. >[!IMPORTANT]
-> This tutorial uses the `us.atlas.microsoft.com` geographical URL. If your Creator service wasn't created in the United States, you must use a different geographical URL. For more information, see [Access to Creator Services](how-to-manage-creator.md#access-to-creator-services).
+>
+> * This article uses the `us.atlas.microsoft.com` geographical URL. If your Creator service wasn't created in the United States, you must use a different geographical URL. For more information, see [Access to Creator Services](how-to-manage-creator.md#access-to-creator-services).
+> * In the URL examples in this article you will need to replace:
+> * `{Azure-Maps-Primary-Subscription-key}` with your primary subscription key.
+> * `{datasetId}` with the `datasetId` obtained in the [Check the dataset creation status](tutorial-creator-indoor-maps.md#check-the-dataset-creation-status) section of the *Use Creator to create indoor maps* tutorial
## Create a feature stateset
To create a stateset:
2. Select the **POST** HTTP method.
-3. Enter the following URL to the [Stateset API](/rest/api/maps/v2/feature-state/create-stateset). The request should look like the following URL (replace `{Azure-Maps-Primary-Subscription-key}` with your primary subscription key, and `{datasetId`} with the `datasetId` obtained in the [Check the dataset creation status](tutorial-creator-indoor-maps.md#check-the-dataset-creation-status) section of the *Use Creator to create indoor maps* tutorial):
+3. Enter the following URL to the [Stateset API](/rest/api/maps/v2/feature-state/create-stateset). The request should look like the following URL:
```http https://us.atlas.microsoft.com/featurestatesets?api-version=2.0&datasetId={datasetId}&subscription-key={Your-Azure-Maps-Primary-Subscription-key}
To update the `occupied` state of the unit with feature `id` "UNIT26":
2. Select the **PUT** HTTP method.
-3. Enter the following URL to the [Feature Statesets API](/rest/api/maps/v2/feature-state/create-stateset). The request should look like the following URL (replace `{Azure-Maps-Primary-Subscription-key}` with your primary subscription key, and `{statesetId`} with the `statesetId` obtained in [Create a feature stateset](#create-a-feature-stateset)):
+3. Enter the following URL to the [Feature Statesets API](/rest/api/maps/v2/feature-state/create-stateset). The request should look like the following URL (replace `{statesetId`} with the `statesetId` obtained in [Create a feature stateset](#create-a-feature-stateset)):
```http https://us.atlas.microsoft.com/featurestatesets/{statesetId}/featureStates/UNIT26?api-version=2.0&subscription-key={Your-Azure-Maps-Primary-Subscription-key}
azure-maps Tutorial Creator Indoor Maps https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/tutorial-creator-indoor-maps.md
This tutorial describes how to create indoor maps for use in Microsoft Azure Map
> * Create a dataset from your map data. > * Create a tileset from the data in your dataset.
-In the next tutorials in the Creator series you will learn to:
+In the next tutorials in the Creator series you'll learn to:
> * Query the Azure Maps Web Feature Service (WFS) API to learn about your map features. > * Create a feature stateset that can be used to set the states of features in your dataset.
In the next tutorials in the Creator series you will learn to:
This tutorial uses the [Postman](https://www.postman.com/) application, but you can use a different API development environment. >[!IMPORTANT]
-> This tutorial uses the `us.atlas.microsoft.com` geographical URL. If your Creator service wasn't created in the United States, you must use a different geographical URL. For more information, see [Access to Creator Services](how-to-manage-creator.md#access-to-creator-services).
+>
+> * This article uses the `us.atlas.microsoft.com` geographical URL. If your Creator service wasn't created in the United States, you must use a different geographical URL. For more information, see [Access to Creator Services](how-to-manage-creator.md#access-to-creator-services).
+> * In the URL examples in this article you will need to replace `{Azure-Maps-Primary-Subscription-key}` with your primary subscription key.
## Upload a Drawing package
To upload the Drawing package:
4. Select the **POST** HTTP method.
-5. Enter the following URL to the [Data Upload API](/rest/api/maps/data-v2/upload) The request should look like the following URL (replace `{Azure-Maps-Primary-Subscription-key}` with your primary subscription key)::
+5. Enter the following URL to the [Data Upload API](/rest/api/maps/data-v2/upload) The request should look like the following URL:
```http https://us.atlas.microsoft.com/mapData?api-version=2.0&dataFormat=dwgzippackage&subscription-key={Your-Azure-Maps-Primary-Subscription-key}
To upload the Drawing package:
9. Select the **Body** tab.
-10. In the dropdown list, select **binary**.
+10. Select the **binary** radio button.
11. Select **Select File**, and then select a Drawing package.
To check the status of the drawing package and retrieve its unique ID (`udid`):
4. Select the **GET** HTTP method.
-5. Enter the `status URL` you copied as the last step in the previous section of this article. You will need to append your subscription key to the end of the URL `&subscription-key={Your-Azure-Maps-Primary-Subscription-key}` (replace `{Azure-Maps-Primary-Subscription-key}` with your Azure Maps primary subscription key). The request should look like the following URL:
+5. Enter the `status URL` you copied as the last step in the previous section of this article. The request should look like the following URL:
```http https://us.atlas.microsoft.com/mapData/operations/{operationId}?api-version=2.0&subscription-key={Your-Azure-Maps-Primary-Subscription-key}
To retrieve content metadata:
4. . Select the **GET** HTTP method.
-5. Enter the `resource Location URL` you copied as the last step in the previous section of this article. You will need to append your subscription key to the end of the URL `&subscription-key={Your-Azure-Maps-Primary-Subscription-key}` (replace `{Azure-Maps-Primary-Subscription-key}` with your Azure Maps primary subscription key). The request should look like the following URL:
+5. Enter the `resource Location URL` you copied as the last step in the previous section of this article:
```http https://us.atlas.microsoft.com/mapData/metadata/{udid}?api-version=2.0&subscription-key={Your-Azure-Maps-Primary-Subscription-key}
To check the status of the conversion process and retrieve the `conversionId`:
4. Select the **GET** HTTP method:
-5. Enter the `status URL` you copied in [Convert a Drawing package](#convert-a-drawing-package). The request should look like the following URL (replace `{Azure-Maps-Primary-Subscription-key}` with your primary subscription key):
+5. Enter the `status URL` you copied in [Convert a Drawing package](#convert-a-drawing-package). The request should look like the following URL:
```http https://us.atlas.microsoft.com/conversions/operations/{operationId}?api-version=2.0&subscription-key={Your-Azure-Maps-Primary-Subscription-key}
To create a dataset:
4. Select the **POST** HTTP method.
-5. Enter the following URL to the [Dataset API](/rest/api/maps/v2/dataset). The request should look like the following URL (replace `{Azure-Maps-Primary-Subscription-key}` with your primary subscription key, and `{conversionId`} with the `conversionId` obtained in [Check Drawing package conversion status](#check-the-drawing-package-conversion-status)):
+5. Enter the following URL to the [Dataset API](/rest/api/maps/v2/dataset). The request should look like the following URL (replace `{conversionId`} with the `conversionId` obtained in [Check Drawing package conversion status](#check-the-drawing-package-conversion-status)):
```http https://us.atlas.microsoft.com/datasets?api-version=2.0&conversionId={conversionId}&subscription-key={Your-Azure-Maps-Primary-Subscription-key}
To check the status of the dataset creation process and retrieve the `datasetId`
4. Select the **GET** HTTP method.
-5. Enter the `status URL` you copied in [Create a dataset](#create-a-dataset). The request should look like the following URL (replace `{Azure-Maps-Primary-Subscription-key}` with your primary subscription key):
+5. Enter the `status URL` you copied in [Create a dataset](#create-a-dataset). The request should look like the following URL:
```http https://us.atlas.microsoft.com/datasets/operations/{operationId}?api-version=2.0&subscription-key={Your-Azure-Maps-Primary-Subscription-key}
To create a tileset:
4. Select the **POST** HTTP method.
-5. Enter the following URL to the [Tileset API](/rest/api/maps/v2/tileset). The request should look like the following URL (replace `{Azure-Maps-Primary-Subscription-key}` with your primary subscription key), and `{datasetId`} with the `datasetId` obtained in the [Check the dataset creation status](#check-the-dataset-creation-status) section above:
+5. Enter the following URL to the [Tileset API](/rest/api/maps/v2/tileset). The request should look like the following URL (replace `{datasetId`} with the `datasetId` obtained in the [Check the dataset creation status](#check-the-dataset-creation-status) section above:
```http https://us.atlas.microsoft.com/tilesets?api-version=2.0&datasetID={datasetId}&subscription-key={Your-Azure-Maps-Primary-Subscription-key}
To check the status of the tileset creation process and retrieve the `tilesetId`
4. Select the **GET** HTTP method.
-5. Enter the `status URL` you copied in [Create a tileset](#create-a-tileset). The request should look like the following URL (replace `{Azure-Maps-Primary-Subscription-key}` with your primary subscription key):
+5. Enter the `status URL` you copied in [Create a tileset](#create-a-tileset). The request should look like the following URL:
```http https://us.atlas.microsoft.com/tilesets/operations/{operationId}?api-version=2.0&subscription-key={Your-Azure-Maps-Primary-Subscription-key}
azure-maps Tutorial Creator Wfs https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/tutorial-creator-wfs.md
First you'll query all collections, and then you'll query for the `unit` collect
This tutorial uses the [Postman](https://www.postman.com/) application, but you can use a different API development environment. >[!IMPORTANT]
-> This tutorial uses the `us.atlas.microsoft.com` geographical URL. If your Creator service wasn't created in the United States, you must use a different geographical URL. For more information, see [Access to Creator Services](how-to-manage-creator.md#access-to-creator-services).
+>
+> * This article uses the `us.atlas.microsoft.com` geographical URL. If your Creator service wasn't created in the United States, you must use a different geographical URL. For more information, see [Access to Creator Services](how-to-manage-creator.md#access-to-creator-services).
+> * In the URL examples in this article you will need to replace:
+> * `{Azure-Maps-Primary-Subscription-key}` with your primary subscription key.
+> * `{datasetId}` with the `datasetId` obtained in the [Check the dataset creation status](tutorial-creator-indoor-maps.md#check-the-dataset-creation-status) section of the *Use Creator to create indoor maps* tutorial
## Query for feature collections
To query all collections in your dataset:
2. Select the **GET** HTTP method.
-3. Enter the following URL to [WFS API](/rest/api/maps/v2/wfs). The request should look like the following URL (replace `{Azure-Maps-Primary-Subscription-key}` with your primary subscription key), and `{datasetId`} with the `datasetId` obtained in the [Check the dataset creation status](tutorial-creator-indoor-maps.md#check-the-dataset-creation-status) section of the *Use Creator to create indoor maps* tutorial:
+3. Enter the following URL to [WFS API](/rest/api/maps/v2/wfs). The request should look like the following URL:
```http https://us.atlas.microsoft.com/wfs/datasets/{datasetId}/collections?subscription-key={Your-Azure-Maps-Primary-Subscription-key}&api-version=2.0
To query the unit collection in your dataset:
2. Select the **GET** HTTP method.
-3. Enter the following URL (replace `{Azure-Maps-Primary-Subscription-key}` with your primary subscription key, and `{datasetId`} with the `datasetId` obtained in [Check dataset creation status](tutorial-creator-indoor-maps.md#check-the-dataset-creation-status)):
+3. Enter the following URL:
```http https://us.atlas.microsoft.com/wfs/datasets/{datasetId}/collections/unit/items?subscription-key={Your-Azure-Maps-Primary-Subscription-key}&api-version=2.0
azure-monitor Java In Process Agent https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-monitor/app/java-in-process-agent.md
You can use `opentelemetry-api` to create span events, which populate the traces
```java import io.opentelemetry.api.trace.Span;
- span.addEvent("eventName");
+ Span.current().addEvent("eventName");
``` ### Add span attributes
Adding one or more custom dimensions populates the _customDimensions_ field in t
```java import io.opentelemetry.api.trace.Span; import io.opentelemetry.api.common.AttributeKey;
- import io.opentelemetry.api.common.Attributes;
- Attributes attributes = Attributes.of(AttributeKey.stringKey("mycustomdimension"), "myvalue1");
- span.setAllAttributes(attributes);
- span.addEvent("eventName", attributes);
+ AttributeKey attributeKey = AttributeKey.stringKey("mycustomdimension");
+ Span.current().setAttribute(attributeKey, "myvalue1");
``` ### Update span status and record exceptions
You can use `opentelemetry-api` to update the status of a span and record except
import io.opentelemetry.api.trace.Span; import io.opentelemetry.api.trace.StatusCode;
+ Span span = Span.current();
span.setStatus(StatusCode.ERROR, "errorMessage"); span.recordException(e); ```
You can use `opentelemetry-api` to get the trace ID or span ID. This action can
```java import io.opentelemetry.api.trace.Span;
- String traceId = Span.current().getSpanContext().getTraceId();
- String spanId = Span.current().getSpanContext().getSpanId();
+ Span span = Span.current();
+ String traceId = span.getSpanContext().getTraceId();
+ String spanId = span.getSpanContext().getSpanId();
``` ## Custom telemetry
azure-monitor Resource Manager Web App https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-monitor/app/resource-manager-web-app.md
resource webApp 'Microsoft.Insights/components@2020-02-02' = {
"alwaysOn": { "type": "bool" },
+ "currentStack": {
+ "type": "string"
+ },
"phpVersion": { "type": "string" },
resource webApp 'Microsoft.Insights/components@2020-02-02' = {
}, "alwaysOn": { "type": "bool"
+ },
+ "currentStack": {
+ "type": "string"
}, "phpVersion": { "type": "string"
resource webApp 'Microsoft.Insights/components@2020-02-02' = {
## Next steps * [Get other sample templates for Azure Monitor](../resource-manager-samples.md).
-* [Learn more about classic Application Insights resources](../app/create-new-resource.md).
+* [Learn more about classic Application Insights resources](../app/create-new-resource.md).
azure-monitor Activity Log https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-monitor/essentials/activity-log.md
Each event is stored in the PT1H.json file with the following format. This forma
## Legacy collection methods
-This section describes legacy methods for collecting the activity log that were used prior to diagnostic settings. If you're using these methods, consider transitioning to diagnostic settings that provide better functionality and consistency with resource logs.
+Log profiles are the legacy method for sending the activity log to storage or event hubs. If you're using this method, consider transitioning to diagnostic settings, which provide better functionality and consistency with resource logs.
-### Log profiles
-
-Log profiles are the legacy method for sending the activity log to storage or event hubs. Use the following procedure to continue working with a log profile or to disable it in preparation for migrating to a diagnostic setting.
-
-1. From the **Azure Monitor** menu in the Azure portal, select **Activity log**.
-1. Select **Export Activity Logs**.
-
- ![Screenshot that shows exporting activity logs.](media/activity-log/diagnostic-settings-export.png)
-
-1. Select the purple banner for the legacy experience.
-
- ![Screenshot that shows the legacy experience.](media/activity-log/legacy-experience.png)
-
-### Configure a log profile by using PowerShell
+### [PowerShell](#tab/powershell)
If a log profile already exists, you first must remove the existing log profile and then create a new one.
If a log profile already exists, you first must remove the existing log profile
| RetentionInDays |Yes |Number of days for which events should be retained in the storage account, from 1 through 365. A value of zero stores the logs indefinitely. | | Category |No |Comma-separated list of event categories to be collected. Possible values are Write, Delete, and Action. |
-### Example script
+**Example script**
-The following sample PowerShell script is used to create a log profile that writes the activity log to both a storage account and an event hub.
+This sample PowerShell script creates a log profile that writes the activity log to both a storage account and an event hub.
```powershell # Settings needed for the new log profile
The following sample PowerShell script is used to create a log profile that writ
Add-AzLogProfile -Name $logProfileName -Location $locations -StorageAccountId $storageAccountId -ServiceBusRuleId $serviceBusRuleId ```
-### Configure a log profile by using the Azure CLI
+### [CLI](#tab/cli)
If a log profile already exists, you first must remove the existing log profile and then create a log profile.
If a log profile already exists, you first must remove the existing log profile
|enabled | Yes |True or False. Used to enable or disable the retention policy. If True, then the `days` parameter must be a value greater than zero. | categories |Yes |Space-separated list of event categories that should be collected. Possible values are Write, Delete, and Action. |
-### Log Analytics workspace
-
-The legacy method for sending the activity log into a Log Analytics workspace is connecting the sign-in for the workspace configuration.
-
-1. From the **Log Analytics workspaces** menu in the Azure portal, select the workspace to collect the activity log.
-1. In the **Workspace Data Sources** section of the workspace's menu, select **Azure Activity log**.
-1. Select the subscription that you want to connect to.
-
- ![Screenshot that shows Log Analytics workspace with Azure Activity log selected.](media/activity-log/workspaces.png)
-
-1. Select **Connect** to connect the activity sign-in subscription to the selected workspace. If the subscription is already connected to another workspace, select **Disconnect** first to disconnect it.
-
- ![Screenshot that shows connecting workspaces.](media/activity-log/connect-workspace.png)
-
-To disable the setting, do the same procedure and select **Disconnect** to remove the subscription from the workspace.
+ ### Data structure changes
azure-monitor Availability Zones https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-monitor/logs/availability-zones.md
## Regions
-See [Regions and Availability Zones in Azure](https://azure.microsoft.com/global-infrastructure/geographies/#geographies) for the Azure regions that have availability zones. Azure Monitor currently supports the following regions.
-
+Azure Monitor currently supports the following regions:
- East US 2 - West US 2
azure-monitor Logs Dedicated Clusters https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-monitor/logs/logs-dedicated-clusters.md
Capabilities that require dedicated clusters:
- **[Customer-managed Keys](../logs/customer-managed-keys.md)** - Encrypt the cluster data using keys that are provided and controlled by the customer. - **[Lockbox](../logs/customer-managed-keys.md#customer-lockbox-preview)** - Control Microsoft support engineers access requests to your data. - **[Double encryption](../../storage/common/storage-service-encryption.md#doubly-encrypt-data-with-infrastructure-encryption)** - Protects against a scenario where one of the encryption algorithms or keys may be compromised. In this case, the additional layer of encryption continues to protect your data.-- **[Availability Zones](../../availability-zones/az-overview.md)** - Protect your data from datacenter failures with zones being separated physically by locations and equipped with independent power, cooling, and networking. The physical separation in zones and independent infrastructure makes an incident far less likely since the workspace can rely on the resources from any of the zones. Dedicated clusters are created with availability zones enabled for data resiliency in regions that [Azure has availability zones](../../availability-zones/az-overview.md#azure-regions-with-availability-zones). Availability zones configuration in cluster canΓÇÖt be altered once created and settings can be verified in clusterΓÇÖs property `isAvailabilityZonesEnabled`. [Azure Monitor availability zones](./availability-zones.md) covers broader parts of the service and when available in your region, extends your Azure Monitor resiliency automatically.-- **[Multi-workspace](../logs/cross-workspace-query.md)** - If a customer is using more than one workspace for production it might make sense to use dedicated cluster. Cross-workspace queries will run faster if all workspaces are on the same cluster. It might also be more cost effective to use dedicated cluster as the assigned commitment tier takes into account all cluster ingestion and applies to all its workspaces, even if some of them are small and not eligible for commitment tier discount.
+- **[Cross-query optimization](../logs/cross-workspace-query.md)** - Cross-workspace queries run faster when workspaces are on the same cluster.
+- **Cost optimization** - Link your workspaces in same region to cluster to get commitment tier discount to all workspaces, even to ones with low ingestion that aren't eligible for commitment tier discount.
+- **[Availability zones](../../availability-zones/az-overview.md)** - Protect your data from datacenter failures with zones being separated physically by locations and equipped with independent power, cooling, and networking. The physical separation in zones and independent infrastructure makes an incident far less likely since the workspace can rely on the resources from any of the zones. [Azure Monitor availability zones](./availability-zones.md) covers broader parts of the service and when available in your region, extends your Azure Monitor resiliency automatically. Dedicated clusters are created as Availability zones enabled (`isAvailabilityZonesEnabled`: 'true') by default in supported regions. This setting canΓÇÖt be altered once created, and can be verified in clusterΓÇÖs property `isAvailabilityZonesEnabled`. Availability zones clusters are created in the following regions currently, and more regions are added periodically.
+
+ | Americas | Europe | Middle East | Africa | Asia Pacific |
+ ||||||
+ | Brazil South | France Central | | South Africa North | Australia East |
+ | Canada Central | Germany West Central | | | Central India |
+ | Central US | North Europe | | | Japan East |
+ | East US | Norway East | | | Korea Central |
+ | East US 2 | UK South | | | Southeast Asia |
+ | South Central US | West Europe | | | East Asia |
+ | US Gov Virginia | Sweden Central | | | China North 3 |
+ | West US 2 | | | | |
+ | West US 3 | | | | |
## Management
azure-resource-manager Modules https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-resource-manager/bicep/modules.md
Title: Bicep modules description: Describes how to define a module in a Bicep file, and how to use module scopes. Previously updated : 05/10/2022 Last updated : 07/08/2022 # Bicep modules
The path can be either a local file or a file in a registry. The local file can
The **name** property is required. It becomes the name of the nested deployment resource in the generated template.
+If a module with a static name is deployed concurrently to the same scope, there's the potential for one deployment to interfere with the output from the other deployment. For example, if two Bicep files use the same module with the same static name (`examplemodule`) and targeted to the same resource group, one deployment may show the wrong output. If you're concerned about concurrent deployments to the same scope, give your module a unique name.
+
+The following example concatenates the deployment name to the module name. If you provide a unique name for the deployment, the module name is also unique.
+
+```bicep
+module stgModule 'storageAccount.bicep' = {
+ name: '${deployment().name}-storageDeploy'
+ scope: resourceGroup('demoRG')
+```
+ If you need to **specify a scope** that is different than the scope for the main file, add the scope property. For more information, see [Set module scope](#set-module-scope). ::: code language="bicep" source="~/azure-docs-bicep-samples/syntax-samples/modules/scope-definition.bicep" highlight="4" :::
To link to a public registry module, specify the module path with the following
module <symbolic-name> 'br/public:<file-path>:<tag>' = {} ``` -- **br/public** is the alias for the public module registry.
+- **br/public** is the alias for the public module registry. This alias is predefined in your configuration.
- **file path** can contain segments that can be separated by the `/` character. - **tag** is used for specifying a version for the module.
For example:
> module <symbolic-name> 'br:mcr.microsoft.com/bicep/<file-path>:<tag>' = {} > ``` >
-> For more information see aliases and configuring aliases later in this section.
#### Private module registry
After creating a [template spec](../bicep/template-specs.md), you can link to th
module <symbolic-name> 'ts:<sub-id>/<rg-name>/<template-spec-name>:<version>' = { ```
-However, you can simplify your Bicep file by [creating an alias](bicep-config-modules.md) for the resource group that contains your template specs. When using an alias, the syntax becomes:
+However, you can simplify your Bicep file by [creating an alias](bicep-config-modules.md) for the resource group that contains your template specs. When you use an alias, the syntax becomes:
```bicep module <symbolic-name> 'ts/<alias>:<template-spec-name>:<version>' = {
azure-resource-manager Concepts Custom Role Definition https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-resource-manager/managed-applications/concepts-custom-role-definition.md
Title: Overview of custom role definitions
-description: Describes the concept of creating custom role definitions for managed applications.
+description: Describes the concept of creating custom role definitions for managed applications.
--++ Last updated 09/16/2019
A role is composed of either a `$.properties.roleName` or an `id`:
|Property|Required?|Description| |||| |id|Yes|The ID of the built-in role. You can use the full ID or just the GUID.|
-|roleName|Yes|The name of the built-in role.|
+|roleName|Yes|The name of the built-in role.|
azure-resource-manager Concepts View Definition https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-resource-manager/managed-applications/concepts-view-definition.md
Title: Overview of view definition
-description: Describes the concept of creating view definition for Azure Managed Applications.
+description: Describes the concept of creating view definition for Azure Managed Applications.
--++ Last updated 06/12/2019
Commands is an array of additional toolbar buttons that are displayed on page. E
You can define multiple views of this type. This view allows you to link existing resources to the managed application through the custom provider you defined in **mainTemplate.json**. For an introduction to custom providers, see [Azure Custom Providers Preview overview](../custom-providers/overview.md).
-In this view you can extend existing Azure resources based on the `targetResourceType`. When a resource is selected, it will create an onboarding request to the **public** custom provider, which can apply a side effect to the resource.
+In this view you can extend existing Azure resources based on the `targetResourceType`. When a resource is selected, it will create an onboarding request to the **public** custom provider, which can apply a side effect to the resource.
```json {
azure-resource-manager Publish Managed Identity https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-resource-manager/managed-applications/publish-managed-identity.md
Title: Managed app with Managed Identity description: Configure Managed Application with Managed Identity for linking to existing resources, managing Azure resources, and providing operational identity for Activity Log. --++ Last updated 05/13/2019
azure-resource-manager Reference Createuidefinition Artifact https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-resource-manager/managed-applications/reference-createuidefinition-artifact.md
Title: CreateUiDefinition artifact description: Shows how to create the createUiDefinition artifact for an Azure Managed Application. The file is named createUiDefinition.json. --++ Last updated 07/11/2019
The following JSON shows an example of *createUiDefinition.json* file for Azure
- [Tutorial: Create managed application with custom actions and resources](tutorial-create-managed-app-with-custom-provider.md) - [Reference: Deployment template artifact](reference-main-template-artifact.md)-- [Reference: View definition artifact](reference-view-definition-artifact.md)
+- [Reference: View definition artifact](reference-view-definition-artifact.md)
azure-resource-manager Reference Main Template Artifact https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-resource-manager/managed-applications/reference-main-template-artifact.md
Title: Template artifact reference description: Provides an example of the deployment template artifact for Azure Managed Applications. --++ Last updated 07/11/2019
The following JSON shows an example of *mainTemplate.json* file for Azure Manage
- [Tutorial: Create managed application with custom actions and resources](tutorial-create-managed-app-with-custom-provider.md) - [Reference: User interface elements artifact](reference-createuidefinition-artifact.md)-- [Reference: View definition artifact](reference-view-definition-artifact.md)
+- [Reference: View definition artifact](reference-view-definition-artifact.md)
azure-resource-manager Reference View Definition Artifact https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-resource-manager/managed-applications/reference-view-definition-artifact.md
Title: View definition artifact reference description: Provides an example of view definition artifact for Azure Managed Applications. The file name is viewDefinition.json. --++ Last updated 07/11/2019
The following JSON shows an example of *viewDefinition.json* file for Azure Mana
- [Tutorial: Create managed application with custom actions and resources](tutorial-create-managed-app-with-custom-provider.md) - [Reference: User interface elements artifact](reference-createuidefinition-artifact.md)-- [Reference: Deployment template artifact](reference-main-template-artifact.md)
+- [Reference: Deployment template artifact](reference-main-template-artifact.md)
azure-resource-manager Tutorial Create Managed App With Custom Provider https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-resource-manager/managed-applications/tutorial-create-managed-app-with-custom-provider.md
Title: Tutorial - custom actions & resources description: This tutorial describes how to create an Azure Managed Application with an Azure Custom Provider. --++ Last updated 06/20/2019
If you have questions about Azure Managed Applications, you can try asking on [S
To publish your managed application to the Azure Marketplace, see [Azure managed applications in the Marketplace](../../marketplace/azure-app-offer-setup.md).
-Learn more about [Azure Custom Providers](../custom-providers/overview.md).
+Learn more about [Azure Custom Providers](../custom-providers/overview.md).
azure-sql-edge Stream Data https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-sql-edge/stream-data.md
Previously updated : 05/19/2020 Last updated : 07/08/2022 # Data streaming in Azure SQL Edge
T-SQL streaming can help you:
## How does T-SQL streaming work?
-T-SQL streaming works in exactly the same manner as [Azure Stream Analytics](../stream-analytics/stream-analytics-introduction.md#how-does-stream-analytics-work). For example, it uses the concept of streaming *jobs* for processing of real-time data streaming.
+T-SQL streaming works in exactly the same manner as [Azure Stream Analytics](../stream-analytics/stream-analytics-introduction.md). For example, it uses the concept of streaming *jobs* for processing of real-time data streaming.
A stream analytics job consists of:
The following limitations and restrictions apply to T-SQL streaming.
- [Create a Stream Analytics job in Azure SQL Edge ](create-stream-analytics-job.md) - [Viewing metadata associated with stream jobs in Azure SQL Edge ](streaming-catalog-views.md)-- [Create external stream](create-external-stream-transact-sql.md)
+- [Create external stream](create-external-stream-transact-sql.md)
azure-vmware Enable Hcx Access Over Internet https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-vmware/enable-hcx-access-over-internet.md
The HCX Network Extension service provides layer 2 connectivity between sites. T
After the network is extended to destination site, VMs can be migrated over Layer 2 Extension. ## Next steps
+[Enable Public IP to the NSX Edge for Azure VMware Solution](https://docs.microsoft.com/azure/azure-vmware/enable-public-ip-nsx-edge)
+ For detailed information on HCX network underlay minimum requirements, see [Network Underlay Minimum Requirements](https://docs.vmware.com/en/VMware-HCX/4.3/hcx-user-guide/GUID-8128EB85-4E3F-4E0C-A32C-4F9B15DACC6D.html). ++
data-factory Data Flow Script https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/data-factory/data-flow-script.md
Title: Mapping data flow script description: Overview of Data Factory's data flow script code-behind language -+
data-factory How To Run Self Hosted Integration Runtime In Windows Container https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/data-factory/how-to-run-self-hosted-integration-runtime-in-windows-container.md
Previously updated : 01/28/2022 Last updated : 07/07/2022 # How to run Self-Hosted Integration Runtime in Windows container [!INCLUDE[appliesto-adf-asa-md](includes/appliesto-adf-asa-md.md)]
-This article will explain how to run Self-Hosted Integration Runtime in Windows container.
-Azure Data Factory are delivering the official windows container support of Self-Hosted Integration Runtime. You can download the docker build source code and combine the building and running process in your own continuous delivery pipeline.
+Azure Data Factory provides Windows container support for the Self-Hosted Integration Runtime. You can [download the Docker Build source code](https://github.com/Azure/Azure-Data-Factory-Integration-Runtime-in-Windows-Container) and combine the building and running process in your own continuous delivery pipeline.
+
+> [!TIP]
+> This article explains how to run the Self-Hosted Integration Runtime in a Windows container on a compatible physical or virtual machine. If you don't want to manage infrastructure, you can run the Self-Hosted Integration Runtime on Azure App Service. For more information, see the [Azure Data Factory self-hosted integration runtime on App Service](https://github.com/Azure-Samples/azure-data-factory-runtime-app-service) sample.
## Prerequisites + - [Windows container requirements](/virtualization/windowscontainers/deploy-containers/system-requirements)-- Docker Version 2.3 and later -- Self-Hosted Integration Runtime Version 5.2.7713.1 and later
+- Docker version 2.3 or later
+- Self-Hosted Integration Runtime Version 5.2.7713.1 or later
+ ## Get started
-1. Install Docker and enable Windows Container
-2. Download the source code from https://github.com/Azure/Azure-Data-Factory-Integration-Runtime-in-Windows-Container
-3. Download the latest version SHIR in ΓÇÿSHIRΓÇÖ folder
-4. Open your folder in the shell:
-```console
-cdΓÇ»"yourFolderPath"
-```
-
-5. Build the windows docker image:
-```console
-docker build . -t "yourDockerImageName" 
-```
-6. Run docker container:
-```console
-docker run -d -e NODE_NAME="irNodeName" -e AUTH_KEY="IR_AUTHENTICATION_KEY" -e ENABLE_HA=true -e HA_PORT=8060 "yourDockerImageName"   
-```
-> [!NOTE]
-> AUTH_KEY is mandatory for this command. NODE_NAME, ENABLE_HA and HA_PORT are optional. If you don't set the value, the command will use default values. The default value of ENABLE_HA is false and HA_PORT is 8060.
-
-## Container health check
-After 120 seconds startup period, the health checker will run periodically every 30 seconds. It will provide the IR health status to container engine.
+
+1. [Install Docker and enable Windows containers.](/virtualization/windowscontainers/quick-start/set-up-environment)
+
+1. [Download the container image source code from GitHub.](https://github.com/Azure/Azure-Data-Factory-Integration-Runtime-in-Windows-Container)
+
+1. If you need to use a specific version of the SHIR, you can download it and move it to the *SHIR* folder.
+
+ Otherwise, skip this step. The container image build process will download the latest version of the SHIR automatically.
+
+1. Open your folder in the shell:
+
+ ```console
+ cdΓÇ»"yourFolderPath"
+ ```
+
+1. Build the Windows container image:
+
+ ```console
+ docker build . -t "yourDockerImageName" 
+ ```
+
+1. Run the Docker container:
+
+ ```console
+ docker run -d -e NODE_NAME="irNodeName" -e AUTH_KEY="IR_AUTHENTICATION_KEY" -e ENABLE_HA=true -e HA_PORT=8060 "yourDockerImageName"   
+ ```
+
+ > [!NOTE]
+ > The `AUTH_KEY` environment variable is mandatory and must be set to the auth key value for your data factory.
+ >
+ > The `NODE_NAME`, `ENABLE_HA` and `HA_PORT` environment variables are optional. If you don't set their values, the command will use default values. The default value of `ENABLE_HA` is `false`, and the default value of `HA_PORT` is `8060`.
+
+## Container health check
+
+After the 120 second startup period, the health check runs periodically every 30 seconds. It provides the SHIR's health status to the container engine.
## Limitations
-Currently we don't support below features when running Self-Hosted Integration Runtime in Windows container:
+
+Currently we don't support the below features when running the Self-Hosted Integration Runtime in Windows containers:
+ - HTTP proxy -- Encrypted Node-node communication with TLS/SSL certificate
+- Encrypted node-node communication with TLS/SSL certificate
- Generate and import backup - Daemon service -- Auto update
+- Auto-update
### Next steps+ - Review [integration runtime concepts in Azure Data Factory](./concepts-integration-runtime.md). - Learn how to [create a self-hosted integration runtime in the Azure portal](./create-self-hosted-integration-runtime.md).
defender-for-cloud Defender For Cloud Introduction https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/defender-for-cloud/defender-for-cloud-introduction.md
Title: What is Microsoft Defender for Cloud?+ description: Use Microsoft Defender for Cloud to protect your Azure, hybrid, and multicloud resources and workloads. Previously updated : 06/15/2022 Last updated : 07/10/2022 # What is Microsoft Defender for Cloud?
defender-for-cloud Upcoming Changes https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/defender-for-cloud/upcoming-changes.md
Title: Important changes coming to Microsoft Defender for Cloud description: Upcoming changes to Microsoft Defender for Cloud that you might need to be aware of and for which you might need to plan Previously updated : 07/05/2022 Last updated : 07/10/2022 # Important upcoming changes to Microsoft Defender for Cloud
The new release will bring the following capabilities:
> When you exempt an account, it won't be shown as unhealthy and also won't cause a subscription to appear unhealthy. |Recommendation| Assessment key|
- |-|-|
- |MFA should be enabled on accounts with owner permissions on your subscription|94290b00-4d0c-d7b4-7cea-064a9554e681|
- |MFA should be enabled on accounts with read permissions on your subscription|151e82c5-5341-a74b-1eb0-bc38d2c84bb5|
- |MFA should be enabled on accounts with write permissions on your subscription|57e98606-6b1e-6193-0e3d-fe621387c16b|
- |External accounts with owner permissions should be removed from your subscription|c3b6ae71-f1f0-31b4-e6c1-d5951285d03d|
- |External accounts with read permissions should be removed from your subscription|a8c6a4ad-d51e-88fe-2979-d3ee3c864f8b|
- |External accounts with write permissions should be removed from your subscription|04e7147b-0deb-9796-2e5c-0336343ceb3d|
-
-#### Recommendations rename
-
-This update, will rename two recommendations, and revise their descriptions. The assessment keys will remain unchanged.
-
- | Property | Current value | New update's change |
- |-|-|-|
- |**First recommendation**| - | - |
- |Assessment key | e52064aa-6853-e252-a11e-dffc675689c2 | No change|
- | Name | [Deprecated accounts with owner permissions should be removed from your subscription](https://ms.portal.azure.com/#blade/Microsoft_Azure_Security/RecommendationsBlade/assessmentKey/e52064aa-6853-e252-a11e-dffc675689c2) |Subscriptions should be purged of accounts that are blocked in Active Directory and have owner permissions.|
- |Description| User accounts that have been blocked from signing in, should be removed from your subscriptions.|These accounts can be targets for attackers looking to find ways to access your data without being noticed. <br> Learn more about securing the identity perimeter in [Azure Identity Management and access control security best practices](../security/fundamentals/identity-management-best-practices.md).|
- |Related policy|[Deprecated accounts with owner permissions should be removed from your subscription](https://ms.portal.azure.com/#blade/Microsoft_Azure_Policy/PolicyDetailBlade/definitionId/%2fproviders%2fMicrosoft.Authorization%2fpolicyDefinitions%2febb62a0c-3560-49e1-89ed-27e074e9f8ad) | Subscriptions should be purged of accounts that are blocked in Active Directory and have owner permissions.|
- |**Second recommendation**| - | - |
- | Assessment key | 00c6d40b-e990-6acf-d4f3-471e747a27c4 | No change |
- | Name | [Deprecated accounts should be removed from your subscription](https://ms.portal.azure.com/#blade/Microsoft_Azure_Security/RecommendationsBlade/assessmentKey/00c6d40b-e990-6acf-d4f3-471e747a27c4)|Subscriptions should be purged of accounts that are blocked in Active Directory and have read and write permissions.|
-|Description|User accounts that have been blocked from signing in, should be removed from your subscriptions. <br> These accounts can be targets for attackers looking to find ways to access your data without being noticed.|User accounts that have been blocked from signing into Active Directory, should be removed from your subscriptions.<br> Learn more about securing the identity perimeter in [Azure Identity Management and access control security best practices](../security/fundamentals/identity-management-best-practices.md).|
- | Related policy | [Deprecated accounts should be removed from your subscription](https://ms.portal.azure.com/#blade/Microsoft_Azure_Policy/PolicyDetailBlade/definitionId/%2fproviders%2fMicrosoft.Authorization%2fpolicyDefinitions%2f6b1cbf55-e8b6-442f-ba4c-7246b6381474) | Subscriptions should be purged of accounts that are blocked in Active Directory and have read and write permissions. |
+ |--|--|
+ |Accounts with owner permissions on Azure resources should be MFA enabled|6240402e-f77c-46fa-9060-a7ce53997754|
+ |Accounts with write permissions on Azure resources should be MFA enabled|c0cb17b2-0607-48a7-b0e0-903ed22de39b|
+ |Accounts with read permissions on Azure resources should be MFA enabled|dabc9bc4-b8a8-45bd-9a5a-43000df8aa1c|
+ |Guest accounts with owner permissions on Azure resources should be removed|20606e75-05c4-48c0-9d97-add6daa2109a|
+ |Guest accounts with write permissions on Azure resources should be removed|0354476c-a12a-4fcc-a79d-f0ab7ffffdbb|
+ |Guest accounts with read permissions on Azure resources should be removed|fde1c0c9-0fd2-4ecc-87b5-98956cbc1095|
+ |Blocked accounts with owner permissions on Azure resources should be removed|050ac097-3dda-4d24-ab6d-82568e7a50cf|
+ |Blocked accounts with read and write permissions on Azure resources should be removed| 1ff0b4c9-ed56-4de6-be9c-d7ab39645926 |
### Deprecate API App policies for App Service
governance Exemption Structure https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/governance/policy/concepts/exemption-structure.md
Title: Details of the policy exemption structure description: Describes the policy exemption definition used by Azure Policy to exempt resources from evaluation of initiatives or definitions. Previously updated : 05/18/2022 Last updated : 07/09/2022
You use JavaScript Object Notation (JSON) to create a policy exemption. The poli
> [!NOTE] > A policy exemption is created as a child object on the resource hierarchy or the individual > resource granted the exemption, so the target isn't included in the exemption definition.
+> If the parent resource to which the exemption applies is removed, then the exemption
+> is removed as well.
For example, the following JSON shows a policy exemption in the **waiver** category of a resource to an initiative assignment named `resourceShouldBeCompliantInit`. The resource is _exempt_ from only
hdinsight Llap Schedule Based Autoscale Best Practices https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/hdinsight/interactive-query/llap-schedule-based-autoscale-best-practices.md
Title: HDInsight Interactive Query Autoscale(bchedule-based) guide and best prac
description: LLAP Autoscale Guide and Best Practices --++ Last updated 05/25/2022
iot-edge How To Configure Api Proxy Module https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-edge/how-to-configure-api-proxy-module.md
Currently, the default environment variables include:
| Environment variable | Description | | -- | -- | | `PROXY_CONFIG_ENV_VAR_LIST` | List all the variables that you intend to update in a comma-separated list. This step prevents accidentally modifying the wrong configuration settings.
+| `NGINX_DEFAULT_TLS` | Specifies the list of TLS protocol(s) to be enabled. See NGINX's [ssl_protocols](https://nginx.org/docs/http/ngx_http_ssl_module.html#ssl_protocols).<br><br>Default is 'TLSv1.2'. |
| `NGINX_DEFAULT_PORT` | Changes the port that the nginx proxy listens to. If you update this environment variable, make sure the port you select is also exposed in the module dockerfile and declared as a port binding in the deployment manifest.<br><br>Default is 443.<br><br>When deployed from the Azure Marketplace, the default port is updated to 8000, to prevent conflicts with the edgeHub module. For more information, see [Minimize open ports](#minimize-open-ports). | | `DOCKER_REQUEST_ROUTE_ADDRESS` | Address to route docker requests. Modify this variable on the top layer device to point to the registry module.<br><br>Default is the parent hostname. | | `BLOB_UPLOAD_ROUTE_ADDRESS` | Address to route blob registry requests. Modify this variable on the top layer device to point to the blob storage module.<br><br>Default is the parent hostname. |
iot-edge How To Configure Proxy Support https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-edge/how-to-configure-proxy-support.md
Title: Configure devices for network proxies - Azure IoT Edge | Microsoft Docs
description: How to configure the Azure IoT Edge runtime and any internet-facing IoT Edge modules to communicate through a proxy server. Previously updated : 02/28/2022 Last updated : 06/27/2022
systemctl show --property=Environment iotedge
:::moniker-end <!--end 1.1-->
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" Open an editor in the terminal to configure the IoT Edge daemon.
systemctl show --property=Environment aziot-edged
systemctl show --property=Environment aziot-identityd ``` :::moniker-end
-<!--end 1.2-->
+<!--end iotedge-2020-11-->
#### Windows using IoT Edge for Linux on Windows
This step takes place once on the IoT Edge device during initial device setup.
:::moniker-end <!-- end 1.1 -->
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" 1. Open the config file on your IoT Edge device: `/etc/aziot/config.toml`. The configuration file is protected, so you need administrative privileges to access it. On Linux systems, use the `sudo` command before opening the file in your preferred text editor.
This step takes place once on the IoT Edge device during initial device setup.
``` :::moniker-end
-<!-- end 1.2 -->
+<!-- end iotedge-2020-11 -->
## Configure deployment manifests
To use a proxy that performs traffic inspection, you must use either shared acce
## Fully qualified domain names (FQDNs) of destinations that IoT Edge communicates with
-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.
+If your proxy has a firewall that requires you to allowlist 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.
## Next steps
iot-edge How To Connect Downstream Device https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-edge/how-to-connect-downstream-device.md
# Connect a downstream device to an Azure IoT Edge gateway This article provides instructions for establishing a trusted connection between downstream devices and IoT Edge transparent gateways. In a transparent gateway scenario, one or more devices can pass their messages through a single gateway device that maintains the connection to IoT Hub.
A downstream device can be any application or platform that has an identity crea
:::moniker-end <!-- end 1.1 -->
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" A downstream device can be any application or platform that has an identity created with the Azure IoT Hub cloud service. In many cases, these applications use the [Azure IoT device SDK](../iot-hub/iot-hub-devguide-sdks.md). A downstream device could even be an application running on the IoT Edge gateway device itself. This article provides the steps for connecting an IoT device as a downstream device. If you have an IoT Edge device as a downstream device, see [Connect a downstream IoT Edge device to an Azure IoT Edge gateway](how-to-connect-downstream-iot-edge-device.md). :::moniker-end
-<!-- end 1.2 -->
+<!-- end iotedge-2020-11 -->
>[!NOTE] >IoT devices registered with IoT Hub can use [module twins](../iot-hub/iot-hub-devguide-module-twins.md) to isolate different processes, hardware, or functions on a single device. IoT Edge gateways support downstream module connections using symmetric key authentication but not X.509 certificate authentication.
iot-edge How To Connect Downstream Iot Edge Device https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-edge/how-to-connect-downstream-iot-edge-device.md
You should already have IoT Edge installed on your device. If not, follow the st
pk = "file:///var/secrets/iot-edge-device-ca-gateway.key.pem" ```
-01. Verify your IoT Edge device uses the correct version of the IoT Edge agent when it starts. Find the **Default Edge Agent** section and set the image value for IoT Edge to version 1.2. For example:
+01. Verify your IoT Edge device uses the correct version of the IoT Edge agent when it starts. Find the **Default Edge Agent** section and set the image value for IoT Edge to version 1.3. For example:
```toml [agent.config]
- image: "mcr.microsoft.com/azureiotedge-agent:1.2"
+ image: "mcr.microsoft.com/azureiotedge-agent:1.3"
``` 01. The beginning of your parent configuration file should look similar to the following example.
To verify the *hostname*, you need to inspect the environment variables of the *
```output NAME STATUS DESCRIPTION CONFIG SimulatedTemperatureSensor running Up 5 seconds mcr.microsoft.com/azureiotedge-simulated-temperature-sensor:1.0
- edgeAgent running Up 17 seconds mcr.microsoft.com/azureiotedge-agent:1.2
- edgeHub running Up 6 seconds mcr.microsoft.com/azureiotedge-hub:1.2
+ edgeAgent running Up 17 seconds mcr.microsoft.com/azureiotedge-agent:1.3
+ edgeHub running Up 6 seconds mcr.microsoft.com/azureiotedge-hub:1.3
``` 01. Inspect the *edgeHub* container.
You should already have IoT Edge installed on your device. If not, follow the st
pk = "file:///var/secrets/iot-edge-device-ca-downstream.key.pem" ```
-01. Verify your IoT Edge device uses the correct version of the IoT Edge agent when it starts. Find the **Default Edge Agent** section and set the image value for IoT Edge to version 1.2. For example:
+01. Verify your IoT Edge device uses the correct version of the IoT Edge agent when it starts. Find the **Default Edge Agent** section and set the image value for IoT Edge to version 1.3. For example:
```toml [agent.config]
- image: "mcr.microsoft.com/azureiotedge-agent:1.2"
+ image: "mcr.microsoft.com/azureiotedge-agent:1.3"
``` 01. The beginning of your child configuration file should look similar to the following example.
The API proxy module was designed to be customized to handle most common gateway
"systemModules": { "edgeAgent": { "settings": {
- "image": "mcr.microsoft.com/azureiotedge-agent:1.2",
+ "image": "mcr.microsoft.com/azureiotedge-agent:1.3",
"createOptions": "{}" }, "type": "docker" }, "edgeHub": { "settings": {
- "image": "mcr.microsoft.com/azureiotedge-hub:1.2",
+ "image": "mcr.microsoft.com/azureiotedge-hub:1.3",
"createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}]}}}" }, "type": "docker",
name = "edgeAgent"
type = "docker" [agent.config]
-image: "{Parent FQDN or IP}:443/azureiotedge-agent:1.2"
+image: "{Parent FQDN or IP}:443/azureiotedge-agent:1.3"
``` If you are using a local container registry, or providing the container images manually on the device, update the config file accordingly.
iot-edge How To Create Iot Edge Device https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-edge/how-to-create-iot-edge-device.md
If you want more information about how to choose the right option for you, conti
:::moniker-end
-<!--1.2-->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" >[!NOTE]
->The following table reflects the supported scenarios for IoT Edge version 1.2. To see content about Windows containers, switch to the [IoT Edge 1.1](?view=iotedge-2018-06&preserve-view=true) version of this article.
+>The following table reflects the supported scenarios for IoT Edge version 1.3. To see content about Windows containers, switch to the [IoT Edge 1.1](?view=iotedge-2018-06&preserve-view=true) version of this article.
| | Linux containers on Linux hosts | |--| -- |
For Windows devices, the IoT Edge runtime is installed directly on the host devi
> > Consider using IoT Edge for Linux on Windows, which will be supported in future versions. :::moniker-end
+<!--end 1.1-->
-<!--1.2-->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11"
-IoT Edge version 1.2 doesn't support Windows containers. Windows containers won't be supported beyond version 1.1. To learn more about IoT Edge with Windows containers, see the [IoT Edge 1.1](?view=iotedge-2018-06&preserve-view=true) version of this article.
+IoT Edge version 1.3 doesn't support Windows containers. Windows containers are not supported beyond version 1.1. To learn more about IoT Edge with Windows containers, see the [IoT Edge 1.1](?view=iotedge-2018-06&preserve-view=true) version of this article.
:::moniker-end
+<!--end iotedge-2020-11-->
## Choose how to provision your devices
iot-edge How To Create Test Certificates https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-edge/how-to-create-test-certificates.md
These certificates are required for **gateway scenarios** because the device CA
The **device CA** certificate is also responsible for creating certificates for modules running on the device, but IoT Edge runtime can create temporary certificate if device CA isn't configured. Device CA certificates go in the **Certificate** section of the `config.yaml` file on the IoT Edge device. To learn more, see [Understand how Azure IoT Edge uses certificates](iot-edge-certs.md). :::moniker-end
+<!--end 1.1-->
-<!--1.2-->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" ## Create edge CA certificates
These certificates are required for **gateway scenarios** because the edge CA ce
The **edge CA** certificate is also responsible for creating certificates for modules running on the device, but IoT Edge runtime can create temporary certificates if edge CA isn't configured. Edge CA certificates go in the **Edge CA** section of the `config.toml` file on the IoT Edge device. To learn more, see [Understand how Azure IoT Edge uses certificates](iot-edge-certs.md). :::moniker-end
+<!-- end iotedge-2020-11 -->
# [Windows](#tab/windows)
iot-edge How To Create Transparent Gateway https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-edge/how-to-create-transparent-gateway.md
This article provides detailed instructions for configuring an IoT Edge device t
>Downstream devices can't use file upload. ::: moniker-end
+<!-- end 1.1-->
-<!-- 1.2.0 -->
+<!-- iotedge-2020-11 -->
::: moniker range=">=iotedge-2020-11" >[!NOTE] >Downstream devices can't use file upload. ::: moniker-end
+<!--end iotedge-2020-11-->
There are three general steps to set up a successful transparent gateway connection. This article covers the first step:
A downstream device can be any application or platform that has an identity crea
:::moniker-end <!-- end 1.1 -->
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" A downstream device can be any application or platform that has an identity created with the [Azure IoT Hub](../iot-hub/index.yml) cloud service. These applications often use the [Azure IoT device SDK](../iot-hub/iot-hub-devguide-sdks.md). A downstream device could even be an application running on the IoT Edge gateway device itself. :::moniker-end
-<!-- end 1.2 -->
+<!-- end iotedge-2020-11 -->
You can create any certificate infrastructure that enables the trust required for your device-gateway topology. In this article, we assume the same certificate setup that you would use to enable [X.509 CA security](../iot-hub/iot-hub-x509ca-overview.md) in IoT Hub, which involves an X.509 CA certificate associated to a specific IoT hub (the IoT hub root CA), a series of certificates signed with this CA, and a CA for the IoT Edge device.
If you created the certificates on a different machine, copy them over to your I
:::moniker-end <!-- end 1.1 -->
-<!--1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" 1. On your IoT Edge device, open the config file: `/etc/aziot/config.toml`
If you created the certificates on a different machine, copy them over to your I
``` :::moniker-end
-<!-- end 1.2 -->
+<!-- end iotedge-2020-11 -->
## Deploy edgeHub and route messages
iot-edge How To Install Iot Edge Ubuntuvm https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-edge/how-to-install-iot-edge-ubuntuvm.md
To learn more about how the IoT Edge runtime works and what components are inclu
This article lists the steps to deploy an Ubuntu 18.04 LTS virtual machine with the Azure IoT Edge runtime installed and configured using a pre-supplied device connection string. The deployment is accomplished using a [cloud-init](../virtual-machines/linux/using-cloud-init.md) based [Azure Resource Manager template](../azure-resource-manager/templates/overview.md) maintained in the [iotedge-vm-deploy](https://github.com/Azure/iotedge-vm-deploy/tree/master) project repository. :::moniker-end :::moniker range=">=iotedge-2020-11"
-This article lists the steps to deploy an Ubuntu 20.04 LTS virtual machine with the Azure IoT Edge runtime installed and configured using a pre-supplied device connection string. The deployment is accomplished using a [cloud-init](../virtual-machines/linux/using-cloud-init.md) based [Azure Resource Manager template](../azure-resource-manager/templates/overview.md) maintained in the [iotedge-vm-deploy](https://github.com/Azure/iotedge-vm-deploy/tree/1.2) project repository.
+This article lists the steps to deploy an Ubuntu 20.04 LTS virtual machine with the Azure IoT Edge runtime installed and configured using a pre-supplied device connection string. The deployment is accomplished using a [cloud-init](../virtual-machines/linux/using-cloud-init.md) based [Azure Resource Manager template](../azure-resource-manager/templates/overview.md) maintained in the [iotedge-vm-deploy](https://github.com/Azure/iotedge-vm-deploy/tree/1.3) project repository.
:::moniker-end On first boot, the virtual machine [installs the latest version of the Azure IoT Edge runtime via cloud-init](https://github.com/Azure/iotedge-vm-deploy/blob/master/cloud-init.txt). It also sets a supplied connection string before the runtime starts, allowing you to easily configure and connect the IoT Edge device without the need to start an SSH or remote desktop session.
The [Deploy to Azure Button](../azure-resource-manager/templates/deploy-to-azure
[![Deploy to Azure Button for iotedge-vm-deploy](https://aka.ms/deploytoazurebutton)](https://portal.azure.com/#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2Fazure%2Fiotedge-vm-deploy%2Fmaster%2FedgeDeploy.json) :::moniker-end :::moniker range=">=iotedge-2020-11"
- [![Deploy to Azure Button for iotedge-vm-deploy](https://aka.ms/deploytoazurebutton)](https://portal.azure.com/#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2Fazure%2Fiotedge-vm-deploy%2F1.2%2FedgeDeploy.json)
+ [![Deploy to Azure Button for iotedge-vm-deploy](https://aka.ms/deploytoazurebutton)](https://portal.azure.com/#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2Fazure%2Fiotedge-vm-deploy%2F1.3%2FedgeDeploy.json)
:::moniker-end 1. On the newly launched window, fill in the available form fields:
The [Deploy to Azure Button](../azure-resource-manager/templates/deploy-to-azure
```azurecli-interactive az deployment group create \ --resource-group IoTEdgeResources \
- --template-uri "https://raw.githubusercontent.com/Azure/iotedge-vm-deploy/1.2/edgeDeploy.json" \
+ --template-uri "https://raw.githubusercontent.com/Azure/iotedge-vm-deploy/1.3/edgeDeploy.json" \
--parameters dnsLabelPrefix='my-edge-vm1' \ --parameters adminUsername='<REPLACE_WITH_USERNAME>' \ --parameters deviceConnectionString=$(az iot hub device-identity connection-string show --device-id <REPLACE_WITH_DEVICE-NAME> --hub-name <REPLACE-WITH-HUB-NAME> -o tsv) \
The [Deploy to Azure Button](../azure-resource-manager/templates/deploy-to-azure
#Create a VM using the iotedge-vm-deploy script az deployment group create \ --resource-group IoTEdgeResources \
- --template-uri "https://raw.githubusercontent.com/Azure/iotedge-vm-deploy/1.2/edgeDeploy.json" \
+ --template-uri "https://raw.githubusercontent.com/Azure/iotedge-vm-deploy/1.3/edgeDeploy.json" \
--parameters dnsLabelPrefix='my-edge-vm1' \ --parameters adminUsername='<REPLACE_WITH_USERNAME>' \ --parameters deviceConnectionString=$(az iot hub device-identity connection-string show --device-id <REPLACE_WITH_DEVICE-NAME> --hub-name <REPLACE-WITH-HUB-NAME> -o tsv) \
iot-edge How To Manage Device Certificates https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-edge/how-to-manage-device-certificates.md
If you are using IoT Edge for Linux on Windows, you need to use the SSH key loca
:::moniker-end <!-- end 1.1 -->
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" 1. Open the IoT Edge security daemon config file: `/etc/aziot/config.toml`
If you are using IoT Edge for Linux on Windows, you need to use the SSH key loca
``` :::moniker-end
-<!-- end 1.2 -->
+<!-- end iotedge-2020-11 -->
## Customize certificate lifetime
Upon expiry after the specified number of days, IoT Edge has to be restarted to
:::moniker-end <!-- end 1.1 -->
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" 1. To configure the certificate expiration to something other than the default 90 days, add the value in days to the **Edge CA certificate (Quickstart)** section of the config file.
Upon expiry after the specified number of days, IoT Edge has to be restarted to
Check the output of the **production readiness: certificates** check, which lists the number of days until the automatically generated edge CA certificates expire. :::moniker-end
-<!-- end 1.2 -->
+<!-- end iotedge-2020-11 -->
## Next steps
iot-edge How To Provision Devices At Scale Linux On Windows Symmetric https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-edge/how-to-provision-devices-at-scale-linux-on-windows-symmetric.md
This article provides end-to-end instructions for autoprovisioning one or more [IoT Edge for Linux on Windows](iot-edge-for-linux-on-windows.md) devices using symmetric keys. You can automatically provision Azure IoT Edge devices with the [Azure IoT Hub device provisioning service](../iot-dps/index.yml) (DPS). If you're unfamiliar with the process of autoprovisioning, review the [provisioning overview](../iot-dps/about-iot-dps.md#provisioning-process) before continuing.
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" >[!NOTE] >The latest version of IoT Edge for Linux on Windows continuous release (CR), based on IoT Edge version 1.2, is in [public preview](https://azure.microsoft.com/support/legal/preview-supplemental-terms/). A clean installation may be required for devices going into production use once the general availability (GA) release is available. For more information, see [EFLOW continuous release](https://github.com/Azure/iotedge-eflow/wiki/EFLOW-Continuous-Release). :::moniker-end
-<!-- end 1.2 -->
+<!-- end iotedge-2020-11 -->
The tasks are as follows:
For Windows Admin Center, use the following steps:
:::moniker-end <!-- end 1.1 -->
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" Run the following command in an elevated PowerShell session with the placeholder values updated with your own values: ```powershell
-Provision-EflowVm -provisioningType DpsSymmetricKey -ΓÇïscopeId PASTE_YOUR_ID_SCOPE_HERE -registrationId PASTE_YOUR_REGISTRATION_ID_HERE -symmKey PASTE_YOUR_PRIMARY_KEY_OR_DERIVED_KEY_HERE
+Provision-EflowVm -provisioningType DpsSymmetricKey -scopeId PASTE_YOUR_ID_SCOPE_HERE -registrationId PASTE_YOUR_REGISTRATION_ID_HERE -symmKey PASTE_YOUR_PRIMARY_KEY_OR_DERIVED_KEY_HERE
``` :::moniker-end
-<!-- end 1.2 -->
+<!-- end iotedge-2020-11 -->
## Verify successful installation
You can verify that the group enrollment that you created in device provisioning
:::moniker-end <!-- end 1.1 -->
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" 1. Log in to your IoT Edge for Linux on Windows virtual machine using the following command in your PowerShell session:
You can verify that the group enrollment that you created in device provisioning
``` :::moniker-end
-<!-- end 1.2 -->
+<!-- end iotedge-2020-11 -->
When you create a new IoT Edge device, it will display the status code `417 -- The device's deployment configuration is not set` in the Azure portal. This status is normal, and means that the device is ready to receive a module deployment.
iot-edge How To Provision Devices At Scale Linux On Windows Tpm https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-edge/how-to-provision-devices-at-scale-linux-on-windows-tpm.md
This article provides instructions for autoprovisioning an Azure IoT Edge for Linux on Windows device by using a Trusted Platform Module (TPM). You can automatically provision Azure IoT Edge devices with the [Azure IoT Hub device provisioning service](../iot-dps/index.yml). If you're unfamiliar with the process of autoprovisioning, review the [provisioning overview](../iot-dps/about-iot-dps.md#provisioning-process) before you continue.
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" >[!NOTE] >The latest version of [Azure IoT Edge for Linux on Windows continuous release (EFLOW CR)](./version-history.md), based on IoT Edge version 1.2, is in [public preview](https://azure.microsoft.com/support/legal/preview-supplemental-terms/). A clean installation may be required for devices going into production use once the general availability (GA) release is available. For more information, see [EFLOW continuous release](https://github.com/Azure/iotedge-eflow/wiki/EFLOW-Continuous-Release). :::moniker-end
-<!-- end 1.2 -->
+<!-- end iotedge-2020-11 -->
This article outlines two methodologies. Select your preference based on the architecture of your solution:
Use the following commands on your device to verify that the IoT Edge installed
:::moniker-end <!-- end 1.1 -->
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" Use the following commands on your device to verify that the IoT Edge installed and started successfully.
Use the following commands on your device to verify that the IoT Edge installed
``` :::moniker-end
-<!-- end 1.2 -->
+<!-- end iotedge-2020-11 -->
<!-- Uninstall IoT Edge for Linux on Windows H2 and content --> [!INCLUDE [uninstall-iot-edge-linux-on-windows.md](../../includes/iot-edge-uninstall-linux-on-windows.md)]
iot-edge How To Provision Devices At Scale Linux On Windows X509 https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-edge/how-to-provision-devices-at-scale-linux-on-windows-x509.md
This article provides end-to-end instructions for autoprovisioning one or more [IoT Edge for Linux on Windows](iot-edge-for-linux-on-windows.md) devices using X.509 certificates. You can automatically provision Azure IoT Edge devices with the [Azure IoT Hub device provisioning service](../iot-dps/index.yml) (DPS). If you're unfamiliar with the process of autoprovisioning, review the [provisioning overview](../iot-dps/about-iot-dps.md#provisioning-process) before continuing.
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" >[!NOTE] >The latest version of [Azure IoT Edge for Linux on Windows continuous release (EFLOW CR)](./version-history.md), based on IoT Edge version 1.2, is in [public preview](https://azure.microsoft.com/support/legal/preview-supplemental-terms/). A clean installation may be required for devices going into production use once the general availability (GA) release is available. For more information, see [EFLOW continuous release](https://github.com/Azure/iotedge-eflow/wiki/EFLOW-Continuous-Release). :::moniker-end
-<!-- end 1.2 -->
+<!-- end iotedge-2020-11 -->
The tasks are as follows:
For Windows Admin Center, use the following steps:
:::moniker-end <!-- end 1.1 -->
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" Run the following command in an elevated PowerShell session with the placeholder values updated with your own values:
You can verify that the group enrollment that you created in device provisioning
:::moniker-end <!-- end 1.1 -->
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" 1. Log in to your IoT Edge for Linux on Windows virtual machine using the following command in your PowerShell session:
You can verify that the group enrollment that you created in device provisioning
``` :::moniker-end
-<!-- end 1.2 -->
+<!-- end iotedge-2020-11 -->
When you create a new IoT Edge device, it will display the status code `417 -- The device's deployment configuration is not set` in the Azure portal. This status is normal, and means that the device is ready to receive a module deployment.
iot-edge How To Provision Devices At Scale Linux Symmetric https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-edge/how-to-provision-devices-at-scale-linux-symmetric.md
Have the following information ready:
:::moniker-end <!-- end 1.1 -->
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" 1. Create a configuration file for your device based on a template file that is provided as part of the IoT Edge installation.
Have the following information ready:
``` :::moniker-end
-<!-- end 1.2 -->
+<!-- end iotedge-2020-11 -->
## Verify successful installation
iotedge list
``` :::moniker-end
+<!-- end 1.1 -->
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" Check the status of the IoT Edge service.
iot-edge How To Provision Devices At Scale Linux Tpm https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-edge/how-to-provision-devices-at-scale-linux-tpm.md
After the runtime is installed on your device, configure the device with the inf
:::moniker-end <!-- end 1.1 -->
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" 1. Know your device provisioning service **ID Scope** and device **Registration ID** that were gathered previously.
After the runtime is installed on your device, configure the device with the inf
1. Save and close the file. :::moniker-end
-<!-- end 1.2 -->
+<!-- end iotedge-2020-11 -->
## Give IoT Edge access to the TPM
You can give TPM access to the IoT Edge runtime by overriding the systemd settin
:::moniker-end <!-- end 1.1 -->
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" The IoT Edge runtime relies on a TPM service that brokers access to a device's TPM. This service needs to access the TPM to automatically provision your device.
You can give access to the TPM by overriding the systemd settings so that the `a
``` :::moniker-end
-<!-- end 1.2 -->
+<!-- end iotedge-2020-11 -->
## Verify successful installation
Or, try restarting your VM to see if the changes take effect on a fresh start.
:::moniker-end <!-- end 1.1 -->
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" If you didn't already, apply the configuration changes that you made on the device.
If you see provisioning errors, it might be that the configuration changes haven
Or, try restarting your VM to see if the changes take effect on a fresh start. :::moniker-end
-<!-- end 1.2 -->
+<!-- end iotedge-2020-11 -->
If the runtime started successfully, you can go into your IoT hub and see that your new device was automatically provisioned. Now your device is ready to run IoT Edge modules.
iot-edge How To Provision Devices At Scale Linux X509 https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-edge/how-to-provision-devices-at-scale-linux-x509.md
Have the following information ready:
:::moniker-end <!-- end 1.1. -->
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" 1. Create a configuration file for your device based on a template file that is provided as part of the IoT Edge installation.
Have the following information ready:
``` :::moniker-end
-<!-- end 1.2 -->
+<!-- end iotedge-2020-11 -->
## Verify successful installation
iotedge list
:::moniker-end
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" Check the status of the IoT Edge service.
iot-edge How To Provision Single Device Linux On Windows Symmetric https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-edge/how-to-provision-single-device-linux-on-windows-symmetric.md
Previously updated : 02/09/2022 Last updated : 07/05/2022
This article provides end-to-end instructions for registering and provisioning an IoT Edge for Linux on Windows device.
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" >[!NOTE] >The latest version of [Azure IoT Edge for Linux on Windows continuous release (EFLOW CR)](./version-history.md), based on IoT Edge version 1.2, is in [public preview](https://azure.microsoft.com/support/legal/preview-supplemental-terms/). A clean installation may be required for devices going into production use once the general availability (GA) release is available. For more information, see [EFLOW continuous release](https://github.com/Azure/iotedge-eflow/wiki/EFLOW-Continuous-Release). :::moniker-end
-<!-- end 1.2 -->
+<!-- end iotedge-2020-11 -->
Every device that connects to an IoT hub has a device ID that's used to track cloud-to-device or device-to-cloud communications. You configure a device with its connection information, which includes the IoT hub hostname, the device ID, and the information the device uses to authenticate to IoT Hub.
For more information about the `Provision-EflowVM` command, see [PowerShell func
:::moniker-end <!-- end 1.1 -->
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" Run the following command in an elevated PowerShell session on your target device. Replace the placeholder text with your own values.
Provision-EflowVm -provisioningType ManualConnectionString -devConnString "PASTE
For more information about the `Provision-EflowVM` command, see [PowerShell functions for IoT Edge for Linux on Windows](reference-iot-edge-for-linux-on-windows-functions.md#provision-eflowvm). :::moniker-end
-<!-- end 1.2 -->
+<!-- end iotedge-2020-11 -->
## Verify successful configuration
Verify that IoT Edge for Linux on Windows was successfully installed and configu
:::moniker-end <!-- end 1.1 -->
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" 1. Log in to your IoT Edge for Linux on Windows virtual machine using the following command in your PowerShell session:
Verify that IoT Edge for Linux on Windows was successfully installed and configu
``` :::moniker-end
-<!-- end 1.2 -->
+<!-- end iotedge-2020-11 -->
When you create a new IoT Edge device, it will display the status code `417 -- The device's deployment configuration is not set` in the Azure portal. This status is normal, and means that the device is ready to receive a module deployment.
iot-edge How To Provision Single Device Linux On Windows X509 https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-edge/how-to-provision-single-device-linux-on-windows-x509.md
This article provides end-to-end instructions for registering and provisioning an IoT Edge for Linux on Windows device.
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" >[!NOTE] >The latest version of [Azure IoT Edge for Linux on Windows continuous release (EFLOW CR)](./version-history.md), based on IoT Edge version 1.2, is in [public preview](https://azure.microsoft.com/support/legal/preview-supplemental-terms/). A clean installation may be required for devices going into production use once the general availability (GA) release is available. For more information, see [EFLOW continuous release](https://github.com/Azure/iotedge-eflow/wiki/EFLOW-Continuous-Release). :::moniker-end
-<!-- end 1.2 -->
+<!-- end iotedge-2020-11 -->
Every device that connects to an IoT hub has a device ID that's used to track cloud-to-device or device-to-cloud communications. You configure a device with its connection information, which includes the IoT hub hostname, the device ID, and the information the device uses to authenticate to IoT Hub.
For more information about the `Provision-EflowVM` command, see [PowerShell func
:::moniker-end <!-- end 1.1 -->
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" Have the device identity certificate and its matching private key ready on your target device. Know the absolute path to both files.
Provision-EflowVm -provisioningType ManualX509 -iotHubHostname "HUB_HOSTNAME_HER
For more information about the `Provision-EflowVM` command, see [PowerShell functions for IoT Edge for Linux on Windows](reference-iot-edge-for-linux-on-windows-functions.md#provision-eflowvm). :::moniker-end
-<!-- end 1.2 -->
+<!-- end iotedge-2020-11 -->
## Verify successful configuration
Verify that IoT Edge for Linux on Windows was successfully installed and configu
:::moniker-end <!--end 1.1 -->
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" 1. Log in to your IoT Edge for Linux on Windows virtual machine using the following command in your PowerShell session:
Verify that IoT Edge for Linux on Windows was successfully installed and configu
``` :::moniker-end
-<!-- end 1.2 -->
+<!-- end iotedge-2020-11 -->
When you create a new IoT Edge device, it will display the status code `417 -- The device's deployment configuration is not set` in the Azure portal. This status is normal, and means that the device is ready to receive a module deployment.
iot-edge How To Provision Single Device Linux Symmetric https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-edge/how-to-provision-single-device-linux-symmetric.md
Previously updated : 11/01/2021 Last updated : 06/06/2022
After entering the provisioning information in the configuration file, restart t
<!-- end 1.1 --> ::: moniker-end
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
::: moniker range=">=iotedge-2020-11" You can quickly configure your IoT Edge device with symmetric key authentication using the following command:
If you want to see the configuration file, you can open it:
sudo nano /etc/aziot/config.toml ```
-<!-- end 1.2 -->
+<!-- end iotedge-2020-11 -->
::: moniker-end ## Verify successful configuration
Check to see that the IoT Edge system service is running.
::: moniker-end
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
::: moniker range=">=iotedge-2020-11" ```bash
If you need to troubleshoot the service, retrieve the service logs.
::: moniker-end
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
::: moniker range=">=iotedge-2020-11" ```bash
The steps in this section are for scenarios not covered by the standard installa
* Install IoT Edge while offline * Install a release candidate version
-Use the steps in this section if you want to install a specific version of the Azure IoT Edge runtime that isn't available through `apt-get install`. The Microsoft package list only contains a limited set of recent versions and their sub-versions, so these steps are for anyone who wants to install an older version or a release candidate version.
+Use the steps in this section if you want to install a specific version of the Azure IoT Edge runtime that isn't available through your package manager. The Microsoft package list only contains a limited set of recent versions and their sub-versions, so these steps are for anyone who wants to install an older version or a release candidate version.
Using curl commands, you can target the component files directly from the IoT Edge GitHub repository.
Using curl commands, you can target the component files directly from the IoT Ed
2. Use the copied link in the following command to install that version of the hsmlib: ```bash
- curl -L libiothsm-std_link_here -o libiothsm-std.deb && sudo apt-get install ./libiothsm-std.deb
+ curl -L <libiothsm-std_link> -o libiothsm-std.deb && sudo apt-get install ./libiothsm-std.deb
``` 3. Find the **iotedge** file that matches your IoT Edge device's architecture. Right-click on the file link and copy the link address.
Using curl commands, you can target the component files directly from the IoT Ed
<!-- end 1.1 --> ::: moniker-end
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
::: moniker range=">=iotedge-2020-11" >[!NOTE]
->If your device is currently running IoT Edge version 1.1 or older, uninstall the **iotedge** and **libiothsm-std** packages before following the steps in this section. For more information, see [Update from 1.0 or 1.1 to 1.2](how-to-update-iot-edge.md#special-case-update-from-10-or-11-to-12).
+>If your device is currently running IoT Edge version 1.1 or older, uninstall the **iotedge** and **libiothsm-std** packages before following the steps in this section. For more information, see [Update from 1.0 or 1.1 to latest release](how-to-update-iot-edge.md#special-case-update-from-10-or-11-to-latest-release).
1. Navigate to the [Azure IoT Edge releases](https://github.com/Azure/azure-iotedge/releases), and find the release version that you want to target.
Using curl commands, you can target the component files directly from the IoT Ed
2. Use the copied link in the following command to install that version of the identity service:
+ # [Ubuntu / Debian / Raspberry Pi OS](#tab/ubuntu+debian+rpios)
```bash curl -L <identity service link> -o aziot-identity-service.deb && sudo apt-get install ./aziot-identity-service.deb ```
+ # [Red Hat Enterprise Linux](#tab/rhel)
+ ```bash
+ curl -L <identity service link> -o aziot-identity-service.rpm && sudo yum localinstall ./aziot-identity-service.rpm
+ ```
+
+ 3. Find the **aziot-edge** file that matches your IoT Edge device's architecture. Right-click on the file link and copy the link address. 4. Use the copied link in the following command to install that version of IoT Edge.
+ # [Ubuntu / Debian / Raspberry Pi OS](#tab/ubuntu+debian+rpios)
```bash curl -L <iotedge link> -o aziot-edge.deb && sudo apt-get install ./aziot-edge.deb ```
-<!-- end 1.2 -->
+ # [Red Hat Enterprise Linux](#tab/rhel)
+ ```bash
+ curl -L <iotedge link> -o aziot-edge.rpm && sudo yum localinstall ./aziot-edge.rpm
+ ```
+
+ ::: moniker-end
+<!-- end iotedge-2020-11 -->
Now that the container engine and the IoT Edge runtime are installed on your device, you're ready for the next step, which is to [Provision the device with its cloud identity](#provision-the-device-with-its-cloud-identity).
sudo apt-get remove iotedge
::: moniker-end
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
::: moniker range=">=iotedge-2020-11"
+# [Ubuntu / Debian / Raspberry Pi OS](#tab/ubuntu+debian+rpios)
```bash
-sudo apt-get remove --purge aziot-edge
+sudo apt-get remove aziot-edge
``` - Use the `--purge` flag if you want to delete all the files associated with IoT Edge, including your configuration files. Leave this flag out if you want to reinstall IoT Edge and use the same configuration information in the future.
+# [Red Hat Enterprise Linux](#tab/rhel)
+```bash
+sudo yum remove aziot-edge
+```
+++ When the IoT Edge runtime is removed, any containers that it created are stopped but still exist on your device. View all containers to see which ones remain. ```bash
sudo docker rm -f <container name>
Finally, remove the container runtime from your device.
+# [Ubuntu / Debian / Raspberry Pi OS](#tab/ubuntu+debian+rpios)
```bash sudo apt-get remove --purge moby-cli sudo apt-get remove --purge moby-engine ```
+# [Red Hat Enterprise Linux](#tab/rhel)
+```bash
+sudo yum remove moby-cli
+sudo yum remove moby-engine
+```
+ ## Next steps Continue to [deploy IoT Edge modules](how-to-deploy-modules-portal.md) to learn how to deploy modules onto your device.
iot-edge How To Provision Single Device Linux X509 https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-edge/how-to-provision-single-device-linux-x509.md
Previously updated : 10/28/2021 Last updated : 06/03/2022
After entering the provisioning information in the configuration file, restart t
<!-- end 1.1 --> ::: moniker-end
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
::: moniker range=">=iotedge-2020-11" Create the configuration file for your device based on a template file that is provided as part of the IoT Edge installation.
After entering the provisioning information in the configuration file, apply you
sudo iotedge config apply ```
-<!-- end 1.2 -->
+<!-- end iotedge-2020-11 -->
::: moniker-end ## Verify successful configuration
Check to see that the IoT Edge system service is running.
::: moniker-end
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
::: moniker range=">=iotedge-2020-11" ```bash
If you need to troubleshoot the service, retrieve the service logs.
::: moniker-end
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
::: moniker range=">=iotedge-2020-11" ```bash
The steps in this section are for scenarios not covered by the standard installa
* Install IoT Edge while offline * Install a release candidate version
-Use the steps in this section if you want to install a specific version of the Azure IoT Edge runtime that isn't available through `apt-get install`. The Microsoft package list only contains a limited set of recent versions and their sub-versions, so these steps are for anyone who wants to install an older version or a release candidate version.
+Use the steps in this section if you want to install a specific version of the Azure IoT Edge runtime that isn't available through your package manager. The Microsoft package list only contains a limited set of recent versions and their sub-versions, so these steps are for anyone who wants to install an older version or a release candidate version.
Using curl commands, you can target the component files directly from the IoT Edge GitHub repository.
Using curl commands, you can target the component files directly from the IoT Ed
<!-- end 1.1 --> ::: moniker-end
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
::: moniker range=">=iotedge-2020-11" >[!NOTE]
->If your device is currently running IoT Edge version 1.1 or older, uninstall the **iotedge** and **libiothsm-std** packages before following the steps in this section. For more information, see [Update from 1.0 or 1.1 to 1.2](how-to-update-iot-edge.md#special-case-update-from-10-or-11-to-12).
+>If your device is currently running IoT Edge version 1.1 or older, uninstall the **iotedge** and **libiothsm-std** packages before following the steps in this section. For more information, see [Update from 1.0 or 1.1 to latest release](how-to-update-iot-edge.md#special-case-update-from-10-or-11-to-latest-release).
1. Navigate to the [Azure IoT Edge releases](https://github.com/Azure/azure-iotedge/releases), and find the release version that you want to target.
Using curl commands, you can target the component files directly from the IoT Ed
2. Use the copied link in the following command to install that version of the identity service:
+ # [Ubuntu / Debian / Raspberry Pi OS](#tab/ubuntu+debian+rpios)
```bash curl -L <identity service link> -o aziot-identity-service.deb && sudo apt-get install ./aziot-identity-service.deb ```
+ # [Red Hat Enterprise Linux](#tab/rhel)
+ ```bash
+ curl -L <identity service link> -o aziot-identity-service.rpm && sudo yum localinstall ./aziot-identity-service.rpm
+ ```
+
+ 3. Find the **aziot-edge** file that matches your IoT Edge device's architecture. Right-click on the file link and copy the link address. 4. Use the copied link in the following command to install that version of IoT Edge.
+ # [Ubuntu / Debian / Raspberry Pi OS](#tab/ubuntu+debian+rpios)
```bash curl -L <iotedge link> -o aziot-edge.deb && sudo apt-get install ./aziot-edge.deb ```
-<!-- end 1.2 -->
+ # [Red Hat Enterprise Linux](#tab/rhel)
+ ```bash
+ curl -L <iotedge link> -o aziot-edge.rpm && sudo yum localinstall ./aziot-edge.rpm
+ ```
+
+ ::: moniker-end
+<!-- end iotedge-2020-11 -->
Now that the container engine and the IoT Edge runtime are installed on your device, you're ready for the next step, which is to [Provision the device with its cloud identity](#provision-the-device-with-its-cloud-identity).
sudo apt-get remove iotedge
::: moniker-end
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
::: moniker range=">=iotedge-2020-11"
+# [Ubuntu / Debian / Raspberry Pi OS](#tab/ubuntu+debian+rpios)
```bash sudo apt-get remove aziot-edge ``` - Use the `--purge` flag if you want to delete all the files associated with IoT Edge, including your configuration files. Leave this flag out if you want to reinstall IoT Edge and use the same configuration information in the future.
+# [Red Hat Enterprise Linux](#tab/rhel)
+```bash
+sudo yum remove aziot-edge
+```
+++ When the IoT Edge runtime is removed, any containers that it created are stopped but still exist on your device. View all containers to see which ones remain. ```bash
iot-edge How To Publish Subscribe https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-edge/how-to-publish-subscribe.md
- Title: Publish and subscribe with Azure IoT Edge | Microsoft Docs
-description: Use IoT Edge MQTT broker to publish and subscribe messages
-
-keywords:
--- Previously updated : 11/30/2021--
-monikerRange: ">=iotedge-2020-11"
--
-# Publish and subscribe with Azure IoT Edge (preview)
--
-You can use Azure IoT Edge MQTT broker to publish and subscribe to messages. This article shows you how to connect to this broker, publish and subscribe to messages over user-defined topics, and use IoT Hub messaging primitives. The IoT Edge MQTT broker is built in the IoT Edge hub. For more information, see [the brokering capabilities of the IoT Edge hub](iot-edge-runtime.md).
-
-> [!NOTE]
-> IoT Edge MQTT broker (currently in preview) will not move to general availability and will be removed from the future version of IoT Edge Hub. We appreciate the feedback we received on the preview, and we are continuing to refine our plans for an MQTT broker. In the meantime, if you need a standards-compliant MQTT broker on IoT Edge, consider deploying an open-source broker like [Mosquitto](https://mosquitto.org/) as an IoT Edge module.
-
-## Prerequisites
--- An Azure account with a valid subscription.-- [Azure CLI](/cli/azure/) with the `azure-iot` CLI extension installed. For more information, see [the Azure IoT extension installation steps for Azure CLI](/cli/azure/azure-cli-reference-for-iot).-- An **IoT Hub** of SKU either F1, S1, S2, or S3.-- Have an **IoT Edge device** with version 1.2 or above. The device should include edgeAgent and edgeHub modules version 1.2 or above deployed, with the MQTT broker feature turned on and the edgeHub port 1883 bound to the host to enable non-TLS connections. For more information on automatically deploying IoT Edge 1.2 in an Azure VM, see [Run Azure IoT Edge on Ubuntu Virtual Machines](how-to-install-iot-edge-ubuntuvm.md). Since IoT Edge MQTT broker is currently in public preview, you need to also set the `experimentalFeatures__enabled` and `experimentalFeatures__mqttBrokerEnabled` environment variables to `true` on the edgeHub module to enable the MQTT broker.-
- To quickly create an IoT Edge deployment that meets these criteria along with an open authorization policy on the `test_topic`, you can use the [sample deployment manifest](#appendixsample-deployment-manifest) at the end of this article and follow these steps:
-
- 1. Save the deployment file to your working folder.
-
- 2. Apply this deployment to your IoT Edge device using the following Azure CLI command:
-
- ```azurecli
- az iot edge set-modules --device-id <device_id> --hub-name <hub_name> --content <deployment_file_path>
- ```
-
- For more information about this command, see [Deploy Azure IoT Edge modules with Azure CLI](how-to-deploy-modules-cli.md).
--- **Mosquitto clients** installed on the IoT Edge device. This article uses the popular Mosquitto clients [MOSQUITTO_PUB](https://mosquitto.org/man/mosquitto_pub-1.html) and [MOSQUITTO_SUB](https://mosquitto.org/man/mosquitto_sub-1.html). Other MQTT clients could be used instead. To install the Mosquitto clients on an Ubuntu device, run the following command:-
- ```cmd
- sudo apt-get update && sudo apt-get install mosquitto-clients
- ```
-
- > [!WARNING]
- > Don't install the Mosquitto server since it may block the MQTT ports (8883 and 1883) and conflict with the IoT Edge hub.
-
-## Connect to IoT Edge hub
-
-Connecting to IoT Edge hub follows the same steps as described in [Connecting to IoT Hub](../iot-hub/iot-hub-mqtt-support.md#connecting-to-iot-hub) or in [Connecting to the IoT Edge hub](../iot-edge/iot-edge-runtime.md#connecting-to-the-iot-edge-hub). These steps are:
-
-1. Optionally, the MQTT client establishes a *secure connection* with the IoT Edge hub using Transport Layer Security (TLS).
-2. The MQTT client *authenticates* itself to IoT Edge hub.
-3. The IoT Edge hub *authorizes* the MQTT client per its authorization policy.
-
-### Secure connection (TLS)
-
-TLS is used to establish encrypted communication between the client and the IoT Edge hub.
--- To *disable* TLS: use port 1883 (MQTT) and bind the edgeHub container to port 1883.--- To *enable* TLS: if a client connects on port 8883 (MQTTS) to the MQTT broker, a TLS channel will be initiated. The broker sends its certificate chain to be validated by the client. To validate the certificate chain, the root certificate of the MQTT broker must be installed as a trusted certificate on the client. If the root certificate isn't trusted, the client library will be rejected by the MQTT broker with a certificate verification error. The steps to install the root certificate of the broker on the client are the same as in the [transparent gateway](how-to-create-transparent-gateway.md) case and are described in the [Prepare a downstream device](how-to-connect-downstream-device.md#prepare-a-downstream-device) section of *How-to: Connect a downstream device to an Azure IoT Edge gateway*.-
-### Authentication
-
-To authenticate itself, the MQTT client first needs to send a CONNECT packet to the MQTT broker to start a connection in its name. This packet provides three pieces of authentication information: a `client identifier`, a `username`, and a `password`:
--- The `client identifier` field is the name of the device or module name in IoT Hub. It uses the following syntax:-
- - For a device: `<device_name>`
-
- - For a module: `<device_name>/<module_name>`
-
- To connect to the MQTT broker, a device or a module must be registered in IoT Hub.
-
- The broker won't allow connections from multiple clients using the same credentials. The broker will disconnect the client that's already connected if a second client connects using the same credentials.
--- The `username` field is derived from the device or module name, and the IoT hub name that the device belongs to. It uses the following syntax:-
- - For a device: `<iot_hub_name>.azure-devices.net/<device_name>/?api-version=2018-06-30`
-
- - For a module: `<iot_hub_name>.azure-devices.net/<device_name>/<module_name>/?api-version=2018-06-30`
--- The `password` field of the CONNECT packet depends on the authentication mode:-
- - When using [symmetric keys authentication](how-to-authenticate-downstream-device.md#symmetric-key-authentication), the `password` field is a SAS token.
- - When using [X.509 self-signed authentication](how-to-authenticate-downstream-device.md#x509-self-signed-authentication), the `password` field isn't present. In this authentication mode, a TLS channel is required. The client needs to connect to port 8883 to establish a TLS connection. During the TLS handshake, the MQTT broker requests a client certificate. This certificate is used to verify the identity of the client and so the `password` field isn't needed later when the CONNECT packet is sent. Sending both a client certificate and the password field will lead to an error and the connection will be closed. MQTT libraries and TLS client libraries usually have a way to send a client certificate when starting a connection. You can see a step-by-step example in the [X.509 self-signed authentication](how-to-authenticate-downstream-device.md#x509-self-signed-authentication) section of *How-to: Authenticate a downstream device to Azure IoT Hub*.
-
-Modules deployed by IoT Edge use [symmetric keys authentication](how-to-authenticate-downstream-device.md#symmetric-key-authentication) and can call the local [IoT Edge workload API](https://github.com/Azure/iotedge/blob/40f10950dc65dd955e20f51f35d69dd4882e1618/edgelet/workload/README.md) to programmatically get a SAS token even when offline.
-
-### Authorization
-
-Once an MQTT client is authenticated to an IoT Edge hub, it needs to be authorized to connect. Once connected, it needs to be authorized to publish or subscribe to specific topics. These authorizations are granted by the IoT Edge hub based on its authorization policy. The authorization policy is a set of statements expressed as a JSON structure that is sent to the IoT Edge hub via its twin. Edit an IoT Edge hub twin to configure its authorization policy.
-
-> [!NOTE]
-> For the public preview, only the Azure CLI supports deployments containing MQTT broker authorization policies. The Azure portal currently doesn't support editing the IoT Edge hub twin and its authorization policy.
-
-Each authorization policy statement consists of the combination of `identities`, `allow` or `deny` effects, `operations`, and `resources`:
--- `identities` describe the subject of the policy. It must map to the `username` sent by clients in their CONNECT packet and be in the format of `<iot_hub_name>.azure-devices.net/<device_name>` or `<iot_hub_name>.azure-devices.net/<device_name>/<module_name>`.-- `allow` or `deny` effects define whether to allow or deny operations.-- `operations` define the actions to authorize. `mqtt:connect`, `mqtt:publish`, and `mqtt:subscribe` are the three supported actions currently.-- `resources` define the object of the policy. It can be a topic or a topic pattern defined with [MQTT wildcards](https://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html#_Toc398718107).-
-The following JSON snippet is an example of an authorization policy that explicitly doesn't allow the client "rogue_client" to connect, allows any Azure IoT clients to connect, and allows "sensor_1" to publish to topic `events/alerts`:
-
-```json
-{
- "$edgeHub":{
- "properties.desired":{
- "schemaVersion":"1.2",
- "routes":{
- "Route1":"FROM /messages/* INTO $upstream"
- },
- "storeAndForwardConfiguration":{
- "timeToLiveSecs":7200
- },
- "mqttBroker":{
- "authorizations":[
- {
- "identities":[
- "<iot_hub_name>.azure-devices.net/rogue_client"
- ],
- "deny":[
- {
- "operations":[
- "mqtt:connect"
- ]
- }
- ]
- },
- {
- "identities":[
- "{{iot:identity}}"
- ],
- "allow":[
- {
- "operations":[
- "mqtt:connect"
- ]
- }
- ]
- },
- {
- "identities":[
- "<iot_hub_name>.azure-devices.net/sensor_1"
- ],
- "allow":[
- {
- "operations":[
- "mqtt:publish"
- ],
- "resources":[
- "events/alerts"
- ]
- }
- ]
- }
- ]
- }
- }
- }
-}
-```
-
-When writing your authorization policy, keep in mind:
--- It requires `$edgeHub` twin schema version 1.2.
- > [!IMPORTANT]
- > Once your IoT Edge device is deployed, it currently won't display correctly in the Azure portal with schema version 1.2 (version 1.1 will be fine). This is a known bug and will be fixed soon. However, this won't affect your device, as it's still connected in IoT Hub and can be communicated with at any time using the Azure CLI.
- :::image type="content" source="./media/how-to-publish-subscribe/unsupported-1.2-schema.png" alt-text="Screenshot of Azure portal error on the IoT Edge device page.":::
-- By default, all operations are denied.-- Authorization statements are evaluated in the order that they appear in the JSON definition. It starts by looking at `identities` and then selects the first *allow* or *deny* statements that match the request. If there are conflicts between these statements, the *deny* statement wins.-- Several variables (for example, substitutions) can be used in the authorization policy:-
- - `{{iot:identity}}` represents the identity of the currently connected client. For example, a device identity like `<iot_hub_name>.azure-devices.net/myDevice` or a module identity like `<iot_hub_name>.azure-devices.net/myEdgeDevice/SampleModule`.
- - `{{iot:device_id}}` represents the identity of the currently connected device. For example, a device identity like `myDevice` or the device identity where a module is running like `myEdgeDevice`.
- - `{{iot:module_id}}` represents the identity of the currently connected module. This variable is blank for connected devices, or a module identity like `SampleModule`.
- - `{{iot:this_device_id}}` represents the identity of the IoT Edge device running the authorization policy. For example, `myIoTEdgeDevice`.
-
-Authorizations for IoT hub topics are handled slightly differently than user-defined topics. Here are the key points to keep in mind:
--- Azure IoT devices or modules need an explicit authorization rule to connect to IoT Edge hub MQTT broker. A default connect authorization policy is provided below.-- Azure IoT devices or modules can access their own IoT hub topics by default without any explicit authorization rule. However, authorizations stem from parent/child relationships in that case and these relationships must be set. IoT Edge modules are automatically set as children of their IoT Edge device but devices need to explicitly be set as children of their IoT Edge gateway.-
-The following JSON snippet is an example of a default authorization policy that can be used to enable all Azure IoT devices or modules to **connect** to the broker:
-
-```json
-{
- "$edgeHub":{
- "properties.desired":{
- "schemaVersion":"1.2",
- "mqttBroker":{
- "authorizations":[
- {
- "identities": [
- "{{iot:identity}}"
- ],
- "allow":[
- {
- "operations":[
- "mqtt:connect"
- ]
- }
- ]
- }
- ]
- }
- }
- }
-}
-```
-
-Now that you understand how to connect to the IoT Edge MQTT broker, let's see how it can be used to publish and subscribe to messages first on user-defined topics, then on IoT Hub topics, and finally to another MQTT broker.
-
-## Publish and subscribe on user-defined topics
-
-In this section, you'll use one client named **sub_client** that subscribes to a topic and another client named **pub_client** that publishes to a topic. We'll use [symmetric key authentication](how-to-authenticate-downstream-device.md#symmetric-key-authentication), but the same can be done with [X.509 self-signed authentication](how-to-authenticate-downstream-device.md#x509-self-signed-authentication) or [X.509 CA-signed authentication](./how-to-authenticate-downstream-device.md#x509-ca-signed-authentication).
-
-### Create publisher and subscriber clients
-
-Open a terminal and use the Azure CLI commands described in this section to create two IoT devices in IoT Hub and get their passwords.
-
-1. Run the following commands to create two IoT devices in IoT Hub:
-
- ```azurecli-interactive
- az iot hub device-identity create --device-id sub_client --hub-name <iot_hub_name>
- az iot hub device-identity create --device-id pub_client --hub-name <iot_hub_name>
- ```
-
-2. Run the following commands to set the IoT devices' parent to be your IoT Edge device:
-
- ```azurecli-interactive
- az iot hub device-identity parent set --device-id sub_client --hub-name <iot_hub_name> --pd <edge_device_id>
- az iot hub device-identity parent set --device-id pub_client --hub-name <iot_hub_name> --pd <edge_device_id>
- ```
--
-3. Run the following command for each IoT device or module to get their passwords by generating a SAS token:
-
- - For a device:
-
- ```azurecli-interactive
- az iot hub generate-sas-token -n <iot_hub_name> -d <device_name> --key-type primary --du 3600
- ```
-
- - For a module:
-
- ```azurecli-interactive
- az iot hub generate-sas-token -n <iot_hub_name> -d <device_name> -m <module_name> --key-type primary --du 3600
- ```
-
- > [!NOTE]
- > The value 3600 assigned to the `du` parameter in these commands corresponds to the duration of the SAS token in seconds. Assigning 3600 to the parameter would result in the token lasting 1 hour.
-
-4. Copy the SAS token, which is the value corresponding to the `sas` key from the output. Here's an example output from the Azure CLI command that you ran in step 3:
-
- ```json
- {
- "sas": "SharedAccessSignature sr=example.azure-devices.net%2Fdevices%2Fdevice_1%2Fmodules%2Fmodule_a&sig=H5iMq8ZPJBkH3aBWCs0khoTPdFytHXk8VAxrthqIQS0%3D&se=1596249190"
- }
- ```
-
-### Authorize publisher and subscriber clients
-
-To authorize the publisher and subscriber, edit the IoT Edge hub twin in an IoT Edge deployment that includes the following authorization policy:
-
-```json
-{
- "$edgeHub":{
- "properties.desired":{
- "schemaVersion":"1.2",
- "mqttBroker":{
- "authorizations":[
- {
- "identities": [
- "{{iot:identity}}"
- ],
- "allow":[
- {
- "operations":[
- "mqtt:connect"
- ]
- }
- ]
- },
- {
- "identities": [
- "<iot_hub_name>.azure-devices.net/sub_client"
- ],
- "allow":[
- {
- "operations":[
- "mqtt:subscribe"
- ],
- "resources":[
- "test_topic"
- ]
- }
- ],
- },
- {
- "identities": [
- "<iot_hub_name>.azure-devices.net/pub_client"
- ],
- "allow":[
- {
- "operations":[
- "mqtt:publish"
- ],
- "resources":[
- "test_topic"
- ]
- }
- ]
- }
- ]
- }
- }
- }
-}
-```
-
-> [!NOTE]
-> Currently, deployments that contain the MQTT authorization properties can only be applied to IoT Edge devices using the Azure CLI.
-
-### Symmetric keys authentication without TLS
-
-#### Subscribe
-
-Connect your **sub_client** MQTT client to the MQTT broker and subscribe to the `test_topic` by running the following command on your IoT Edge device:
-
-```bash
-mosquitto_sub \
- -t "test_topic" \
- -i "sub_client" \
- -u "<iot_hub_name>.azure-devices.net/sub_client/?api-version=2018-06-30" \
- -P "<sas_token>" \
- -h "<edge_device_address>" \
- -V mqttv311 \
- -p 1883
-```
-
-In this code snippet, `<edge_device_address>` would be `localhost` since the client is running on the same device as IoT Edge.
-
-> [!NOTE]
-> TLS isn't enabled in this first example, so port 1883 (MQTT) is used. For this example to work, edgeHub port 1883 needs to be bound to the host via its create options. An example is given in the [prerequisite section](#prerequisites). Another example with TLS enabled using port 8883 (MQTTS) is shown in the [Symmetric keys authentication with TLS section](#symmetric-keys-authentication-with-tls) further down in this article.
-
-The **sub_client** MQTT client is now started and is waiting for incoming messages on `test_topic`.
-
-#### Publish
-
-Connect your **pub_client** MQTT client to the MQTT broker and publish a message on the same `test_topic` as above by running the following command on your IoT Edge device from another terminal:
-
-```bash
-mosquitto_pub \
- -t "test_topic" \
- -i "pub_client" \
- -u "<iot_hub_name>.azure-devices.net/pub_client/?api-version=2018-06-30" \
- -P "<sas_token>" \
- -h "<edge_device_address>" \
- -V mqttv311 \
- -p 1883 \
- -m "hello"
-```
-
-In this code snippet, `<edge_device_address>` would be `localhost` since the client is running on the same device as IoT Edge.
-
-Executing the command, the **sub_client** MQTT client receives the "hello" message.
-
-### Symmetric keys authentication with TLS
-
-To enable TLS, the port must be changed from 1883 (MQTT) to 8883 (MQTTS) and clients must have the root certificate of the MQTT broker to be able to validate the certificate chain sent by the MQTT broker. You can do so by following the steps provided in the [Secure connection (TLS) section](#secure-connection-tls).
-
-Because the clients are running on the same device as the MQTT broker in the example above, the same steps apply to enable TLS by:
--- Changing the port number from 1883 (MQTT) to 8883 (MQTTS)-- Passing the CA root certificate to the mosquitto_pub and mosquitto_sub clients using a parameter similar to `--cafile /certs/certs/azure-iot-test-only.root.ca.cert.pem`-- Passing the actual hostname set up in IoT Edge instead of `localhost` via the hostname parameter passed to the mosquitto_pub and mosquitto_sub clients to enable validation of the certificate chain-
-## Publish and subscribe on IoT Hub topics
-
-The [Azure IoT Device SDKs](https://github.com/Azure/azure-iot-sdks) already let clients perform IoT Hub operations, but they don't allow publishing or subscribing to user-defined topics. IoT Hub operations can be performed using any MQTT clients using publish and subscribe semantics as long as IoT Hub primitive protocols are respected. The next sections of this guide go through the specifics to illustrate how these protocols work.
-
-### Send messages
-
-Sending telemetry data to IoT Hub, other devices, or other modules is similar to publishing on a user-defined topic, but using a specific IoT Hub topic:
--- For a device, telemetry is sent on topic: `devices/<device_name>/messages/events/`-- For a module, telemetry is sent on topic: `devices/<device_name>/modules/<module_name>/messages/events/`-
-Additionally, route the message to its destination.
-
-As with all IoT Edge messages, you can create a route such as `FROM /messages/* INTO $upstream` to send telemetry from the IoT Edge MQTT broker to the IoT hub. For more information about routing, see [Declare routes](module-composition.md#declare-routes).
-
-Depending on the routing settings, the routing may define an input name, which will be attached to the topic when a message is getting forwarded. Also, Edge Hub (and the original sender) adds parameters to the message which is encoded in the topic structure. The following example shows a message routed with input name "TestInput". This message was sent by a module called "SenderModule", which name is also encoded in the topic:
-
-`devices/TestEdgeDevice/modules/TestModule/inputs/TestInput/%24.cdid=TestEdgeDevice&%24.cmid=SenderModule`
-
-Modules can also send messages on a specific output name. Output names help when messages from a module need to be routed to different destinations. When a module wants to send a message on a specific output, it sends the message as a regular telemetry message, except that it adds an additional system property to it. This system property is '$.on'. The '$' sign needs to be url encoded and it becomes %24 in the topic name. The following example shows a telemetry message sent with the output name 'alert':
-
-`devices/TestEdgeDevice/modules/TestModule/messages/events/%24.on=alert/`
-
-### Receive messages
-
-A telemetry message sent by a device or module can be routed to another module. If a module wants to receive M2M messages, first it needs to subscribe to the topic which delivers them. The format of the subscription is:
-
-`devices/{device_id}/modules/{module_id}/#`
-
-### Get twin
-
-Getting the device or module twin isn't a typical MQTT pattern. The client needs to issue a request for the twin that IoT Hub is going to serve.
-
-To receive twins, the client needs to subscribe to the following topic specific to IoT Hub: `$iothub/twin/res/#`. This topic name is inherited from IoT Hub, and all clients need to subscribe to the same topic. It doesn't mean that devices or modules receive the twin of each other. IoT Hub and IoT Edge hub know which twin should be delivered where, even if all devices listen to the same topic name.
-
-Once the subscription is made, the client needs to ask for the twin by publishing a message to the following topic specific to IoT Hub: `$iothub/twin/GET/?$rid=<request_id>/#`. The `<request_id>` in this code snippet is an arbitrary identifier. IoT Hub will then send its response with the requested data on the `$iothub/twin/res/200/?$rid=<request_id>` topic, which the client subscribes to. This process is how a client can pair its requests with the responses.
-
-### Receive twin patches
-
-To receive twin patches, a client needs to subscribe to the following special IoT Hub topic: `$iothub/twin/PATCH/properties/desired/#`. Once the subscription is made, the client receives the twin patches sent by IoT Hub on this topic.
-
-### Receive direct methods
-
-Receiving a direct method is similar to receiving full twins with the addition that the client needs to confirm back that it has received the call. First the client subscribes to the following special IoT Hub topic: `$iothub/methods/POST/#`. Once a direct method is received on this topic, the client needs to extract the request identifier `$rid` from the subtopic on which the direct method is received, and finally publish a confirmation message on the following special IoT Hub topic: `$iothub/methods/res/200/<request_id>`.
-
-### Send direct methods
-
-Sending a direct method is an HTTP call and so doesn't go through the MQTT broker. For more information on sending a direct method to IoT Hub, see [Understand and invoke direct methods](../iot-hub/iot-hub-devguide-direct-methods.md). For more information on sending a direct method locally to another module, see this [Azure IoT C# SDK direct method invocation example](https://github.com/Azure/azure-iot-sdk-csharp/blob/main/iothub/device/src/ModuleClient.cs#L597).
-
-## Publish and subscribe between MQTT brokers
-
-To connect two MQTT brokers, the IoT Edge hub includes an MQTT bridge. An MQTT bridge is commonly used to connect a running MQTT broker to another MQTT broker. Only a subset of the local traffic is typically pushed to another broker.
-
-> [!NOTE]
-> The IoT Edge hub bridge can currently only be used between nested IoT Edge devices. It can't be used to send data to IoT Hub since IoT Hub isn't a full-featured MQTT broker. To learn more about IoT Hub MQTT broker features support, see [Communicate with your IoT hub using the MQTT protocol](../iot-hub/iot-hub-mqtt-support.md). To learn more about nesting IoT Edge devices, see [Connect a downstream IoT Edge device to an Azure IoT Edge gateway](how-to-connect-downstream-iot-edge-device.md).
-
-In a nested configuration, the IoT Edge hub MQTT bridge acts as a client of the parent MQTT broker, so authorization rules must be set on the parent EdgeHub to allow the child EdgeHub to publish and subscribe to specific user-defined topics that the bridge is configured for.
-
-The IoT Edge MQTT bridge is configured via a JSON structure that's sent to the IoT Edge hub via its twin. Edit an IoT Edge hub twin to configure its MQTT bridge.
-
-> [!NOTE]
-> For the public preview, only the Azure CLI supports deployments containing MQTT bridge configurations. The Azure portal currently doesn't support editing the IoT Edge hub twin and its MQTT bridge configuration.
-
-The MQTT bridge can be configured to connect an IoT Edge hub MQTT broker to multiple external brokers. For each external broker, the following settings are required:
--- `endpoint` is the address of the remote MQTT broker to connect to. Only parent IoT Edge devices are currently supported and are defined by the variable `$upstream`.-- `settings` defines which topics to bridge for an endpoint. There can be multiple settings per endpoint and the following values are used to configure it:
- - `direction` is either `in` to subscribe to the remote broker's topics or `out` to publish to the remote broker's topics.
- - `topic` is the core topic pattern to be matched. [MQTT wildcards](https://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html#_Toc398718107) can be used to define this pattern. Different prefixes can be applied to this topic pattern on the local broker and remote broker.
- - `outPrefix` is the prefix that's applied to the `topic` pattern on the remote broker.
- - `inPrefix` is the prefix that's applied to the `topic` pattern on the local broker.
-
-The following JSON snippet is an example of an IoT Edge MQTT bridge configuration that republishes all messages received on topics `alerts/#` of a parent IoT Edge device to a child IoT Edge device on the same topics, and republishes all messages sent on topics `/local/telemetry/#` of a child IoT Edge device to a parent IoT Edge device on topics `/remote/messages/#`:
-
-```json
-{
- "schemaVersion": "1.2",
- "mqttBroker": {
- "bridges": [{
- "endpoint": "$upstream",
- "settings": [{
- "direction": "in",
- "topic": "alerts/#"
- },
- {
- "direction": "out",
- "topic": "#",
- "inPrefix": "/local/telemetry/",
- "outPrefix": "/remote/messages/"
- }
- ]
- }]
- }
-}
-```
-
-> [!NOTE]
-> The MQTT protocol will automatically be used as upstream protocol when the MQTT broker is used and IoT Edge is in a nested configuration, for example, with a `parent_hostname` specified. To learn more about upstream protocols, see [Cloud communication](iot-edge-runtime.md#cloud-communication). To learn more about nested configurations, see [Connect a downstream IoT Edge device to an Azure IoT Edge gateway](how-to-connect-downstream-iot-edge-device.md).
-
-## Next steps
-
-To learn more about IoT Edge hub, see [Understand the IoT Edge hub](iot-edge-runtime.md#iot-edge-hub).
-
-## Appendix - Sample deployment manifest
-
-Below is the complete deployment manifest that you can use to enable the MQTT Broker in IoT Edge. It deploys IoT Edge version 1.2 with the MQTT broker feature enabled, edgeHub port 1883 enabled, and an open authorization policy on the `test_topic`.
-
-```json
-{
- "modulesContent":{
- "$edgeAgent":{
- "properties.desired":{
- "schemaVersion":"1.1",
- "runtime":{
- "type":"docker",
- "settings":{
- "minDockerVersion":"v1.25",
- "loggingOptions":"",
- "registryCredentials":{
-
- }
- }
- },
- "systemModules":{
- "edgeAgent":{
- "type":"docker",
- "settings":{
- "image":"mcr.microsoft.com/azureiotedge-agent:1.2",
- "createOptions":"{}"
- }
- },
- "edgeHub":{
- "type":"docker",
- "status":"running",
- "restartPolicy":"always",
- "settings":{
- "image":"mcr.microsoft.com/azureiotedge-hub:1.2",
- "createOptions":"{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}],\"1883/tcp\":[{\"HostPort\":\"1883\"}]}}}"
- },
- "env":{
- "experimentalFeatures__mqttBrokerEnabled":{
- "value":"true"
- },
- "experimentalFeatures__enabled":{
- "value":"true"
- },
- "RuntimeLogLevel":{
- "value":"debug"
- }
- }
- }
- },
- "modules":{
-
- }
- }
- },
- "$edgeHub":{
- "properties.desired":{
- "schemaVersion":"1.2",
- "routes":{
- "Upstream":"FROM /messages/* INTO $upstream"
- },
- "storeAndForwardConfiguration":{
- "timeToLiveSecs":7200
- },
- "mqttBroker":{
- "authorizations":[
- {
- "identities":[
- "{{iot:identity}}"
- ],
- "allow":[
- {
- "operations":[
- "mqtt:connect"
- ]
- }
- ]
- },
- {
- "identities":[
- "{{iot:identity}}"
- ],
- "allow":[
- {
- "operations":[
- "mqtt:publish",
- "mqtt:subscribe"
- ],
- "resources":[
- "test_topic"
- ]
- }
- ]
- }
- ]
- }
- }
- }
- }
-}
-```
iot-edge How To Retrieve Iot Edge Logs https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-edge/how-to-retrieve-iot-edge-logs.md
az iot hub invoke-module-method \
Use the **UploadModuleLogs** direct method to send the requested logs to a specified Azure Blob Storage container.
-<!-- 1.2.0 -->
+<!-- iotedge-2020-11 -->
::: moniker range=">=iotedge-2020-11" > [!NOTE]
In the Azure portal, invoke the method with the method name `UploadModuleLogs` a
Use the **UploadSupportBundle** direct method to bundle and upload a zip file of IoT Edge module logs to an available Azure Blob Storage container. This direct method runs the [`iotedge support-bundle`](./troubleshoot.md#gather-debug-information-with-support-bundle-command) command on your IoT Edge device to obtain the logs.
-<!-- 1.2.0 -->
+<!-- iotedge-2020-11 -->
::: moniker range=">=iotedge-2020-11" > [!NOTE]
iot-edge How To Update Iot Edge https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-edge/how-to-update-iot-edge.md
keywords:
Previously updated : 06/15/2021 Last updated : 06/03/2022
The IoT Edge security subsystem includes a set of native components that need to
Check the version of the security subsystem running on your device by using the command `iotedge version`. If you're using IoT Edge for Linux on Windows, you need to SSH into the Linux virtual machine to check the version.
-# [Linux](#tab/linux)
+<!-- Separated Linux content support RHEL - Some content repeated in RHEL tab-->
+# [Ubuntu / Debian / Raspberry Pi OS](#tab/ubuntu+debian+rpios)
>[!IMPORTANT]
->If you are updating a device from version 1.0 or 1.1 to version 1.2, there are differences in the installation and configuration processes that require extra steps. For more information, refer to the steps later in this article: [Special case: Update from 1.0 or 1.1 to 1.2](#special-case-update-from-10-or-11-to-12).
+>If you are updating a device from version 1.0 or 1.1 to the latest release, there are differences in the installation and configuration processes that require extra steps. For more information, refer to the steps later in this article: [Special case: Update from 1.0 or 1.1 to latest release](#special-case-update-from-10-or-11-to-latest-release).
On Linux x64 devices, use apt-get or your appropriate package manager to update the runtime module to the latest version.
curl -L <iotedge link> -o iotedge.deb && sudo apt-get install ./iotedge.deb
<!-- end 1.1 --> :::moniker-end
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" Check to see which versions of IoT Edge are available.
- ```bash
- apt list -a aziot-edge
- ```
+```bash
+apt list -a aziot-edge
+```
If you want to update to the most recent version of IoT Edge, use the following command which also updates the [identity service](https://azure.github.io/iot-identity-service/) to the latest version:
- ```bash
- sudo apt-get install aziot-edge defender-iot-micro-agent-edge
- ```
-It's recommended to install the micro agent with the Edge agent to enable security monitoring and hardening of your Edge devices. To learn more about Microsoft Defender for IoT, see [What is Microsoft Defender for IoT for device builders](../defender-for-iot/device-builders/overview.md).
-<!-- end 1.2 -->
+```bash
+sudo apt-get install aziot-edge defender-iot-micro-agent-edge
+```
+
+It is recommended to install the micro agent with the Edge agent to enable security monitoring and hardening of your Edge devices. To learn more about Microsoft Defender for IoT, see [What is Microsoft Defender for IoT for device builders](../defender-for-iot/device-builders/overview.md).
+
+<!-- end iotedge-2020-11 -->
:::moniker-end
+<!--Repeated Linux content for RHEL-->
+# [Red Hat Enterprise Linux](#tab/rhel)
+
+<!-- 1.1 -->
+
+IoT Edge version 1.1 isn't supported on Red Hat Enterprise Linux 8.
+
+<!-- end 1.1 -->
+
+<!-- iotedge-2020-11 -->
+
+Check to see which versions of IoT Edge are available.
+
+```bash
+yum list aziot-edge
+```
+
+If you want to update to the most recent version of IoT Edge, use the following command which also updates the [identity service](https://azure.github.io/iot-identity-service/) to the latest version:
+
+```bash
+sudo yum install aziot-edge
+```
++
+<!-- end iotedge-2020-11 -->
+<!--End repeated Linux content for RHEL-->
+ # [Linux on Windows](#tab/linuxonwindows) For information about IoT Edge for Linux on Windows updates, see [EFLOW Updates](./iot-edge-for-linux-on-windows-updates.md). # [Windows](#tab/windows)
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" >[!NOTE]
->Currently, there's no support for IoT Edge version 1.2 running on Windows devices.
+>Currently, there is not support for IoT Edge version 1.3 running on Windows devices.
> >To view the steps for updating IoT Edge for Linux on Windows, see [IoT Edge 1.1](?view=iotedge-2018-06&preserve-view=true&tabs=windows). :::moniker-end
-<!-- end 1.2 -->
+<!-- end iotedge-2020-11 -->
<!-- 1.1 --> :::moniker range="iotedge-2018-06"
If you use specific tags in your deployment (for example, mcr.microsoft.com/azur
1. Select **Review + create**, review the deployment, and select **Create**.
-## Special case: Update from 1.0 or 1.1 to 1.2
+## Special case: Update from 1.0 or 1.1 to latest release
->[!NOTE]
->If you're using Windows containers or IoT Edge for Linux on Windows, this special case section does not apply.
+# [Ubuntu / Debian / Raspberry Pi OS](#tab/ubuntu+debian+rpios)
-Starting with version 1.2, the IoT Edge service uses a new package name and has some differences in the installation and configuration processes. If you have an IoT Edge device running version 1.0 or 1.1, use these instructions to learn how to update to 1.2.
-
->[!NOTE]
->Currently, there is no support for IoT Edge version 1.2 running on Windows devices.
+Starting with version 1.2, the IoT Edge service uses a new package name and has some differences in the installation and configuration processes. If you have an IoT Edge device running version 1.0 or 1.1, use these instructions to learn how to update to the latest release.
-Some of the key differences between 1.2 and earlier versions include:
+Some of the key differences between the latest release and version 1.1 and earlier include:
* The package name changed from **iotedge** to **aziot-edge**. * The **libiothsm-std** package is no longer used. If you used the standard package provided as part of the IoT Edge release, then your configurations can be transferred to the new version. If you used a different implementation of libiothsm-std, then any user-provided certificates like the device identity certificate, device CA, and trust bundle will need to be reconfigured. * A new identity service, **[aziot-identity-service](https://azure.github.io/iot-identity-service/)** was introduced as part of the 1.2 release. This service handles the identity provisioning and management for IoT Edge and for other device components that need to communicate with IoT Hub, like [Device Update for IoT Hub](../iot-hub-device-update/understand-device-update.md). * The default config file has a new name and location. Formerly `/etc/iotedge/config.yaml`, your device configuration information is now expected to be in `/etc/aziot/config.toml` by default. The `iotedge config import` command can be used to help migrate configuration information from the old location and syntax to the new one. * The import command cannot detect or modify access rules to a device's trusted platform module (TPM). If your device uses TPM attestation, you need to manually update the /etc/udev/rules.d/tpmaccess.rules file to give access to the aziottpm service. For more information, see [Give IoT Edge access to the TPM](how-to-auto-provision-simulated-device-linux.md?view=iotedge-2020-11&preserve-view=true#give-iot-edge-access-to-the-tpm).
-* The workload API in version 1.2 saves encrypted secrets in a new format. If you upgrade from an older version to version 1.2, the existing master encryption key is imported. The workload API can read secrets saved in the prior format using the imported encryption key. However, the workload API can't write encrypted secrets in the old format. Once a secret is re-encrypted by a module, it is saved in the new format. Secrets encrypted in version 1.2 are unreadable by the same module in version 1.1. If you persist encrypted data to a host-mounted folder or volume, always create a backup copy of the data *before* upgrading to retain the ability to downgrade if necessary.
+* The workload API in the latest version saves encrypted secrets in a new format. If you upgrade from an older version to latest version, the existing master encryption key is imported. The workload API can read secrets saved in the prior format using the imported encryption key. However, the workload API can't write encrypted secrets in the old format. Once a secret is re-encrypted by a module, it is saved in the new format. Secrets encrypted in the latest version are unreadable by the same module in version 1.1. If you persist encrypted data to a host-mounted folder or volume, always create a backup copy of the data *before* upgrading to retain the ability to downgrade if necessary.
+* For backward compatibility when connecting devices that do not support TLS 1.2, you can configure Edge Hub to still accept TLS 1.0 or 1.1 via the [SslProtocols environment variable](https://github.com/Azure/iotedge/blob/main/doc/EnvironmentVariables.md#edgehub).  Please note that support for [TLS 1.0 and 1.1 in IoT Hub is considered legacy](/azure/iot-hub/iot-hub-tls-support) and may also be removed from Edge Hub in future releases.  To avoid future issues, use TLS 1.2 as the only TLS version when connecting to Edge Hub or IoT Hub.
+* The preview for the experimental MQTT broker in Edge Hub 1.2 has ended and is not included in Edge Hub 1.3. We are continuing to refine our plans for an MQTT broker based on feedback received. In the meantime, if you need a standards-compliant MQTT broker on IoT Edge, consider deploying an open-source broker like Mosquitto as an IoT Edge module.
Before automating any update processes, validate that it works on test machines.
It's recommended to install the micro agent with the Edge agent to enable securi
Now that the IoT Edge service running on your devices has been updated, follow the steps in this article to also [Update the runtime containers](#update-the-runtime-containers).
-## Special case: Update to a release candidate version
+# [Red Hat Enterprise Linux](#tab/rhel)
->[!NOTE]
->If you're using Windows containers or IoT Edge for Linux on Windows, this special case section does not apply.
-
-Azure IoT Edge regularly releases new versions of the IoT Edge service. Before each stable release, there is one or more release candidate (RC) versions. RC versions include all the planned features for the release, but are still going through testing and validation. If you want to test a new feature early, you can install an RC version and provide feedback through GitHub.
+IoT Edge version 1.1 isn't supported on Red Hat Enterprise Linux 8.
-Release candidate versions follow the same numbering convention of releases, but have **-rc** plus an incremental number appended to the end. You can see the release candidates in the same list of [Azure IoT Edge releases](https://github.com/Azure/azure-iotedge/releases) as the stable versions. For example, find **1.2.0-rc4**, one of the release candidates released before **1.2.0**. You can also see that RC versions are marked with **pre-release** labels.
+# [Linux on Windows](#tab/linuxonwindows)
-The IoT Edge agent and hub modules have RC versions that are tagged with the same convention. For example, **mcr.microsoft.com/azureiotedge-hub:1.2.0-rc4**.
+If you're using Windows containers or IoT Edge for Linux on Windows, this special case section does not apply.
-As previews, release candidate versions aren't included as the latest version that the regular installers target. Instead, you need to manually target the assets for the RC version that you want to test. For the most part, installing or updating to an RC version is the same as targeting any other specific version of IoT Edge.
+# [Windows](#tab/windows)
-Use the sections in this article to learn how to update an IoT Edge device to a specific version of the security subsystem or runtime modules.
+Currently, there is no support for IoT Edge version 1.3 running on Windows devices.
-If you're installing IoT Edge, rather than upgrading an existing installation, use the steps in [Offline or specific version installation](how-to-provision-single-device-linux-symmetric.md#offline-or-specific-version-installation-optional).
+ ## Next steps
iot-edge Iot Edge As Gateway https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-edge/iot-edge-as-gateway.md
description: Use Azure IoT Edge to create a transparent, opaque, or proxy gatewa
Previously updated : 03/23/2021 Last updated : 06/27/2022
For more information about how the IoT Edge hub manages communication between do
::: moniker-end
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
::: moniker range=">=iotedge-2020-11"
All devices in a transparent gateway scenario need cloud identities so they can
Child devices can only have one parent. By default, a parent can have up to 100 children. You can change this limit by setting the **MaxConnectedClients** environment variable in the parent device's edgeHub module.
-<!-- 1.2.0 -->
+<!-- iotedge-2020-11 -->
::: moniker range=">=iotedge-2020-11" IoT Edge devices can be both parents and children in transparent gateway relationships. A hierarchy of multiple IoT Edge devices reporting to each other can be created. The top node of a gateway hierarchy can have up to five generations of children. For example, an IoT Edge device can have five layers of IoT Edge devices linked as children below it. But the IoT Edge device in the fifth generation cannot have any children, IoT Edge or otherwise.
A child device needs to be able to find its parent device on the local network.
On downstream IoT devices, use the **gatewayHostname** parameter in the connection string to point to the parent device.
-<!-- 1.2.0 -->
+<!-- iotedge-2020-11 -->
::: moniker range=">=iotedge-2020-11" On downstream IoT Edge devices, use the **parent_hostname** parameter in the config file to point to the parent device.
On downstream IoT Edge devices, use the **parent_hostname** parameter in the con
Parent and child devices also need to authenticate their connections to each other. Each device needs a copy of a shared root CA certificate which the child devices use to verify that they are connecting to the proper gateway.
-<!-- 1.2.0 -->
+<!-- iotedge-2020-11 -->
::: moniker range=">=iotedge-2020-11" When multiple IoT Edge gateways connect to each other in a gateway hierarchy, all the devices in the hierarchy should use a single certificate chain.
Use the following table to see how different IoT Hub capabilities are supported
::: moniker-end
-<!-- 1.2.0 -->
+<!-- iotedge-2020-11 -->
::: moniker range=">=iotedge-2020-11"
Protocol translation supports devices that are resource constrained. Many existi
### Identity translation
-The identity translation gateway pattern builds on protocol translation, but the IoT Edge gateway also provides an IoT Hub device identity on behalf of the downstream devices. The translation module is responsible for understanding the protocol used by the downstream devices, providing them identity, and translate their messages into IoT Hub primitives. Downstream devices appear in IoT Hub as first-class devices with twins and methods. A user can interact with the devices in IoT Hub and is unaware of the intermediate gateway device.
+The identity translation gateway pattern builds on protocol translation, but the IoT Edge gateway also provides an IoT Hub device identity on behalf of the downstream devices. The translation module is responsible for understanding the protocol used by the downstream devices, providing them identity, and translating their messages into IoT Hub primitives. Downstream devices appear in IoT Hub as first-class devices with twins and methods. A user can interact with the devices in IoT Hub and is unaware of the intermediate gateway device.
Identity translation provides the benefits of protocol translation and additionally allows for full manageability of downstream devices from the cloud. All devices in your IoT solution show up in IoT Hub regardless of the protocol they use.
The following table explains how IoT Hub features are extended to downstream dev
When using the protocol translation pattern, all devices connecting through that gateway share the same cloud-to-device queue, which can contain at most 50 messages. Only use this pattern when few devices are connecting through each field gateway, and their cloud-to-device traffic is low.
-The IoT Edge runtime does not include protocol or identity translation capabilities. These patterns requires custom or third-party modules that are often specific to the hardware and protocol used. [Azure Marketplace](https://azuremarketplace.microsoft.com/marketplace/apps/category/internet-of-things?page=1&subcategories=iot-edge-modules) contains several protocol translation modules to choose from. For a sample that uses the identity translation pattern, see [Azure IoT Edge LoRaWAN Starter Kit](https://github.com/Azure/iotedge-lorawan-starterkit).
+The IoT Edge runtime does not include protocol or identity translation capabilities. These patterns require custom or third-party modules that are often specific to the hardware and protocol used. [Azure Marketplace](https://azuremarketplace.microsoft.com/marketplace/apps/category/internet-of-things?page=1&subcategories=iot-edge-modules) contains several protocol translation modules to choose from. For a sample that uses the identity translation pattern, see [Azure IoT Edge LoRaWAN Starter Kit](https://github.com/Azure/iotedge-lorawan-starterkit).
## Next steps
iot-edge Iot Edge Certs https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-edge/iot-edge-certs.md
IoT Edge certificates are used by the modules and downstream IoT devices to veri
This article explains how IoT Edge certificates can work in production, development, and test scenarios.
-<!--1.2-->
+<!--iotedge-2020-11-->
:::moniker range=">=iotedge-2020-11"
-## Changes in version 1.2
+## Changes in version 1.2 and later
* The **device CA certificate** was renamed as **edge CA certificate**. * The **workload CA certificate** was deprecated. Now the IoT Edge security manager generates the IoT Edge hub server certificate directly from the edge CA certificate, without the intermediate workload CA certificate between them.
The following figure illustrates IoT Edge's usage of certificates. There may be
:::moniker-end
-<!--1.2-->
+<!--iotedge-2020-11-->
:::moniker range=">=iotedge-2020-11" :::image type="content" source="./media/iot-edge-certs/iot-edge-certs-general-1-2.png" alt-text="Diagram of typical IoT Edge certificate relationships.":::
The purpose of this "workload" intermediate certificate is to separate concerns
:::moniker-end
-<!--1.2-->
+<!--iotedge-2020-11-->
:::moniker range=">=iotedge-2020-11" ### Edge CA certificate
The IoT Edge hub server certificate is the actual certificate presented to leaf
>[!Tip] >Since the IoT Edge hub server certificate uses the device's hostname property as its common name, no other certificates in the chain should use the same common name.
-<!--1.2-->
+<!--iotedge-2020-11-->
:::moniker range=">=iotedge-2020-11" The [IoT Edge Security Manager](iot-edge-security-manager.md) generates the IoT Edge hub certificate, the first on the "operator" side of the process, when IoT Edge first starts. This certificate is generated from and signed by the edge CA certificate. :::moniker-end
Because manufacturing and operation processes are separated, consider the follow
* Because the device CA certificate is used by the IoT Edge security daemon to generate the final IoT Edge certificates, it must itself be a signing certificate, meaning it has certificate signing capabilities. Applying "V3 Basic constraints CA:True" to the device CA certificate automatically sets up the required key usage properties. :::moniker-end
-<!--1.2-->
+<!--iotedge-2020-11-->
:::moniker range=">=iotedge-2020-11" * With any certificate-based process, the root CA certificate and all intermediate CA certificates should be secured and monitored during the entire process of rolling out an IoT Edge device. The IoT Edge device manufacturer should have strong processes in place for proper storage and usage of their intermediate certificates. In addition, the edge CA certificate should be kept in as secure storage as possible on the device itself, preferably a hardware security module.
You can see the hierarchy of certificate depth represented in the screenshot:
| IoT Edge Hub Server Certificate | iotedgegw.local (matches the 'hostname' from the config file) | :::moniker-end
-<!--1.2-->
+<!--iotedge-2020-11-->
:::moniker range=">=iotedge-2020-11" ![Screenshot of the certificate hierarchy at each level](./media/iot-edge-certs/iot-edge-cert-chain-1-2.png)
iot-edge Iot Edge For Linux On Windows Security https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-edge/iot-edge-for-linux-on-windows-security.md
The EFLOW virtual machine is built on a three-point comprehensive security platf
:::moniker-end <!-- end 1.1 -->
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" The EFLOW virtual machine is built on a four-point comprehensive security platform: 1. Servicing updates
The EFLOW virtual machine is built on a four-point comprehensive security platfo
1. Firewall lockdown 1. DM-Verity :::moniker-end
-<!-- end 1.2 -->
+<!-- end iotedge-2020-11 -->
### Servicing updates When security vulnerabilities arise, CBL-Mariner makes the latest security patches and fixes available for being serviced through ELOW monthly updates. The virtual machine has no package manager, so it's not possible to manually download and install RPM packages. All updates to the virtual machine are installed using EFLOW )
Because you may need write access to `/etc`, `/home`, `/root`, `/var` for specif
:::moniker-end <!-- end 1.1 -->
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" ![EFLOW CR partition layout](./media/iot-edge-for-linux-on-windows-security/eflow-cr-partition-layout.png)
Because you may need write access to `/etc`, `/home`, `/root`, `/var` for specif
| Data | 2 GB to 2 TB | Stateful partition for storing persistent data across updates. Expandable according to the deployment configuration | :::moniker-end
-<!-- end 1.2 -->
+<!-- end iotedge-2020-11 -->
>[!NOTE] >The partition layout represents the logical disk size and does not indicate the physical space the virtual machine will occupy on the host OS disk.ΓÇï
By default, the EFLOW virtual machine uses [*iptables*](https://git.netfilter.or
![EFLOW iptables default](./media/iot-edge-for-linux-on-windows-security/default-iptables-output.png)
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" ### Verified boot
The EFLOW virtual machine supports **Verified boot** through the included *devic
By default, this feature is enabled in the virtual machine, and can't be turned off. For more information, see [dm-verity](https://www.kernel.org/doc/html/latest/admin-guide/device-mapper/verity.html#). :::moniker-end
-<!-- end 1.2 -->
+<!-- end iotedge-2020-11 -->
## Trusted platform module (TPM) [Trusted platform module (TPM)](/windows/security/information-protection/tpm/trusted-platform-module-top-node) technology is designed to provide hardware-based, security-related functions. A TPM chip is a secure crypto-processor that is designed to carry out cryptographic operations. The chip includes multiple physical security mechanisms to make it tamper resistant, and malicious software is unable to tamper with the security functions of the TPM.
EFLOW provides multiple ways to interact with the virtual machine by exposing a
All communications between the Windows host operating system and the EFLOW virtual machine required by the PowerShell cmdlets are done using an SSH channel. By default, the virtual machine SSH service won't allow authentication via username and password, and it's limited to certificate authentication. The certificate is created during EFLOW deployment process, and is unique for each EFLOW installation. Furthermore, to prevent SSH brute force attacks, the virtual machine will block an IP address if it attempts more than three connections per minute to SSH service.
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" In the EFLOW Continuous Release (CR) version, we introduced a change in the transport channel used to establish the SSH connection. Originally, SSH service runs on TCP port 22, which can be accessed by all external devices in the same network using a TCP socket to that specific port. For security reasons, EFLOW CR runs the SSH service over Hyper-V sockets instead of normal TCP sockets. All communication over Hyper-V sockets runs between the Windows host OS and the EFLOW virtual machine, without using networking. This limits the access of the SSH service, restricting connections to only the Windows host OS. For more information, see [Hyper-V sockets](/virtualization/hyper-v-on-windows/user-guide/make-integration-service). :::moniker-end
-<!-- end 1.2 -->
+<!-- end iotedge-2020-11 -->
## Next steps
iot-edge Iot Edge For Linux On Windows Updates https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-edge/iot-edge-for-linux-on-windows-updates.md
Previously updated : 03/14/2022 Last updated : 07/05/2022 # Update IoT Edge for Linux on Windows As the IoT Edge for Linux on Windows (EFLOW) application releases new versions, you'll want to update your IoT Edge devices for the latest features and security improvements. This article provides information about how to update your IoT Edge for Linux on Windows devices when a new version is available.
-With IoT Edge for Linux on Windows, IoT Edge runs in a Linux virtual machine hosted on a Windows device. This virtual machine is pre-installed with IoT Edge, and has no package manager, so you canΓÇÖt manually update or change any of the VM components. Instead, the virtual machine is managed with Microsoft Update to keep the components up to date automatically.
+With IoT Edge for Linux on Windows, IoT Edge runs in a Linux virtual machine hosted on a Windows device. This virtual machine is pre-installed with IoT Edge, and has no package manager, so you can't manually update or change any of the VM components. Instead, the virtual machine is managed with Microsoft Update to keep the components up to date automatically.
The EFLOW virtual machine is designed to be reliably updated via Microsoft Update. The virtual machine operating system has an A/B update partition scheme to utilize a subset of those to make each update safe and enable a roll-back to a previous version if anything goes wrong during the update process.
EFLOW updates are sequential and you'll require to update to every version in or
To find the latest version of Azure IoT Edge for Linux on Windows, see [EFLOW releases](https://aka.ms/AzEFLOW-Releases).
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" >[!IMPORTANT] >This is a Public Preview version of [Azure IoT Edge for Linux on Windows continuous release (EFLOW CR)](./version-history.md), not intended for production use. A clean install may be required for production use once the final General Availability (GA) release is available. > >To find out if you're currently using the continuous release version, navigate to **Settings** > **Apps** on your Windows device. Find **Azure IoT Edge** in the list of apps and features. If your listed version is 1.2.x.y, you are running the continuous release version.
-<!-- end 1.2 -->
+<!-- end iotedge-2020-11 -->
:::moniker-end ## Update using Microsoft Update
In some scenarios with restricted or limited internet connectivity, you may want
<!-- end 1.1 --> :::moniker-end
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" 1. Check the current EFLOW installed version. Open **Settings**, select **Apps** -> **Apps & features** search for *Azure IoT Edge*.
In some scenarios with restricted or limited internet connectivity, you may want
1. Extract *AzureIoTEdge.msi* from the downloaded *.cab* file. 1. Install the extracted *AzureIoTEdge.msi*.
-<!-- end 1.2 -->
+<!-- end iotedge-2020-11 -->
:::moniker-end
iot-edge Iot Edge For Linux On Windows https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-edge/iot-edge-for-linux-on-windows.md
Previously updated : 02/09/2022 Last updated : 07/05/2022 # What is Azure IoT Edge for Linux on Windows Azure IoT Edge for Linux on Windows (EFLOW) allows you to run containerized Linux workloads alongside Windows applications in Windows deployments. Businesses that rely on Windows to power their edge devices and solutions can now take advantage of the cloud-native analytics solutions being built in Linux.
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" >[!NOTE] >The latest version of [Azure IoT Edge for Linux on Windows continuous release (EFLOW CR)](./version-history.md), based on IoT Edge version 1.2, is in [public preview](https://azure.microsoft.com/support/legal/preview-supplemental-terms/). A clean installation may be required for devices going into production use once the general availability (GA) release is available. For more information, see [EFLOW continuous release](https://github.com/Azure/iotedge-eflow/wiki/EFLOW-Continuous-Release). :::moniker-end
-<!-- end 1.2 -->
+<!-- end iotedge-2020-11 -->
Azure IoT Edge for Linux on Windows works by running a Linux virtual machine on a Windows device. The Linux virtual machine comes pre-installed with the Azure IoT Edge runtime. Any Azure IoT Edge modules deployed to the device run inside the virtual machine. Meanwhile, Windows applications running on the Windows host device can communicate with the modules running in the Linux virtual machine.
Azure IoT Edge for Linux on Windows uses the following components to enable Linu
:::moniker-end <!-- end 1.1 -->
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" * **A Linux virtual machine running Azure IoT Edge**: A Linux virtual machine, based on Microsoft's first party [CBL-Mariner](https://github.com/microsoft/CBL-Mariner) operating system, is built with the Azure IoT Edge runtime and validated as a tier 1 supported environment for Azure IoT Edge workloads.
Azure IoT Edge for Linux on Windows uses the following components to enable Linu
[ ![Windows and the Linux VM run in parallel, while the Windows Admin Center controls both components](./media/iot-edge-for-linux-on-windows/architecture-eflow1-2.png) ](./media/iot-edge-for-linux-on-windows/architecture-eflow1-2.png#lightbox) :::moniker-end
-<!-- end 1.2 -->
+<!-- end iotedge-2020-11 -->
Bi-directional communication between Windows process and the Linux virtual machine means that Windows processes can provide user interfaces or hardware proxies for workloads run in the Linux containers.
iot-edge Iot Edge Limits And Restrictions https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-edge/iot-edge-limits-and-restrictions.md
Title: Limits and restrictions - Azure IoT Edge | Microsoft Docs
description: Description of the limits and restrictions when using IoT Edge. Previously updated : 01/28/2022 Last updated : 07/05/2022
# Understand Azure IoT Edge limits and restrictions This article explains the limits and restrictions when using IoT Edge.
Changes made in `config.toml` to `edgeAgent` environment variables like the `hos
<!-- 1.1 --> :::moniker range="iotedge-2018-06" ### AMQP transport
-When using Node.js to send device to cloud messages with the AMQP protocol to an IoT Edge runtime, messages stop sending after 2047 messages. No error is thrown and the messages eventually start sending again, then cycle repeats. If the client connects directly to Azure IoT Hub, there's no issue with sending messages. This issue has been fixed in IoT Edge 1.2.
+When using Node.js to send device to cloud messages with the AMQP protocol to an IoT Edge runtime, messages stop sending after 2047 messages. No error is thrown and the messages eventually start sending again, then cycle repeats. If the client connects directly to Azure IoT Hub, there's no issue with sending messages. This issue has been fixed in IoT Edge 1.2 and later.
:::moniker-end <!-- end 1.1 -->
iot-edge Iot Edge Runtime https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-edge/iot-edge-runtime.md
description: Learn how the IoT Edge runtime manages modules, security, communica
Previously updated : 11/10/2020 Last updated : 06/30/2022
The IoT Edge runtime is responsible for the following functions on IoT Edge devi
* Manage communication between modules on an IoT Edge device. * Manage communication between an IoT Edge device and the cloud.
-<!-- 1.2.0 -->
+<!-- iotedge-2020-11 -->
::: moniker range=">=iotedge-2020-11" * Manage communication between IoT Edge devices. ::: moniker-end ![Runtime communicates insights and module health to IoT Hub](./media/iot-edge-runtime/Pipeline.png)
-The responsibilities of the IoT Edge runtime fall into two categories: communication and module management. These two roles are performed by two components that are part of the IoT Edge runtime. The *IoT Edge agent* deploys and monitors the modules, while the *IoT Edge hub* is responsible for communication.
+The responsibilities of the IoT Edge runtime fall into two categories: communication and module management. These two roles are performed by two components that are part of the IoT Edge runtime. The *IoT Edge agent* deploys and monitors the modules, while the *IoT Edge hub* is responsible for communication.
Both the IoT Edge agent and the IoT Edge hub are modules, just like any other module running on an IoT Edge device. They're sometimes referred to as the *runtime modules*. ## IoT Edge agent
-The IoT Edge agent is one of two modules that make up the Azure IoT Edge runtime. It is responsible for instantiating modules, ensuring that they continue to run, and reporting the status of the modules back to IoT Hub. This configuration data is written as a property of the IoT Edge agent module twin.
+The IoT Edge agent is one of two modules that make up the Azure IoT Edge runtime. It's responsible for instantiating modules, ensuring that they continue to run, and reporting the status of the modules back to IoT Hub. This configuration data is written as a property of the IoT Edge agent module twin.
The [IoT Edge security daemon](iot-edge-security-manager.md) starts the IoT Edge agent on device startup. The agent retrieves its module twin from IoT Hub and inspects the deployment manifest. The deployment manifest is a JSON file that declares the modules that need to be started. Each item in the deployment manifest contains specific information about a module and is used by the IoT Edge agent for controlling the module's lifecycle. For more information about all the properties used by the IoT Edge agent to control modules, read about the [Properties of the IoT Edge agent and IoT Edge hub module twins](module-edgeagent-edgehub.md).
-The IoT Edge agent sends runtime response to IoT Hub. Here is a list of possible responses:
+The IoT Edge agent sends runtime response to IoT Hub. Here's a list of possible responses:
* 200 - OK * 400 - The deployment configuration is malformed or invalid.
The IoT Edge hub isn't a full version of IoT Hub running locally. IoT Edge hub s
### Cloud communication
-To reduce the bandwidth that your IoT Edge solution uses, the IoT Edge hub optimizes how many actual connections are made to the cloud. IoT Edge hub takes logical connections from modules or downstream devices and combines them for a single physical connection to the cloud. The details of this process are transparent to the rest of the solution. Clients think they have their own connection to the cloud even though they are all being sent over the same connection. The IoT Edge hub can either use the AMQP or the MQTT protocol to communicate upstream with the cloud, independently from protocols used by downstream devices. However, the IoT Edge hub currently only supports combining logical connections into a single physical connection by using AMQP as the upstream protocol and its multiplexing capabilities. AMQP is the default upstream protocol.
+To reduce the bandwidth that your IoT Edge solution uses, the IoT Edge hub optimizes how many actual connections are made to the cloud. IoT Edge hub takes logical connections from modules or downstream devices and combines them for a single physical connection to the cloud. The details of this process are transparent to the rest of the solution. Clients think they have their own connection to the cloud even though they're all being sent over the same connection. The IoT Edge hub can either use the AMQP or the MQTT protocol to communicate upstream with the cloud, independently from protocols used by downstream devices. However, the IoT Edge hub currently only supports combining logical connections into a single physical connection by using AMQP as the upstream protocol and its multiplexing capabilities. AMQP is the default upstream protocol.
![IoT Edge hub is a gateway between physical devices and IoT Hub](./media/iot-edge-runtime/gateway-communication.png)
-IoT Edge hub can determine whether it's connected to IoT Hub. If the connection is lost, IoT Edge hub saves messages or twin updates locally. Once a connection is reestablished, it syncs all the data. The location used for this temporary cache is determined by a property of the IoT Edge hub's module twin. The size of the cache is not capped and will grow as long as the device has storage capacity. For more information, see [Offline capabilities](offline-capabilities.md).
+IoT Edge hub can determine whether it's connected to IoT Hub. If the connection is lost, IoT Edge hub saves messages or twin updates locally. Once a connection is reestablished, it syncs all the data. The location used for this temporary cache is determined by a property of the IoT Edge hub's module twin. The size of the cache isn't capped and will grow as long as the device has storage capacity. For more information, see [Offline capabilities](offline-capabilities.md).
<!-- <1.1> --> ::: moniker range="iotedge-2018-06"
The solution developer is responsible for specifying the rules that determine ho
![Routes between modules go through IoT Edge hub](./media/iot-edge-runtime/module-endpoints-routing.png) ::: moniker-end
-<!-- <1.2> -->
+<!-- <iotedge-2020-11> -->
::: moniker range=">=iotedge-2020-11" ### Local communication
-IoT Edge hub facilitates local communication. It enables device-to-module, module-to-module, device-to-device communications by brokering messages to keep devices and modules independent from each other.
-
->[!NOTE]
-> The MQTT broker feature is in public preview with IoT Edge version 1.2. It must be explicitly enabled.
-
-The IoT Edge hub supports two brokering mechanisms:
-
-1. The [message routing features supported by IoT Hub](../iot-hub/iot-hub-devguide-messages-d2c.md) and,
-2. A general-purpose MQTT broker that meets the [MQTT standard v3.1.1](https://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html)
+IoT Edge hub facilitates local communication. It enables device-to-module and module-to-module communications by brokering messages to keep devices and modules independent from each other. The IoT Edge hub supports the [message routing features supported by IoT Hub](../iot-hub/iot-hub-devguide-messages-d2c.md).
#### Using routing
-The first brokering mechanism leverages the same routing features as IoT Hub to specify how messages are passed between devices or modules. First devices or modules specify the inputs on which they accept messages and the outputs to which they write messages. Then a solution developer can route messages between a source, e.g. outputs, and a destination, e.g. inputs, with potential filters.
+The brokering mechanism uses the same routing features as IoT Hub to specify how messages are passed between devices or modules. First devices or modules specify the inputs on which they accept messages and the outputs to which they write messages. Then a solution developer can route messages between a source (for example, outputs), and a destination (for example, inputs), with potential filters.
![Routes between modules go through IoT Edge hub](./media/iot-edge-runtime/module-endpoints-routing.png)
-Routing can be used by devices or modules built with the Azure IoT Device SDKs either via the AMQP or the MQTT protocol. All messaging IoT Hub primitives, e.g. telemetry, direct methods, C2D, twins, are supported but communication over user-defined topics is not supported.
-
-For more information about routes, see [Learn how to deploy modules and establish routes in IoT Edge](module-composition.md)
-
-#### Using the MQTT broker
-
-The second brokering mechanism is based on a standard MQTT broker. MQTT is a lightweight message transfer protocol that guarantees optimal performances on resource constrained devices and is a popular publish and subscribe standard. Devices or modules subscribe to topics to receive messages published by other devices or modules. IoT Edge hub implements its own MQTT broker that follows [the specifications of MQTT version 3.1.1](https://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html).
-
-The MQTT broker enables two additional communication patterns compared to routing: local broadcasting and point-to-point communication. Local broadcasting is useful when one device or module needs to locally alert multiple other devices or modules. Point-to-point communication enables two IoT Edge devices or two IoT devices to communicate locally without round-trip to the cloud.
+Routing can be used by devices or modules built with the Azure IoT Device SDKs using the AMQP protocol. All messaging IoT Hub primitives (for example, telemetry), direct methods, C2D, twins, are supported but communication over user-defined topics isn't supported.
-![Publish and subscribe locally with IoT Edge hub](./media/iot-edge-runtime/local-communnication-mqtt-broker.png)
+For more information about routes, see [Learn how to deploy modules and establish routes in IoT Edge](module-composition.md).
-The MQTT broker can be used by devices or modules built with either the Azure IoT Device SDKs that communicate via the MQTT protocol or any general-purpose MQTT clients. With the exception of C2D all messaging IoT Hub primitives, e.g. telemetry, direct methods, twins are supported. IoT Hub special topics used by IoT Hub primitives are supported and so are user-defined topics.
-This topic could be an IoT Hub special topic or a user-defined topic.
+Brokering mechanism features available:
-Unlike with the routing mechanism, ordering of messages is only best-effort and not guaranteed and filtering of messages is not supported by the broker. The lack of these features however enable the MQTT broker to be faster than routing.
-
-For more information about the MQTT broker, see [Publish and subscribe with IoT Edge](how-to-publish-subscribe.md)
-
-#### Comparison between brokering mechanisms
-
-Here are the features available with each brokering mechanism:
-
-|Features | Routing | MQTT broker |
-||||
-|D2C telemetry | &#10004; | |
-|Local telemetry | &#10004; | &#10004; |
-|DirectMethods | &#10004; | &#10004; |
-|Twin | &#10004; | &#10004; |
-|C2D for devices | &#10004; | |
-|Ordering | &#10004; | |
-|Filtering | &#10004; | |
-|User-defined topics | | &#10004; |
-|Device-to-Device | | &#10004; |
-|Local broadcasting | | &#10004; |
-|Performance | | &#10004; |
+|Features | Routing |
+|||
+|D2C telemetry | &#10004; |
+|Local telemetry | &#10004; |
+|DirectMethods | &#10004; |
+|Twin | &#10004; |
+|C2D for devices | &#10004; |
+|Ordering | &#10004; |
+|Filtering | &#10004; |
+|User-defined topics | |
+|Device-to-Device | |
+|Local broadcasting | |
### Connecting to the IoT Edge hub
When a client connects to the IoT Edge hub, the following happens:
#### Secure connections (TLS)
-By default, the IoT Edge hub only accepts connections secured with Transport Layer Security (TLS), e.g. encrypted connections that a third party cannot decrypt.
+By default, the IoT Edge hub only accepts connections secured with Transport Layer Security (TLS), for example, encrypted connections that a third party can't decrypt.
-If a client connects on port 8883 (MQTTS) or 5671 (AMQPS) to the IoT Edge hub, a TLS channel must be built. During the TLS handshake, the IoT Edge hub sends its certificate chain that the client needs to validate. In order to validate the certificate chain, the root certificate of the IoT Edge hub must be installed as a trusted certificate on the client. If the root certificate is not trusted, the client library will be rejected by the IoT Edge hub with a certificate verification error.
+If a client connects on port 8883 (MQTTS) or 5671 (AMQPS) to the IoT Edge hub, a TLS channel must be built. During the TLS handshake, the IoT Edge hub sends its certificate chain that the client needs to validate. In order to validate the certificate chain, the root certificate of the IoT Edge hub must be installed as a trusted certificate on the client. If the root certificate isn't trusted, the client library will be rejected by the IoT Edge hub with a certificate verification error.
-The steps to follow to install this root certificate of the broker on device clients are described in the [transparent gateway](how-to-create-transparent-gateway.md) and in the [prepare a downstream device](how-to-connect-downstream-device.md#prepare-a-downstream-device) documentation. Modules can use the same root certificate as the IoT Edge hub by leveraging the IoT Edge daemon API.
+The steps to follow to install this root certificate of the broker on device clients are described in the [transparent gateway](how-to-create-transparent-gateway.md) and in the [prepare a downstream device](how-to-connect-downstream-device.md#prepare-a-downstream-device) documentation. Modules can use the same root certificate as the IoT Edge hub by using the IoT Edge daemon API.
#### Authentication
-The IoT Edge Hub only accepts connections from devices or modules that have an IoT Hub identity, e.g. that have been registered in IoT Hub and have one of the three client authentication methods supported by IoT hub to provide prove their identity: [Symmetric keys authentication](how-to-authenticate-downstream-device.md#symmetric-key-authentication), [X.509 self-signed authentication](how-to-authenticate-downstream-device.md#x509-self-signed-authentication), [X.509 CA signed authentication](how-to-authenticate-downstream-device.md#x509-ca-signed-authentication). These IoT Hub identities can be verified locally by the IoT Edge hub so connections can still be made while offline.
+The IoT Edge Hub only accepts connections from devices or modules that have an IoT Hub identity, for example that have been registered in IoT Hub and have one of the three client authentication methods supported by IoT hub to provide prove their identity: [Symmetric keys authentication](how-to-authenticate-downstream-device.md#symmetric-key-authentication), [X.509 self-signed authentication](how-to-authenticate-downstream-device.md#x509-self-signed-authentication), [X.509 CA signed authentication](how-to-authenticate-downstream-device.md#x509-ca-signed-authentication). These IoT Hub identities can be verified locally by the IoT Edge hub so connections can still be made while offline.
-Notes:
-
-* IoT Edge modules currently only support symmetric key authentication.
-* MQTT clients with only local username and passwords are not accepted by the IoT Edge hub MQTT broker, they must use IoT Hub identities.
+IoT Edge modules currently only support symmetric key authentication.
#### Authorization
-Once authenticated, the IoT Edge hub has two ways to authorize client connections:
-
-* By verifying that a client belongs to its set of trusted clients defined in IoT Hub. The set of trusted clients is specified by setting up parent/child or device/module relationships in IoT Hub. When a module is created in IoT Edge, a trust relationship is automatically established between this module and its IoT Edge device. This is the only authorization model supported by the routing brokering mechanism.
-* By setting up an authorization policy. This authorization policy is a document listing all the authorized client identities that can access resources on the IoT Edge hub. This is the primary authorization model used by the IoT Edge hub MQTT broker, though parent/child and device/module relationships can also be understood by the MQTT broker for IoT Hub topics.
+By verifying that a client belongs to its set of trusted clients defined in IoT Hub. The set of trusted clients is specified by setting up parent/child or device/module relationships in IoT Hub. When a module is created in IoT Edge, a trust relationship is automatically established between this module and its IoT Edge device. This is the only authorization model supported by the routing brokering mechanism.
### Remote configuration
-The IoT Edge hub is entirely controlled by the cloud. It gets its configuration from IoT Hub via its [module twin](iot-edge-modules.md#module-twins). It includes:
-
-* Routes configuration
-* Authorization policies
-* MQTT bridge configuration
+The IoT Edge hub is entirely controlled by the cloud. It gets its configuration from IoT Hub via its [module twin](iot-edge-modules.md#module-twins). The twin contains a desired property called routes that declares how messages are passed within a deployment. For more information on routes, see [declare routes](module-composition.md#declare-routes).
-Additionally, several configuration can be done by setting up [environment variables on the IoT Edge hub](https://github.com/Azure/iotedge/blob/master/doc/EnvironmentVariables.md).
-<!-- </1.2> -->
+Additionally, several configurations can be done by setting up [environment variables on the IoT Edge hub](https://github.com/Azure/iotedge/blob/master/doc/EnvironmentVariables.md).
::: moniker-end
+<!-- end iotedge-2020-11 -->
## Runtime quality telemetry
-IoT Edge collects anonymous telemetry from the host runtime and system modules to improve product quality. This information is called runtime quality telemetry. The collected telemetry is periodically sent as device-to-cloud messages to IoT Hub from the IoT Edge agent. These messages do not appear in customer's regular telemetry and do not consume any message quota.
+IoT Edge collects anonymous telemetry from the host runtime and system modules to improve product quality. This information is called runtime quality telemetry. The collected telemetry is periodically sent as device-to-cloud messages to IoT Hub from the IoT Edge agent. These messages don't appear in customer's regular telemetry and don't consume any message quota.
The IoT Edge agent and hub generate metrics that you can collect to understand device performance. A subset of these metrics is collected by the IoT Edge Agent as part of runtime quality telemetry. The metrics collected for runtime quality telemetry are labeled with the tag `ms_telemetry`. For information about all the available metrics, see [Access built-in metrics](how-to-access-built-in-metrics.md).
iot-edge Iot Edge Security Manager https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-edge/iot-edge-security-manager.md
keywords: security, secure element, enclave, TEE, IoT Edge
Previously updated : 09/17/2021 Last updated : 05/27/2022
The security manager abstracts the secure silicon hardware on an IoT Edge device
![Azure IoT Edge security manager](media/edge-security-manager/iot-edge-security-manager.png) :::moniker-end
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" The security manager abstracts the secure silicon hardware on an IoT Edge device and provides an extensibility framework for additional security services.
The security manager abstracts the secure silicon hardware on an IoT Edge device
The IoT Edge security manager aims to defend the integrity of the IoT Edge device and all inherent software operations. The security manager transitions trust from underlying hardware root of trust hardware (if available) to bootstrap the IoT Edge runtime and monitor ongoing operations. The IoT Edge security manager is software working along with secure silicon hardware (where available) to help deliver the highest security assurances possible.
-<!--1.2-->
+<!--iotedge-2020-11-->
:::moniker range=">=iotedge-2020-11" Additionally, the IoT Edge security manager provides a safe framework for security service extensions through host-level modules. These services include security monitoring and updates that require agents inside the device with privileged access to some components of the device. The extensibility framework ensures that such integrations consistently uphold overall system security. :::moniker-end
The responsibilities of the IoT Edge security manager include, but aren't limite
* Provision IoT Edge modules with unique identities. :::moniker-end
-<!--1.2-->
+<!--iotedge-2020-11-->
:::moniker range=">=iotedge-2020-11" * Bootstrap the Azure IoT Edge device.
The IoT Edge security manager consists of three components:
* A hardware silicon root of trust or HSM (optional, but highly recommended) :::moniker-end
-<!--1.2-->
+<!--iotedge-2020-11-->
:::moniker range=">=iotedge-2020-11" * The IoT Edge module runtime * Hardware security module (HSM) abstractions through standard implementations such as PKCS#11 and Trusted Platform Module (TPM) * A hardware silicon root of trust or HSM (optional, but highly recommended)
-## Changes in version 1.2
+## Changes in version 1.2 and later
In versions 1.0 and 1.1 of IoT Edge, a component called the **security daemon** was responsible for the logical security operations of the security manager. In the update to version 1.2, several key responsibilities were delegated to the [Azure IoT Identity Service](https://azure.github.io/iot-identity-service/) security subsystem. Once these security-based tasks were removed from the security daemon, its name no longer made sense. To better reflect the work that this component does in version 1.2 and beyond, we renamed it to the **module runtime**. :::moniker-end
In versions 1.0 and 1.1 of IoT Edge, a component called the **security daemon**
The IoT Edge security daemon is responsible for the logical security operations of the security manager. It represents a significant portion of the trusted computing base of the IoT Edge device. :::moniker-end
-<!--1.2-->
+<!--iotedge-2020-11-->
:::moniker range=">=iotedge-2020-11" ## The IoT Edge module runtime
-The IoT Edge module runtime delegates trust from the [Azure IoT Identity Service](https://azure.github.io/iot-identity-service/) security subsystem to protect the IoT Edge container runtime environment. The module runtime is responsible for the logical security operations of the security manager. It represents a significant portion of the trusted computing base of the IoT Edge device. The module runtime uses security services from the IoT Identity Service, which is in turn hardened by the device manufacturer's choice of hardware security module (HSM). We strongly recommend the use of HSMs for device hardening.
+The IoT Edge module runtime delegates trust from the [Azure IoT Identity Service](https://azure.github.io/iot-identity-service/) security subsystem to protect the IoT Edge container runtime environment. One service, now delegated to Azure IoT Identity Service, is the automated certificate enrollment and renewal service through an EST server. To see how this works and create a sample EST server made for an IoT Edge device, try the [Configure Enrollment over Secure Transport Server for Azure IoT Edge](tutorial-configure-est-server.md) tutorial.
+
+The module runtime is responsible for the logical security operations of the security manager. It represents a significant portion of the trusted computing base of the IoT Edge device. The module runtime uses security services from the IoT Identity Service, which is in turn hardened by the device manufacturer's choice of hardware security module (HSM). We strongly recommend the use of HSMs for device hardening.
:::moniker-end ### Design principles
Two kinds of execution environments exist to use hardware root of trust:
For devices using secure enclaves as hardware root of trust, sensitive logic within the IoT Edge security daemon should be inside the enclave. Non-sensitive portions of the security daemon can be outside of the TEE. In all cases, we strongly recommend that original design manufacturers (ODM) and original equipment manufacturers (OEM) extend trust from their HSM to measure and defend the integrity of the IoT Edge security daemon at boot and runtime. :::moniker-end
-<!--1.2-->
+<!--iotedge-2020-11-->
:::moniker range=">=iotedge-2020-11" For devices using secure enclaves as hardware root of trust, sensitive logic within the IoT Edge module runtime should be inside the enclave. Non-sensitive portions of the module runtime can be outside of the TEE. In all cases, we strongly recommend that original design manufacturers (ODM) and original equipment manufacturers (OEM) extend trust from their HSM to measure and defend the integrity of the IoT Edge module runtime at boot and runtime. :::moniker-end
For devices using secure enclaves as hardware root of trust, sensitive logic wit
Another core principle for the IoT Edge security daemon is to minimize churn. For the highest level of trust, the IoT Edge security daemon can tightly couple with the device hardware root of trust and operate as native code. In these cases, it's common to update the IoT Edge software through the hardware root of trust's secure update paths rather than the operating system's update mechanisms, which can be challenging. Security renewal is recommended for IoT devices, but excessive update requirements or large update payloads can expand the threat surface in many ways. For example, you may be tempted to skip some updates in order to maximize device availability. As such, the design of the IoT Edge security daemon is concise to keep the well-isolated trusted computing base small to encourage frequent updates. :::moniker-end
-<!--1.2-->
+<!--iotedge-2020-11-->
:::moniker range=">=iotedge-2020-11" Another core principle for the IoT Edge module runtime is to minimize churn. For the highest level of trust, the IoT Edge module runtime can tightly couple with the device hardware root of trust and operate as native code. In these cases, it's common to update the IoT Edge software through the hardware root of trust's secure update paths rather than the operating system's update mechanisms, which can be challenging. Security renewal is recommended for IoT devices, but excessive update requirements or large update payloads can expand the threat surface in many ways. For example, you may be tempted to skip some updates in order to maximize device availability. As such, the design of the IoT Edge module runtime is concise to keep the well-isolated trusted computing base small to encourage frequent updates. :::moniker-end
The IoT Edge security daemon takes advantage of any available hardware root of t
![Azure IoT Edge security daemon architecture](media/edge-security-manager/iot-edge-security-daemon.png) :::moniker-end
-<!--1.2-->
+<!--iotedge-2020-11-->
:::moniker range=">=iotedge-2020-11" The IoT Edge module runtime takes advantage of any available hardware root of trust technology for security hardening. It also allows for split-world operation between a standard/rich execution environment (REE) and a trusted execution environment (TEE) when hardware technologies offer trusted execution environments. Role-specific interfaces enable the major components of IoT Edge to assure the integrity of the IoT Edge device and its operations.
These properties are used by the workload API (described below) to verify that t
The management API is a privileged API, callable only from the IoT Edge agent. Since the IoT Edge security daemon bootstraps and starts the IoT Edge agent, it verifies that the IoT Edge agent hasn't been tampered with, then it can create an implicit registration for the IoT Edge agent. The same attestation process that the workload API uses also restricts access to the management API to only the IoT Edge agent. :::moniker-end
-<!--1.2-->
+<!--iotedge-2020-11-->
:::moniker range=">=iotedge-2020-11" The management API is called by the IoT Edge agent when creating/starting/stopping/removing an IoT Edge module. The module runtime stores "registrations" for all active modules. These registrations map a module's identity to some properties of the module. For example, these module properties include the process identifier (pid) of the process running in the container and the hash of the docker container's contents.
The workload API is accessible to all modules. It provides proof of identity, ei
The IoT Edge security daemon uses an attestation process to guard this API. When a module calls this API, the security daemon attempts to find a registration for the identity. If successful, it uses the properties of the registration to measure the module. If the result of the measurement process matches the registration, a new proof of identity is generated. The corresponding CA certificates (trust bundle) are returned to the module. The module uses this certificate to connect to IoT Hub, other modules, or start a server. When the signed token or certificate nears expiration, it's the responsibility of the module to request a new certificate. :::moniker-end
-<!--1.2-->
+<!--iotedge-2020-11-->
:::moniker range=">=iotedge-2020-11" The IoT Edge module runtime uses an attestation process to guard this API. When a module calls this API, the module runtime attempts to find a registration for the identity. If successful, it uses the properties of the registration to measure the module. If the result of the measurement process matches the registration, a new proof of identity is generated. The corresponding CA certificates (trust bundle) are returned to the module. The module uses this certificate to connect to IoT Hub, other modules, or start a server. When the signed token or certificate nears expiration, it's the responsibility of the module to request a new certificate. :::moniker-end
The IoT Edge module runtime uses an attestation process to guard this API. When
Microsoft maintains the main code base for the [IoT Edge security daemon on GitHub](https://github.com/Azure/iotedge/tree/release/1.1/edgelet). :::moniker-end
-<!--1.2-->
+<!--iotedge-2020-11-->
:::moniker range=">=iotedge-2020-11" Microsoft maintains the main code base for the [IoT Edge module runtime](https://github.com/Azure/iotedge/tree/master/edgelet) and the [Azure IoT identity service](https://github.com/Azure/iot-identity-service) on GitHub.
When you read the IoT Edge codebase, remember that the **module runtime** evolve
Installation and updates of the IoT Edge security daemon are managed through the operating system's package management system. IoT Edge devices with hardware root of trust should provide additional hardening to the integrity of the daemon by managing its lifecycle through the secure boot and updates management systems. Device makers should explore these avenues based on their respective device capabilities. :::moniker-end
-<!--1.2-->
+<!--iotedge-2020-11-->
:::moniker range=">=iotedge-2020-11" Installation and updates of the IoT Edge module runtime are managed through the operating system's package management system. IoT Edge devices with hardware root of trust should provide additional hardening to the integrity of the module runtime by managing its lifecycle through the secure boot and updates management systems. Device makers should explore these avenues based on their respective device capabilities. :::moniker-end
Installation and updates of the IoT Edge module runtime are managed through the
The IoT Edge runtime tracks and reports the version of the IoT Edge security daemon. The version is reported as the *runtime.platform.version* attribute of the IoT Edge agent module reported property. :::moniker-end
-<!--1.2-->
+<!--iotedge-2020-11-->
:::moniker range=">=iotedge-2020-11" The IoT Edge runtime tracks and reports the version of the IoT Edge module runtime. The version is reported as the *runtime.platform.version* attribute of the IoT Edge agent module reported property. :::moniker-end
The IoT Edge runtime tracks and reports the version of the IoT Edge module runti
The hardware security module platform abstraction layer (HSM PAL) abstracts all root of trust hardware to isolate the developer or user of IoT Edge from their complexities. It includes a combination of application programming interface (API) and trans-domain communication procedures, for example communication between a standard execution environment and a secure enclave. The actual implementation of the HSM PAL depends on the specific secure hardware in use. Its existence enables the use of virtually any secure silicon hardware. :::moniker-end
-<!--1.2-->
+<!--iotedge-2020-11-->
:::moniker range=">=iotedge-2020-11" The IoT Edge security manager implements the Trusted Platform Module and PKCS#11 interface standards for integrating hardware security modules (HSMs). With these standards, virtually any HSM, including those with proprietary interfaces, can be integrated. We strongly recommend using HSMs for security hardening. :::moniker-end
iot-edge Module Development https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-edge/module-development.md
Azure IoT Edge modules can connect with other Azure services and contribute to y
## IoT Edge runtime environment The IoT Edge runtime provides the infrastructure to integrate the functionality of multiple IoT Edge modules and to deploy them onto IoT Edge devices. Any program can be packaged as an IoT Edge module. To take full advantage of IoT Edge communication and management functionalities, a program running in a module can use the Azure IoT Device SDK to connect to the local IoT Edge hub.
-Modules can also use any MQTT client to connect to the local IoT Edge hub MQTT broker.
### Packaging your program as an IoT Edge module
The IoT Edge hub provides two main functionalities: proxy to IoT Hub, and local
Connecting to the local IoT Edge hub from a module involves the same connection steps as for any clients. For more information, see [Connecting to the IoT Edge hub](iot-edge-runtime.md#connecting-to-the-iot-edge-hub).
-To use IoT Edge routing over AMQP or MQTT, you can use the ModuleClient from the Azure IoT SDK. Create a ModuleClient instance to connect your module to the IoT Edge hub running on the device, similar to how DeviceClient instances connect IoT devices to IoT Hub. For more information about the ModuleClient class and its communication methods, see the API reference for your preferred SDK language: [C#](/dotnet/api/microsoft.azure.devices.client.moduleclient), [C](/azure/iot-hub/iot-c-sdk-ref/iothub-module-client-h), [Python](/python/api/azure-iot-device/azure.iot.device.iothubmoduleclient), [Java](/java/api/com.microsoft.azure.sdk.iot.device.moduleclient), or [Node.js](/javascript/api/azure-iot-device/moduleclient).
-
-<!-- <1.2> -->
-
-To use IoT Edge MQTT broker, you need to bring your own MQTT client and initiate the connection yourself with information that you retrieve from the IoT Edge daemon workload API. <!--Need to add details here-->
-
-For more information about choosing between routing or publishing/subscribing with the MQTT broker, see [Local communication](iot-edge-runtime.md#local-communication).
-
-### MQTT broker primitives
-
-#### Send a message on a user-defined topic
-
-With the IoT Edge MQTT broker, you can publish messages on any user-defined topics. To do so, authorize your module to publish on specific topics then get a token from the workload API to use as a password when connecting to the MQTT broker, and finally publish messages on the authorized topics with the MQTT client of your choice.
-
-#### Receive messages on a user-defined topic
-
-With the IoT Edge MQTT broker, receiving messages is similar. First make sure that your module is authorized to subscribe to specific topics, then get a token from the workload API to use as a password when connecting to the MQTT broker, and finally subscribe to messages on the authorized topics with the MQTT client of your choice.
-
-> [!NOTE]
-> IoT Edge MQTT broker (currently in preview) will not move to general availability and will be removed from the future version of IoT Edge Hub. We appreciate the feedback we received on the preview, and we are continuing to refine our plans for an MQTT broker. In the meantime, if you need a standards-compliant MQTT broker on IoT Edge, consider deploying an open-source broker like [Mosquitto](https://mosquitto.org/) as an IoT Edge module.
-
+To use IoT Edge routing over AMQP, you can use the ModuleClient from the Azure IoT SDK. Create a ModuleClient instance to connect your module to the IoT Edge hub running on the device, similar to how DeviceClient instances connect IoT devices to IoT Hub. For more information about the ModuleClient class and its communication methods, see the API reference for your preferred SDK language: [C#](/dotnet/api/microsoft.azure.devices.client.moduleclient), [C](/azure/iot-hub/iot-c-sdk-ref/iothub-module-client-h), [Python](/python/api/azure-iot-device/azure.iot.device.iothubmoduleclient), [Java](/java/api/com.microsoft.azure.sdk.iot.device.moduleclient), or [Node.js](/javascript/api/azure-iot-device/moduleclient).
### IoT Hub primitives
When writing a module, you can connect to the IoT Edge hub and use IoT Hub primi
An IoT Edge module can send messages to the cloud via the IoT Edge hub that acts as a local broker and propagates messages to the cloud. To enable complex processing of device-to-cloud messages, an IoT Edge module can also intercept and process messages sent by other modules or devices to its local IoT Edge hub and send new messages with processed data. Chains of IoT Edge modules can thus be created to build local processing pipelines.
-To send device-to-cloud telemetry messages using routing, use the ModuleClient of the Azure IoT SDK. With the Azure IoT SDK, each module has the concept of module *input* and *output* endpoints, which map to special MQTT topics. Use the `ModuleClient.sendMessageAsync` method and it will send messages on the output endpoint of your module. Then configure a route in edgeHub to send this output endpoint to IoT Hub.
-
-<!-- <1.2> -->
-
-Sending device-to-cloud telemetry messages with the MQTT broker is similar to publishing messages on user-defined topics, but using the following IoT Hub special topic for your module: `devices/<device_name>/modules/<module_name>/messages/events`. Authorizations must be set up appropriately. The MQTT bridge must also be configured to forward the messages on this topic to the cloud.
-
+To send device-to-cloud telemetry messages using routing, use the ModuleClient of the Azure IoT SDK. With the Azure IoT SDK, each module has the concept of module *input* and *output* endpoints. Use the `ModuleClient.sendMessageAsync` method and it will send messages on the output endpoint of your module. Then configure a route in edgeHub to send this output endpoint to IoT Hub.
To process messages using routing, first set up a route to send messages coming from another endpoint (module or device) to the input endpoint of your module, then listen for messages on the input endpoint of your module. Each time a new message comes back, a callback function is triggered by the Azure IoT SDK. Process your message with this callback function and optionally send new messages on your module endpoint queue.
-<!-- <1.2> -->
-
-Processing messages using the MQTT broker is similar to subscribing to messages on user-defined topics, but using the IoT Edge special topics of your module's output queue: `devices/<device_name>/modules/<module_name>/messages/events`. Authorizations must be set up appropriately. Optionally you can send new messages on the topics of your choice.
-- #### Twins Twins are one of the primitives provided by IoT Hub. There are JSON documents that store state information including metadata, configurations, and conditions. Each module or device has its own twin. To get a module twin with the Azure IoT SDK, call the `ModuleClient.getTwin` method.
-<!-- <1.2> -->
-
-To get a module twin with any MQTT client, slightly more work is involved since getting a twin is not a typical MQTT pattern. The module must first subscribe to IoT Hub special topic `$iothub/twin/res/#`. This topic name is inherited from IoT Hub, and all devices/modules need to subscribe to the same topic. It does not mean that devices receive the twin of each other. IoT Hub and edgeHub know which twin should be delivered where, even if all devices listen to the same topic name. Once the subscription is made, the module needs to ask for the twin by publishing a message to the following IoT Hub special topic with a request ID `$iothub/twin/GET/?$rid=1234`. This request ID is an arbitrary ID (that is, a GUID), which will be sent back by IoT Hub along with the requested data. This is how a client can pair its requests with the responses. The result code is a HTTP-like status code, where successful is encoded as 200.
-- To receive a module twin patch with the Azure IoT SDK, implement a callback function and register it with the `ModuleClient.moduleTwinCallback` method from the Azure IoT SDK so that your callback function is triggered each time that a twin patch comes in.
-<!-- <1.2> -->
-
-To receive a module twin patch with any MQTT client, the process is similar to receiving full twins: a client needs to subscribe to special IoT Hub topic `$iothub/twin/PATCH/properties/desired/#`. After the subscription is made, when IoT Hub sends a change of the desired section of the twin, the client receives it.
-- #### Receive direct methods To receive a direct method with the Azure IoT SDK, implement a callback function and register it with the `ModuleClient.methodCallback` method from the Azure IoT SDK so that your callback function is triggered each time that a direct method comes in.
-<!-- <1.2> -->
-
-To receive a direct method with any MQTT client, the process is very similar to receiving twin patches. The client needs to confirm back that it has received the call and can send back some information at the same time. Special IoT Hub topic to subscribe to is `$iothub/methods/POST/#`.
-- ## Language and architecture support IoT Edge supports multiple operating systems, device architectures, and development languages so that you can build the scenario that matches your needs. Use this section to understand your options for developing custom IoT Edge modules. You can learn more about tooling support and requirements for each language in [Prepare your development and test environment for IoT Edge](development-environment.md).
For all languages in the following table, IoT Edge supports development for AMD6
:::moniker-end <!-- end 1.1 -->
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" IoT Edge 1.1 LTS is the last release channel that supports Windows containers. Starting with version 1.2, Windows containers are not supported.
IoT Edge 1.1 LTS is the last release channel that supports Windows containers. S
For information about developing with Windows containers, refer to the [IoT Edge 1.1](?view=iotedge-2018-06&preserve-view=true) version of this article. :::moniker-end
-<!-- end 1.2 -->
+<!-- end iotedge-2020-11 -->
## Module security
iot-edge Offline Capabilities https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-edge/offline-capabilities.md
Title: Operate devices offline - Azure IoT Edge | Microsoft Docs
description: Understand how IoT Edge devices and modules can operate without internet connection for extended periods of time, and how IoT Edge can enable regular IoT devices to operate offline too. Previously updated : 11/22/2019 Last updated : 07/05/2022
# Understand extended offline capabilities for IoT Edge devices, modules, and child devices Azure IoT Edge supports extended offline operations on your IoT Edge devices, and enables offline operations on child devices too. As long as an IoT Edge device has had one opportunity to connect to IoT Hub, that device and any child devices can continue to function with intermittent or no internet connection.
Child devices can be any non-IoT Edge device registered to the same IoT Hub.
:::moniker-end <!-- end 1.1 -->
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range="iotedge-2020-11" Child devices can be any device, IoT Edge or non-IoT Edge, registered to the same IoT Hub. :::moniker-end
-<!-- end 1.2 -->
+<!-- end iotedge-2020-11 -->
If you're unfamiliar with creating a parent-child relationship between an IoT Edge device and an IoT device, see [Authenticate a downstream device to Azure IoT Hub](how-to-authenticate-downstream-device.md). The symmetric key, self-signed X.509, and CA-signed X.509 sections show examples of how to use the Azure portal and Azure CLI to define the parent-child relationships when creating devices. For existing devices, you can declare the relationship from the device details page of either the parent or child device.
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range="iotedge-2020-11" If you're unfamiliar with creating a parent-child relationship between two IoT Edge devices, see [Connect a downstream IoT Edge device to an Azure IoT Edge gateway](how-to-connect-downstream-iot-edge-device.md). :::moniker-end
-<!-- end 1.2 -->
+<!-- end iotedge-2020-11 -->
### Set up the parent device as a gateway
iot-edge Production Checklist https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-edge/production-checklist.md
On Windows, the IoT Edge daemon uses PowerShell diagnostics. Use `Get-IoTEdgeLog
:::moniker-end <!-- end 1.1 -->
-<!--1.2-->
+<!--iotedge-2020-11-->
:::moniker range=">=iotedge-2020-11" Starting with version 1.2, IoT Edge relies on multiple daemons. While each daemon's logs can be individually queried with `journalctl`, the `iotedge system` commands provide a convenient way to query the combined logs.
Add (or append) this information to a file named `daemon.json` and place it in t
:::moniker-end <!-- end 1.1 -->
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" * `/etc/docker/` :::moniker-end
-<!-- end 1.2 -->
+<!-- end iotedge-2020-11 -->
The container engine must be restarted for the changes to take effect.
iot-edge Quickstart Linux https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-edge/quickstart-linux.md
Use the following CLI command to create your IoT Edge device based on the prebui
:::moniker-end <!-- end 1.1 -->
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11"
-Use the following CLI command to create your IoT Edge device based on the prebuilt [iotedge-vm-deploy](https://github.com/Azure/iotedge-vm-deploy/tree/1.2) template.
+Use the following CLI command to create your IoT Edge device based on the prebuilt [iotedge-vm-deploy](https://github.com/Azure/iotedge-vm-deploy/tree/1.3) template.
* For bash or Cloud Shell users, copy the following command into a text editor, replace the placeholder text with your information, then copy into your bash or Cloud Shell window: ```azurecli-interactive az deployment group create \ --resource-group IoTEdgeResources \
- --template-uri "https://raw.githubusercontent.com/Azure/iotedge-vm-deploy/1.2/edgeDeploy.json" \
+ --template-uri "https://raw.githubusercontent.com/Azure/iotedge-vm-deploy/1.3/edgeDeploy.json" \
--parameters dnsLabelPrefix='<REPLACE_WITH_VM_NAME>' \ --parameters adminUsername='azureUser' \ --parameters deviceConnectionString=$(az iot hub device-identity connection-string show --device-id myEdgeDevice --hub-name <REPLACE_WITH_HUB_NAME> -o tsv) \
Use the following CLI command to create your IoT Edge device based on the prebui
--parameters adminPasswordOrKey="<REPLACE_WITH_PASSWORD>" ``` :::moniker-end
-<!-- end 1.2 -->
+<!-- end iotedge-2020-11 -->
This template takes the following parameters:
Once connected to your virtual machine, verify that the runtime was successfully
:::moniker-end <!-- end 1.1 -->
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" 1. Check to see that IoT Edge is running. The following command should return a status of **Ok** if IoT Edge is running, or provide any service errors.
Once connected to your virtual machine, verify that the runtime was successfully
``` :::moniker-end
-<!-- end 1.2 -->
+<!-- end iotedge-2020-11 -->
Your IoT Edge device is now configured. It's ready to run cloud-deployed modules.
Under **IoT Edge Modules**, open the **Add** drop-down menu, and then select **M
In **IoT Edge Module Marketplace**, search for and select the `Simulated Temperature Sensor` module. The module is added to the IoT Edge Modules section with the desired **running** status.
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" Select **Runtime Settings** to open the settings for the edgeHub and edgeAgent modules. This settings section is where you can manage the runtime modules by adding environment variables or changing the create options.
-Update the **Image** field for both the edgeHub and edgeAgent modules to use the version tag 1.2. For example:
+Update the **Image** field for both the edgeHub and edgeAgent modules to use the version tag 1.3. For example:
-* `mcr.microsoft.com/azureiotedge-hub:1.2`
-* `mcr.microsoft.com/azureiotedge-agent:1.2`
+* `mcr.microsoft.com/azureiotedge-hub:1.3`
+* `mcr.microsoft.com/azureiotedge-agent:1.3`
Select **Save** to apply your changes to the runtime modules. :::moniker-end
-<!--end 1.2-->
+<!--end iotedge-2020-11-->
Select **Next: Routes** to continue to the next step of the wizard.
Open the command prompt on your IoT Edge device again, or use the SSH connection
![View three modules on your device](./media/quickstart-linux/iotedge-list-2-version-201806.png) :::moniker-end
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" ![View three modules on your device](./media/quickstart-linux/iotedge-list-2-version-202011.png) :::moniker-end
iot-edge Quickstart https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-edge/quickstart.md
Previously updated : 01/25/2022 Last updated : 07/05/2022
# Quickstart: Deploy your first IoT Edge module to a Windows device Try out Azure IoT Edge in this quickstart by deploying containerized code to a Linux on Windows IoT Edge device. IoT Edge allows you to remotely manage code on your devices so that you can send more of your workloads to the edge. For this quickstart, we recommend using your own Windows Client device to see how easy it is to use Azure IoT Edge for Linux on Windows. If you wish to use Windows Server or an Azure VM to create your deployment, follow the steps in the how-to guide on [installing and provisioning Azure IoT Edge for Linux on a Windows device](how-to-provision-single-device-linux-on-windows-symmetric.md).
Run the following PowerShell commands on the target device where you want to dep
:::moniker-end <!-- end 1.1 -->
- <!-- 1.2 -->
+ <!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" * **X64/AMD64** ```powershell
Run the following PowerShell commands on the target device where you want to dep
Invoke-WebRequest "https://aka.ms/AzEFLOWMSI-CR-ARM64" -OutFile $msiPath ``` :::moniker-end
- <!-- end 1.2 -->
+ <!-- end iotedge-2020-11 -->
1. Install IoT Edge for Linux on Windows on your device.
iot-edge Reference Iot Edge For Linux On Windows Functions https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-edge/reference-iot-edge-for-linux-on-windows-functions.md
description: Reference information for Azure IoT Edge for Linux on Windows Power
Previously updated : 10/15/2021 Last updated : 07/05/2022
# PowerShell functions for IoT Edge for Linux on Windows Understand the PowerShell functions that deploy, provision, and get the status of your IoT Edge for Linux on Windows (EFLOW) virtual machine.
The **Deploy-Eflow** command is the main deployment method. The deployment comma
:::moniker-end <!-- end 1.1 -->
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" | Parameter | Accepted values | Comments | | | | -- |
The **Deploy-Eflow** command is the main deployment method. The deployment comma
| gpuCount | Integer value between 1 and the number of the device's GPU cores | Number of GPU devices for the VM. <br><br>**Note**: If using ParaVirtualization, make sure to set gpuCount = 1 | | customSsh | None | Determines whether user wants to use their custom OpenSSH.Client installation. If present, ssh.exe must be available to the EFLOW PSM | :::moniker-end
-<!-- end 1.2 -->
+<!-- end iotedge-2020-11 -->
For more information, use the command `Get-Help Deploy-Eflow -full`.
The **Set-EflowVmFeature** command enables or disables the status of IoT Edge fo
:::moniker-end <!-- end 1.1 -->
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" | Parameter | Accepted values | Comments | | | | -- | | feature | **DpsTpm**, **Defender** | Feature name to toggle. | | enable | None | If this flag is present, the command enables the feature. | :::moniker-end
-<!-- end 1.2 -->
+<!-- end iotedge-2020-11 -->
For more information, use the command `Get-Help Set-EflowVmFeature -full`.
iot-edge Support https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-edge/support.md
Azure IoT Edge supports modules built as either Linux or Windows containers. Lin
:::moniker-end <!-- end 1.1 -->
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11"
-Azure IoT Edge version 1.2 only supports modules built as Linux containers. [IoT Edge for Linux on Windows](iot-edge-for-linux-on-windows.md) is the recommended way to run IoT Edge on Windows devices.
+Azure IoT Edge version 1.2 and later only supports modules built as Linux containers. [IoT Edge for Linux on Windows](iot-edge-for-linux-on-windows.md) is the recommended way to run IoT Edge on Windows devices.
:::moniker-end
-<!-- end 1.2 -->
+<!-- end iotedge-2020-11 -->
#### Linux containers
Modules built as Linux containers can be deployed to either Linux or Windows dev
:::moniker-end <!-- end 1.1 -->
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" | Operating System | AMD64 | ARM32v7 | ARM64 | | - | -- | - | -- | | Debian 11 (Bullseye) | | ![Debian + ARM32v7](./media/support/green-check.png) | | | Raspberry Pi OS Stretch | | ![Raspberry Pi OS Stretch + ARM32v7](./media/support/green-check.png) | |
+| Red Hat Enterprise Linux 8 | ![Red Hat Enterprise Linux 8 + AMD64](./media/support/green-check.png) | | |
| Ubuntu Server 20.04 | ![Ubuntu Server 20.04 + AMD64](./media/support/green-check.png) | | ![Ubuntu Server 20.04 + ARM64](./media/support/green-check.png) | | Ubuntu Server 18.04 | ![Ubuntu Server 18.04 + AMD64](./media/support/green-check.png) | | ![Ubuntu Server 18.04 + ARM64](./media/support/green-check.png) | | Windows 10/11 Pro | ![Windows 10/11 Pro + AMD64](./media/support/green-check.png) | | ![Win 10 Pro + ARM64](./media/support/green-check.png)<sup>1</sup> |
Modules built as Linux containers can be deployed to either Linux or Windows dev
<sup>1</sup> Support for this platform using IoT Edge for Linux on Windows is currently in [public preview](https://azure.microsoft.com/support/legal/preview-supplemental-terms/). :::moniker-end
-<!-- end 1.2 -->
+<!-- end iotedge-2020-11 -->
All Windows operating systems must be minimum build 17763 with all current cumulative updates installed.
All Windows operating systems must be version 1809 (build 17763). The specific b
:::moniker-end <!-- end 1.1 -->
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" IoT Edge 1.1 LTS is the last release channel that supports Windows containers. Starting with version 1.2, Windows containers aren't supported. For information about supported operating systems for Windows containers, refer to the [IoT Edge 1.1](?view=iotedge-2018-06&preserve-view=true) version of this article. :::moniker-end
-<!-- end 1.2 -->
+<!-- end iotedge-2020-11 -->
### Tier 2
Azure IoT Edge can be run in virtual machines. Using a virtual machine as an IoT
::: moniker-end
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" <center>
iot-edge Troubleshoot Common Errors https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-edge/troubleshoot-common-errors.md
Restart the container engine for the updates to take effect.
:::moniker-end <!-- end 1.1 -->
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" Place `daemon.json` in the `/etc/docker` directory on your device.
sudo systemctl restart docker
``` :::moniker-end
-<!-- end 1.2 -->
+<!-- end iotedge-2020-11 -->
**Option 2: Set DNS server in IoT Edge deployment per module**
When you see this error, you can resolve it by configuring the DNS name of your
:::moniker-end <!-- end 1.1 -->
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" 1. In the Azure portal, navigate to the overview page of your virtual machine.
When you see this error, you can resolve it by configuring the DNS name of your
``` :::moniker-end
-<!-- end 1.2 -->
+<!-- end iotedge-2020-11 -->
<!-- 1.1 --> :::moniker range="iotedge-2018-06"
On Linux:
1. Restart the network service and docker service to apply the changes.
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
::: moniker range=">=iotedge-2020-11" ## IoT Edge behind a gateway cannot perform HTTP requests and start edgeAgent module
When migrating to the new IoT hub (assuming not using DPS), follow these steps i
1. Restart each device in hierarchy level by level from top to the bottom :::moniker-end
-<!-- end 1.2 -->
+<!-- end iotedge-2020-11 -->
## Security daemon couldn't start successfully
iot-edge Troubleshoot https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-edge/troubleshoot.md
sudo iotedge check
``` :::moniker-end
-<!-- end 1.2 -->
+<!-- end iotedge-2020-11 -->
The troubleshooting tool runs many checks that are sorted into these three categories:
The troubleshooting tool runs many checks that are sorted into these three categ
The IoT Edge check tool uses a container to run its diagnostics. The container image, `mcr.microsoft.com/azureiotedge-diagnostics:latest`, is available through the [Microsoft Container Registry](https://github.com/microsoft/containerregistry). If you need to run a check on a device without direct access to the internet, your devices will need access to the container image.
-<!-- <1.2> -->
+<!-- <iotedge-2020-11> -->
:::moniker range=">=iotedge-2020-11" In a scenario using nested IoT Edge devices, you can get access to the diagnostics image on child devices by routing the image pull through the parent devices.
In a scenario using nested IoT Edge devices, you can get access to the diagnosti
sudo iotedge check --diagnostics-image-name <parent_device_fqdn_or_ip>:<port_for_api_proxy_module>/azureiotedge-diagnostics:1.2 ```
-<!-- </1.2> -->
+<!-- </iotedge-2020-11> -->
:::moniker-end For information about each of the diagnostic checks this tool runs, including what to do if you get an error or warning, see [IoT Edge troubleshoot checks](https://github.com/Azure/iotedge/blob/master/doc/troubleshoot-checks.md).
iotedge support-bundle --since 6h
:::moniker-end <!-- end 1.1 -->
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" ```bash
sudo iotedge support-bundle --since 6h
``` :::moniker-end
-<!-- end 1.2 -->
+<!-- end iotedge-2020-11 -->
By default, the `support-bundle` command creates a zip file called **support_bundle.zip** in the directory where the command is called. Use the flag `--output` to specify a different path or file name for the output.
On Windows:
:::moniker-end <!--end 1.1 -->
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" * View the status of the IoT Edge system
On Windows:
``` :::moniker-end
-<!-- end 1.2 -->
+<!-- end iotedge-2020-11 -->
## Check container logs for issues
Save the file and restart the IoT Edge security manager.
<!-- end 1.1 --> :::moniker-end
-<!-- 1.2 -->
+<!-- iotedge-2020-11 -->
:::moniker range=">=iotedge-2020-11" You can view the messages going through the IoT Edge hub and gather insights from verbose logs from the runtime containers. To turn on verbose logs on these containers, set the `RuntimeLogLevel` environment variable in the deployment manifest.
Both the edgeHub and edgeAgent modules have this runtime log environment variabl
* debug * verbose
-<!-- end 1.2 -->
+<!-- end iotedge-2020-11 -->
:::moniker-end You can also check the messages being sent between IoT Hub and IoT devices. View these messages by using the [Azure IoT Hub extension for Visual Studio Code](https://marketplace.visualstudio.com/items?itemName=vsciot-vscode.azure-iot-toolkit). For more information, see [Handy tool when you develop with Azure IoT](https://blogs.msdn.microsoft.com/iotdev/2017/09/01/handy-tool-when-you-develop-with-azure-iot/).
iot-edge Tutorial Configure Est Server https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-edge/tutorial-configure-est-server.md
+
+ Title: Tutorial - Configure Enrollment over Secure Transport Server (EST) for Azure IoT Edge
+description: This tutorial shows you how to set up an Enrollment over Secure Transport (EST) server for Azure IoT Edge.
++ Last updated : 07/06/2022+++
+monikerRange: ">=iotedge-2020-11"
++
+# Tutorial: Configure Enrollment over Secure Transport Server for Azure IoT Edge
++
+With Azure IoT Edge, you can configure your devices to use an Enrollment over Secure Transport (EST) server to manage x509 certificates.
+
+This tutorial walks you through hosting a test EST server and configuring an IoT Edge device for the enrollment and renewal of x509 certificates. In this tutorial, you learn how to:
+
+> [!div class="checklist"]
+>
+> * Create and host a test EST server
+> * Configure DPS group enrollment
+> * Configure device
++
+## Prerequisites
+
+* An existing IoT Edge device with the [latest Azure IoT Edge runtime](how-to-update-iot-edge.md) installed. If you need to create a test device, complete [Quickstart: Deploy your first IoT Edge module to a virtual Linux device](quickstart-linux.md).
+* Your IoT Edge device requires Azure IoT Edge runtime 1.2 or later for EST support. Azure IoT Edge runtime 1.3 is required for EST certificate renewal.
+* IoT Hub Device Provisioning Service (DPS) linked to IoT Hub. For information on configuring DPS, see [Quickstart: Set up the IoT Hub Device Provisioning Service with the Azure portal](../iot-dps/quick-setup-auto-provision.md).
+
+## What is Enrollment over Secure Transport?
+
+Enrollment over Secure Transport (EST) is a cryptographic protocol that automates the issuance of x.509 certificates. It's used for public key infrastructure (PKI) clients, like IoT Edge that need client certificates associated to a Certificate Authority (CA). EST replaces the need for manual certificate management, which can be risky and error-prone.
+
+## EST server
+
+For certificate issuance and renewal, you need an EST server accessible to your devices.
+
+> [!IMPORTANT]
+> For enterprise grade solutions, consider: [GlobalSign IoT Edge Enroll](https://www.globalsign.com/en/iot-edge-enroll) or [DigiCert IoT Device Manager](https://www.digicert.com/iot/iot-device-manager).
+
+For testing and development, you can use a test EST server. In this tutorial, we'll create a test EST server.
+
+### Run EST server on device
+
+To quickly get started, this tutorial shows the steps to deploy a simple EST server in a container locally on the IoT Edge device. This method is the simplest approach to try it out.
+
+The Dockerfile uses Ubuntu 18.04, a [Cisco library called `libest`](https://github.com/cisco/libest), and [sample server code](https://github.com/cisco/libest/tree/main/example/server). It's configured with the following setting you can change:
+
+* Root CA valid for 20 years
+* EST server certificate valid for 10 years
+* Set the certificate default-days to 1 to test EST renewal
+* EST server runs locally on the IoT Edge device in a container
+
+> [!CAUTION]
+> Do not use this Dockerfile in production.
+
+1. Connect to the device, for example using SSH, where you've installed IoT Edge.
+1. Create a file named `Dockerfile` (case sensitive) and add the sample content using your favorite text editor.
+
+ > [!TIP]
+ > If you want to host your EST server in Azure Container Instance, change `myestserver.westus.azurecontainer.io` to the DNS name of your EST server. When choosing a DNS name, be aware the DNS label for an Azure Container instance must be at least five characters in length.
+
+ ```dockerfile
+ # DO NOT USE IN PRODUCTION - Use only for testing #
+
+ FROM ubuntu:18.04
+
+ RUN apt update && apt install -y apache2-utils git openssl libssl-dev build-essential && \
+ git clone https://github.com/cisco/libest.git && cd libest && \
+ ./configure --disable-safec && make install && \
+ rm -rf /src && apt remove --quiet -y libssl-dev build-essential && \
+ apt autoremove -y && apt clean -y && apt autoclean -y && \
+ rm -rf /var/lib/apt /tmp/* /var/tmp/*
+
+ WORKDIR /libest/example/server/
+
+ # Setting the root CA expiration to 20 years
+ RUN sed -i "s|-days 365|-days 7300 |g" ./createCA.sh
+
+ ## If you want to host your EST server in the cloud (for example, an Azure Container Instance),
+ ## change myestserver.westus.azurecontainer.io to the fully qualified DNS name of your EST server
+ ## and uncomment the next line.
+ # RUN sed -i "s|ip6-localhost|myestserver.westus.azurecontainer.io |g" ./ext.cnf
+
+ # Set EST server certificate to be valid for 10 years
+ RUN sed -i "s|-keyout \$EST_SERVER_PRIVKEY -subj|-keyout \$EST_SERVER_PRIVKEY -days 7300 -subj |g" ./createCA.sh
+
+ # Create the CA
+ RUN echo 1 | ./createCA.sh
+
+ # Set cert default-days to 1 to show EST renewal
+ RUN sed -i "s|default_days = 365|default_days = 1 |g" ./estExampleCA.cnf
+
+ # The EST server listens on port 8085 by default
+ # Uncomment to change the port to 443 or something else. If changed, EXPOSE that port instead of 8085.
+ # RUN sed -i "s|estserver -c|estserver -p 443 -c |g" ./runserver.sh
+ EXPOSE 8085
+ CMD ./runserver.sh
+ ```
+
+1. In the directory containing your `Dockerfile`, build your image from the sample Dockerfile.
+
+ ```bash
+ sudo docker build . --tag est
+ ```
+
+1. Start the container and expose the container's port 8085 to port 8085 on the host.
+
+ ```bash
+ sudo docker run -d -p 8085:8085 est
+ ```
+
+1. Now, your EST server is running and can be reached using `localhost` on port 8085. Verify that it's available by running a command to see its server certificate.
+
+ ```bash
+ openssl s_client -showcerts -connect localhost:8085
+ ```
+
+1. You should see `--BEGIN CERTIFICATE--` midway through the output. Retrieving the certificate verifies that the server is reachable and can present its certificate.
+
+> [!TIP]
+> To run this container in the cloud, build the image and [push the image to Azure Container Registry](../container-registry/container-registry-get-started-portal.md). Then, follow the [quickstart to deploy to Azure Container Instance](/azure/container-instances/container-instances-quickstart-portal).
+
+## Download CA certificate
+
+Each device requires the Certificate Authority (CA) certificate that is associated to a device identity certificate.
+
+1. On the IoT Edge device, create the `/var/secrets` directory if it doesn't exist then change directory to it.
+
+ ```bash
+ # Create the /var/secrets directory if it doesn't exist
+ sudo mkdir /var/secrets
+
+ # Change directory to /var/secrets
+ cd /var/secrets
+ ```
+
+1. Retrieve the CA certificate from the EST server into the `/var/secrets` directory and name it `cacert.crt.pem`.
+
+ ```bash
+ openssl s_client -showcerts -verify 5 -connect localhost:8085 < | sudo awk '/BEGIN/,/END/{ if(/BEGIN/){a++}; out="cert"a".pem"; print >out}' && sudo cp cert2.pem cacert.crt.pem
+ ```
+
+1. Certificates should be owned by the key service user **aziotks**. Set the ownership to **aziotks** for all the certificate files.
+
+ ```bash
+ sudo chown aziotks:aziotks /var/secrets/*.pem
+ ```
+
+## Provision IoT Edge device using DPS
+
+Using Device Provisioning Service allows you to automatically issue and renew certificates from an EST server in IoT Edge. When using the tutorial EST server, the identity certificates expire in one day making manual provisioning with IoT Hub impractical since each time the certificate expires the thumbprint must be manually updated in IoT Hub. DPS CA authentication with enrollment group allows the device identity certificates to be renewed without any manual steps.
+
+### Upload CA certificate to DPS
+
+1. If you don't have a Device Provisioning Service linked to IoT Hub, see [Quickstart: Set up the IoT Hub Device Provisioning Service with the Azure portal](../iot-dps/quick-setup-auto-provision.md).
+1. Transfer the `cacert.crt.pem` file from your device to a computer with access to the Azure portal such as your development computer. An easy way to transfer the certificate is to remotely connect to your device, display the certificate using the command `cat /var/secrets/cacert.crt.pem`, copy the entire output, and paste the contents to a new file on your development computer.
+1. In the [Azure portal](https://portal.azure.com), navigate to your instance of IoT Hub Device Provisioning Service.
+1. Under **Settings**, select **Certificates**, then **+Add**.
+
+ :::image type="content" source="./media/tutorial-configure-est-server/dps-add-certificate.png" alt-text="A screenshot adding CA certificate to Device Provisioning Service using the Azure portal.":::
+
+ |Setting | Value |
+ |--||
+ |Certificate name | Provide a friendly name for the CA certificate |
+ |Certificate .pem or .cer file | Browse to the `cacert.crt.pem` from the EST server |
+ |Set certificate status to verified on upload | Select the checkbox |
+
+1. Select **Save**.
+
+### Create enrollment group
+
+1. In the [Azure portal](https://portal.azure.com), navigate to your instance of IoT Hub Device Provisioning Service.
+1. Under **Settings**, select **Manage enrollments**.
+1. Select **Add enrollment group** then complete the following steps to configure the enrollment:
+
+ :::image type="content" source="./media/tutorial-configure-est-server/dps-add-enrollment.png" alt-text="A screenshot adding DPS enrollment group using the Azure portal.":::
+
+ |Setting | Value |
+ |--||
+ |Group name | Provide a friendly name for this group enrollment |
+ |Attestation Type | Select **Certificate** |
+ |IoT Edge device | Select **True** |
+ |Certificate Type | Select **CA Certificate** |
+ |Primary certificate | Choose your certificate from the dropdown list |
+
+ The other settings aren't relevant to the tutorial. You can accept the default settings.
+
+1. Select **Save**.
+
+Now that an enrollment exists for the device, the IoT Edge runtime can automatically manage device certificates for the linked IoT Hub.
+
+## Configure IoT Edge device
+
+On the IoT Edge device, update the IoT Edge configuration file to use device certificates from the EST server.
+
+1. Open the IoT Edge configuration file using an editor. For example, use the `nano` editor to open the `/etc/aziot/config.toml` file.
+
+ ```bash
+ sudo nano /etc/aziot/config.toml
+ ```
+
+1. Add or replace the following sections in the configuration file. These configuration settings use username and password authentication initially to get the device certificate from the EST server. The device certificate is used to authenticate to the EST server for future certificate renewals.
+
+ Replace the following placeholder text: `<DPS-ID-SCOPE>` with the **ID Scope** of the DPS linked to the IoT Hub containing the registered device, and `myiotedgedevice` with the device ID registered in Azure IoT Hub. You can find the **ID Scope** value on the DPS **Overview** page.
+
+ ```bash
+ # DPS provisioning with X.509 certificate
+ # Replace with ID Scope from your DPS
+ [provisioning]
+ source = "dps"
+ global_endpoint = "https://global.azure-devices-provisioning.net"
+ id_scope = "<DPS-ID-SCOPE>"
+
+ [provisioning.attestation]
+ method = "x509"
+ registration_id = "myiotedgedevice"
+ identity_cert = { method = "est", common_name = "myiotedgedevice" }
+
+ # Auto renewal settings for the identity cert
+ # Available only from IoT Edge 1.3 and above
+ [provisioning.attestation.identity_cert.auto_renew]
+ rotate_key = false
+ threshold = "80%"
+ retry = "4%"
+
+ # Trusted root CA certificate in the global EST options
+ # Optional if the EST server's TLS certificate is already trusted by the system's CA certificates.
+ [cert_issuance.est]
+ trusted_certs = [
+ "file:///var/secrets/cacert.crt.pem",
+ ]
+
+ # The default username and password for libest
+ # Used for initial authentication to EST server
+ #
+ # Not recommended for production
+ [cert_issuance.est.auth]
+ username = "estuser"
+ password = "estpwd"
+
+ [cert_issuance.est.urls]
+ default = "https://localhost:8085/.well-known/est"
+ ```
+
+1. Run `sudo iotedge config apply` to apply the new settings.
+1. Run `sudo iotedge check` to verify your IoT Edge device configuration. All **configuration checks** should succeed. For this tutorial, you can ignore production readiness errors and warnings, DNS server warnings, and connectivity checks.
+
+1. Navigate to your device in IoT Hub. Certificate thumbprints have been added to the device automatically using DPS and the EST server.
+
+ :::image type="content" source="./media/tutorial-configure-est-server/device-thumbprints.png" alt-text="A screenshot of IoT Hub device settings in the Azure portal. Certificate thumbprints fields show values.":::
+
+ > [!NOTE]
+ > When you create a new IoT Edge device, it displays the status code `417 -- The device's deployment configuration is not set in the Azure portal.` This status is normal, and means that the device is ready to receive a module deployment.
+
+## Test certificate renewal
+
+You can immediately reissue the device identity certificates by removing the existing certificates and keys from the device and then applying the IoT Edge configuration. IoT Edge detects the missing files and requests new certificates.
+
+1. On the IoT Edge device, stop the IoT Edge runtime.
+
+ ```bash
+ sudo iotedge system stop
+ ```
+
+1. Delete the existing certificates and keys.
+
+ ```bash
+ sudo sh -c "rm /var/lib/aziot/certd/certs/*"
+ sudo sh -c "rm /var/lib/aziot/keyd/keys/*"
+ ```
+
+1. Apply the IoT Edge configuration to renew certificates.
+
+ ```bash
+ sudo iotedge config apply
+ ```
+
+ You may need to wait a few minutes for the runtime to start.
+
+1. Navigate to your device in IoT Hub. Certificate thumbprints have been updated.
+
+ :::image type="content" source="./media/tutorial-configure-est-server/renewed-thumbprints.png" alt-text="A screenshot of IoT Hub device settings in the Azure portal. Certificate thumbprints fields show new values.":::
+
+1. List the certificate files using the command `sudo ls -l /var/lib/aziot/certd/certs`. You should see recent creation dates for the device certificate files.
+1. Use the `openssl` command to check the new certificate contents. For example:
+
+ ```bash
+ sudo openssl x509 -in /var/lib/aziot/certd/certs/deviceid-bd732105ef89cf8edd2606a5309c8a26b7b5599a4e124a0fe6199b6b2f60e655.cer -text -noout
+ ```
+
+ Replace the device certificate file name (.cer) with your device's certificate file.
+
+ You should notice the certificate **Validity** date range has changed.
+
+The following are optional other ways you can test certificate renewal. These checks demonstrate how DPS renews certificates when a device is reprovisioned or after certificate expiration. After each test, you can verify new thumbprints in the Azure portal and use `openssl` command to verify the new certificate.
+
+1. Try deleting the device from IoT Hub. DPS reprovisions the device in a few minutes with a new certificate and thumbprints.
+1. Try running `sudo iotedge system reprovision` on the device. DPS reprovisions the device in a few minutes with a new certificate and thumbprints.
+1. Try waiting a day for the certificate to expire. The test EST server is configured to create certificates that expire after one day. IoT Edge automatically renews the certificate.
+
+## Clean up resources
+
+You can keep the resources and configurations that you created in this tutorial and reuse them. Otherwise, you can delete the local configurations and the Azure resources that you used in this article to avoid charges.
++
+## Next steps
+
+* Using username and password to bootstrap authentication to EST server isn't recommended for production. Instead, consider using long-lived *bootstrap certificates* that can be stored onto the device during manufacturing [similar to the recommended approach for DPS](../iot-hub/iot-hub-x509ca-concept.md). To see how to configure bootstrap certificate for EST server, see [Authenticate a Device Using Certificates Issued Dynamically via EST](https://github.com/Azure/iotedge/blob/main/edgelet/doc/est.md).
+* To use EST server to issue IoT Edge CA certificates, see [example configuration](https://github.com/Azure/iotedge/blob/main/edgelet/doc/est.md#edge-ca-certificate).
+* EST server can be used to issue certificates for all devices in a hierarchy as well. Depending on if you have ISA-95 requirements, it may be necessary to run a chain of EST servers with one at every layer or use the API proxy module to forward the requests. To learn more, see [Kevin's blog](https://kevinsaye.wordpress.com/2021/07/21/deep-dive-creating-hierarchies-of-azure-iot-edge-devices-isa-95-part-3/).
+* For enterprise grade solutions, consider: [GlobalSign IoT Edge Enroll](https://www.globalsign.com/en/iot-edge-enroll) or [DigiCert IoT Device Manager](https://www.digicert.com/iot/iot-device-manager)
+* To learn more about certificates, see [Understand how Azure IoT Edge uses certificates](iot-edge-certs.md).
iot-edge Tutorial Nested Iot Edge https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-edge/tutorial-nested-iot-edge.md
To create a hierarchy of IoT Edge devices, you will need:
```azurecli az deployment group create \ --resource-group <REPLACE_WITH_YOUR_RESOURCE_GROUP> \
- --template-uri "https://raw.githubusercontent.com/Azure/iotedge-vm-deploy/1.2.0/edgeDeploy.json" \
+ --template-uri "https://raw.githubusercontent.com/Azure/iotedge-vm-deploy/1.3/edgeDeploy.json" \
--parameters dnsLabelPrefix='<REPLACE_WITH_UNIQUE_DNS_FOR_VIRTUAL_MACHINE>' \ --parameters adminUsername='azureuser' \ --parameters authenticationType='sshPublicKey' \
To create a hierarchy of IoT Edge devices, you will need:
The virtual machine uses SSH keys for authenticating users. If you are unfamiliar with creating and using SSH keys, you can follow [the instructions for SSH public-private key pairs for Linux VMs in Azure](../virtual-machines/linux/mac-create-ssh-keys.md).
- IoT Edge version 1.2 is preinstalled with this ARM template, saving the need to manually install the assets on the virtual machines. If you are installing IoT Edge on your own devices, see [Install Azure IoT Edge for Linux (version 1.2)](how-to-provision-single-device-linux-symmetric.md) or [Update IoT Edge to version 1.2](how-to-update-iot-edge.md#special-case-update-from-10-or-11-to-12).
+ IoT Edge version 1.3 is preinstalled with this ARM template, saving the need to manually install the assets on the virtual machines. If you are installing IoT Edge on your own devices, see [Install Azure IoT Edge for Linux](how-to-provision-single-device-linux-symmetric.md) or [Update IoT Edge](how-to-update-iot-edge.md#special-case-update-from-10-or-11-to-latest-release).
A successful creation of a virtual machine using this ARM template will output your virtual machine's `SSH` handle and fully-qualified domain name (`FQDN`). You will use the SSH handle and either the FQDN or IP address of each virtual machine for configuration in later steps, so keep track of this information. A sample output is pictured below.
iot-edge Version History https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-edge/version-history.md
Title: IoT Edge version navigation and history - Azure IoT Edge
description: Discover what's new in IoT Edge with information about new features and capabilities in the latest releases. Previously updated : 04/07/2021 Last updated : 06/13/2022
Azure IoT Edge is governed by Microsoft's [Modern Lifecycle Policy](/lifecycle/p
The IoT Edge documentation on this site is available for two different versions of the product, so that you can choose the content that applies to your IoT Edge environment. Currently, the two supported versions are:
-* **IoT Edge 1.2** contains content for new features and capabilities that are in the latest stable release. This version of the documentation also contains content for the IoT Edge for Linux on Windows (EFLOW) continuous release version, which is based on IoT Edge 1.2 and contains the latest features and capabilities. IoT Edge 1.2 is now bundled with the [Microsoft Defender for IoT micro-agent for Edge](../defender-for-iot/device-builders/overview.md).
+* **IoT Edge 1.3** contains content for new features and capabilities that are in the latest stable release. This version of the documentation also contains content for the IoT Edge for Linux on Windows (EFLOW) continuous release version.
* **IoT Edge 1.1 (LTS)** is the first long-term support (LTS) version of IoT Edge. The documentation for this version covers all features and capabilities from all previous versions through 1.1. This version of the documentation also contains content for the IoT Edge for Linux on Windows long-term support version, which is based on IoT Edge 1.1 LTS. * This documentation version will be stable through the supported lifetime of version 1.1, and won't reflect new features released in later versions. IoT Edge 1.1 LTS will be supported until December 13, 2022 to match the [.NET Core 3.1 release lifecycle](https://dotnet.microsoft.com/platform/support/policy/dotnet-core).
For more information about IoT Edge releases, see [Azure IoT Edge supported syst
### IoT Edge for Linux on Windows Azure IoT Edge for Linux on Windows (EFLOW) supports the following versions:
-* **EFLOW Continuous Release (CR)** based on Azure IoT Edge 1.2 version, it contains new features and capabilities that are in the latest stable release.
+* **EFLOW Continuous Release (CR)** based on the latest Azure IoT Edge version, it contains new features and capabilities that are in the latest stable release. For more information, see the [EFLOW release notes](https://github.com/Azure/iotedge-eflow/releases).
* **EFLOW 1.1 (LTS)** based on Azure IoT Edge 1.1, it's the Long-term support version. This version will be stable through the supported lifetime of this version and won't include new features released in later versions. This version will be supported until Dec 2022 to match the IoT Edge 1.1 LTS release lifecycle.  All new releases are made available in the [Azure IoT Edge for Linux on Windows project](https://github.com/Azure/iotedge-eflow).
This table provides recent version history for IoT Edge package releases, and hi
| Release notes and assets | Type | Date | Highlights | | | - | - | - |
-| [1.2](https://github.com/Azure/azure-iotedge/releases/tag/1.2.0) | Stable | April 2021 | [IoT Edge devices behind gateways](how-to-connect-downstream-iot-edge-device.md?view=iotedge-2020-11&preserve-view=true)<br>[IoT Edge MQTT broker (preview)](how-to-publish-subscribe.md?view=iotedge-2020-11&preserve-view=true)<br>New IoT Edge packages introduced, with new installation and configuration steps. For more information, see [Update from 1.0 or 1.1 to 1.2](how-to-update-iot-edge.md#special-case-update-from-10-or-11-to-12).<br>Includes [Microsoft Defender for IoT micro-agent for Edge](../defender-for-iot/device-builders/overview.md).<br> Integration with Device Update. For more information, see [Update IoT Edge](how-to-update-iot-edge.md).
+| [1.3](https://github.com/Azure/azure-iotedge/releases/tag/1.3.0) | Stable | June 2022 | Support for Red Hat Enterprise Linux 8 on AMD and Intel 64-bit architectures.<br>Edge Hub now enforces that inbound/outbound communication uses minimum TLS version 1.2 by default<br>Updated runtime modules (edgeAgent, edgeHub) based on .NET 6
+| [1.2](https://github.com/Azure/azure-iotedge/releases/tag/1.2.0) | Stable | April 2021 | [IoT Edge devices behind gateways](how-to-connect-downstream-iot-edge-device.md?view=iotedge-2020-11&preserve-view=true)<br>[IoT Edge MQTT broker (preview)](how-to-publish-subscribe.md?view=iotedge-2020-11&preserve-view=true)<br>New IoT Edge packages introduced, with new installation and configuration steps. For more information, see [Update from 1.0 or 1.1 to latest release](how-to-update-iot-edge.md#special-case-update-from-10-or-11-to-latest-release).<br>Includes [Microsoft Defender for IoT micro-agent for Edge](../defender-for-iot/device-builders/overview.md).<br> Integration with Device Update. For more information, see [Update IoT Edge](how-to-update-iot-edge.md).
| [1.1](https://github.com/Azure/azure-iotedge/releases/tag/1.1.0) | Long-term support (LTS) | February 2021 | [Long-term support plan and supported systems updates](support.md) | | [1.0.10](https://github.com/Azure/azure-iotedge/releases/tag/1.0.10) | Stable | October 2020 | [UploadSupportBundle direct method](how-to-retrieve-iot-edge-logs.md#upload-support-bundle-diagnostics)<br>[Upload runtime metrics](how-to-access-built-in-metrics.md)<br>[Route priority and time-to-live](module-composition.md#priority-and-time-to-live)<br>[Module startup order](module-composition.md#configure-modules)<br>[X.509 manual provisioning](how-to-provision-single-device-linux-x509.md) | | [1.0.9](https://github.com/Azure/azure-iotedge/releases/tag/1.0.9) | Stable | March 2020 | X.509 auto-provisioning with DPS<br>[RestartModule direct method](how-to-edgeagent-direct-method.md#restart-module)<br>[support-bundle command](troubleshoot.md#gather-debug-information-with-support-bundle-command) |
lighthouse Onboard Customer https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/lighthouse/how-to/onboard-customer.md
Title: Onboard a customer to Azure Lighthouse description: Learn how to onboard a customer to Azure Lighthouse, allowing their resources to be accessed and managed by users in your tenant. Previously updated : 09/30/2021 Last updated : 07/08/2022 ms.devlang: azurecli
This article explains how you, as a service provider, can onboard a customer to
> [!TIP] > Though we refer to service providers and customers in this topic, [enterprises managing multiple tenants](../concepts/enterprise.md) can use the same process to set up Azure Lighthouse and consolidate their management experience.
-You can repeat the onboarding process for multiple customers. When a user with the appropriate permissions signs in to your managing tenant, that user can be authorized across customer tenancy scopes to perform management operations, without having to sign in to every individual customer tenant.
+You can repeat the onboarding process for multiple customers. When a user with the appropriate permissions signs in to your managing tenant, that user is authorized to perform management operations across customer tenancy scopes, without having to sign in to each individual customer tenant.
> [!NOTE] > Customers can alternately be onboarded to Azure Lighthouse when they purchase a Managed Service offer (public or private) that you [publish to Azure Marketplace](publish-managed-services-offers.md). You can also use the onboarding process described here in conjunction with offers published to Azure Marketplace.
The onboarding process requires actions to be taken from within both the service
## Gather tenant and subscription details
-To onboard a customer's tenant, it must have an active Azure subscription. You'll need to know the following:
+To onboard a customer's tenant, it must have an active Azure subscription. When you [create a template manually](#create-your-template-manually), you'll need to know the following:
-- The tenant ID of the service provider's tenant (where you will be managing the customer's resources). If you [create your template in the Azure portal](#create-your-template-in-the-azure-portal), this value is provided automatically.
+- The tenant ID of the service provider's tenant (where you will be managing the customer's resources).
- The tenant ID of the customer's tenant (which will have resources managed by the service provider). - The subscription IDs for each specific subscription in the customer's tenant that will be managed by the service provider (or that contains the resource group(s) that will be managed by the service provider). If you don't know the ID for a tenant, you can [retrieve it by using the Azure portal, Azure PowerShell, or Azure CLI](../../active-directory/fundamentals/active-directory-how-to-find-tenant.md).
+If you [create your template in the Azure portal](#create-your-template-in-the-azure-portal), your tenant ID is provided automatically. You don't need to know the customer's tenant or subscription details in order to create your template in the Azure portal. However, if you plan to onboard one or more resource groups in the customer's tenant (rather than the entire subscription), you'll need to know the names of each resource group.
+ ## Define roles and permissions
-As a service provider, you may want to perform multiple tasks for a single customer, requiring different access for different scopes. You can define as many authorizations as you need in order to assign the appropriate [Azure built-in roles](../../role-based-access-control/built-in-roles.md). Each authorization includes a **principalId** which refers to an Azure AD user, group, or service principal in the managing tenant.
+As a service provider, you may want to perform multiple tasks for a single customer, requiring different access for different scopes. You can define as many authorizations as you need in order to assign the appropriate [Azure built-in roles](../../role-based-access-control/built-in-roles.md). Each authorization includes a `principalId` which refers to an Azure AD user, group, or service principal in the managing tenant.
> [!NOTE] > Unless explicitly specified, references to a "user" in the Azure Lighthouse documentation can apply to an Azure AD user, group, or service principal in an authorization.
-To define authorizations, you'll need to know the ID values for each user, user group, or service principal in the managing tenant to which you want to grant access. You can [retrieve these IDs by using the Azure portal, Azure PowerShell, or Azure CLI](../../role-based-access-control/role-assignments-template.md#get-object-ids) from within the managing tenant. You'll also need the role definition ID for each [built-in role](../../role-based-access-control/built-in-roles.md) you want to assign.
+To define authorizations in your template, you must include the ID values for each user, user group, or service principal in the managing tenant to which you want to grant access. You'll also need to include the role definition ID for each [built-in role](../../role-based-access-control/built-in-roles.md) you want to assign. When you [create your template in the Azure portal](#create-your-template-in-the-azure-portal), you can select the user account and role, and these ID values will be added automatically. If you are [creating a template manually](#create-your-template-manually), you can [retrieve user IDs by using the Azure portal, Azure PowerShell, or Azure CLI](../../role-based-access-control/role-assignments-template.md#get-object-ids) from within the managing tenant.
> [!TIP] > We recommend assigning the [Managed Services Registration Assignment Delete Role](../../role-based-access-control/built-in-roles.md#managed-services-registration-assignment-delete-role) when onboarding a customer, so that users in your tenant can [remove access to the delegation](remove-delegation.md) later if needed. If this role is not assigned, delegated resources can only be removed by a user in the customer's tenant.
-We recommend using Azure AD user groups for each role whenever possible, rather than to individual users. This gives you the flexibility to add or remove individual users to the group that has access, so that you don't have to repeat the onboarding process to make user changes. You can also assign roles to a service principal, which can be useful for automation scenarios.
+Whenever possible, we recommend using Azure AD user groups for each assignment whenever possible, rather than individual users. This gives you the flexibility to add or remove individual users to the group that has access, so that you don't have to repeat the onboarding process to make user changes. You can also assign roles to a service principal, which can be useful for automation scenarios.
> [!IMPORTANT] > In order to add permissions for an Azure AD group, the **Group type** must be set to **Security**. This option is selected when the group is created. For more information, see [Create a basic group and add members using Azure Active Directory](../../active-directory/fundamentals/active-directory-groups-create-azure-portal.md).
To track your impact across customer engagements and receive recognition, associ
## Create an Azure Resource Manager template
-To onboard your customer, you'll need to create an [Azure Resource Manager](../../azure-resource-manager/index.yml) template for your offer with the following information. The **mspOfferName** and **mspOfferDescription** values will be visible to the customer in the [Service providers page](view-manage-service-providers.md) of the Azure portal once the template is deployed in the customer's tenant.
+To onboard your customer, you'll need to create an [Azure Resource Manager](../../azure-resource-manager/index.yml) template for your offer with the following information. The `mspOfferName` and `mspOfferDescription` values will be visible to the customer in the [Service providers page](view-manage-service-providers.md) of the Azure portal once the template is deployed in the customer's tenant.
|Field |Definition | |||
-|**mspOfferName** |A name describing this definition. This value is displayed to the customer as the title of the offer and must be a unique value. |
-|**mspOfferDescription** |A brief description of your offer (for example, "Contoso VM management offer"). This field is optional, but recommended so that customers have a clear understanding of your offer. |
-|**managedByTenantId** |Your tenant ID. |
-|**authorizations** |The **principalId** values for the users/groups/SPNs from your tenant, each with a **principalIdDisplayName** to help your customer understand the purpose of the authorization, and mapped to a built-in **roleDefinitionId** value to specify the level of access. |
+|`mspOfferName` |A name describing this definition. This value is displayed to the customer as the title of the offer and must be a unique value. |
+|`mspOfferDescription` |A brief description of your offer (for example, "Contoso VM management offer"). This field is optional, but recommended so that customers have a clear understanding of your offer. |
+|`managedByTenantId` |Your tenant ID. |
+|`authorizations` |The `principalId` values for the users/groups/SPNs from your tenant, each with a `principalIdDisplayName` to help your customer understand the purpose of the authorization, and mapped to a built-in `roleDefinitionId` value to specify the level of access. |
-You can create this template in the Azure portal, or by manually modifying the templates provided in our [samples repo](https://github.com/Azure/Azure-Lighthouse-samples/).
+You can create this template in the Azure portal, or by manually modifying the templates provided in our [samples repo](https://github.com/Azure/Azure-Lighthouse-samples/).
> [!IMPORTANT] > The process described here requires a separate deployment for each subscription being onboarded, even if you are onboarding subscriptions in the same customer tenant. Separate deployments are also required if you are onboarding multiple resource groups within different subscriptions in the same customer tenant. However, onboarding multiple resource groups within a single subscription can be done in one deployment. >
-> Separate deployments are also required for multiple offers being applied to the same subscription (or resource groups within a subscription). Each offer applied must use a different **mspOfferName**.
+> Separate deployments are also required for multiple offers being applied to the same subscription (or resource groups within a subscription). Each offer applied must use a different `mspOfferName`.
### Create your template in the Azure portal To create your template in the Azure portal, go to **My customers** and then select **Create ARM Template** from the overview page.
-On the **Create ARM Template offer** Page, provide your **Name** and an optional **Description**. These values will be used for the **mspOfferName** and **mspOfferDescription** in your template. The **managedByTenantId** value will be provided automatically, based on the Azure AD tenant to which you are logged in.
+On the **Create ARM Template offer** Page, provide your **Name** and an optional **Description**. These values will be used for the `mspOfferName` and `mspOfferDescription` in your template, and they may be visible to your customer. The `managedByTenantId` value will be provided automatically, based on the Azure AD tenant to which you are logged in.
-Next, select either **Subscription** or **Resource group**, depending on the customer scope you want to onboard. If you select **Resource group**, you'll need to provide the name of the resource group to onboard. You can select the **+** icon to add additional resource groups as needed. (All of the resource groups must be in the same customer subscription.)
+Next, select either **Subscription** or **Resource group**, depending on the customer scope you want to onboard. If you select **Resource group**, you'll need to provide the name of the resource group to onboard. You can select the **+** icon to add additional resource groups in the same subscription if needed. (To onboard additional resource groups in a different subscription, you must create and deploy a separate template for that subscription.)
Finally, create your authorizations by selecting **+ Add authorization**. For each of your authorizations, provide the following details:
Finally, create your authorizations by selecting **+ Add authorization**. For ea
After you select **Add**, you'll return to the **Create ARM Template offer** screen. You can select **+ Add authorization** again to add as many authorizations as needed.
-When you've added all of your authorizations, select **View template**. On this screen, you'll see a .json file that corresponds to the values you entered. Select **Download** to save a copy of this .json file. This template can then be [deployed in the customer's tenant](#deploy-the-azure-resource-manager-template). You can also edit it manually if you need to make any changes. Note that the file is not stored in the Azure portal.
+When you've added all of your authorizations, select **View template**. On this screen, you'll see a .json file that corresponds to the values you entered. Select **Download** to save a copy of this .json file. This template can then be [deployed in the customer's tenant](#deploy-the-azure-resource-manager-template). You can also edit it manually if you need to make any changes.
+
+> [!IMPORTANT]
+> The generated template file is not stored in the Azure portal. Be sure to download a copy before you navigate away from the **Show template** screen.
### Create your template manually
If you want to include [eligible authorizations](create-eligible-authorizations.
> [!TIP] > While you can't onboard an entire management group in one deployment, you can deploy a policy to [onboard each subscription in a management group](onboard-management-group.md). You'll then have access to all of the subscriptions in the management group, although you'll have to work on them as individual subscriptions (rather than taking actions on the management group resource directly).
-The following example shows a modified **subscription.parameters.json** file that can be used to onboard a subscription. The resource group parameter files (located in the [rg-delegated-resource-management](https://github.com/Azure/Azure-Lighthouse-samples/tree/master/templates/delegated-resource-management/rg) folder) are similar, but also include an **rgName** parameter to identify the specific resource group(s) to be onboarded.
+The following example shows a modified **subscription.parameters.json** file that can be used to onboard a subscription. The resource group parameter files (located in the [rg-delegated-resource-management](https://github.com/Azure/Azure-Lighthouse-samples/tree/master/templates/delegated-resource-management/rg) folder) have a similar format, but they also include an `rgName` parameter to identify the specific resource group(s) to be onboarded.
```json {
The following example shows a modified **subscription.parameters.json** file tha
} ```
-The last authorization in the example above adds a **principalId** with the User Access Administrator role (18d7d88d-d35e-4fb5-a5c3-7773c20a72d9). When assigning this role, you must include the **delegatedRoleDefinitionIds** property and one or more supported Azure built-in roles. The user created in this authorization will be able to assign these roles to [managed identities](../../active-directory/managed-identities-azure-resources/overview.md) in the customer tenant, which is required in order to [deploy policies that can be remediated](deploy-policy-remediation.md). The user is also able to create support incidents. No other permissions normally associated with the User Access Administrator role will apply to this **principalId**.
+The last authorization in the example above adds a `principalId` with the User Access Administrator role (18d7d88d-d35e-4fb5-a5c3-7773c20a72d9). When assigning this role, you must include the `delegatedRoleDefinitionIds` property and one or more supported Azure built-in roles. The user created in this authorization will be able to assign these roles to [managed identities](../../active-directory/managed-identities-azure-resources/overview.md) in the customer tenant, which is required in order to [deploy policies that can be remediated](deploy-policy-remediation.md). The user is also able to create support incidents. No other permissions normally associated with the User Access Administrator role will apply to this `principalId`.
## Deploy the Azure Resource Manager template
When onboarding a subscription (or one or more resource groups within a subscrip
The deployment may be done by using PowerShell, by using Azure CLI, or in the Azure portal, as shown below.
-### PowerShell
+### Deploy by using PowerShell
To deploy a single template:
New-AzSubscriptionDeployment -Name <deploymentName> `
-Verbose ```
-### Azure CLI
+### Deploy by using Azure CLI
To deploy a single template:
az deployment sub create --name <deploymentName> \
--verbose ```
-### Azure portal
+### Deploy in the Azure portal
+
+To deploy a template in the Azure portal, follow the process described below. These steps must be done by a user in the customer tenant with the **Owner** role (or another role with the `Microsoft.Authorization/roleAssignments/write` permission).
-With this option, you can modify your template directly in the Azure portal and then deploy it. This must be done by a user in the customer tenant.
+1. From the [Service providers](view-manage-service-providers.md) page in the Azure portal, select **Server provider offers**.
+1. Near the top of the screen, select the arrow next to **Add offer**, and then select **Add via template**.
-1. In our [GitHub repo](https://github.com/Azure/Azure-Lighthouse-samples/), select the **Deploy to Azure** button shown next to the template you want to use. The template will open in the Azure portal.
-1. Enter your values for **Msp Offer Name**, **Msp Offer Description**, **Managed by Tenant Id**, and **Authorizations**. If you prefer, you can select **Edit parameters** to enter values for `mspOfferName`, `mspOfferDescription`, `managedbyTenantId`, and `authorizations` directly in the parameter file. Be sure to update these values rather than using the default values from the template.
+ :::image type="content" source="../media/add-offer-via-template.png" alt-text="Screenshot showing the Add via template option in the Azure portal.":::
+
+1. Upload the template by dragging and dropping it, or select **Browse for files** to find and upload the template.
+1. If applicable, select the **I have a separate parameter file** box, then upload your parameter file.
+1. After you've uploaded your template (and parameter file if needed), select **Upload**.
+1. In the **Custom deployment** screen, review the details that appear. If needed, you can make changes to these values in this screen, or by selecting **Edit parameters**.
1. Select **Review and create**, then select **Create**. After a few minutes, you should see a notification that the deployment has completed.
+> [!TIP]
+> Alternately, from our [GitHub repo](https://github.com/Azure/Azure-Lighthouse-samples/), select the **Deploy to Azure** button shown next to the template you want to use (in the **Auto-deploy** column). The example template will open in the Azure portal. If you use this process, you must update the values for **Msp Offer Name**, **Msp Offer Description**, **Managed by Tenant Id**, and **Authorizations** before you select **Review and create**.
+ ## Confirm successful onboarding When a customer subscription has successfully been onboarded to Azure Lighthouse, users in the service provider's tenant will be able to see the subscription and its resources (if they have been granted access to it through the process above, either individually or as a member of an Azure AD group with the appropriate permissions). To confirm this, check to make sure the subscription appears in one of the following ways.
-### Azure portal
+### Confirm in the Azure portal
In the service provider's tenant:
In the customer's tenant:
> [!NOTE] > It may take up to 15 minutes after your deployment is complete before the updates are reflected in the Azure portal. You may be able to see the updates sooner if you update your Azure Resource Manager token by refreshing the browser, signing in and out, or requesting a new token.
-### PowerShell
+### Confirm by using PowerShell
```azurepowershell-interactive # Log in first with Connect-AzAccount if you're not using Cloud Shell
Get-AzManagedServicesDefinition
Get-AzManagedServicesAssignment ```
-### Azure CLI
+### Confirm by using Azure CLI
```azurecli-interactive # Log in first with az login if you're not using Cloud Shell
lighthouse View Manage Customers https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/lighthouse/how-to/view-manage-customers.md
Title: View and manage customers and delegated resources in the Azure portal description: As a service provider or enterprise using Azure Lighthouse, you can view all of your delegated resources and subscriptions by going to My customers in the Azure portal. Previously updated : 09/17/2021 Last updated : 07/08/2022
Service providers using [Azure Lighthouse](../overview.md) can use the **My cust
> [!TIP] > While we'll refer to service providers and customers here, [enterprises managing multiple tenants](../concepts/enterprise.md) can use the same process to consolidate their management experience.
-To access the **My customers** page in the Azure portal, select **All services**, then search for **My customers** and select it. You can also find it by entering ΓÇ£My customersΓÇ¥ in the search box near the top of the Azure portal.
+To access the **My customers** page in the Azure portal, enter "My customers" in the search box near the top of the Azure portal. You can also select **All services**, then search for **Azure Lighthouse**, or search for "Azure Lighthouse". From the Azure Lighthouse page, select **Manage your customers**.
-Keep in mind that the top **Customers** section of the **My customers** page only shows info about customers who have delegated subscriptions or resource groups to your Azure Active Directory (Azure AD) tenant through Azure Lighthouse. If you work with other customers (such as through the [Cloud Solution Provider (CSP) program](/partner-center/csp-overview)), you wonΓÇÖt see info about those customers in the **Customers** section unless you have [onboarded their resources to Azure Lighthouse](onboard-customer.md) (though you may see details about certain CSP customers in the [Cloud Solution Provider (Preview) section](#cloud-solution-provider-preview) lower on the page).
+Keep in mind that the top **Customers** section of the **My customers** page only shows info about customers who have delegated subscriptions or resource groups to your Azure Active Directory (Azure AD) tenant through Azure Lighthouse. If you work with other customers (such as through the [Cloud Solution Provider (CSP) program](/partner-center/csp-overview)), you wonΓÇÖt see info about those customers in the **Customers** section unless you have [onboarded their resources to Azure Lighthouse](onboard-customer.md), though you may see details about certain CSP customers in the [Cloud Solution Provider (Preview) section](#cloud-solution-provider-preview) lower on the page.
> [!NOTE] > Your customers can view info about service providers by navigating to **Service providers** in the Azure portal. For more info, see [View and manage service providers](view-manage-service-providers.md).
You can change the default subscription at any time by following the steps above
> [!IMPORTANT] > Checking the **Select all** box sets the filter to show all of the subscriptions to which you *currently* have access. If you later gain access to additional subscriptionsΓÇöfor example, after you've onboarded a new customer to Azure LighthouseΓÇöthese subscriptions will not automatically be added to your filter. You'll need to return to **Directories + subscriptions** and select the additional subscriptions (or uncheck and then recheck **Select all** again).
-You can also access functionality related to delegated subscriptions or resource groups from within services that support cross-tenant management experiences by selecting the subscription or resource group from within an individual service.
+You can also work on delegated subscriptions or resource groups by selecting the subscription or resource group from within an individual service (as long as that service supports [cross-tenant management experiences](../concepts/cross-tenant-management-experience.md#enhanced-services-and-scenarios)).
## Cloud Solution Provider (Preview) A separate **Cloud Solution Provider (Preview)** section of the **My customers** page shows billing info and resources for your CSP customers who have [signed the Microsoft Customer Agreement (MCA)](/partner-center/confirm-customer-agreement) and are [under the Azure plan](/partner-center/azure-plan-get-started). For more information, see [Get started with your Microsoft Partner Agreement billing account](../../cost-management-billing/understand/mpa-overview.md).
-Such CSP customers will appear in this section whether or not you have also onboarded them to Azure Lighthouse. Similarly, a CSP customer does not have to appear in the **Cloud Solution Provider (Preview)** section of **My customers** in order for you to onboard them to Azure Lighthouse.
+These CSP customers appear in this section whether or not you have also onboarded them to Azure Lighthouse. Similarly, a CSP customer does not have to appear in the **Cloud Solution Provider (Preview)** section of **My customers** in order for you to onboard them to Azure Lighthouse.
## Next steps
lighthouse View Manage Service Providers https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/lighthouse/how-to/view-manage-service-providers.md
Title: View and manage service providers description: Customers can view info about Azure Lighthouse service providers, service provider offers, and delegated resources in the Azure portal. Previously updated : 12/16/2021 Last updated : 07/08/2022
The **Service providers** page in the [Azure portal](https://portal.azure.com) gives customers control and visibility for their service providers who use [Azure Lighthouse](../overview.md). Customers can delegate specific resources, review new or updated offers, remove service provider access, and more.
-To view this page in the Azure portal, select **All services**, then search for **Service providers** and select it. You can also find this page by entering "Service providers" or "Azure Lighthouse" in the search box near the top of the Azure portal.
+To access the **Service providers** page in the Azure portal, enter "Service providers" in the search box near the top of the Azure portal. You can also select **All services**, then search for **Azure Lighthouse**, or search for "Azure Lighthouse". From the Azure Lighthouse page, select **View service provider offers**.
> [!NOTE] > To view the **Service providers** page, a user in the customer's tenant must have the [Reader built-in role](../../role-based-access-control/built-in-roles.md#reader) (or another built-in role which includes Reader access).
In the **Delegations** column, you can see how many subscriptions and/or resourc
## Add service provider offers
-To add a new service provider offer from the **Service provider offers** page, select **Add offer**. Select **Private offers** to view offers that a service provider has published for this customer. You can then select an offer, then select **Set up + subscribe**.
+You can add a new service provider offer from the **Service provider offers** page.
+
+To add an offer from the marketplace, select the **Add offer** button in the middle of the page, or select **Add offer** near the top of the page and then choose **Add via marketplace**. If [Managed Service offers](../concepts/managed-services-offers.md) have been published specifically for this customer, select **Private offers** to view them. Select an offer to review details. To add the offer, select **Create**.
+
+To add an offer from a template, select **Add offer** near the top of the page and then choose **Add via marketplace**. This will allow you to upload a template from your service provider and onboard your subscription (or resource group). For more information, see [Deploy in the Azure portal](onboard-customer.md#deploy-in-the-azure-portal).
## Update service provider offers
After a customer has added an offer, a service provider may publish an updated v
![Update offer icon](../media/update-offer.jpg)
-After reviewing the changes, the customer can choose to update to the new version. The authorizations and other settings specified in the new version will then apply to any subscriptions and/or resource groups that have been delegated for that offer.
+After reviewing the changes, you can choose to update to the new version. The authorizations and other settings specified in the new version will then apply to any subscriptions and/or resource groups that have been delegated for that offer.
## Remove service provider offers
network-watcher Enable Network Watcher Flow Log Settings https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/network-watcher/enable-network-watcher-flow-log-settings.md
Title: Enable Azure Network Watcher | Microsoft Docs
description: Learn how to enable Network Watcher. documentationcenter: na-+ na Last updated 05/11/2022-+ # Enable Azure Network Watcher
network-watcher Supported Region Traffic Analytics https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/network-watcher/supported-region-traffic-analytics.md
Title: Azure Traffic Analytics supported regions | Microsoft Docs
description: This article provides the list of Traffic Analytics supported regions. documentationcenter: na-+ na Last updated 05/11/2022-+ ms.custon: references_regions
network-watcher Usage Scenarios Traffic Analytics https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/network-watcher/usage-scenarios-traffic-analytics.md
Title: Usage scenarios of Azure Traffic Analytics | Microsoft Docs
description: This article describes the usage scenarios of Traffic Analytics. documentationcenter: na-+ na Last updated 05/11/2022-+ # Usage scenarios
postgresql Concepts Networking https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/postgresql/flexible-server/concepts-networking.md
When using private network access with Azure virtual network, providing the priv
Using Azure Portal, CLI or ARM, you can also change private DNS Zone from the one you provided when creating your Azure Database for PostgreSQL - Flexible Server to another private DNS zone that exists the same or different subscription.
+ > [!IMPORTANT]
+ > Ability to change private DNS Zone from the one you provided when creating your Azure Database for PostgreSQL - Flexible Server to another private DNS zone is currently disabled for servers with High Availability feature enabled.
++ ### Integration with a custom DNS server If you're using a custom DNS server, you must use a DNS forwarder to resolve the FQDN of Azure Database for PostgreSQL - Flexible Server. The forwarder IP address should be [168.63.129.16](../../virtual-network/what-is-ip-address-168-63-129-16.md).
stream-analytics Stream Analytics Introduction https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/stream-analytics/stream-analytics-introduction.md
description: Learn about Azure Stream Analytics, a managed service that helps yo
Previously updated : 8/20/2021 Last updated : 07/08/2022 #Customer intent: What is Azure Stream Analytics and why should I care? As an IT Pro or developer, how do I use Stream Analytics to perform analytics on data streams? # Welcome to Azure Stream Analytics
-Azure Stream Analytics is a real-time analytics and complex event-processing engine that is designed to analyze and process high volumes of fast streaming data from multiple sources simultaneously. Patterns and relationships can be identified in information extracted from a number of input sources including devices, sensors, clickstreams, social media feeds, and applications. These patterns can be used to trigger actions and initiate workflows such as creating alerts, feeding information to a reporting tool, or storing transformed data for later use. Also, Stream Analytics is available on Azure IoT Edge runtime, enabling to process data on IoT devices.
+Azure Stream Analytics is a fully managed stream processing engine that is designed to analyze and process large volumes of streaming data with sub-millisecond latencies. Patterns and relationships can be identified in data that originates from a variety of input sources including applications, devices, sensors, clickstreams, and social media feeds. These patterns can be used to trigger actions and initiate workflows such as creating alerts, feeding information to a reporting tool, or storing transformed data for later use. Stream Analytics is also available on the Azure IoT Edge runtime, enabling to process data directly on IoT devices.
The following scenarios are examples of when you can use Azure Stream Analytics:
-* Analyze real-time telemetry streams from IoT devices
-* Web logs/clickstream analytics
+* Streaming ETL pipeline to Azure Storage in Parquet format
+* Event driven applications with Azure SQL Database and Azure Cosmos DB
+* Analyze real-time telemetry streams and logs from applications and IoT devices
+* Real-time dashboarding with Power BI
+* Anomaly detection to detect spikes, dips, and slow positive and negative changes in sensor values
* Geospatial analytics for fleet management and driverless vehicles * Remote monitoring and predictive maintenance of high value assets
-* Real-time analytics on Point of Sale data for inventory control and anomaly detection
+* Clickstream analytics to determine customer behavior
You can try Azure Stream Analytics with a free Azure subscription. > [!div class="nextstepaction"] > [Try Azure Stream Analytics](https://azure.microsoft.com/services/stream-analytics/)
-## How does Stream Analytics work?
-
-An Azure Stream Analytics job consists of an input, query, and an output. Stream Analytics ingests data from Azure Event Hubs (including Azure Event Hubs from Apache Kafka), Azure IoT Hub, or Azure Blob Storage. The query, which is based on SQL query language, can be used to easily filter, sort, aggregate, and join streaming data over a period of time. You can also extend this SQL language with JavaScript and C# user-defined functions (UDFs). You can easily adjust the event ordering options and duration of time windows when performing aggregation operations through simple language constructs and/or configurations.
-
-Each job has one or several outputs for the transformed data, and you can control what happens in response to the information you've analyzed. For example, you can:
-
-* Send data to services such as Azure Functions, Service Bus Topics or Queues to trigger communications or custom workflows downstream.
-* Send data to a Power BI dashboard for real-time dashboarding.
-* Store data in other Azure storage services (for example, Azure Data Lake, Azure Synapse Analytics, etc.) to train a machine learning model based on historical data or perform batch analytics.
-
-The following image shows how data is sent to Stream Analytics, analyzed, and sent for other actions like storage or presentation:
- ![Stream Analytics intro pipeline](./media/stream-analytics-introduction/stream-analytics-e2e-pipeline.png) ## Key capabilities and benefits
-Azure Stream Analytics is designed to be easy to use, flexible, reliable, and scalable to any job size. It is available across multiple Azure regions, and runs on IoT Edge or Azure Stack.
-
-## Ease of getting started
+## Ease of use
Azure Stream Analytics is easy to start. It only takes a few clicks to connect to multiple sources and sinks, creating an end-to-end pipeline. Stream Analytics can connect to Azure Event Hubs and Azure IoT Hub for streaming data ingestion, as well as Azure Blob storage to ingest historical data. Job input can also include static or slow-changing reference data from Azure Blob storage or SQL Database that you can join to streaming data to perform lookup operations.
-Stream Analytics can route job output to many storage systems such as Azure Blob storage, Azure SQL Database, Azure Data Lake Store, and Azure CosmosDB. You can also run batch analytics on stream outputs with Azure Synapse Analytics or HDInsight, or you can send the output to another service, like Event Hubs for consumption or Power BI for real-time visualization.
+Stream Analytics can route job output to many storage systems such as Azure Blob storage, Azure SQL Database, Azure Data Lake Store, and Azure Cosmos DB. You can also run batch analytics on stream outputs with Azure Synapse Analytics or HDInsight, or you can send the output to another service, like Event Hubs for consumption or Power BI for real-time visualization.
For the entire list of Stream Analytics outputs, see [Understand outputs from Azure Stream Analytics](stream-analytics-define-outputs.md).
For the entire list of Stream Analytics outputs, see [Understand outputs from Az
Azure Stream Analytics uses a SQL query language that has been augmented with powerful temporal constraints to analyze data in motion. You can also create jobs by using developer tools like Azure PowerShell, Azure CLI, Stream Analytics Visual Studio tools, the [Stream Analytics Visual Studio Code extension](quick-create-visual-studio-code.md), or Azure Resource Manager templates. Using developer tools allows you to develop transformation queries offline and use the CI/CD pipeline to submit jobs to Azure.
-The Stream Analytics query language allows to perform CEP (Complex Event Processing) by offering a wide array of functions for analyzing streaming data. This query language supports simple data manipulation, aggregation and analytics functions, geospatial functions, pattern matching and anomaly detection. You can edit queries in the portal or using our development tools, and test them using sample data that is extracted from a live stream.
+The Stream Analytics query language allows you to perform CEP (Complex Event Processing) by offering a wide array of functions for analyzing streaming data. This query language supports simple data manipulation, aggregation and analytics functions, geospatial functions, pattern matching and anomaly detection. You can edit queries in the portal or using our development tools, and test them using sample data that is extracted from a live stream.
You can extend the capabilities of the query language by defining and invoking additional functions. You can define function calls in the Azure Machine Learning to take advantage of Azure Machine Learning solutions, and integrate JavaScript or C# user-defined functions (UDFs) or user-defined aggregates to perform complex calculations as part a Stream Analytics query.
You can extend the capabilities of the query language by defining and invoking a
Azure Stream Analytics is a fully managed (PaaS) offering on Azure. You don't have to provision any hardware or infrastructure, update OS or software. Azure Stream Analytics fully manages your job, so you can focus on your business logic and not on the infrastructure. - ## Run in the cloud or on the intelligent edge Azure Stream Analytics can run in the cloud, for large-scale analytics, or run on IoT Edge or Azure Stack for ultra-low latency analytics. Azure Stream Analytics uses the same tools and query language on both cloud and the edge, enabling developers to build truly hybrid architectures for stream processing.
stream-analytics Stream Analytics Resource Model https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/stream-analytics/stream-analytics-resource-model.md
+
+ Title: Azure Stream Analytics resource model
+description: This article describes Azure Stream Analytics resource model which includes the Azure Stream Analytics input, output, and query.
++++ Last updated : 07/08/2022++
+# Azure Stream Analytics resource model
+
+Azure Stream Analytics is a fully managed platform-as-a-service (PaaS) for stream processing. This article describes the resource model for Stream Analytics by introducing the concept of a Stream Analytics cluster, job and the components of a job.
+
+## Stream Analytics job
+A Stream Analytics job is the fundamental unit in Stream Analytics that allows you to define and run your stream processing logic. A job consists of 3 main components:
+* Input
+* Output
+* Query
+
+### Input
+A job can have one or more inputs to continuously read data from. These streaming input data sources could be an Azure Event Hubs, Azure IoT Hub or Azure Storage. Stream Analytics also supports reading static or slow changing input data (called reference data) which is often used to enrich streaming data. Adding these inputs to your job is a zero-code operation.
+
+### Output
+A job can have one or more outputs to continuously write data to. Stream Analytics supports 12 different output sinks including Azure SQL Database, Azure Data Lake Storage, Azure Cosmos DB, Power BI and more. Adding these outputs to your job is also a zero-code operation.
+
+### Query
+You can implement your stream processing logic by writing a SQL query in your job. The rich SQL language support allows you to tackle scenarios such as parsing complex JSON, filtering values, computing aggregates, performing joins, and even more advanced use cases such as geospatial analytics and anomaly detection. You can also extend this SQL language with JavaScript user-defined-functions (UDF) and user-defined-aggregates (UDA). Stream Analytics also allows you to easily adjust for late and out-of-order events through simple configurations in your job's settings. You can also choose to execute your query based on input event's arrival time at the input source or when the event was generated at the event source.
+
+## Running a job
+Once you have developed your job by configuring inputs, output and a query, you can start your job by specifying number of Streaming Units. Once your job has started, it goes into a **Running** state and will stay in that state until explicitly stopped or it runs into an unrecoverable failure. When the job is in a running state, it continuously pulls data from your input sources, executes the query logic which produces results that get written to your output sinks with milliseconds end-to-end latency.
+
+When your job is started, the Stream Analytics service takes care of compiling your query and assigns certain amount of compute and memory based on the number of Streaming Units configured in your job. You don't have to worry about any underlying infrastructure as cluster maintenance, security patches as that is automatically taken care by the platform. When running jobs in the Standard SKU, you are charged for the Streaming Units only when the job runs.
+
+## Stream Analytics cluster
+By default, Stream Analytics jobs run in the Standard multi-tenant environment which forms the Standard SKU. Stream Analytics also provides a Dedicated SKU where you can provision an entire Stream Analytics cluster that belongs to you. Doing so gives you full control of which jobs run on your cluster. The minimum size of a Stream Analytics cluster is 36 Streaming Units and you are charged for the entire cluster capacity from when it gets provisioned. You can learn more about the [benefits of Stream Analytics clusters and when to use it](cluster-overview.md).
+++
+## Next steps
+
+Learn how to manage your Azure Stream Analytics and other concepts:
+
+* [Build a fraud detection solution using Stream Analytics](stream-analytics-real-time-fraud-detection.md)
+* [Inputs overview](stream-analytics-add-inputs.md)
+* [Outputs overview](stream-analytics-define-outputs.md)
+* [Developing a query](stream-analytics-test-query.md)