時計を壊せ

駆け出してからそこそこ経ったWebプログラマーの雑記

GCSへのアクセスをIdentity Aware Proxyで制限したいのでProxyを作った

storybookを共有したいなど、GCSに静的ファイルを配置しつつもそれを限定したメンバーだけに見せたいような用途ではアクセスを簡単かつ確実に制限するために、その制限にIdentity Aware Proxyを使いたくなることがあります。 しかし、Identity Aware ProxyはBackend Serviceに紐付けることはできますが、Backend Bucketに紐付けることはできません。Cloud Armerも同様です。 そこで、Backend ServiceとしてGCSのコンテンツを配信できるように、Proxy Serverを作りました。

github.com

ghcr.io/karupanerura/gcsproxy:v0.0.1 にビルド済のイメージを置いてあるので、 これをそのまま(予め自身のProjectのArtifact Registryにコピーを配置した上で)Cloud Runにdeployすることで、 GCSを参照するProxyとして動かすことができます。

GCS_PROXY_BUCKET 環境変数でGCSのバケット名を指定すればとりあえず動きます。

ほか、URLのパスプレフィクスをどうにかしたい場合、たとえば /static/ 以下をCloud Load BalancerからルーティングしてGCSのルートを参照させたい場合は GCS_PROXY_PATH_PREFIX/static/ と設定すればよいようになっていたり、 /index.html を参照させたかったら GCS_PROXY_INDEX_FILEindex.html と設定すればよくなっていたりなど、細かい機能が少しだけ実装されています。

あと(複数のRangeは扱えないけれど)Range Requestに対応していたり、gzip圧縮済のコンテンツをAccept-Encodingに応じてうまく扱えたり、HEADリクエストを解釈できたりなど、地味な機能がいくつか付いています。

よかったら使ってください。こんなの使わなくてもこれでいけるよ的な情報もお待ちしています。