Доступ к учетной записи хранения с помощью SFTP через статический общедоступный IP-адрес брандмауэра Azure

Используйте брандмауэр Azure для доступа к контейнеру учетной записи хранения через SFTP. Используйте Azure PowerShell для развертывания брандмауэра в виртуальной сети и настройки его с помощью правил DNAT для перевода трафика SFTP в контейнер учетной записи хранения. Настройте контейнер учетной записи хранения с частной конечной точкой, чтобы разрешить доступ из брандмауэра. Чтобы подключиться к контейнеру, используйте общедоступный IP-адрес брандмауэра и имя контейнера учетной записи хранения.

Схема, показывающая, что клиент подключается через SFTP к брандмауэру Azure, который направляет трафик через частную конечную точку в контейнер учетной записи хранения.

В этой статье вы:

  • Разверните сетевую инфраструктуру.
  • Создайте политику брандмауэра с соответствующим правилом DNAT.
  • Разверните брандмауэр.
  • Создайте учетную запись хранения и контейнер.
  • Настройте доступ SFTP к контейнеру учетной записи хранения.
  • Создайте частную конечную точку для контейнера учетной записи хранения.
  • Проверьте подключение к контейнеру учетной записи хранения.

Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем приступить к работе.

Примечание.

Мы рекомендуем использовать модуль Azure Az PowerShell для взаимодействия с Azure. Чтобы начать работу, см. статью Установка Azure PowerShell. Чтобы узнать, как перейти на модуль Az PowerShell, см. статью Перенос Azure PowerShell с AzureRM на Az.

В этой статье требуются последние модули Azure PowerShell. Чтобы узнать версию, выполните команду Get-Module -ListAvailable Az. Если вам необходимо выполнить обновление, ознакомьтесь со статьей, посвященной установке модуля Azure PowerShell. При использовании PowerShell на локальном компьютере также нужно запустить Connect-AzAccount, чтобы создать подключение к Azure.

Развертывание сетевой инфраструктуры

Сначала настройте некоторые переменные для использования в развертывании. Замените значения на свои собственные.

Tip

Microsoft Entra ID можно использовать для поиска основного имени пользователя.

$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>"

Создайте сетевую инфраструктуру. Этот шаг включает создание виртуальной сети, подсетей и общедоступного IP-адреса брандмауэра.

# 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

Создание и настройка политики брандмауэра

# 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

Развертывание брандмауэра

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

Создание учетной записи хранения и контейнера

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

Настройка доступа SFTP к контейнеру учетной записи хранения

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

Создайте частную конечную точку для контейнера хранилища

# 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 = $location
    Subnet = $testVnet.Subnets[1]
    PrivateLinkServiceConnection = $privateEndpointConnection
    IpConfiguration = $ipconfig
}

New-AzPrivateEndpoint @pe

Проверка подключения SFTP

Теперь проверьте подключение, чтобы убедиться, что вы можете подключиться к контейнеру учетной записи хранения с помощью SFTP. Для проверки подключения можно использовать любой клиент SFTP. В этом примере используйте sftp из командной строки.

Например, для учетной записи хранения с именем teststorageaccount, контейнера с именем testcontainer, локальной учетной записи с именем testuser и общедоступного IP-адреса брандмауэра 13.68.216.252 используйте следующую команду:

sftp teststorageaccount.testcontainer.testuser@13.68.216.252

Введите пароль, сохраненный ранее при появлении запроса.

Вы увидите примерно следующее выходные данные:

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

Теперь вы подключены к контейнеру учетной записи хранения с помощью SFTP. Вы можете использовать put и get команды для отправки и скачивания файлов. Используйте ls для перечисления файлов в контейнере и lls перечисления файлов в локальном каталоге.

Очистка ресурсов

Если ресурсы больше не нужны, используйте следующую команду, чтобы удалить группу ресурсов, брандмауэр, политику брандмауэра и все связанные ресурсы.

Remove-AzResourceGroup -Name $rg -Force

Следующие шаги