Firewall Einstellugen für Azure SQL Server per ARM Skript
Was ist das Problem?
Will man eine SQL Datenbank im Azure betreiben und auf diese mittels Azure Data Studio, oder ähnlichem, zugreifen scheitert man an den Firewall Einstellungen des SQL Server im Azure. In der Standardkonfiguration sind keine Freigaben erteilt und somit kein Zugriff auf diese Art möglich.
Eine Art der Lösung
Wir übergeben dem ARM Skript eine Liste von Freigaben als Parameter und diese werden dann automatisch während des Deployments.
parameters.json
In die Parameter Datei kann folgendes eingetragen werden:
"SQLFirewallRuleList": {
"value": [
{
"name": "Company Intern",
"startIpAddress": "195.13.40.75",
"endIpAddress": "195.13.40.77"
},
{
"name": "Company HomeOffice",
"startIpAddress": "195.13.40.70",
"endIpAddress": "195.13.40.70"
}
]
}
Es können weitere Freigaben in diese Liste eingetragen werden. Diese werde dann automatisch beim Deployment mit eingetragen.
template.json
Parameter
In den parameters
Knoten wird dieser Punkt hinzugefügt:
"SQLFirewallRuleList": {
"type": "array",
"metadata": {
"description": "A list of firewall rules for the SQL server."
}
}
Dieser Eintrag erlaubt es die Liste der Freigaben von außen in das Template zu übergeben.
Firewall Loop
In das oberste resources
Element wird folgendes hinzugefügt:
{
"type": "Microsoft.Sql/servers/firewallrules",
"name": "[concat(variables('SQLServerName'), '/', parameters('SQLFirewallRuleList')[copyIndex()].name)]",
"apiVersion": "2014-04-01-preview",
"location": "[resourceGroup().location]",
"properties": {
"startIpAddress": "[parameters('SQLFirewallRuleList')[copyIndex()].startIpAddress]",
"endIpAddress": "[parameters('SQLFirewallRuleList')[copyIndex()].endIpAddress]"
},
"resources": [],
"dependsOn": [
"[concat('Microsoft.Sql/servers/', variables('SQLServerName'))]"
],
"copy": {
"name": "FirewallLoop",
"count": "[length(parameters('SQLFirewallRuleList'))]"
}
}
Zu Beachten ist, dass die Variable SQLServerName
vorhanden sein muss oder durch einen entsprechenden Wert ersetzt werden muss.
Die copy
Anweisung sorgt dafür, dass dieser Block für jeden Eintrag in der Liste SQLFirewallRuleList
wiederholt wird.
"Allow access to Azure services"
Möchte man auch die Option "Allow access to Azure services" per ARM Skript setzen ist der folgende Block im obersten resources
Element einzufügen:
{
"name": "[concat(variables('SQLServerName'),'/', 'AllowAllWindowsAzureIps')]",
"type": "Microsoft.Sql/servers/firewallrules",
"location": "[resourceGroup().location]",
"apiVersion": "2014-04-01-preview",
"dependsOn": [
"[resourceId('Microsoft.Sql/servers', variables('SQLServerName'))]"
],
"properties": {
"startIpAddress": "0.0.0.0",
"endIpAddress": "0.0.0.0"
}
}
Das Geheimnis hier ist der Name AllowAllWindowsAzureIps
sowie das Setzen der IP Adressen auf 0.0.0.0
.
Info: Man kann natürlich diese Freigabe auch in die Liste des Parameters
SQLFirewallRuleList
eintragen, was zum gleichen Ergebnis führt