You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- Create section: step-by-step portal walkthrough (navigate to instance,
click Create, fill in name/host/auth, Create) instead of showing each
auth method as a separate sub-flow
- Move auth screenshots to Configuration Options > Authentication Methods
where each method has its own portal/Bicep/K8s tabs
- Note Azure portal limitation: only accepts ACR and MCR hostnames;
other registries (ghcr.io, Docker Hub) require Bicep or K8s
- Remove redundant overview section that duplicated intro
- All tab groups use consistent portal/bicep/kubernetes IDs
- All screenshots now referenced (no orphans)
Copy file name to clipboardExpand all lines: articles/iot-operations/develop-edge-apps/howto-configure-registry-endpoint.md
+64-89Lines changed: 64 additions & 89 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -23,8 +23,6 @@ Data flow graphs and the HTTP/REST connector use registry endpoints to pull WebA
23
23
- AWS Elastic Container Registry
24
24
- Google Container Registry
25
25
26
-
The examples in this article show how to configure a registry endpoint using ACR.
27
-
28
26
## Prerequisites
29
27
30
28
- An instance of [Azure IoT Operations](../deploy-iot-ops/howto-deploy-iot-operations.md), version 1.2 or later.
@@ -37,54 +35,34 @@ A registry endpoint defines the connection to your container registry. Data flow
37
35
- You can use any graphs you [pushed to your container registry](howto-deploy-wasm-graph-definitions.md#push-modules-to-your-registry) in the operations experience in data flow graphs.
38
36
- You can use any [custom connectors you pushed](howto-build-akri-connectors-vscode.md#publish-a-connector-image) to your container registry in the operations experience to create device inbound endpoints.
39
37
40
-
# [Operations experience](#tab/portal)
41
-
42
-
Use the operations experience to create registry endpoints. The portal experience prompts you to specify and provide host details of an ACR, and optionally provide credentials. Before you begin, make sure you have the following information:
43
-
44
-
- Registry endpoint name.
45
-
- A host name for the ACR.
46
-
- Authentication type: Anonymous, System managed identity, User managed identity, or Artifact secret.
47
-
48
-
To create a registry endpoint, follow these steps.
49
-
50
-
### Create registry endpoints with anonymous authentication
51
-
52
-
Create a new registry endpoint by specifying the host details of an ACR. Enable anonymous access for public image retrieval, and store the configuration for reuse. First, select the type of authentication you want to use. In this example, use anonymous authentication:
53
-
54
-
:::image type="content" source="media/howto-configure-registry-endpoint/select-authentication.png" alt-text="Screenshot of the select authentication form." lightbox="media/howto-configure-registry-endpoint/select-authentication.png":::
55
-
56
-
:::image type="content" source="media/howto-configure-registry-endpoint/authentication-anonymous.png" alt-text="Screenshot of the completed anonymous authentication configuration for registry endpoint." lightbox="media/howto-configure-registry-endpoint/authentication-anonymous.png":::
57
-
58
-
### Create registry endpoints with system managed identity authentication
38
+
# [Azure portal](#tab/portal)
59
39
60
-
Create a new registry endpoint by specifying the host details of an ACR. Authenticate by using a system-assigned managed identity for secure access, and store the configuration for reuse.
40
+
1. In the [Azure portal](https://portal.azure.com), go to your Azure IoT Operations instance.
61
41
62
-
:::image type="content" source="media/howto-configure-registry-endpoint/system-managed-identity.png" alt-text="Screenshot of the completed system managed identity authentication configuration for registry endpoint." lightbox="media/howto-configure-registry-endpoint/system-managed-identity.png":::
63
-
64
-
### Create registry endpoints with user managed identity
65
-
66
-
Create a new registry endpoint by specifying the host details of an ACR. Authenticate by using a user-assigned managed identity for secure access. Store the configuration for reuse.
67
-
68
-
> [!NOTE]
69
-
> The client and tenant IDs are required to enable user managed identity.
42
+
1. Under **Components**, select **Registry endpoints**.
70
43
71
-
:::image type="content" source="media/howto-configure-registry-endpoint/user-managed-identity.png" alt-text="Screenshot of the completed user managed identity authentication configuration for registry endpoint." lightbox="media/howto-configure-registry-endpoint/user-managed-identity.png":::
44
+
1. Select **+ Create a registry endpoint**.
72
45
73
-
### Create registry endpoints with artifact secrets
46
+
1. Enter the following settings:
74
47
75
-
Use artifact secrets to authenticate with private container registries like ACR, Docker Hub, or MCR when pulling container images. Secrets are essential when the registry requires credentials and the image isn't publicly accessible. You can set up artifact secrets from Microsoft Azure Key Vault by selecting existing secrets.
48
+
| Setting | Description |
49
+
|---------|-------------|
50
+
|**Registry endpoint name**| A unique name for the registry endpoint. |
51
+
|**Hostname**| The hostname of the container registry. For ACR, use the format `<registry-name>.azurecr.io`. For MCR, use `mcr.microsoft.com`. For details about the hostname format, see [Host](#host). |
52
+
|**Authentication**| The authentication method. Choose from: [Anonymous](#anonymous-authentication), [Artifact secret](#artifact-pull-secret), [System managed identity](#system-assigned-managed-identity), or [User managed identity](#user-assigned-managed-identity). |
76
53
77
-
Create a new registry endpoint by specifying the host details of an ACR. Authenticate by using artifact secrets for secure access and store the configuration for reuse:
54
+
> [!NOTE]
55
+
> The Azure portal currently only accepts hostnames in the format `<your-registry-name>.azurecr.io` or `mcr.microsoft.com`. To use other registries like GitHub Container Registry (ghcr.io) or Docker Hub, use Bicep or Kubernetes to create the registry endpoint instead.
78
56
79
-
:::image type="content" source="media/howto-configure-registry-endpoint/secrets.png" alt-text="Screenshot of the Azure Key Vault secret selection interface for artifact secrets." lightbox="media/howto-configure-registry-endpoint/secrets.png":::
57
+
:::image type="content" source="media/howto-configure-registry-endpoint/select-authentication.png" alt-text="Screenshot of the registry endpoint creation form showing name, host, and authentication options." lightbox="media/howto-configure-registry-endpoint/select-authentication.png":::
80
58
81
-
Set up artifact secrets from Azure Key Vault by creating new secrets and storing them in Azure Key Vault:
59
+
1. Configure the authentication settings for your chosen method. For details on each method, see [Authentication methods](#authentication-methods).
82
60
83
-
:::image type="content" source="media/howto-configure-registry-endpoint/secret-form.png" alt-text="Screenshot of the create new secret form in Azure Key Vault for artifact secrets." lightbox="media/howto-configure-registry-endpoint/secret-form.png":::
61
+
1. Select **Create**.
84
62
85
63
# [Bicep](#tab/bicep)
86
64
87
-
Create a Bicep `.bicep` file with the following content. This example uses system-assigned managed identity authentication:
65
+
Create a Bicep `.bicep` file with the following content. This example uses system-assigned managed identity authentication with ACR:
@@ -125,9 +103,11 @@ Deploy the Bicep file by using Azure CLI:
125
103
az deployment group create --resource-group <RESOURCE_GROUP> --template-file <FILE>.bicep
126
104
```
127
105
106
+
For other authentication methods, see [Authentication methods](#authentication-methods). To use a public registry like ghcr.io, see [Use a public registry](#use-a-public-registry).
107
+
128
108
# [Kubernetes (preview)](#tab/kubernetes)
129
109
130
-
Create a Kubernetes manifest `.yaml` file with the following content. This example uses system-assigned managed identity authentication:
110
+
Create a Kubernetes manifest `.yaml` file with the following content. This example uses system-assigned managed identity authentication with ACR:
@@ -149,34 +129,36 @@ Apply the manifest file to the Kubernetes cluster:
149
129
kubectl apply -f <FILE>.yaml
150
130
```
151
131
132
+
For other authentication methods, see [Authentication methods](#authentication-methods). To use a public registry like ghcr.io, see [Use a public registry](#use-a-public-registry).
133
+
152
134
---
153
135
154
136
> [!NOTE]
155
137
> You can reuse registry endpoints across multiple data flow graphs and other Azure IoT Operations components, like Akri connectors.
156
138
157
139
## Configuration options
158
140
159
-
This section describes the configuration options available for registry endpoints.
160
-
161
141
### Host
162
142
163
-
The `host` property specifies the container registry hostname. For ACR, use the format `<registry-name>.azurecr.io`. The host property supports HTTPS URLs or just the hostname.
143
+
The `host` property specifies the container registry hostname and optional path prefix. For ACR, use the format `<registry-name>.azurecr.io`.
164
144
165
145
> [!IMPORTANT]
166
146
> The `host` field must include the full path prefix that matches your artifact references. For example, if your artifacts are at `ghcr.io/azure-samples/explore-iot-operations/temperature:1.0.0`, set `host` to `ghcr.io/azure-samples/explore-iot-operations` (not just `ghcr.io`). The runtime matches the host as a prefix against the artifact reference. If the host doesn't match, you see "No valid registry endpoint configuration found" in the WASM graph controller logs.
-`ghcr.io/azure-samples/explore-iot-operations` (GitHub Container Registry with path)
171
153
-`docker.io/myorg` (Docker Hub)
172
154
173
155
### Authentication methods
174
156
175
-
Registry endpoints support several authentication methods to securely access container registries.
157
+
Registry endpoints support several authentication methods. The method you choose depends on your container registry and security requirements.
176
158
177
159
#### System-assigned managed identity
178
160
179
-
System-assigned managed identity uses the Azure IoT Operations instance's built-in identity to authenticate with the registry. Use this approach for ACR as it eliminates the need for managing credentials.
161
+
System-assigned managed identity uses the Azure IoT Operations instance's built-in identity to authenticate with the registry. Use this approach for ACR because it eliminates the need for managing credentials.
180
162
181
163
Before configuring the registry endpoint, ensure the Azure IoT Operations system-assigned managed identity has the necessary permissions:
182
164
@@ -187,11 +169,11 @@ Before configuring the registry endpoint, ensure the Azure IoT Operations system
187
169
1. On the **Members** tab, for **Assign access to**, select **User, group, or service principal**, then select **+ Select members** and search for the Azure IoT Operations Arc extension name. Choose the extension and select **Select**.
188
170
1. Select **Review + assign** to complete the role assignment.
189
171
190
-
The following snippet shows how to configure system-assigned managed identity authentication:
172
+
# [Azure portal](#tab/portal)
191
173
192
-
# [Operations experience](#tab/portal)
174
+
In the Azure portal, select **System managed identity** as the authentication method when creating the registry endpoint.
193
175
194
-
When creating a registryendpoint in the operations experience, select **System managed identity** as the authentication method. See the screenshot in [Create registry endpoints with system managed identity authentication](#create-registry-endpoints-with-system-managed-identity-authentication).
176
+
:::image type="content" source="media/howto-configure-registry-endpoint/system-managed-identity.png" alt-text="Screenshot of the completed system managed identityauthentication configuration for registry endpoint." lightbox="media/howto-configure-registry-endpoint/system-managed-identity.png":::
195
177
196
178
# [Bicep](#tab/bicep)
197
179
@@ -200,8 +182,6 @@ authentication: {
200
182
method: 'SystemAssignedManagedIdentity'
201
183
systemAssignedManagedIdentitySettings: {
202
184
audience: 'https://management.azure.com/'
203
-
extensionName: null // Optional: specific extension name
204
-
tenantId: null // Optional: specific tenant ID
205
185
}
206
186
}
207
187
```
@@ -218,27 +198,26 @@ spec:
218
198
219
199
---
220
200
221
-
**System-assigned managed identity settings**:
222
-
223
-
| Property | Description | Required | Type |
224
-
|----------|-------------|----------|------|
225
-
| `audience` | Audience of the service to authenticate against. | No | String |
226
-
| `extensionName` | Specific extension name to use. | No | String |
227
-
| `tenantId` | Tenant ID for authentication. | No | String |
201
+
| Property | Description | Required |
202
+
|----------|-------------|----------|
203
+
| `audience` | Audience of the service to authenticate against. | No |
204
+
| `extensionName` | Specific extension name to use. | No |
205
+
| `tenantId` | Tenant ID for authentication. | No |
228
206
229
207
The operator attempts to infer the audience from the endpoint if you don't provide it. For ACR, the audience is typically `https://management.azure.com/`.
230
208
231
209
#### User-assigned managed identity
232
210
233
-
User-assigned managed identity allows you to use a specific managed identity that you create and configure with the necessary permissions.
211
+
User-assigned managed identity allows you to use a specific managed identity that you create and configure with the necessary permissions. Before configuring the registry endpoint, ensure the user-assigned managed identity has the `AcrPull` role on your container registry.
234
212
235
-
Before configuring the registry endpoint, ensure the user-assigned managed identity has the `AcrPull` role on your container registry.
213
+
# [Azure portal](#tab/portal)
236
214
237
-
The following snippet shows how to configure user-assigned managed identityauthentication:
215
+
In the Azure portal, select **User managed identity** as the authentication method and enter the client ID and tenant ID.
238
216
239
-
# [Operations experience](#tab/portal)
217
+
> [!NOTE]
218
+
> The client and tenant IDs are required to enable user managed identity.
240
219
241
-
When creating a registryendpoint in the operations experience, select **User managed identity** as the authentication method. Enter the client ID and tenant ID. See the screenshot in [Create registry endpoints with user managed identity](#create-registry-endpoints-with-user-managed-identity).
220
+
:::image type="content" source="media/howto-configure-registry-endpoint/user-managed-identity.png" alt-text="Screenshot of the completed user managed identityauthentication configuration for registry endpoint." lightbox="media/howto-configure-registry-endpoint/user-managed-identity.png":::
242
221
243
222
# [Bicep](#tab/bicep)
244
223
@@ -248,7 +227,6 @@ authentication: {
248
227
userAssignedManagedIdentitySettings: {
249
228
clientId: '<CLIENT_ID>'
250
229
tenantId: '<TENANT_ID>'
251
-
scope: null // Optional: specific scope
252
230
}
253
231
}
254
232
```
@@ -266,13 +244,11 @@ spec:
266
244
267
245
---
268
246
269
-
**User-assigned managed identity settings**:
270
-
271
-
| Property | Description | Required | Type |
272
-
|----------|-------------|----------|------|
273
-
| `clientId` | Client ID for the user-assigned managed identity. | Yes | String |
274
-
| `tenantId` | Tenant ID where the managed identity is located. | Yes | String |
275
-
| `scope` | Scope of the resource with `.default` suffix. | No | String |
247
+
| Property | Description | Required |
248
+
|----------|-------------|----------|
249
+
| `clientId` | Client ID for the user-assigned managed identity. | Yes |
250
+
| `tenantId` | Tenant ID where the managed identity is located. | Yes |
251
+
| `scope` | Scope of the resource with `.default` suffix. | No |
276
252
277
253
The operator attempts to infer the scope from the endpoint if you don't provide it.
The following snippet shows how to configure artifact pull secret authentication:
269
+
# [Azure portal](#tab/portal)
294
270
295
-
# [Operations experience](#tab/portal)
271
+
In the Azure portal, select **Artifact secret** as the authentication method. You can select existing secrets from Azure Key Vault or create new ones.
296
272
297
-
When creating a registry endpoint in the operations experience, select **Artifact secret** as the authentication method. See the screenshot in [Create registry endpoints with artifact secrets](#create-registry-endpoints-with-artifact-secrets).
273
+
:::image type="content" source="media/howto-configure-registry-endpoint/secrets.png" alt-text="Screenshot of the Azure Key Vault secret selection interface for artifact secrets." lightbox="media/howto-configure-registry-endpoint/secrets.png":::
274
+
275
+
To create new secrets and store them in Azure Key Vault:
276
+
277
+
:::image type="content" source="media/howto-configure-registry-endpoint/secret-form.png" alt-text="Screenshot of the create new secret form in Azure Key Vault for artifact secrets." lightbox="media/howto-configure-registry-endpoint/secret-form.png":::
298
278
299
279
# [Bicep](#tab/bicep)
300
280
@@ -321,13 +301,13 @@ spec:
321
301
322
302
#### Anonymous authentication
323
303
324
-
Anonymous authentication is used for public registries that don't require authentication.
304
+
Anonymous authentication is used for public registries that don't require credentials.
325
305
326
-
The following snippet shows how to configure anonymous authentication:
306
+
# [Azure portal](#tab/portal)
327
307
328
-
# [Operations experience](#tab/portal)
308
+
In the Azure portal, select **Anonymous** as the authentication method.
329
309
330
-
When creating a registryendpoint in the operations experience, select **Anonymous** as the authentication method. See the screenshot in [Create registry endpoints with anonymous authentication](#create-registry-endpoints-with-anonymous-authentication).
310
+
:::image type="content" source="media/howto-configure-registry-endpoint/authentication-anonymous.png" alt-text="Screenshot of the completed anonymous authentication configuration for registry endpoint." lightbox="media/howto-configure-registry-endpoint/authentication-anonymous.png":::
331
311
332
312
# [Bicep](#tab/bicep)
333
313
@@ -351,23 +331,26 @@ spec:
351
331
352
332
## Azure Container Registry integration
353
333
354
-
ACR is the recommended container registry for Azure IoT Operations. ACR provides secure, private Docker container registries with integrated authentication through Microsoft Entra ID (Entra ID).
334
+
ACR is the recommended container registry for Azure IoT Operations. ACR provides secure, private Docker container registries with integrated authentication through Microsoft Entra ID.
355
335
356
336
### Prerequisites for ACR
357
337
358
338
1. **Create an ACR instance**: If you don't have one, create an ACR instance in your subscription.
359
339
1. **Configure permissions**: Ensure the Azure IoT Operations managed identity has `AcrPull` permissions on the registry.
360
340
1. **Push artifacts**: Upload your WASM modules and graph definitions to the registry using tools like ORAS CLI.
361
341
362
-
## Use a public registry like GitHub Container Registry (ghcr.io)
342
+
## Use a public registry
363
343
364
344
You can configure a registry endpoint to point directly at a public OCI-compatible registry. This approach lets you use prebuilt WASM modules and graph definitions without setting up your own private registry, which is ideal for getting started quickly or for evaluation.
365
345
346
+
> [!NOTE]
347
+
> The Azure portal currently only supports ACR and MCR hostnames when creating registry endpoints. To configure a registry endpoint for a public registry like ghcr.io, use Bicep or Kubernetes instead.
348
+
366
349
For example, the Azure IoT Operations sample WASM modules and graph definitions are published at `ghcr.io/azure-samples/explore-iot-operations`. You can create a registry endpoint that points directly to this public registry by using anonymous authentication.
367
350
368
-
# [Operations experience](#tab/portal)
351
+
# [Azure portal](#tab/portal)
369
352
370
-
When creating a registry endpoint in the operations experience, enter `ghcr.io/azure-samples/explore-iot-operations` as the host name and select **Anonymous** as the authentication method.
353
+
The Azure portal doesn't currently support creating registry endpoints for public registries other than MCR. Use the Bicep or Kubernetes tab instead.
371
354
372
355
# [Bicep](#tab/bicep)
373
356
@@ -413,15 +396,7 @@ After you create this registry endpoint, you can reference it in your data flow
413
396
414
397
## Other container registries
415
398
416
-
Registry endpoints support any OCI-compatible container registry, including:
417
-
418
-
- Docker Hub
419
-
- GitHub Container Registry (ghcr.io)
420
-
- Harbor
421
-
- AWS Elastic Container Registry (ECR)
422
-
- Google Container Registry (GCR)
423
-
424
-
For public registries, use anonymous authentication. For private registries, use artifact pull secrets or managed identity authentication as appropriate.
399
+
Registry endpoints support any OCI-compatible container registry, including Docker Hub, GitHub Container Registry (ghcr.io), Harbor, AWS Elastic Container Registry (ECR), and Google Container Registry (GCR). For public registries, use [anonymous authentication](#anonymous-authentication). For private registries, use [artifact pull secrets](#artifact-pull-secret) or managed identity authentication as appropriate.
0 commit comments