Compartir a través de


Acceso a una cuenta de almacenamiento mediante SFTP a través de una dirección IP pública estática de Azure Firewall

Puede usar Azure Firewall para acceder a un contenedor de cuentas de almacenamiento a través de SFTP. Azure PowerShell se usa para implementar un firewall en una red virtual y se configura con reglas DNAT para traducir el tráfico SFTP al contenedor de la cuenta de almacenamiento. El contenedor de la cuenta de almacenamiento se configura con un punto de conexión privado para permitir el acceso desde el firewall. Para conectarse al contenedor, use la dirección IP pública del firewall y el nombre del contenedor de la cuenta de almacenamiento.

Diagrama que muestra el SFTP al firewall para acceder a un contenedor de cuenta de almacenamiento.

En este artículo, usted:

  • Implementación de la infraestructura de red
  • Creación de una directiva de firewall con la regla DNAT adecuada
  • Implementación del firewall
  • Creación de una cuenta de almacenamiento y un contenedor
  • Configuración del acceso SFTP al contenedor de la cuenta de almacenamiento
  • Creación de un punto de conexión privado para el contenedor de la cuenta de almacenamiento
  • Prueba de la conexión al contenedor de la cuenta de almacenamiento

Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.

Nota

Se recomienda usar el módulo Azure Az de PowerShell para interactuar con Azure. Para comenzar, consulte Instalación de Azure PowerShell. Para más información sobre cómo migrar al módulo Az de PowerShell, consulte Migración de Azure PowerShell de AzureRM a Az.

En este artículo se requieren los módulos de Azure PowerShell más recientes. Ejecute Get-Module -ListAvailable Az para encontrar la versión. Si necesita actualizarla, consulte Instalación del módulo de Azure PowerShell. Si PowerShell se ejecuta localmente, también debe ejecutar Login-AzAccount para crear una conexión con Azure.

Implementación de la infraestructura de red

En primer lugar, configure algunas variables para usarlas en la implementación. Reemplace los valores por los suyos.

Sugerencia

Puede usar Microsoft Entra ID para buscar el nombre principal de usuario.

$rg = "<resource-group-name>"
$location = "<location>"
$storageaccountname = "<storage-account-name>"
$staticEP = "10.0.2.10"
$SubscriptionName = "<your Azure subscription name>"
$UserPrincipalName = "<your AD user principal name>"
$ContainerName = "<container-name>"

Cree la infraestructura de red. Esto incluye una red virtual, subredes y una dirección IP pública para el firewall.


# Create a new resource group
New-AzResourceGroup -Name $rg -Location $location

# Create new subnets for the firewall
$FWsub = New-AzVirtualNetworkSubnetConfig -Name AzureFirewallSubnet -AddressPrefix 10.0.1.0/26
$Worksub = New-AzVirtualNetworkSubnetConfig -Name Workload-SN -AddressPrefix 10.0.2.0/24

# Create a new VNet
$testVnet = New-AzVirtualNetwork -Name test-fw-vn -ResourceGroupName $rg -Location $location -AddressPrefix 10.0.0.0/16 -Subnet $FWsub, $Worksub

# Create a public IP address for the firewall
$pip = New-AzPublicIpAddress `
    -ResourceGroupName $rg `
    -Location $location `
    -AllocationMethod Static `
    -Sku Standard `
    -Name fw-pip

Creación y configuración de la directiva de firewall


# Create a new firewall policy
$policy = New-AzFirewallPolicy -Name "fw-pol" -ResourceGroupName "$rg" -Location $location

# Define new rules to add
$newrule1 = New-AzFirewallPolicyNatRule -Name "dnat-rule1" -Protocol "TCP", "UDP" -SourceAddress "*" -DestinationAddress $pip.ipaddress -DestinationPort "22" -TranslatedAddress $staticEP -TranslatedPort "22"

# Add the new rules to the local rule collection object
$natrulecollection = New-AzFirewallPolicyNatRuleCollection -Name "NATRuleCollection" -Priority 100 -ActionType "Dnat" -Rule $newrule1

# Create a new rule collection group
$natrulecollectiongroup = New-AzFirewallPolicyRuleCollectionGroup -Name "rcg-01" -ResourceGroupName "$rg" -FirewallPolicyName "fw-pol" -Priority 100

# Add the new NAT rule collection to the rule collection group
$natrulecollectiongroup.Properties.RuleCollection = $natrulecollection

# Update the rule collection
Set-AzFirewallPolicyRuleCollectionGroup -Name "rcg-01 " -FirewallPolicyObject $policy -Priority 200 -RuleCollection $natrulecollectiongroup.Properties.rulecollection

Implementación del firewall


# Create the firewall
$firewall = New-AzFirewall `
    -Name fw-01 `
    -ResourceGroupName $rg `
    -Location $location `
    -VirtualNetwork $testvnet `
    -PublicIpAddress $pip `
    -FirewallPolicyId $policy.id

Creación de una cuenta de almacenamiento y un contenedor


New-AzStorageAccount -ResourceGroupName $rg -Name $StorageAccountName -SkuName Standard_LRS -Location $location -EnableHierarchicalNamespace $true -PublicNetworkAccess enabled

# Get the subscription and user information
$subscriptionId = (Get-AzSubscription -SubscriptionName "$SubscriptionName").SubscriptionId
$user = Get-AzADUser -UserPrincipalName $UserPrincipalName

# Give the user contributor role
New-AzRoleAssignment -ObjectId $user.id -RoleDefinitionName "Storage Blob Data Contributor" -Scope "/subscriptions/$subscriptionId/resourceGroups/$rg/providers/Microsoft.Storage/storageAccounts/$StorageAccountName"

#Create the container and then disable public network access
$ctx = New-AzStorageContext -StorageAccountName $StorageAccountName
New-AzStorageContainer -Name $ContainerName -Context $ctx
Set-AzStorageAccount -ResourceGroupName $rg -Name $StorageAccountName -PublicNetworkAccess disabled -Force

Configuración del acceso SFTP al contenedor de la cuenta de almacenamiento


Set-AzStorageAccount `
    -ResourceGroupName $rg `
    -Name $StorageAccountName `
    -EnableSftp $true

$permissionScopeBlob = New-AzStorageLocalUserPermissionScope `
    -Permission rwdlc `
    -Service blob `
    -ResourceName $ContainerName

$localuser = Set-AzStorageLocalUser `
    -ResourceGroupName $rg `
    -AccountName $StorageAccountName `
    -UserName testuser `
    -PermissionScope $permissionScopeBlob

$localuserPassword = New-AzStorageLocalUserSshPassword `
    -ResourceGroupName $rg `
    -StorageAccountName $StorageAccountName `
    -UserName testuser

# Examine and manually save the password

$localuserPassword

Creación de un punto de conexión privado para el contenedor de la cuenta de almacenamiento


# Place the previously created storage account into a variable
$storage = Get-AzStorageAccount -ResourceGroupName $rg -Name $StorageAccountName

# Create the private endpoint connection
$pec = @{
    Name = 'Connection01'
    PrivateLinkServiceId = $storage.ID
    GroupID = 'blob'
}

$privateEndpointConnection = New-AzPrivateLinkServiceConnection @pec


# Create the static IP configuration
$ip = @{
    Name = 'myIPconfig'
    GroupId = 'blob'
    MemberName = 'blob'
    PrivateIPAddress = $staticEP
}

$ipconfig = New-AzPrivateEndpointIpConfiguration @ip

# Create the private endpoint
$pe = @{
    ResourceGroupName = $rg
    Name = 'StorageEP'
    Location = 'eastus'
    Subnet = $testvnet.Subnets[1]
    PrivateLinkServiceConnection = $privateEndpointConnection
    IpConfiguration = $ipconfig
}

New-AzPrivateEndpoint @pe

Prueba de la conexión SFTP

Ahora, pruebe para asegurarse de que puede conectarse al contenedor de la cuenta de almacenamiento mediante SFTP. Puede usar cualquier cliente SFTP para probar la conexión. En este ejemplo, usamos sftp desde una terminal de comando.

Por ejemplo, para una cuenta de almacenamiento denominada teststorageaccount, un contenedor denominado testcontainer, una cuenta local denominada testuser y una dirección IP pública del firewall de 13.68.216.252, usaría el siguiente comando:

sftp teststorageaccount.testcontainer.testuser@13.68.216.252

Escriba la contraseña que guardó anteriormente cuando se le solicite.

Deberías ver algo parecido a lo siguiente:

> sftp vehstore101.container01.testuser@13.68.216.252
teststorageaccount.testcontainer.testuser@13.68.216.252's password:
Connected to 13.68.216.252.
sftp>

Ahora debe estar conectado al contenedor de la cuenta de almacenamiento mediante SFTP. Puede usar los comandos put y get para cargar y descargar archivos. Use ls para enumerar los archivos del contenedor y lls para enumerar los archivos en el directorio local.

Limpieza de recursos

Cuando ya no lo necesite, puede usar el comando siguiente para quitar el grupo de recursos, el firewall, la directiva de firewall y todos los recursos relacionados.


Remove-AzResourceGroup -Name $rg -Force

Pasos siguientes