normalian blog

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

Azure Blob Storage に SFTP でアクセスする

「最近何か面白い発表でもないかな~」と思っていたら、Azure Storage にまつわる以下のアナウンスを見つけました。
azure.microsoft.com
一体、何度「SFTP でアクセスしたい」という質問を受けたことでしょう。結構前に Preview 発表をしていたのは記憶にあるのですが、SFTP を愛してやまない社畜力の高い方々は Generally Available (GA) になるまで石橋を叩いて壊すレベルで慎重を期すと思い、スルー控えていましたが重い腰を上げる時が来たようです。

概要や詳細については以下の記事を参照していくことになります。こちらの参照は必須となるので、本記事を通読して概要を把握した後はご参照ください。
learn.microsoft.com
上記の記事をざっと眺めましたが、認証プロキシ被害者の会を開催できそうな社畜力の高い方々が興味を示しそうなポイントは以下でしょうか(偏見有り)。

  • Azure Storage は general-purpose v2 か premium block blob storage 出ないとだめ
  • ポートは 22 番から変更できないので、オンプレからのアクセス時は outgoing ポート 22 番を許可しないとだめ
  • 固定 IP でのアクセス先を指定できないので FQDN で指定する必要あり(これは SFTP というより Azure Storage 自体の制限
  • Azure AD の認証・認可は対応してない(2022年10月時点)ので、RBAC での ACL には対応していない。上記記事の caution に具体例が書いてあるので参照下さい
  • Azure Storage 上に SFTP アクセス専用の local user が最大1000人まで作れる
  • 上記 local user の認証にはパスワードか SSH Key pairs が利用可能
  • local user 毎にアクセス制御は個別に設定可能

個人的な印象としては Azure AD の認証と連動していないので「うちは Microsoft 365 を導入してるから、そのユーザを活用できるんだよね?」というシナリオには向いてないなという印象です。現時点ではユーザ管理を Azure Storage 個別で行う必要があるので、直接そういった運用ができる組織が使う方が良いのではないでしょうか。

ではさっそく設定して使ってみましょう。

SFTP support for Azure Blob Storage を試す

general-purpose v2 または premium block blob storage の Azure Storage アカウント自体を作るステップは割愛します。もし general-purpose v1 や classic タイプの Azure Storage アカウントを利用している方は事前に upgrade してください。
以下の様に Azure Storage アカウントには SFTP のメニューがあるので、こちらを指定してまずは SFTP を有効化します。この処理実施時に Local users も有効化されます。

この時点ではユーザーは一切登録されていないので、当該 Azure Storage アカウントにアクセスするためのユーザを手動で作成します。以下の様に自分でユーザ名を指定(azureuser は私が自分で入力した例です)し、パスワードまたは SSH Key Pair を指定して認証方式を決定します。この際、既に Azure VM 向けにアクセス用の SSH Key Pair 等有れば検証用には便利でしょう。

次にどのストレージコンテナにどの権限でアクセスするかを設定します。ストレージコンテナ毎にアクセス制御を個別に指定できるので、手動で運用する場合は煩雑になりがちだと思いますが制御そのものは実施可能です。

ここで重要なのが Home (landing) directory です。Azure Storage アカウントのルートディレクトリへの SFTP アクセス許可は出来なさそう(誰か発見したら教えて下さい)なので、ここを空欄にしたままアクセス制御をしようとすると以下のエラーが発生しました。Home (landing) directory は必ず設定する様にしてください。

上記でお察し頂けたかもしれませんが、社畜力に満ち溢れる身として、今回は WinSFTP を SFTP クライアントとして利用しています。こちらで指定するユーザ名にはちょっと癖があるのでご注意ください。以下の様に "Azure Storage アカウント名"."作成した local user 名"をユーザ名として指定します。

コンテナも指定する場合は "Azure Storage アカウント名"."コンテナ名"."作成した local user 名"となるので、この辺りで混乱する方も居るかもしれません。
私が作成したユーザは特にパスワードを指定せずに作成したのでパスワードは入力不要ですが、以下の様に WinSCP 上で SSH Key Pair の指定を忘れずしてください。

設定完了後、以下の様に通常の SFTP サーバの様に WinSCP 上からは作業可能です。

サポートされている SFTP クライアントは以下に一覧があるので、必要な場合は参照下さい。
SFTP support for Azure Blob Storage | Microsoft Learn