Como habíamos mencionado en nuestro anterior post, las bases de datos Azure SQL Database son ofrecidas como un producto PasS dentro de la plataforma cloud de Azure, y por defecto son seguras, al no permitir el acceso a ellas si es que antes no se configuran las reglas de Firewall para permitir las conexiones externas. Esto es lo que vamos a ver en esta ocasión, la configuración del Firewall de las bases de datos Azure SQL Database.

Tomando como fuente la documentación oficial, vemos que las bases de datos de Azure tienen dos tipos de reglas de Firewall, las reglas a nivel Servidor y las reglas a nivel de base de datos.

Reglas de Firewall a nivel de Servidor

Estas reglas son almacenadas en la base de datos “master” del servidor lógico donde están alojadas nuestras bases de datos Azure SQL Database. Estas reglas son globales para todas las bases de datos que se encuentran dentro del servidor lógico, por esa razón es importante ser lo mas restrictivos posibles ya que si estas no están correctamente restringidas podríamos dejar un hueco de seguridad que eventualmente nos traiga problemas de acceso a todas las bases de datos del servidor. El configurar estas reglas es bastante sencillo, ya que se puede hacer desde el mismo portal de Azure, desde Powershell, desde el cliente de linea de comando de Azure o desde el mismo Transac-SQL.

Desde el portal de Azure podemos hacerlo dirigiéndonos al Azure SQL Server y seleccionando la opción de “Firewall / Virtual Networks”, una vez aquí nos aparecerá una pantalla donde podremos dar un nombre a nuestra regla, y escoger los rangos de IP, adicionalmente el portal nos muestra, como ayuda, cuál es nuestra IP publica por si queremos dar el acceso solo a esa IP, en ese caso debemos colocar como “Start IP” y “End IP” la IP publica que nos muestra el portal, finalmente debemos dar clic en el botón “Save”. De esta manera ya habremos creado la regla a nivel de servidor y podremos acceder al Azure SQL Server desde nuestra maquina.

Otra forma de crear estas reglas a nivel de servidor son con Powershell, a través del comando “New-AzureRmSqlServerFirewallRule”, en el siguiente ejemplo simplemente he tomado mi IP publica y la asigno como IP de inicio y fin para un servidor de prueba.

Adicionalmente a estas dos opciones también podemos crear este tipo de reglas con comandos de Transac-SQL. En este caso como ya mencionamos que estas reglas se almacenan en la base de datos “master” del servidor lógico, debemos de ejecutar los siguientes comandos bajo el contexto de la base de datos “master”.

Para verificar las reglas podemos hacer una consulta a la vista de sistema “sys.firewall_rules”

Para eliminar la regla con un comando Transac-SQL, podemos ejecutar lo siguiente:

Reglas de Firewall a nivel de Base de Datos

Estas reglas están almacenadas a nivel de la base de datos de usuario y son evaluadas primero que las reglas de firewall a nivel de Servidor. Microsoft recomienda el uso de estas reglas sobre el uso de las reglas a nivel de servidor, porque éstas son mas portables y dedicadas. Portables debido a que al estar almacenadas en la base de datos de usuario, si esta es replicada, entonces las reglas también serán replicadas y no deberemos volver a configurarlas en las copias generadas desde esta base de datos. Son dedicadas ya que solo sirven para el acceso a esa base de datos y no están afectando los permisos de acceso sobre las demás bases de datos.

La configuración de estas reglas, hasta este momento, solo es posible hacerla desde código Transac-SQL. A continuación explicaremos como crear, consultar y eliminar estas reglas.

Para crear una regla de firewall a nivel de base de datos, debemos primero estar conectados a la base de datos con algun usuario que al menos tenga el permiso de CONTROL, seguidamente debemos ejecutar el siguiente comando:

Luego podemos verificar que efectivamente la regla ha sido creada consultando la siguiente vista de sistema: “sys.database_firewall_rules”

Finalmente si deseamos eliminar la regla recientemente creada, podemos hacerlo ejecutando el siguiente procedimiento almacenado: “sp_delete_database_firewall_rule”.

Conclusión

Como ha podido mostrar, la administración de estas reglas de Firewall es bastante sencilla, y la aplicación de dichas reglas es muy importante para reforzar la seguridad de nuestras Azure SQL Databases.