normalian blog

Let's talk about Microsoft Azure, ASP.NET and Java!

Azure Blob Storage に SFTP でアクセスする - 閉域網版

前回の記事で Azure Storage に対して SFTP でアクセスするところまで行いました。Azure Storage 個別にユーザを作成し、パスワード or SSH Key Pair での認証が可能、Azure Storage 個別で認可制御を行えることが分かりました。
normalian.hatenablog.com
しかし、上記の記事では石橋を叩いて壊す社畜黒帯の方々にとって大事な観点が欠けています。そう、閉域網でアクセスするネットワーク制御です。こちらに関しては社畜というだけでなく、様々なコンプライアンスに対応するためにも非常に重要な観点です。特に金融系のコンプライアンスである FICS や PCI-DSS 等に準拠をする場合、Express Route や VPN で on-premise 側とつないでの閉域網通信は必須要件と言えるでしょう。
Microsoft Azure の場合 What is a private endpoint? - Azure Private Link | Microsoft Learn と呼ばれる機能を利用し、Microsoft Azure の仮想ネットワークに対してのみエンドポイントを公開することで閉域網からアクセスすることが可能になります。

今回の構成例としては以下になります。xxxxxxxxxwestus2.blob.core.windows.net 側が公開 FQDN となり、xxxxxxxxxwestus2.privatelink.blob.core.windows.net が Private DNS が関連付けされている VNET でのみ名前解決が可能な FQDN となります。

Private Endpoint を設定してインターネットアクセスを禁止する

まずは Private Endpoint から設定しましょう。以下の様にストレージアカウントの Network メニューから Private Endpoint 作成のメニューを選択し、当該 VNET に対してPrivate Endpoint 作成を完了します。

Private Endpoint の作成が完了すると、以下の様に VNET 側に NIC が登録されます(例でのプライベートアドレスは 192.168.0.7 です)。

次にインターネット側からのアクセスを制限します。ストレージアカウントの Private Endpoint の有効化を行うことで閉域アクセスは可能となりましたが、このままの設定では公開 FQDN からのアクセスは未だに可能となっています。こちらを禁止するためには以下の様にストレージアカウントの Network メニューの Firewalls and virtual networks のメニューから禁止できます。加えて Network Routing は Microsoft Network routing となっていることを確認ください。

インターネット経由でのアクセス

社畜御用達ツール WinSCP で前回行ったアクセスを再度実施してみましょう。以下の様なエラーが表示され、アクセスがブロックされるはずです。

Private Endpoint 経由でのアクセス

次に Private Endpoint 経由でのアクセスを行います。Host name には Private DNS で指定した FQDN でアクセス可能です。以下の様に Private DNS 側に登録された FQDN を使えばアクセス可能です。


感のいい方なら「NIC に登録された Private IP でもアクセスできるのでは?」と気づいたかもしれません。ご認識の通り当該 Private IP を指定することで SFTP 接続は可能でしたが、Private Endpoint に割り当てられた Private IP は以下の様に Dynamic となります。

Dynamic で割り当てられた IP の場合、何らかの要因で IP アドレスの再割り当てがされた場合に IP アドレスが変更されることを意味しています。古からの Azurer なら「原則 xxx.xxx.xxx.4 から割り当てられるからそこを駆使すればいいじゃん」と思うかもしれませんが、明にサポートされていないやり方はお勧め致しません。

実はこのブログを書いた後に Azure の更新を眺めていたら以下の情報を見つけてしまいました。どうやら Private Endpoint だろうが IP 固定ができる様です。
azure.microsoft.com

詳細は az network private-endpoint ip-config | Microsoft Learn のブログを参照頂くとして、以下のコマンドを行うことで無事に IP アドレスが固定できました。以下の Private IP アドレスは予め Private Endpoint 作成時に割り当てられた IP アドレスです。

az network private-endpoint ip-config add --endpoint-name "daisamiclientwestus2-storage" -g "daisami-client-rg" -n myipconfig --group-id blob --member-name blob --private-ip-address "192.168.0.7"