GCP(Google Cloud Platform)のStorageをS3モードでWinScpでつないで操作する

# はじめに

Google Cloud Storage(以下GCS)はブラウザから簡単に操作ができましたが、GUIソフトで操作した方が慣れてますよね。
実はGCSはS3互換モードが存在して、それを使えば簡単にアクセスできるのですが、あまり知られてないかも、ということで紹介します。


23/4/8 追記
こちらの記事がより詳細です
https://zenn.dev/google_cloud_jp/articles/winscp-for-google-cloud-storage


# クラウド側でS3アクセスを有効化

まず、GCP側でS3用のアクセスキーを作成します。

アクセスキーは2通りの方法で払い出すことができます。
方法1: IAMからStorageアクセス専用のユーザを作成し、紐づける(<=おすすめ)
方法2:デフォルトプロジェクトにしてキーを払い出す


どちらの方法でも、まずGCPの管理画面のCloud Storageページを開いてください。
「設定」-> 「相互運用性」を開きます。

![cloud_setting_1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90529/df820843-f362-44f0-97c8-8082f5165c7d.jpeg)


### 方法1: IAMからStorageアクセス専用のユーザを作成の場合

AWSなどでもおなじみの専用ユーザを作成する方法です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90529/d204718a-e70b-3c76-cc74-08a84319c59c.png)

「サービスアカウントHMAC」の「サービスアカウント用にキーを作成」=>「新しいアカウントを作成」をクリック

適当にサーバアカウント名を付けます。
図では、"s3-full-access"です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90529/eec63836-361d-8f80-8802-8fb88d0d80ba.png)

権限は、「ストレージ管理者」を割り振ります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90529/e458c6b6-5a24-5748-304d-54ac00e36658.png)

ユーザを作成し、「アクセスキー」「シークレット」を忘れずに、メモしましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90529/2504dfa5-1c8c-b04f-37b0-3e98c454cad1.png)

これで、作成は完了です。


### 方法2:デフォルトプロジェクトにしてキーを払い出す

そのまま下にスクロールして、
「相互運用のデフォルトプロジェクト」で、デフォルトプロジェクトに設定します。

「ユーザーアカウントのアクセスキー」の「鍵を作成」ボタンを押すと、 `アクセスキー` と `シークレットキー` を発行できました。
このページでいつでもキーを確認することができます。

(アクセスキーの発行は、これ以外に同じページにある「サービスアカウントのアクセスキー」でも発行できます。
こちらを使えば、権限をコントロールできます。)


![cloud_setting_2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90529/2fa3391c-063d-c135-e95d-fa9f28723205.jpeg)

迷うところはなかったかなと思います。

# WinScpでアクセスする

WinScpの「ホスト名」にリクエストエンドポイント、つまり
https://storage.googleapis.com
のURLを入れます。

最新のWinScpでは、転送プロトコルが自動でS3になります。
上で発行した、 `アクセスキー` と `シークレットキー`を入れてログインするとバケットの一覧が表示されます。

# おまけ：Cyberduckでアクセスする

新規接続で、 
* `Amazon S3`を選択
* サーバに、 `storage.googleapis.com` を入れる。(ここで、https://から入力するとS3でないサーバに切り替わってしまう)
* アクセスID に アクセスキー を入力
* シークレットアクセスキー　に　シークレット を入力

これで、接続できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90529/75784eb6-e1d1-6f44-e8f6-7c4dbe6c8600.png)

### ファイルアップロードエラー(Cannot insert legacy ACL)が出たら

```
Status code: 400, reason phrase: Invalid argument. Cannot insert legacy ACL for an object when uniform bucket-level access is enabled. Read more at...
```

CyberduckがACLの変更をしようとして拒否されている。
変更を行わない設定にすることで、対応可能。

メニューの編集 -> 環境設定
S3　の `Default ACL` を　"なし"　にする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90529/6df69a63-ba66-2729-e083-9ba3d5909446.png)


# おまけ2：S3 Browserでアクセスする


メニューの「Accounts」->「Add new account」

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90529/5cbfa3f7-0d9f-f3a0-cbd8-81da88425853.png)

---

1.接続先の名前(適当に自分がわるものを入れる)
2.「S3 Compatible Storage」を選択
3. `https://storage.googleapis.com` を入力
4.  アクセスキー を入力
5.  シークレット を入力

全部、入力したら"6"を押して、接続先を作る。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90529/1e235ab3-4bb7-96dc-edf9-50e2ea8c442c.png)

メニューの「Accounts」から、先ほど追加したメニューに切り替えれば接続完了


# 終わりに

S3互換モードはいろいろなツールの連携に役立ちそうです。
また、簡単にキーの発行と削除ができるので、デザイナさんなどシステムに関わない人にストレージを見てもらうときにも便利ですね。

以上です。