Skip to main content

常にいまいち

GCSへのアクセス制御(特定ドメインのアカウントだけにアクセスを許可する)

やりたいこと

XXX@gmail.comだけにアクセス許可 みたいな感じで特定のドメインのアカウントだけに限定して静的サイトを公開したい。

方法

consoleから変更する場合

  1. GCSのブラウザを開く
  2. 対象のBucketの バケットオーバーフローメニュー(右端の縦に...が並んでいるボタン) をクリックする
  3. バケットの権限を編集 を選ぶ
  4. メンバーを追加 を選ぶ
  5. 新しいメンバーのフォームに許可したいドメイン(gmail.com など)を入力
  6. 適切なロールを選択して保存する。

問題

この方法でファイルを提供することはできるが、ファイルをディレクトリまるごとアップして許可した人だけにサイト公開しようとすると1点問題が発生した。 ファイルをホストするドメインがファイルごとに異なっているので相対パスを指定しても他のファイルを参照することができなかった。 GCSのブラウザで確認できる Link URLhttps://storage.cloud.google.com/<bucket>/<file_name> となっているが、これにアクセスすると実際にファイルを配信している別のURLにリダイレクトされる。 このときリダイレクト先のURLのドメインが必ずしも同じドメインにならないようなので、そのまま単純に相対パスの状態でhtml/js/css/imgなどをアップするとリンク先が参照できなくて破綻する。

どうするかというと単純な話でhrefなどの参照先を絶対パスで指定すれば良い。

今回アップしようとしたファイル群は create-react-app で作成したので、.env ファイルに PUBLIC_URL=https://storage.cloud.google.com/<bucket>/<必要ならディレクトリ と記述して解決できた。

参考