다음을 통해 공유


Azure Firewall 고정 공용 IP 주소를 통해 SFTP를 사용하여 스토리지 계정에 액세스

Azure Firewall을 사용하여 SFTP를 통해 스토리지 계정 컨테이너에 액세스할 수 있습니다. Azure PowerShell은 가상 네트워크에 방화벽을 배포하는 데 사용되며 SFTP 트래픽을 스토리지 계정 컨테이너로 변환하는 DNAT 규칙으로 구성됩니다. 스토리지 계정 컨테이너는 방화벽에서 액세스할 수 있도록 프라이빗 엔드포인트로 구성됩니다. 컨테이너에 연결하려면 방화벽 공용 IP 주소와 스토리지 계정 컨테이너 이름을 사용합니다.

스토리지 계정 컨테이너에 액세스하기 위해 방화벽에 대한 SFTP를 보여 주는 다이어그램.

이 문서에서는 다음 작업을 수행합니다.

  • 네트워크 인프라 배포
  • 적절한 DNAT 규칙을 사용하여 방화벽 정책 만들기
  • 방화벽 배포
  • 스토리지 계정 및 컨테이너 만들기
  • 스토리지 계정 컨테이너에 대한 SFTP 액세스 구성
  • 스토리지 계정 컨테이너의 프라이빗 엔드포인트 만들기
  • 스토리지 계정 컨테이너에 대한 연결 테스트

Azure 구독이 아직 없는 경우 시작하기 전에 체험 계정을 만듭니다.

참고 항목

Azure Az PowerShell 모듈을 사용하여 Azure와 상호 작용하는 것이 좋습니다. 시작하려면 Azure PowerShell 설치를 참조하세요. Az PowerShell 모듈로 마이그레이션하는 방법에 대한 자세한 내용은 Azure PowerShell을 AzureRM에서 Azure로 마이그레이션을 참조하세요.

이 문서에는 최신 Azure PowerShell 모듈이 필요합니다. Get-Module -ListAvailable Az을 실행하여 버전을 찾습니다. 업그레이드해야 하는 경우 Azure PowerShell 모듈 설치를 참조하세요. 또한 PowerShell을 로컬로 실행하는 경우 Login-AzAccount를 실행하여 Azure와 연결해야 합니다.

네트워크 인프라 배포

먼저 배포에 사용할 일부 변수를 설정합니다. 사용자 고유의 값으로 대체합니다.

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 = 'eastus'
    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를 사용하여 스토리지 계정 컨테이너에 연결해야 합니다. putget 명령을 사용하여 파일을 업로드하고 다운로드할 수 있습니다. ls를 사용하여 컨테이너의 파일을 나열하고 lls를 사용하여 로컬 디렉터리의 파일을 나열합니다.

리소스 정리

더 이상 필요하지 않은 경우 다음 명령을 사용하여 리소스 그룹, 방화벽, 방화벽 정책 및 모든 관련 리소스를 제거할 수 있습니다.


Remove-AzResourceGroup -Name $rg -Force

다음 단계