Ejercicio: Restricción del acceso a Azure Storage mediante puntos de conexión de servicio

Completado

Como arquitecto de soluciones, planea mover archivos de diagrama de ingeniería confidenciales a Azure Storage. Los archivos solo deben ser accesibles desde equipos internos de la red corporativa. Quiere crear un punto de conexión de servicio de red virtual para Azure Storage con el fin de proteger la conectividad a las cuentas de almacenamiento.

En esta unidad, creará un punto de conexión de servicio y usará reglas de red para restringir el acceso a Azure Storage. Creará un punto de conexión de servicio de red virtual para Azure Storage en la subred Databases. Después, comprobará que la máquina virtual DataServer puede acceder a Azure Storage. Por último, va a comprobar que la máquina virtual AppServer, que se encuentra en otra subred, no puede acceder al almacenamiento.

Diagram of exercise scenario service endpoint and rules.

Incorporación de reglas al grupo de seguridad de red

Aquí garantizará que las comunicaciones con Azure Storage transmiten el punto de conexión de servicio. Agregará reglas de salida para permitir el acceso al servicio de Storage, pero denegando el resto del tráfico de Internet.

  1. Ejecute el siguiente comando en Cloud Shell para crear una regla de salida que permita el acceso a Storage:

    az network nsg rule create \
        --resource-group $rg \
        --nsg-name ERP-SERVERS-NSG \
        --name Allow_Storage \
        --priority 190 \
        --direction Outbound \
        --source-address-prefixes "VirtualNetwork" \
        --source-port-ranges '*' \
        --destination-address-prefixes "Storage" \
        --destination-port-ranges '*' \
        --access Allow \
        --protocol '*' \
        --description "Allow access to Azure Storage"
    
  2. Ejecute el siguiente comando en Cloud Shell para crear una regla de salida para denegar todo el acceso a Internet:

    az network nsg rule create \
        --resource-group $rg \
        --nsg-name ERP-SERVERS-NSG \
        --name Deny_Internet \
        --priority 200 \
        --direction Outbound \
        --source-address-prefixes "VirtualNetwork" \
        --source-port-ranges '*' \
        --destination-address-prefixes "Internet" \
        --destination-port-ranges '*' \
        --access Deny \
        --protocol '*' \
        --description "Deny access to Internet."
    

Ahora debería tener las reglas siguientes en ERP-SERVERS-NSG:

Nombre de la regla Dirección Prioridad Propósito
AllowSSHRule Entrada 100 Permitir SSH de entrada
httpRule Entrada 150 Denegar desde DataServer a AppServer en 80
Allow_Storage Salida 190 Permitir el acceso a Azure Storage
Deny_Internet Salida 200 Denegar el acceso a Internet desde la red virtual

En este punto, tanto AppServer como DataServer tienen acceso al servicio Azure Storage.

Configuración de la cuenta de almacenamiento y el recurso compartido

En este paso, creará una cuenta de almacenamiento y, después, le agregará un recurso compartido de archivos de Azure. Este recurso compartido de archivos es donde almacenará los diagramas de ingeniería.

  1. Ejecute el siguiente comando en Cloud Shell para crear una cuenta de almacenamiento para los documentos de ingeniería:

    STORAGEACCT=$(az storage account create \
                    --resource-group $rg \
                    --name engineeringdocs$RANDOM \
                    --sku Standard_LRS \
                    --query "name" | tr -d '"')
    
  2. Ejecute el siguiente comando en Cloud Shell para almacenar la clave principal de su cuenta de almacenamiento en una variable:

    STORAGEKEY=$(az storage account keys list \
                    --resource-group $rg \
                    --account-name $STORAGEACCT \
                    --query "[0].value" | tr -d '"')
    
  3. Ejecute el siguiente comando en Cloud Shell para crear un recurso compartido de archivos de Azure con el nombre erp-data-share:

    az storage share create \
        --account-name $STORAGEACCT \
        --account-key $STORAGEKEY \
        --name "erp-data-share"
    

Habilitación del punto de conexión de servicio

Ahora tendrá que configurar la cuenta de almacenamiento para que sea accesible solamente desde los servidores de bases de datos, mediante la asignación del punto de conexión de almacenamiento a la subred Databases. Después, necesitará agregar una regla de seguridad a la cuenta de almacenamiento.

  1. Ejecute el siguiente comando en Cloud Shell para asignar el punto de conexión Microsoft.Storage a la subred:

    az network vnet subnet update \
        --vnet-name ERP-servers \
        --resource-group $rg \
        --name Databases \
        --service-endpoints Microsoft.Storage
    
  2. Para denegar todo el acceso, ejecute el siguiente comando en Cloud Shell para cambiar la acción predeterminada a Deny. Después de que se deniega el acceso a la red, no se puede acceder a la cuenta de almacenamiento desde ninguna red.

    az storage account update \
        --resource-group $rg \
        --name $STORAGEACCT \
        --default-action Deny
    
  3. Ejecute el siguiente comando en Cloud Shell para restringir el acceso a la cuenta de almacenamiento. De forma predeterminada, las cuentas de almacenamiento están abiertas para aceptar todo el tráfico. Quiere que solo el tráfico procedente de la subred Databases pueda acceder al almacenamiento.

    az storage account network-rule add \
        --resource-group $rg \
        --account-name $STORAGEACCT \
        --vnet-name ERP-servers \
        --subnet Databases
    

Prueba del acceso a los recursos de almacenamiento

En este paso, se conectará a los dos servidores y comprobará que solo DataServer tiene acceso al recurso compartido de archivos de Azure en la cuenta de almacenamiento.

  1. Ejecute el siguiente comando en Cloud Shell para guardar las direcciones IP públicas de AppServer y DataServer en variables:

    APPSERVERIP="$(az vm list-ip-addresses \
                        --resource-group $rg \
                        --name AppServer \
                        --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \
                        --output tsv)"
    
    DATASERVERIP="$(az vm list-ip-addresses \
                        --resource-group $rg \
                        --name DataServer \
                        --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \
                        --output tsv)"
    
  2. Ejecute el siguiente comando en Cloud Shell para conectarse a la máquina virtual AppServer e intentar montar el recurso compartido de archivos de Azure:

    ssh -t azureuser@$APPSERVERIP \
        "mkdir azureshare; \
        sudo mount -t cifs //$STORAGEACCT.file.core.windows.net/erp-data-share azureshare \
        -o vers=3.0,username=$STORAGEACCT,password=$STORAGEKEY,dir_mode=0777,file_mode=0777,sec=ntlmssp; findmnt \
        -t cifs; exit; bash"
    
  3. Escriba la contraseña que ha usado al crear la máquina virtual.

  4. La respuesta debe incluir un mensaje mount error. Esta conexión no se permite porque no hay ningún punto de conexión de servicio para la cuenta de almacenamiento en la subred Applications.

  5. Ejecute el siguiente comando en Cloud Shell para conectarse a la máquina virtual DataServer e intentar montar el recurso compartido de archivos de Azure:

    ssh -t azureuser@$DATASERVERIP \
        "mkdir azureshare; \
        sudo mount -t cifs //$STORAGEACCT.file.core.windows.net/erp-data-share azureshare \
        -o vers=3.0,username=$STORAGEACCT,password=$STORAGEKEY,dir_mode=0777,file_mode=0777,sec=ntlmssp;findmnt \
        -t cifs; exit; bash"
    
  6. Escriba la contraseña que ha usado al crear la máquina virtual.

  7. El montaje debe ser correcto y la respuesta debe incluir los detalles del punto de montaje. Esto se permite porque ha creado el punto de conexión de servicio para la cuenta de almacenamiento en la subred Databases.

Mediante el punto de conexión de servicio de almacenamiento de la subred Databases ya ha comprobado que DataServer puede acceder al almacenamiento. También ha comprobado que AppServer no puede acceder al almacenamiento. El motivo es que este servidor está en otra subred y no tiene acceso al punto de conexión de servicio de red virtual.