次の方法で共有


Azure Firewall の静的パブリック IP アドレス経由で SFTP を使用してストレージ アカウントにアクセスする

Azure Firewall を使用して、SFTP 経由でストレージ アカウント コンテナーにアクセスできます。 Azure PowerShell は、仮想ネットワークにファイアウォールをデプロイするために使用されます。ファイアウォールは、SFTP トラフィックをストレージ アカウント コンテナーに変換する DNAT 規則で構成されます。 ストレージ アカウント コンテナーは、ファイアウォールからのアクセスを許可するプライベート エンドポイントで構成されます。 コンテナーに接続するには、ファイアウォールのパブリック IP アドレスとストレージ アカウント コンテナー名を使用します。

ストレージ アカウント コンテナーにアクセスするためのファイアウォールへの SFTP を示す図。

この記事では、次の内容について説明します。

  • ネットワーク インフラストラクチャをデプロイする
  • 適切な DNAT 規則を使用してファイアウォール ポリシーを作成する
  • ファイアウォールをデプロイする
  • ストレージ アカウントとコンテナーの作成
  • ストレージ アカウント コンテナーへの SFTP アクセスを構成する
  • ストレージ アカウント コンテナーのプライベート エンドポイントを作成する
  • ストレージ アカウント コンテナーへの接続をテストする

Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。

Azure を操作するには、Azure Az PowerShell モジュールを使用することをお勧めします。 作業を始めるには、「Azure PowerShell をインストールする」を参照してください。 Az PowerShell モジュールに移行する方法については、「AzureRM から Az への Azure PowerShell の移行」を参照してください。

この記事では、最新の 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 を使用してストレージ アカウント コンテナーに接続されます。 put および get コマンドを使用して、ファイルをアップロードおよびダウンロードできます。 コンテナー内のファイルを一覧表示するには ls を、ローカル ディレクトリ内のファイルを一覧表示するには lls を使用します。

リソースをクリーンアップする

必要なくなったら、次のコマンドを使用して、リソース グループ、ファイアウォール、ファイアウォール ポリシー、およびすべての関連リソースを削除できます。


Remove-AzResourceGroup -Name $rg -Force

次の手順