Azure Firewall を使用して、SFTP 経由でストレージ アカウント コンテナーにアクセスできます。 Azure PowerShell は、仮想ネットワークにファイアウォールをデプロイするために使用されます。ファイアウォールは、SFTP トラフィックをストレージ アカウント コンテナーに変換する DNAT 規則で構成されます。 ストレージ アカウント コンテナーは、ファイアウォールからのアクセスを許可するプライベート エンドポイントで構成されます。 コンテナーに接続するには、ファイアウォールのパブリック IP アドレスとストレージ アカウント コンテナー名を使用します。
この記事では、次の内容について説明します。
- ネットワーク インフラストラクチャをデプロイする
- 適切な 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