Search code examples
azureazureservicebusazure-rm-templateazure-servicebus-queues

How to create custom shared access policies at service bus queue level using arm template


I have created an Azure Service Bus Namespace along with queues and topics using ARM template. This is the sample snippet for creating the queues using iteration concept inside my service bus template.

{
        "apiVersion": "2017-04-01",
        "name": "[concat(parameters('serviceBusNamespaceName'),'/', parameters('queueNames')[copyIndex()])]",
        "type": "Microsoft.ServiceBus/namespaces/queues",
        "copy": {
            "name": "queuesCopy",
            "count": "[length(parameters('queueNames'))]"
        },
        "dependsOn": [
            "[resourceId('Microsoft.ServiceBus/namespaces/', parameters('serviceBusNamespaceName'))]"
        ],
        "properties": {
            "lockDuration": "PT30S",
            "maxSizeInMegabytes": 1024,
            "requiresDuplicateDetection": false,
            "requiresSession": false,
            "defaultMessageTimeToLive": "P14D",
            "deadLetteringOnMessageExpiration": false,
            "duplicateDetectionHistoryTimeWindow": "PT10M",
            "maxDeliveryCount": 10,
            "autoDeleteOnIdle": "P10675199DT2H48M5.4775807S",
            "enablePartitioning": false,
            "enableExpress": false
        },
}

How to create custom shared access policies at Service Bus Queue level?


Solution

  • You can use child resources section for Queue creating custom shared access policy at Queue level.

    Below is one example similar to your scenario -

    "resources": [
            {
                "apiVersion": "[variables('sbVersion')]",
                "name": "[parameters('serviceBusNamespaceName')]",
                "type": "Microsoft.ServiceBus/namespaces",
                "location": "[variables('location')]",
                "kind": "Messaging",
                "sku": {
                    "name": "Standard",
                },
                "resources": [
                    {
                        "apiVersion": "[variables('sbVersion')]",
                        "name": "[parameters('serviceBusQueueName')]",
                        "type": "Queues",
                        "dependsOn": [
                            "[concat('Microsoft.ServiceBus/namespaces/', parameters('serviceBusNamespaceName'))]"
                        ],
                        "properties": {
                            "path": "[parameters('serviceBusQueueName')]"
                        },
                        "resources": [
                            {
                                "apiVersion": "[variables('sbVersion')]",
                                "name": "[parameters('queueAuthorizationRuleName')]",
                                "type": "authorizationRules",
                                "dependsOn": [
                                    "[parameters('serviceBusQueueName')]"
                                ],
                                "properties": {
                                    "Rights": ["Listen"]
                                }
                            }
                        ]
                    }
                ]
            }, {
                "apiVersion": "[variables('sbVersion')]",
                "name": "[variables('namespaceAuthRuleName')]",
                "type": "Microsoft.ServiceBus/namespaces/authorizationRules",
                "dependsOn": ["[concat('Microsoft.ServiceBus/namespaces/', parameters('serviceBusNamespaceName'))]"],
                "location": "[resourceGroup().location]",
                "properties": {
                    "Rights": ["Send"]
                }
            }
        ]
    

    Please refer this documentation.