Azure Blob ストレージの SFTP 機能が GA になったようなので使ってみた

2022.10.22

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

いわさです。

先日のアップデートで Azure Blog ストレージの SFTP 機能が GA となりました。

Azure 上でマネージドな SFTP のエンドポイントとユーザーを管理することが出来ます。
早速使ってみました。

使ってみる

独立したマネージド SFTP サービスではなく Azure Blob ストレージで有効化出来るオプション機能です。
まずは新規ストレージアカウント作成時に有効化してみました。

アカウント作成

アカウント作成時の詳細設定タブで「SFTP を有効にする」というメニューがあります。
GA と聞いていましたが表記がプレビューとなっています。

英語表示に変更したところ、プレビュー表記が無くなりました。日本語表記上の問題のようですね。

前提条件として SFTP を有効化するには、階層型名前空間を併せて有効化する必要があります。

ストレージアカウントとしては SFTP を有効化するところまでで良いです。

ユーザー作成

SFTP を有効後は SFTP ユーザーを作成出来ます。
ユーザー作成時にさらに詳細な情報を設定していきます。

ユーザーの認証方法として SSH パスワードと SSH キーペアの 2 つのオプションが利用出来ます。
今回はどちらも利用してみました。

パスワードはカスタムパスワードは設定できず Azure によって自動生成されるものを使う形となります。
キーペアは Azure 側で自動生成して秘密鍵をダウンロードする、あるいは自分でキーペアを用意して公開鍵をアップロードすることも出来ます。
今回は Azure 側で自動生成させてみることに。

登録時にこのようにパスワードの確認と秘密鍵のダウンロードが出来ますが、あとから再度行うことは出来ないのでこのタイミングで必ず行ってください。

ユーザー名と認証情報の登録が出来たら、SFTP でアクセスするコンテナーのアクセス許可設定を行います。

注意点として、本日時点ではコンテナーレベルのアクセス許可のみが可能でディレクトリレベルのアクセス許可はサポートされていません。ドキュメントでは「現在のリリースでは出来ません」という表現だったので今後出来るようになる可能性ありそうですね。
また、1 ユーザーに設定できるアクセス許可構成を行うコンテナーは最大 100 件までです。

ユーザーごとにホームディレクトリが設定出来ますが、あくまでも初期表示のディレクトリであり上記のアクセス許可の仕様から、コンテナー内の権限のあるパスへアクセスすることが可能です。

接続・アップロード

ユーザーの作成・アクセス許可の設定が完了後、接続文字列を取得出来ますので、あとは SSH クライアントから接続を行うだけです。
サポートされているクライアントなどの制限が少しあるのですが、後述します。

以下では sftp コマンドを使って接続しローカルからファイルをアップロードしてみました。

% sftp -i hoge1021key hoge1021sftp.hoge1021container.hogeiwasa@hoge1021sftp.blob.core.windows.net
The authenticity of host 'hoge1021sftp.blob.core.windows.net (20.60.172.132)' can't be established.
ECDSA key fingerprint is SHA256:IFt/j4bH2Jc0UvhUUADfcy3TvesQO+vhVdY4KPBeZY8.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'hoge1021sftp.blob.core.windows.net' (ECDSA) to the list of known hosts.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for 'hoge1021key' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "hoge1021key": bad permissions
hoge1021sftp.hoge1021container.hogeiwasa@hoge1021sftp.blob.core.windows.net's password: 
Connected to hoge1021sftp.blob.core.windows.net.
sftp> put hoge.txt
Uploading hoge.txt to /hoge.txt
hoge.txt                                                             100%    4     0.2KB/s   00:00    
sftp>

アップロードされていることが確認出来ました。

既存ストレージアカウントへの有効化

先程は新規ストレージアカウントにて構成をしてみましたが、既存アカウントに対して有効化も可能です。

階層型名前空間が無効になっているストレージアカウントの場合はサイドメニューに SFTP メニューが表示されません。
まずは階層型名前空間を有効化しましょう。

階層型名前空間を有効化すると SFTP オプションが選択出来るようになります。
ただし、階層型名前空間を有効化しただけでは SFTP オプションは無効状態です。

SFTP メニューから「SFTP を有効にする」を選択することで SFTP オプションを有効化することが出来ます。

料金

SFTP オプションは追加料金が発生します。
Pricing ページにはまだ記述が見当たりませんでしたが、以下に記述があります。

Enabling the SFTP endpoint has a cost of $0.30 per hour. We will start applying this hourly cost on or after December 1, 2022.

SFTP オプション独自の要素として SFTP エンドポイントの有効化中は 1 時間あたり 0.30 USD のコストが発生するとのこと。(2022 年 12 月 1 日から)
それに加えて Azure ストレージの通常の料金(ストレージやデータ転送など)もコストとして発生します。

SFTP のパフォーマンスを向上させる方法

次のドキュメントでは SFTP パフォーマンスを向上させる方法がいくつか紹介されています。

  • クライアントからの同時接続機能を使って複数並行してアップロードを行う
  • プレミアムブロック BLOB ストレージアカウントを使用する

制限事項

先程も少し触れましたが、次のドキュメントでは制限事項が紹介されています。

  • 現時点でサポートされていないクライアントがある
  • クライアント側の推奨設定がある
  • サポートされていない操作がある

さいごに

本日は Azure Blob ストレージの SFTP 機能が GA になったようなので使ってみました。

今までは自前で SFTP サーバーを用意する必要があったようですが、Azure ストレージの可用性などの恩恵を受けつつマネージドな SFTP エンドポイントを提供してくれるのはなかなかうれしい気がします。
AWS でいうと AWS Transfer Family のようなイメージでしょうか。