Google Cloud Storageに置いた静的ページにBasic認証をつけて公開する(CloudRun編)


やりたいこと

Google Cloud Platform(GCP)で静的なWebサイトをBasic認証をつけて公開します。

Cloud RunにBasic認証を行うプログラムを入れることで、サーバレス(管理いらず)に構築します。
公開するサイトファイルは、Cloud Storage(GCS)に上げてください。

余談ですが、GCPの機能の一つとして Firebase があります。
Firebaseを使って、Basic認証をつける方法もあります。

https://note.com/rubymade/n/nafa8c82bd4cc

はじめに

GCSを作って、アクセスは 非公開 にしておいてください。
おそらく、このページを見ている人はGCSの構築などは問題ないと思うので、 Basic認証 をつけるところを中心に話しますね。

参考にしたのは、このサイト

https://cloud.google.com/community/tutorials/cloud-run-golang-gcs-proxy
Googleの人がCloud RunでGCSのプロキシを書いているチュートリアルです。
main.goにbasic認証を追加してデプロイすれば完成です。
ただ、チュートリアルなのでサイト自動翻訳などの今回不要なソースが入っています。今回は不要なのでざっくり消したものを用意しました。

手順

Cloud Shell Editorでソースを取り込む

Cloud Shell Editorを立ち上げてください。(とても便利で無料です。どんどん使いましょう!)

"cloud-shell-editro-起動"

VS CodeライクなEditorが立ち上げったら、ターミナルを立ち上げて、ソースをクローン
(上のサンプルから不要なコードを削ったソースです。キャッシュ周りは残しているので好きにカスタムしてください)

git clone https://github.com/ToMGitHubN/gcs-basicAuth-cloudRun.git

クローンされた、フォルダーを右クリックして、ワークスペースに登録し、Cloud Code コマンドを読みだします。
Deploy to Cloud Runを選択します。
"Deploy to Cloud Run"

Cloud Runデプロイ設定

Cloud Runデプロイ設定画面を入力します。

①Cloud Runの名前で分かりやすいものを入れます。
②fully mangedでリージョンは、GCSと同じリージョンがお得です(GCSのバケットを開くとリージョンが表示されています)
③Show Advanced Settings(詳細設定)を開きます


デフォルトだとサーバ性能が低いのでお好みで変更します。(性能の設定は後から簡単に変更可能)
①のタイムアウト時間は、できるだけ長くしています。(処理が早めに終わった時は、サーバが落ちるのでデメリットなし)


ENVIRONMENT VARIABLESを開きます。

環境変数で
BUCKET_NAME: 対象のバケット名
BASIC_ATUH_ENABLE: basic認証の有効(true)・無効(false)
BASIC_ATUH_ID: basic認証のID
BASIC_ATUH_PASSWORD: basic認証のパスワード
を追加します。
"Deploy to Cloud Run"

入力例
BUCKET_NAME:hoge-name
BASIC_ATUH_ENABLE:true
BASIC_ATUH_ID:hoge_id
BASIC_ATUH_PASSWORD:hoge_password

設定が終わったらデプロイ

一番下の Deploy ボタンを押します。
URLが発行されて、サイトが見えるはずです。


追加設定

ハンバーガーメニュー(①)から Cloud Run に移動し、自分が設定したサービス名(②)を開きます。

新しいリビジョンの編集とデプロイ を開き

接続 (①)の HTTP/2 エンドツーエンドを使用する (②)にチェックを入れます
(理由:HTTP/2への設定を行わないと、転送できるファイルが32MBより小さいサイズに制限されます)

ページ下の デプロイ ボタンを押して、設定を反映してください。

これで公開作業完了です

所有しているドメインをCloud Runに紐づけたり、ロードバランサーに紐づけたりしてください。
(ロードバランサーがおすすめです)


おまけ:設定変更

編集機能で、basic認証の設定を変更できる。
新しいリビジョンの編集とデプロイ を開き

環境変数 の内容を変更できます。

例えば、開発・ステージング・本番環境の3環境を用意いするには、Cloud Runをコピーして、BUCKET_NAMEでストレージ名を変更することですぐに用意できます。

また、BASIC_ATUH_ENABLE:false にすればbasic認証をかけないようにできます。
ただのリバースプロキシとして動作するので、Cloud Armorを当てるためのサーバとして使える(はずです)。

おまけ:削除する

まず、Cloud Runからサービスを削除する

次に、Container Registry (もしくは、Artifact Registry)の中に入って、中のイメージをすべて削除する。

Container Registry と Artifact Registry、のどちらにあるかは設定によるので両方に入ってみて見つけた方を消せばよいです。

おわり

ストレージに置いたファイルを認証付きで無事公開できましたでしょうか。

このやり方とは別にロードバランサーへのアクセス時にCloudRunをフックして認証チェックをかける方法もありそうです。
参考となる記事
記事時点ではコマンドベースの作業となります。
興味ある方はどうぞ。

以上です。