Skip to content

Commit c1c73e6

Browse files
committed
Restructure registry endpoint doc: deduplicate auth sections
- 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)
1 parent 6751027 commit c1c73e6

1 file changed

Lines changed: 64 additions & 89 deletions

File tree

articles/iot-operations/develop-edge-apps/howto-configure-registry-endpoint.md

Lines changed: 64 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,6 @@ Data flow graphs and the HTTP/REST connector use registry endpoints to pull WebA
2323
- AWS Elastic Container Registry
2424
- Google Container Registry
2525

26-
The examples in this article show how to configure a registry endpoint using ACR.
27-
2826
## Prerequisites
2927

3028
- 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
3735
- 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.
3836
- 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.
3937

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)
5939

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.
6141

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**.
7043

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**.
7245

73-
### Create registry endpoints with artifact secrets
46+
1. Enter the following settings:
7447

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). |
7653

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.
7856
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":::
8058

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).
8260

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**.
8462

8563
# [Bicep](#tab/bicep)
8664

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:
8866

8967
```bicep
9068
param aioInstanceName string = '<AIO_INSTANCE_NAME>'
@@ -125,9 +103,11 @@ Deploy the Bicep file by using Azure CLI:
125103
az deployment group create --resource-group <RESOURCE_GROUP> --template-file <FILE>.bicep
126104
```
127105

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+
128108
# [Kubernetes (preview)](#tab/kubernetes)
129109

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:
131111

132112
```yaml
133113
apiVersion: connectivity.iotoperations.azure.com/v1beta1
@@ -149,34 +129,36 @@ Apply the manifest file to the Kubernetes cluster:
149129
kubectl apply -f <FILE>.yaml
150130
```
151131

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+
152134
---
153135

154136
> [!NOTE]
155137
> You can reuse registry endpoints across multiple data flow graphs and other Azure IoT Operations components, like Akri connectors.
156138
157139
## Configuration options
158140

159-
This section describes the configuration options available for registry endpoints.
160-
161141
### Host
162142

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`.
164144

165145
> [!IMPORTANT]
166146
> 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.
167147
168148
**Examples**:
149+
169150
- `myregistry.azurecr.io` (Azure Container Registry)
151+
- `mcr.microsoft.com` (Microsoft Container Registry)
170152
- `ghcr.io/azure-samples/explore-iot-operations` (GitHub Container Registry with path)
171153
- `docker.io/myorg` (Docker Hub)
172154

173155
### Authentication methods
174156

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.
176158

177159
#### System-assigned managed identity
178160

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.
180162

181163
Before configuring the registry endpoint, ensure the Azure IoT Operations system-assigned managed identity has the necessary permissions:
182164

@@ -187,11 +169,11 @@ Before configuring the registry endpoint, ensure the Azure IoT Operations system
187169
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**.
188170
1. Select **Review + assign** to complete the role assignment.
189171

190-
The following snippet shows how to configure system-assigned managed identity authentication:
172+
# [Azure portal](#tab/portal)
191173

192-
# [Operations experience](#tab/portal)
174+
In the Azure portal, select **System managed identity** as the authentication method when creating the registry endpoint.
193175

194-
When creating a registry endpoint 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 identity authentication configuration for registry endpoint." lightbox="media/howto-configure-registry-endpoint/system-managed-identity.png":::
195177

196178
# [Bicep](#tab/bicep)
197179

@@ -200,8 +182,6 @@ authentication: {
200182
method: 'SystemAssignedManagedIdentity'
201183
systemAssignedManagedIdentitySettings: {
202184
audience: 'https://management.azure.com/'
203-
extensionName: null // Optional: specific extension name
204-
tenantId: null // Optional: specific tenant ID
205185
}
206186
}
207187
```
@@ -218,27 +198,26 @@ spec:
218198
219199
---
220200
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 |
228206

229207
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/`.
230208

231209
#### User-assigned managed identity
232210

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.
234212

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)
236214

237-
The following snippet shows how to configure user-assigned managed identity authentication:
215+
In the Azure portal, select **User managed identity** as the authentication method and enter the client ID and tenant ID.
238216

239-
# [Operations experience](#tab/portal)
217+
> [!NOTE]
218+
> The client and tenant IDs are required to enable user managed identity.
240219

241-
When creating a registry endpoint 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 identity authentication configuration for registry endpoint." lightbox="media/howto-configure-registry-endpoint/user-managed-identity.png":::
242221

243222
# [Bicep](#tab/bicep)
244223

@@ -248,7 +227,6 @@ authentication: {
248227
userAssignedManagedIdentitySettings: {
249228
clientId: '<CLIENT_ID>'
250229
tenantId: '<TENANT_ID>'
251-
scope: null // Optional: specific scope
252230
}
253231
}
254232
```
@@ -266,13 +244,11 @@ spec:
266244

267245
---
268246

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 |
276252

277253
The operator attempts to infer the scope from the endpoint if you don't provide it.
278254

@@ -290,11 +266,15 @@ kubectl create secret docker-registry my-registry-secret \
290266
-n azure-iot-operations
291267
```
292268

293-
The following snippet shows how to configure artifact pull secret authentication:
269+
# [Azure portal](#tab/portal)
294270

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.
296272

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":::
298278

299279
# [Bicep](#tab/bicep)
300280

@@ -321,13 +301,13 @@ spec:
321301

322302
#### Anonymous authentication
323303

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.
325305

326-
The following snippet shows how to configure anonymous authentication:
306+
# [Azure portal](#tab/portal)
327307

328-
# [Operations experience](#tab/portal)
308+
In the Azure portal, select **Anonymous** as the authentication method.
329309

330-
When creating a registry endpoint 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":::
331311

332312
# [Bicep](#tab/bicep)
333313

@@ -351,23 +331,26 @@ spec:
351331

352332
## Azure Container Registry integration
353333

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.
355335

356336
### Prerequisites for ACR
357337

358338
1. **Create an ACR instance**: If you don't have one, create an ACR instance in your subscription.
359339
1. **Configure permissions**: Ensure the Azure IoT Operations managed identity has `AcrPull` permissions on the registry.
360340
1. **Push artifacts**: Upload your WASM modules and graph definitions to the registry using tools like ORAS CLI.
361341

362-
## Use a public registry like GitHub Container Registry (ghcr.io)
342+
## Use a public registry
363343

364344
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.
365345

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+
366349
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.
367350

368-
# [Operations experience](#tab/portal)
351+
# [Azure portal](#tab/portal)
369352

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.
371354

372355
# [Bicep](#tab/bicep)
373356

@@ -413,15 +396,7 @@ After you create this registry endpoint, you can reference it in your data flow
413396

414397
## Other container registries
415398

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.
425400

426401
## Next steps
427402

0 commit comments

Comments
 (0)