WinSCPでConoHaのオブジェクトストレージに接続する

[ConoHa Advent Calendar 2022](https://qiita.com/advent-calendar/2022/conoha) 18日目の記事です。

とりあえず何か書かねばとConoHaのVPSコンソールを眺めていてネタにできそうな物があったので
今年もちゃんと書こうと思います。


# 目標
みんな大好きWinSCPを使って~~このはちゃん~~ConoHaのオブジェクトストレージを弄ります。

# 使う物
* Windows
* WinSCP
* s3Proxy & Java

# 内容
s3Proxyを使ってWinSCPから繋ぎます。
WinSCPはTLS接続を要求するためs3ProxyにlocalTLSを設定します。

オブジェクトストレージの割り当て、APIユーザー設定については公式のサポートに記載があるため
そちらは、清楚可愛いこのはちゃんの説明に委ねます。

Javaコマンドは使える前提です。
Javaに含まれるkeytoolが使える必要があるためJDKをインストールしておいてください。
keytoolにパスが通っている必要はありません
(実行ファイルパスを直接叩ければ問題無い)

# オブジェクトストレージの契約

ひとまずサポートに書いてある通りオブジェクトストレージの割り当てを行います。

https://support.conoha.jp/v/addobjectstorage/?btn_id=guide-objectstorage_v-addobjectstorage

コンソールにログイン後、オブジェクトストレージから設定を開き
容量の変更(割り当て)を行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150940/07af0aa4-1492-af5e-31df-dcfe4203bd9e.png)

# APIの設定

サポート通りにAPIユーザーの追加を行います
パスワードを設定するだけです。
パスワード使い回しは絶対にやめましょう。

https://support.conoha.jp/v/addapiuser/?btn_id=v-objectstorages3api-sidebar_v-addapiuser

# 本記事のメインの s3Proxy の導入、設定

https://github.com/gaul/s3proxy/releases/download/s3proxy-2.0.0/s3proxy
をダウンロードします。
記載時点で2.0.0が最新でした
その他バージョンは以下からどうぞ

https://github.com/gaul/s3proxy

https://github.com/gaul/s3proxy/releases


ダウンロードした適当なディレクトリに s3proxy を配置します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150940/b7b96f7f-ea3f-4af3-7c34-6ef449261140.png)

## 証明書の発行

Shift 押しながらディレクトリ内で右クリックし、
`PowerShellウインドウをここで開く`を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150940/d345ea30-a53a-dff5-9f84-c5ce2c509be2.png)

Win10のいつからかPowerShellになってます
ここではコマンドプロンプトが使いたいのでPowerShellで開くのは困るのですが
まあいいでしょう

PowerShellからコマンドプロンプトに切り替えます
```powershell
cmd
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150940/849e3015-14e6-434f-01c8-8c230ef44c35.png)

keytoolを動かしてオレオレ証明書を作成します
（WinSCPで接続時にTLSが強制されるので必要になります）
```batch
keytool -keystore keystore.jks -alias aws -genkey -keyalg RSA
```
keytoolにパスが通っていない場合
JDKインストールディレクトリのbinからフルパスを指定して実行してください

例
```batch
"C:\Program Files\Java\jdk-17.0.4.1\bin\keytool.exe" -keystore keystore.jks -alias aws -genkey -keyalg RSA
```

実行すると作成パスワードが必要になります
後で使うのと何でもいいので`password`としています

入力しても画面に表示されません。

また証明書の所有者情報も入力が必要ですが、適当です。そのままEnterで進みましょう

最後に確認でyes or no を訪ねられるので `y` で完了です

```batch
C:\Users\   \Desktop\temp>"C:\Program Files\Java\jdk-17.0.4.1\bin\keytool.exe" -keystore keystore.jks -alias aws -genkey -keyalg RSA
キーストアのパスワードを入力してください:
新規パスワードを再入力してください:
姓名は何ですか。
  [Unknown]:
組織単位名は何ですか。
  [Unknown]:
組織名は何ですか。
  [Unknown]:
都市名または地域名は何ですか。
  [Unknown]:
都道府県名または州名は何ですか。
  [Unknown]:
この単位に該当する2文字の国コードは何ですか。
  [Unknown]:
CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknownでよろしいですか。
  [いいえ]:  y

90日間有効な2,048ビットのRSAのキー・ペアと自己署名型証明書(SHA256withRSA)を生成しています
        ディレクトリ名: CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
```

keystore.jksがディレクトリに作成されます。


## 設定ファイルの作成
s3proxyの横にs3proxy.confを作成します

```conf:s3proxy.conf
s3proxy.secure-endpoint=https://localhost:8081
s3proxy.keystore-path=keystore.jks
s3proxy.keystore-password=password
s3proxy.authorization=aws-v2-or-v4
s3proxy.identity=access_key
s3proxy.credential=secret_access_key
jclouds.provider=openstack-swift
jclouds.endpoint=https://identity.tyo2.conoha.io/v2.0
jclouds.identity=gnct＊＊＊＊＊＊＊:gncu＊＊＊＊＊＊＊＊
jclouds.credential=＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊
jclouds.regions=tyo2
jclouds.region=tyo2
```
jclouds.endpoint
jclouds.identity
jclouds.credential
jclouds.regions
jclouds.region
の値は各アカウントで変動します

`jclouds.endpoint` はAPIのエンドポイントにある _Identity Service_ をそのまま設定

`jclouds.identity` は`テナント名:ユーザー名`を設定

`jclouds.credential` は __APIユーザー設定時のパスワード__ を設定します

`jclouds.regions` `jclouds.region` はConohaのリージョンに合わせてください

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150940/f9acfc53-d61f-cdbf-0627-ba5292eedd5e.png)


## 起動 / 起動バッチ

※javaへのパスが通っている前提です

コマンドプロンプトから
又は、start.batを作成しs3proxyを実行します

```batchfile:start.bat
java -jar s3proxy --properties s3proxy.conf
```

ログが流れて
```
[s3proxy] I 12-18 02:41:36.157 main o.g.s.o.e.jetty.server.Server:415 |::] Started @2895ms
```
Startedと出ていれば起動している様です。


# WinSCPの設定

## 接続情報
基本接続情報
|  |  |
|:-|:-|
| 転送プロトコル  | Amazon S3  |
|  ホスト名 | localhost  |
| ポート番号  | 8081  |
| アクセスキー  | access_key  |
| シークレットキー| 保存されないので空でいい |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150940/d1e3929d-aa1d-b7dc-4ce6-87be3a922f36.png)

## 接続設定

設定を押して高度なサイトの設定を開きディレクトリの設定を変更します
* 最後に使用したディレクトリを記憶するのチェックを外しておき
* リモートディレクトリも空にしておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150940/19cc3fca-e8ca-4fc9-b2c1-68edfd6f3429.png)

S3の
* URLスタイルをパスに変更します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150940/e7f172fb-bd75-55d8-4150-2746f50da26e.png)

OKを押して
セッション作成画面へ戻り
保存で適当な名前を付けて保存する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150940/e9542a14-7aad-ed4e-b914-d7ed0c924fee.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150940/e91d1f80-290b-8a54-2cee-7ed9f8e5ae01.png)



そうしたらログイン
`secret_access_key`を入力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150940/a9d25fb0-05fa-cf93-1a7a-f3d3dbc931ee.png)

オレオレ証明書のため不明な証明書と出ますが
無視して`はい`を選択して接続します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150940/ea4016fb-57b5-cdaf-33dd-f4cf5b459618.png)

その後
接続完了画面まで進めば接続成功です
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150940/03d7889c-bc45-8a51-d82b-9b2ec508af7d.png)

# コンテナの作成

右クリックからディレクトリの作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150940/d89ef686-7a46-2009-773a-a83d849acb58.png)

コンテナ名を入れてOK
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150940/bf83db07-cee2-cbac-b1b0-caf63505bbdb.png)

ディレクトリが作成されていればコンテナ作成完了です
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150940/0325d41d-2546-a6b5-b72b-ea325a65e511.png)

ダブルクリックでディレクトリに入り
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150940/3a730aca-aec6-41f8-d5cb-998061e3cfa4.png)

右クリックメニューから新規ファイルを作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150940/2ca524a3-d6cc-3f6c-2a18-1ef3e7394882.png)

適当な名前
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150940/2417fb2c-6df8-6f61-ea56-6c378b92e64b.png)

WinSCPのエディタが開き
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150940/cc020368-9001-7b3f-0f1c-5fb1ccd5c90e.png)

適当に文字を入れて保存し閉じる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150940/cb972d28-1373-c636-16aa-60b58ee5b33f.png)

裏ではWinSCPがファイルのアップロードを行い更新を済ませています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150940/174b2900-bfc0-3374-426a-e2b9424b66a4.png)

作成されているファイルをダブルクリックで開けば
さっき入力した物が保存されているはずです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150940/80603485-8ece-e517-1a85-c647b97a1927.png)



# 最後に


Cyberduck使えばいいじゃんってなりますがWinSCPを繋げるロマンを求めた結果でした。