{
    "properties": {
        "displayName": "Deploy - Configure Azure IoT Hubs to use private DNS zones",
        "policyType": "BuiltIn",
        "mode": "Indexed",
        "description": "Azure Private DNS provides a reliable, secure DNS service to manage and resolve domain names in a virtual network without the need to add a custom DNS solution. You can use private DNS zones to override the DNS resolution by using your own custom domain names for a private endpoint. This policy deploys a private DNS Zone for IoT Hub private endpoints.",
        "metadata": {
            "version": "1.0.0",
            "category": "Internet of Things"
        },
        "parameters": {
            "privateDnsZoneId": {
                "type": "String",
                "metadata": {
                    "displayName": "Private DNS Zone ID",
                    "description": "Specifies the private DNS zone to use to configure private endpoint",
                    "strongType": "Microsoft.Network/privateDnsZones"
                }
            },
            "effect": {
                "type": "String",
                "metadata": {
                    "displayName": "Effect",
                    "description": "Enable or disable the execution of the policy"
                },
                "allowedValues": [
                    "deployIfNotExists",
                    "disabled"
                ],
                "defaultValue": "deployIfNotExists"
            }
        },
        "policyRule": {
            "if": {
                "allOf": [
                    {
                        "field": "type",
                        "equals": "Microsoft.Network/privateEndpoints"
                    },
                    {
                        "count": {
                            "field": "Microsoft.Network/privateEndpoints/privateLinkServiceConnections[*].groupIds[*]",
                            "where": {
                                "field": "Microsoft.Network/privateEndpoints/privateLinkServiceConnections[*].groupIds[*]",
                                "equals": "iotHub"
                            }
                        },
                        "greaterOrEquals": 1
                    }
                ]
            },
            "then": {
                "effect": "[parameters('effect')]",
                "details": {
                    "type": "Microsoft.Network/privateEndpoints/privateDnsZoneGroups",
                    "roleDefinitionIds": [
                        "/providers/Microsoft.Authorization/roleDefinitions/4d97b98b-1d4f-4787-a291-c67834d212e7",
                        "/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c"
                      ],
                    "deployment": {
                        "properties": {
                            "mode": "incremental",
                            "template": {
                                "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
                                "contentVersion": "1.0.0.0",
                                "parameters": {
                                    "privateDnsZoneId": {
                                        "type": "string"
                                    },
                                    "privateEndpointName": {
                                        "type": "string"
                                    },
                                    "location": {
                                        "type": "string"
                                    }
                                },
                                "resources": [
                                    {
                                        "name": "[concat(parameters('privateEndpointName'), '/deployedByPolicy')]",
                                        "type": "Microsoft.Network/privateEndpoints/privateDnsZoneGroups",
                                        "apiVersion": "2020-03-01",
                                        "location": "[parameters('location')]",
                                        "properties": {
                                            "privateDnsZoneConfigs": [
                                                {
                                                    "name": "privatelink.azure-devices.net",
                                                    "properties": {
                                                        "privateDnsZoneId": "[parameters('privateDnsZoneId')]"
                                                    }
                                                }
                                            ]
                                        }
                                    }
                                ]
                            },
                            "parameters": {
                                "privateDnsZoneId": {
                                    "value": "[parameters('privateDnsZoneId')]"
                                },
                                "privateEndpointName": {
                                    "value": "[field('name')]"
                                },
                                "location": {
                                    "value": "[field('location')]"
                                }
                            }
                        }
                    }
                }
            }
        }
    },
    "id": "/providers/Microsoft.Authorization/policyDefinitions/c99ce9c1-ced7-4c3e-aca0-10e69ce0cb02",
    "name": "c99ce9c1-ced7-4c3e-aca0-10e69ce0cb02"
}