Actualizar reglas del firewall de SQL Azure desde Powershell
Para acceder a determinados servicios de Azure, como puede ser una Base datos Azure SQL es necesario que la ip remota esté englobada dentro de los rangos permitidos por el firewall de la suscripción . En ocasiones, encontramos la problemática de querer acceder desde una IP dinámica lo que implica cambiar continuamente las reglas establecidas en el firewall para esa IP. Así pues, esta semana voy a hablar sobre cómo actualizar de forma automática las reglas que tenemos creadas en el Firewall de Azure por medio de un script en PowerShell.
Autenticación en Azure
La forma en la que nos vamos a autenticar a través de PowerShell será gracias al fichero PublishSettings. Se trata de un archivo en formato XML que podemos descargar desde nuestra cuenta de Azure y que contiene información relativa a la suscripción así como un certificado asociado. Para descargar el fichero PublishSettings únicamente tenemos que ejecutar desde PowerShell el siguiente comando:
1 |
Get-AzurePublishSettingsFile |
Este comando automatiza la apertura de la web de descarga del fichero. Nos logamos en el explorador web con una cuenta que tenga permisos sobre la suscripción, descargamos el archivo y a continuación lo importamos:
1 |
Import-AzurePublishSettingsFile ".Ruta_archivoarchivo.publishsettings" |
Una vez realizado esto, tendremos instalado un certificado el cual podremos emplear para conectarnos a Azure, dicho certificado se guarda automáticamente en el almacén personal del usuario. Una vez empleado el fichero publishSettings por motivos de seguridad es conveniente eliminarlo.
Script de actualización
Realizados los pasos anteriores podremos automatizar el proceso de actualización de la IP en el firewall. Partimos de la situación y el script realizados por Carlos Milán en un post anterior, que completaremos añadiendo nuestro código a continuación . Empleamos la IP obtenida por la resolución DNS como dato a añadir en el firewall. Los pasos serían los siguientes:
- Establecemos la suscripción sobre la que nos conectaremos por medio del certificado.
- Obtenemos los servidores de esa suscripción.
- Por cada servidor obtenemos las reglas que hay en cada uno y lo comparamos con el nombre de la regla de Sevilla.
- Si el valor no es nulo y la IP que tenemos es diferente cambiamos el rango de IP.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# Script actualización regla Firewall subname_prod = "Subscription_Name" # Nombre de la suscripción $rule_Name = "Sev_rule_ip" # #$ip ip de ISP de Sevilla $subid = "xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" # Id de suscripción $thumbprint = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" # Thumbprint certificado de Azure $cert = (Get-Item cert:\CurrentUserMy$thumbprint) Set-AzureSubscription -SubscriptionName $subname -SubscriptionId $subid -Certificate $cert $server_SQL = Get-AzureSqlDatabaseServer foreach ($server in $server_SQL.ServerName){ $rules = Get-AzureSqlDatabaseServerFirewallRule $server $curRule = $rules | Where-Object {$_.RuleName -eq $rule_Name} if ($curRule -ne $null) { $ruleIp = $curRule.StartIpAddress if ($ruleIp -ne $ip ) { Set-AzureSqlDatabaseServerFirewallRule -ServerName $server -RuleName $ruleName -StartIpAddress $ip -EndIpAddress $ip -Force } } } |
Y hasta aquí el tema de hoy¡Nos vemos en el próximo post!