Ejercicio: Restricción del acceso de red

Completado

Los usuarios se conectan al servidor de aplicaciones para introducir órdenes, actualizar su cuenta y realizar actividades similares. A su vez, el servidor de aplicaciones actualiza la base de datos con estos cambios. Dado que los usuarios tienen los datos personales almacenados en la base de datos es fundamental garantizar que solo se permita el acceso desde recursos necesarios y de confianza. Hay varias maneras de controlar el acceso a la base de datos SQL a través de la red.

Reglas de firewall

Azure SQL Database tiene un firewall integrado que permite o denega el acceso de red al propio servidor de bases de datos y a las bases de datos individuales. Inicialmente, el firewall de SQL Database bloquea todo el acceso público a su instancia de Azure SQL Database. Para acceder a un servidor de bases de datos, debe especificar una o varias reglas de firewall de IP de nivel de servidor que permitan acceder a Azure SQL Database. Use las reglas de firewall de IP para especificar qué intervalos de direcciones IP de Internet se permiten y si las aplicaciones de Azure pueden tratar de conectarse a Azure SQL Database.

Las reglas de firewall se configuran en el nivel de servidor o base de datos. Las reglas indican específicamente qué recursos de red pueden establecer una conexión a la base de datos. Según el nivel, las reglas que se pueden aplicar son como sigue:

  • Reglas de firewall de nivel de servidor
    • Permitir el acceso a servicios de Azure
    • Reglas de direcciones IP
    • Reglas de red virtual
  • Reglas de firewall de nivel de base de datos
    • Reglas de direcciones IP

Nota:

SQL Data Warehouse solo es compatible con las reglas de firewall de IP de nivel del servidor y no lo es con las de nivel de base de datos.

Veamos más de cerca cómo funcionan estas reglas.

Reglas de firewall de nivel de servidor

Estas reglas permiten a los clientes acceder a toda la instancia de Azure SQL Server (es decir, a todas las bases de datos que se encuentren en el mismo servidor lógico). Hay tres tipos de reglas que se pueden aplicar en el nivel de servidor.

La regla Permitir el acceso a servicios de Azure permite a los servicios de Azure conectarse a la base de datos de Azure SQL Database. Cuando se activa, esta configuración permite las comunicaciones desde todas las direcciones IP públicas de Azure. Esta comunicación incluye todos los servicios de Plataforma de Azure como un servicio (PaaS), como Azure App Service y Azure Container Service, así como máquinas virtuales de Azure que tengan acceso de salida a Internet. Esta regla se puede configurar mediante la opción Activar/Desactivar en el panel de firewall del portal o mediante una regla de IP con 0.0.0.0 como las direcciones IP inicial y final.

Diagrama que muestra cómo permitir el acceso a la red de servicios de Azure.

Esta regla se usa cuando tiene aplicaciones que se ejecutan en servicios de PaaS en Azure, como Azure Logic Apps o Azure Functions, que necesitan obtener acceso a Azure SQL Database. Muchos de estos servicios no tienen una dirección IP estática, por lo que esta regla asegura que sean capaces de conectarse a la base de datos.

Importante

Esta opción configura el firewall para permitir todas las conexiones de Azure, incluidas las de las suscripciones de otros clientes. Al seleccionar esta opción, asegúrese de que los permisos de usuario e inicio de sesión limiten el acceso solamente a los usuarios autorizados.

Las reglas de dirección IP son reglas que se basan en intervalos de direcciones IP públicas específicas. Las direcciones IP que se conectan desde un intervalo IP público permitido tienen permiso para conectarse a la base de datos.

Diagrama que representa una regla de direcciones IP.

Estas reglas se pueden usar cuando tiene una dirección IP pública estática que necesita obtener acceso a la base de datos.

Las reglas de red virtual le posibilitan permitir explícitamente la conexión de las subredes especificadas dentro de una o varias redes virtuales de Azure. Las reglas de red virtual pueden proporcionar un mayor control de acceso a las bases de datos y pueden ser la mejor opción. Puesto que los espacios de direcciones de red virtual de Azure son privados, puede eliminar la exposición a las direcciones IP públicas y asegurar la conectividad a las direcciones que controla.

Diagrama que representa una regla de red virtual.

Use las reglas de red virtual cuando tenga máquinas virtuales de Azure que necesiten obtener acceso a la base de datos.

Para las reglas de nivel de servidor, todas estas reglas se puede crear y manipular a través del portal, PowerShell, la CLI y a través de Transact-SQL (T-SQL).

Reglas de firewall de nivel de base de datos

Estas reglas permiten el acceso a una base de datos individual en un servidor lógico y se almacenan en la base de datos. Para las reglas de nivel de base de datos, solo pueden configurarse reglas de dirección IP. Estas funcionan del mismo modo que cuando se aplican en el nivel de servidor, pero tienen como ámbito únicamente la base de datos.

Diagrama que representa una regla de red de direcciones IP de base de datos.

Una de las ventajas de las reglas de nivel de base de datos es su portabilidad. Al replicar una base de datos en otro servidor, se replican las reglas de nivel de base de datos, ya que se almacenan en la propia base de datos.

El inconveniente de las reglas de nivel de base de datos es que solo se pueden utilizar reglas de dirección IP. Estas reglas podrían limitar la flexibilidad que tiene y puede aumentar la sobrecarga administrativa.

Las reglas de firewall de nivel de base de datos se pueden crear y manipular solo a través de Transact-SQL.

Restricción del acceso de red en la práctica

Como procedimiento recomendado, use reglas de firewall de IP de nivel de base de datos con el fin de mejorar la seguridad y aumentar la portabilidad de la base de datos. Use reglas de firewall de IP de nivel de servidor para administradores cuando tenga varias bases de datos con los mismos requisitos de acceso, por lo que no deberá dedicar tiempo a configurar individualmente cada una de ellas.

Observe cómo funcionan estas reglas en la práctica y cómo proteger el acceso de red para permitir solo lo que sea necesario. Recuerde que creó un servidor lógico de Azure SQL Database, una base de datos y la máquina virtual de Linux de appServer que actúa como un servidor de aplicaciones. Este escenario suele aparecer cuando una base de datos se ha migrado a Azure SQL Database y los recursos dentro de la red virtual necesitan obtener acceso a ella. La característica de firewall de Azure SQL Database puede usarse en muchos escenarios, pero este ejemplo tiene aplicabilidad práctica y muestra todas las funciones de reglas.

Analice la configuración del firewall y vea cómo funcionan. Use el portal y Cloud Shell para estos ejercicios.

La base de datos que creó no permite el acceso desde cualquier conexión. Este acceso limitado es así por diseño y se basa en los comandos que se ejecutaron para crear el servidor lógico y la base de datos. Confirme que no hay acceso.

  1. En Cloud Shell, conéctese a la máquina virtual Linux mediante SSH si aún no lo ha hecho. Reemplace nnn.nnn.nnn.nnn por el valor de publicIpAddress de la unidad anterior.

    ssh nnn.nnn.nnn.nnn
    
  2. Vuelva a ejecutar el comando sqlcmd que recuperó antes para intentar conectarse a la base de datos. Reemplace [server-name] por el nombre del servidor. Reemplace [username] y [password] por las credenciales de ADMINUSER que especificó en la unidad anterior. Mantenga las comillas simples alrededor del nombre de usuario y la contraseña para que el shell no malinterprete ningún carácter especial.

    sqlcmd -S tcp:[server-name].database.windows.net,1433 -d marketplaceDb -U '[username]' -P '[password]' -N -l 30
    

    Debería ver un error similar al de la salida siguiente al intentar conectarse. Esta salida es normal ya que no se permite el acceso a la base de datos.

    Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : Login timeout expired.
    Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : TCP Provider: Error code 0x2AF9.
    Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible.Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online.
    

Conceda acceso para que pueda conectarse.

Use la regla para permitir el acceso a servicios de Azure de nivel de servidor

Dado que la máquina virtual tiene acceso saliente a Internet, es posible usar la regla Permitir el acceso a los servicios de Azure para permitir el acceso desde la máquina virtual.

  1. Inicie sesión en Azure Portal con la misma cuenta con la que ha activado el espacio aislado.

  2. En el cuadro Buscar en recursos, servicios y documentos en la parte superior, busque el nombre del servidor de bases de datos, server-name. Seleccione el servidor SQL Server.

  3. En el panel del servidor SQL Server, en la sección Seguridad del panel de menú izquierdo, seleccione Redes.

  4. Desplácese hacia abajo hasta Excepciones, active la casilla Permitir que los servicios y recursos de Azure accedan a este servidor y, a continuación, seleccione Guardar. Espere hasta que el sistema confirme este cambio.

  5. En la sesión SSH, trate de conectarse de nuevo a la base de datos.

    sqlcmd -S tcp:[server-name].database.windows.net,1433 -d marketplaceDb -U '[username]' -P '[password]' -N -l 30
    

    En este momento, debería poder conectarse. Si es correcto, verá un símbolo del sistema de sqlcmd.

    1>
    

Abrió la conectividad, pero este valor actualmente permite el acceso desde cualquier recurso de Azure, incluyendo los recursos externos a la suscripción. Restrinja más este acceso para limitar el acceso de red únicamente a aquellos recursos que estén bajo su control.

Use una regla de dirección IP de nivel de base de datos

Tenga en cuenta que las reglas de dirección IP de nivel de base de datos solo permiten acceso a bases de datos individuales en un servidor lógico. Use una aquí para conceder acceso a la dirección IP estática de la máquina virtual de appServer.

Para crear reglas de IP de nivel de base de datos, es necesario ejecutar algunos comandos de T-SQL. Cree una regla de base de datos con la convención siguiente, a la que se pasa el nombre de la regla, la dirección IP inicial y la dirección IP final. Al especificar que las direcciones IP iniciales y finales sean las mismas, se limita el acceso a una única dirección IP. Expanda el intervalo en caso de tener un bloque mayor de direcciones que requieran acceso.

EXECUTE sp_set_database_firewall_rule N'My Firewall Rule', '40.112.128.214', '40.112.128.214'
  1. Mientras sigue en el símbolo del sistema de sqlcmd, ejecute el siguiente comando. Reemplace la dirección IP pública de la máquina virtual de appServer en ambas ubicaciones.

    Sugerencia

    Al ejecutar comandos de T-SQL como los siguientes, es posible que el GO de la segunda línea no se copie en la solicitud de sqlcmd. Es posible que tenga que escribir esta parte. El comando T-SQL no se ejecutará sin esto, así que asegúrese de ejecutar el comando GO.

    EXECUTE sp_set_database_firewall_rule N'My Firewall Rule', '[From IP Address]', '[To IP Address]';
    GO
    

    Una vez que se complete el comando, escriba exit para salir de sqlcmd. Permanezca conectado a través de SSH.

  2. En Azure Portal, en el panel Redes del servidor SQL Server, deseleccione Permitir que los servicios y recursos de Azure accedan a este servidor y seleccione Guardar. Este cambio deshabilitará el acceso desde todos los servicios de Azure, pero podrá conectarse porque tiene una regla IP de nivel de base de datos para el servidor.

  3. De nuevo en Cloud Shell, en la máquina virtual a la que está conectado a través de SSH, intente volver a conectarse a la base de datos.

    sqlcmd -S tcp:[server-name].database.windows.net,1433 -d marketplaceDb -U '[username]' -P '[password]' -N -l 30
    

    En este momento, debería poder conectarse. Si se realiza correctamente, verá una solicitud de sqlcmd.

    1>
    

Usar una regla de nivel de base de datos permite que el acceso se aísle específicamente a la base de datos. Esta regla puede resultar útil si se desea mantener el acceso de red configurado por base de datos. Si varias bases de datos comparten el mismo nivel de acceso de red, puede simplificar la administración mediante una regla de nivel de servidor para aplicar el mismo acceso a todas las bases de datos en el servidor.

Use una regla de dirección IP de nivel de servidor

Las reglas de nivel de base de datos son una opción excelente, pero ¿qué pasaría si hubiese varias bases de datos en el mismo servidor al que necesita conectarse la máquina virtual de appServer? Podría agregar una regla de nivel de base de datos para cada base de datos, pero podría llevar más trabajo a medida que se agreguen más bases de datos. Para reducir los esfuerzos de administración, permita el acceso con una regla de nivel de servidor, que se aplicaría a todas las bases de datos del servidor.

Use una regla IP de nivel de servidor para restringir los sistemas que se pueden conectar.

  1. Mientras sigue en el símbolo del sistema de sqlcmd, ejecute el siguiente comando para eliminar la regla de dirección IP de nivel de base de datos.

    EXECUTE sp_delete_database_firewall_rule N'My Firewall Rule';
    GO
    

    Una vez que se complete el comando, escriba exit para salir de sqlcmd. Permanezca conectado a través de SSH.

  2. De nuevo en Azure Portal, en el panel Redes del servidor SQL Server, en Reglas de firewall, seleccione Agregar una regla de firewall. Asigne un nombre a la regla Permitir appServer, escriba la IP pública de la VM appServer para IP inicial e IP final y, a continuación, seleccione Aceptar.

  3. Seleccione Guardar.

    Captura de pantalla de Azure Portal que muestra la creación de una regla de firewall de servidor.

  4. De vuelta en Cloud Shell, en la máquina virtual de appServer, intente conectarse otra vez a la base de datos.

    sqlcmd -S tcp:[server-name].database.windows.net,1433 -d marketplaceDb -U '[username]' -P '[password]' -N -l 30
    

    En este momento, debería poder conectarse. La regla de nivel de servidor permite el acceso en función de la dirección IP pública de la máquina virtual de appServer. Si es correcto, verá un símbolo del sistema de sqlcmd.

    1>
    

    Escriba exit para salir de sqlcmd. Permanezca conectado a través de SSH.

Se aisló la conectividad a solo a la dirección IP que se especificó en la regla. Este aislamiento o funciona muy bien, pero todavía puede ser un desafío administrativo a medida que agregue más sistemas que necesiten conectarse. También requiere una dirección IP estática o una dirección IP de un intervalo de direcciones IP definido.

Si la dirección IP es dinámica y cambia, se deberá actualizar la regla para garantizar la conectividad. La máquina virtual de appServer está configurada actualmente con una dirección IP dinámica. Es probable que esta dirección IP cambie en algún momento, lo que interrumpirá el acceso tan pronto como suceda. Ahora consulte cómo las reglas de red virtual pueden resultar beneficiosas en la configuración.

Usar una regla de red virtual de nivel de servidor

En este caso, dado que la máquina virtual se ejecuta en Azure, use una regla de red virtual de nivel de servidor para aislar el acceso y facilitar la habilitación del acceso de servicios futuros a la base de datos.

  1. De nuevo en Azure Portal y todavía en el panel Redes, en la sección Redes virtuales, seleccione Agregar una regla de red virtual.

  2. Se mostrará el cuadro de diálogo Creación o actualización de regla de red virtual. Establezca los valores siguientes.

    Configuración Value
    Nombre Deje el valor predeterminado
    Suscripción Suscripción de Concierge
    Red virtual appServerVNET
    Nombre de subred / prefijo de dirección appServerSubnet / 10.0.0.0/24
  3. Haga clic en Habilitar para habilitar el punto de conexión de servicio en la subred y, después, en Aceptar una vez que el punto de conexión esté habilitado para crear la regla.

  4. Quite la regla de direcciones IP. Haga clic en ... junto a la regla Permitir appServer y, después, en Eliminar y en Guardar.

  5. De vuelta en Cloud Shell, en la máquina virtual de appServer, intente conectarse otra vez a la base de datos.

    sqlcmd -S tcp:[server-name].database.windows.net,1433 -d marketplaceDb -U '[username]' -P '[password]' -N -l 30
    

    En este momento, debería poder conectarse. Si se realiza correctamente, verá una solicitud de sqlcmd.

    1>
    

Lo que se hizo aquí eliminará eficazmente cualquier acceso público al servidor SQL Server. Solo se permite el acceso desde la subred específica de la red virtual de Azure que definió. Si agrega más servidores de aplicaciones en esa subred, no será necesario realizar ninguna configuración adicional. Cualquier servidor de esa subred tendría la capacidad de conectarse al servidor SQL Server.

Esta configuración limita la exposición a los servicios fuera del ámbito de control y facilita la administración en caso de agregar más servidores. Este método es eficaz para proteger el acceso de red a una instancia de Azure SQL Database.