Azure Blob Storage SFTP機能の公開鍵認証方式を全パターン検証してみた

Azure Blob Storage SFTP機能が2022年10月にGAしました。
公開鍵認証方式にいくつかパターンがあるので検証結果を書き残してます。

# Azure Data Lake Storage Gen2アップグレード
* SFTP機能を使用するためにはADLS Gen2にアップグレードする必要があります。
* [公式手順](https://learn.microsoft.com/ja-jp/azure/storage/blobs/upgrade-to-data-lake-storage-gen2-how-to?tabs=azure-portal)に従って、既存Storage Accountをアップグレードします。
* 以下の機能はサポートされなくなるので注意が必要です。（事前にチェックされます）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/1ce903a9-326e-d27b-35db-23573c9ff0c6.png)
    * Storage Accountをデフォルト設定で作成している場合は、「コンテナーの論理的な削除保護」と「BLOBの論理的な削除保護」が事前チェックで引っかかると思うので、無効にしてアップグレードする必要があります。

# SFTP有効化
* アップグレードが終わると左メニューに[SFTP]が表示されてきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/0a2807bd-ac8e-8de9-420f-193b082c316b.png)

* SFTPを有効化します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/6ab4ec71-68ea-05c1-4ca7-ee5b63839085.png)

* SFTP機能を有効にすると、2023年1月1日から時間単位のコストが発生するようになっているので注意が必要です。SFTP機能の価格は[こちら](https://learn.microsoft.com/ja-jp/azure/storage/blobs/secure-file-transfer-protocol-support#pricing-and-billing)

# Azureで新しいキーペアを作成する
* 次にローカルユーザーを追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/53be6f2a-37b8-3031-848b-c6f2020f6b2b.png)

* ここでパスワード方式か公開鍵認証方式かを選択することができます。今回は公開鍵認証方式なので[SSHキーの組]を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/7c58eefb-86f2-e9bf-f72a-1ca1aac95adf.png)

* [キーの追加]を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/0966ce07-9f1f-1d54-b090-cd66f239d0c4.png)

* 公開鍵は3種類の方法で準備できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/d9c8754e-553f-62e1-402f-7f11eaaeddfa.png)

* まずは[新しいキーの組の生成]をやってみようと思います。キー名は任意の名前を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/b79eb777-712e-636f-6627-e1bbd8bdd3ee.png)

* コンテナーへのアクセス許可やホームディレクトリは任意で設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/ebe1de72-6c53-415e-aedb-c8468328ff99.png)

* これでローカルユーザーを作成すると、秘密鍵をダウンロードする画面になるのでローカルPCにダウンロードしておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/e936b772-0e43-336a-3296-20b987747d2b.png)

* あとはこの秘密鍵を使ってクライアントからアクセスします。

```
sftp -i [秘密鍵] [Storage Account Name].[Container Name].[Local User Name]@[Storage Account Name].blob.core.windows.net
```

# Azureに格納されている既存のキーを使用する
* 次に[Azureに格納されている既存のキーを使用する]を使ったパターンです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/6b57626b-35c3-28e7-2cd3-e25b58775ad5.png)

* こちらを選ぶと先ほど作った公開鍵が選択できるようになっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/0b5819f5-6d23-a69b-b079-440834fe7267.png)

* 同一リソースグループに先ほど作ったSSHキーというリソースが作成されています。これを他のユーザーでも使いまわすことができるということですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/d152410a-006d-b66f-c031-2fc7c5ae5f0a.png)

* 当然先ほどと同じ秘密鍵を使ってアクセスすることができます。

# 既存の公開キーを使用
* 最後に既存の公開キーを使う方法です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/4d1d9078-f00d-5801-ccb5-0123e462177e.png)

* まずはキーペアを作ります。Windows10端末とかLinuxとかなんでもよいので以下のコマンドを実行します。

```
ssh-keygen -C ""
```

* 作成された公開鍵(id_rsa.pub)をメモ帳などで開きます。
* 中身を全てコピーして公開キーの項目に貼り付けます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/1332634a-bdfe-b7fe-4b90-108f678d7352.png)

* この状態でローカルユーザーを作成します。

* 作成された秘密鍵(id_rsa)を使ってクライアントからアクセスすることができます。

# プライベートエンドポイントからの接続
* ついでにプライベートエンドポイントからの接続がSFTPでも問題なくできるのかを検証しました。
* プライベートエンドポイントからのプライベートIP接続でも、SFTPは問題なく利用できたので書き残しておきます。

以上