Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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.
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