Firebase StorageのCORS設定

Firebase StorageでCORSの設定をする必要があったのでそのメモ。AWSのS3のCORS設定は何度もやったことがあるけどFirebase Storageは初めて。

CORSが何かってのは割愛。

まず、gsutilってのをインストールする。どうやらこれ経由じゃないと設定できない模様。

gsutilってのは

コマンドラインから HTTPS を使用して Cloud Storage にアクセスできる

ということでFirebase Storage (ここではCloud Storageになってるが) にコマンドでアクセスするためのツールだそうだ。

このページから自分の環境にあわせてダウンロードする。M1 Mac用も用意されていた。

なお、gsutilの実行にはPython3が必要だそうだが最近のMacなら問題なさそう。

なお、このファイルはインストーラってわけではなくて単にtar.gzでアーカイブされたファイルなので、任意の場所に展開する必要がある。自分の場合はホームディレクトリ直下に解凍した。

そして、展開したディレクトリに移動してinstall.shを実行。パスを通してくれるらしい。

$ cd ~/google-cloud-sdk
$ ./install.sh 

その後は任意の場所にcors.jsonというファイルを以下のような内容で作成する。originはこの例のようにワイルドカードでもいいけど、ちゃんとやるならFirebase StorageにアクセスするWebアプリケーションをホストしているサイトのURLを入れる。忘れちゃいけないのが開発中のローカルサーバからのアクセス。もちろん複数を設定可能でカンマ区切りで記述していく。

[
  {
    "origin": ["*"],
    "method": ["GET"],
    "maxAgeSeconds": 3600
  }
]

GETとかはどのHTTPメソッドを通すかっていうCORSのよくあるやつ。

ファイルが用意できたら先ほどのgsutilを使って実行する。

$ gsutil cors set cors.json gs://<バケットURL>

バケットのURLはFirebaseのコンソール上に書かれているのでそれを参考にする。

さて、実行と思ったら認証エラー。

ServiceException: 401 Anonymous caller does not have storage.buckets.update access to the Google Cloud Storage bucket.

そりゃそうか。ということでgsutilを使う場合にどうやって認証すればいいのか。ちょっと調べたらサービスアカウントで認証するらしい。

とりあえずFirebaseのコンソール上でサービスアカウントを作って、そのキーファイルをダウンロードして以下を実行する。

gcloud auth activate-service-account --key-file KEY_FILE

これが終わったらあとはCORS設定を反映するだけ。というわけでもう一度さっきのコマンドを実行する。

$ gsutil cors set cors.json gs://<バケットURL>

以上

©Keisuke Nishitani, 2020   プライバシーポリシー