Use PowerShell to Enable Azure Analysis Services Firewall

Last week, firewall support was added to Azure Analysis Service (https://azure.microsoft.com/en-us/blog/azure-analysis-services-adds-firewall-support/ ). The thing is that, at the time of writing, there is no AzureRM cmdlet available to Use PowerShell to Enable Azure Analysis Services Firewall

So, with the help of Resource Explorer I found which properties must be added to the service (resource) in order to enable the firewall:

  • ipV4FirewallSettings.firewallRules
  • ipV4FirewallSettings.enablePowerBIService

The following scripts use the Set-AzureRmResource cmdlet to set those properties.

 1Param 
 2(
 3    [Parameter(Mandatory = $true)][string]$resourceGroupName,
 4    [Parameter(Mandatory = $true)][string]$analysisServicesName,
 5    [Parameter(Mandatory = $true)][string]$firewallRuleName,
 6    [Parameter(Mandatory = $true)][string]$rangeStart,
 7    [Parameter(Mandatory = $true)][string]$rangeEnd)
 8
 9function Add-AnalysisServicesFirewallRule($props, $firewallRuleName, $rangeStart, $rangeEnd) {
10    # Check if the rule exists
11    $existingRules = $props.ipV4FirewallSettings.firewallRules | `
12        Where-Object {$_.firewallRuleName -eq $firewallRuleName}
13
14    # Add the rule if needed
15    if ($existingRules -eq $null) {
16        # Create the rule object
17        $ruleProperties = [ordered]@{
18            "firewallRuleName" = $firewallRuleName;
19            "rangeStart"       = $rangeStart;
20            "rangeEnd"         = $rangeEnd;
21        }
22        $rule = New-Object -TypeName PSObject
23        $rule | Add-Member -NotePropertyMembers $ruleProperties
24
25        # Add the rule 
26        $rules = [System.Collections.ArrayList]$props.ipV4FirewallSettings.firewallRules
27        $index = $rules.Add($rule)
28        $props.ipV4FirewallSettings.firewallRules = $rules
29    }
30}
31
32function Add-FirewallSectionAndEnablePowerBIAccess($props) {
33    # Check if ipV4FirewallSettings property exists
34    $ipV4FirewallSettingsProperty = $props | Get-Member -Name "ipV4FirewallSettings"
35    if (!$ipV4FirewallSettingsProperty) {
36        # Create the ipV4FirewallSettings property and enable the PowerBI Service
37        $props | Add-Member @{ipV4FirewallSettings = [ordered] @{ 
38                "firewallRules"        = @()
39                "enablePowerBIService" = $true
40            }
41        }
42    }
43}
44
45# Get the AnalysisServices resource properties
46$resource = Get-AzureRmResource `
47    -ResourceGroupName $resourceGroupName `
48    -ResourceType "Microsoft.AnalysisServices/servers" `
49    -ResourceName $analysisServicesName
50
51$props = $resource.Properties
52
53Add-FirewallSectionAndEnablePowerBIAccess $props
54
55Add-AnalysisServicesFirewallRule $props $firewallRuleName $rangeStart $rangeEnd
56
57Set-AzureRmResource `
58    -PropertyObject $props `
59    -ResourceGroupName $resourceGroupName `
60    -ResourceType "Microsoft.AnalysisServices/servers" `
61    -ResourceName $analysisServicesName `
62    -Force

If you save the script in a file (i.e Add-AzureRmAnalysisServicesFirewallRule.ps1) you can run it as follows:

1.\Add-AzureRmAnalysisServicesFirewallRule.ps1

The script will ask you for:

  • The resource group name where the Analysis Service is deployed
  • The Analysis Service Name
  • The firewall rule name
  • The starting ip
  • The end ip

Get the code here or download the file from the Technet Gallery.

Hope it helps!


.NET Core CLI and MSBUILD Cheat Sheet
Prepare a .Net Core Console App for Docker
comments powered by Disqus