Googleクラウドストレージリバースプロキシ。プライベートGoogleクラウドストレージオブジェクトを使用してプライベート静的サイトをホストするため。
GCSバケットを使用して静的サイトを提供したいのですが、アクセスを制限します。
この逆プロキシマイクロサービスは、一連のGCSバケットのシンプルなHTTPサーバーとして動作します。次に、適切な方法を使用して、アクセスを制限できます。たとえば、Nginx、Caddy、またはVPNの後ろに置きます。
ブラウザを介してプライベートGCSオブジェクトにアクセスするには、URLにエンコードされた特別なトークンが必要です。これは、これらのトークンを生成したり、要求またはリンクする資産のURIを予測できないため、ほとんどの(すべてではないにしても)静的サイトを破壊します。ただし、ストレージオブジェクトを公開することは、アクセスを制限する方法がないことを意味します。
このリバースプロキシは、予想される(相対)、URIでHTTPを介してプライベートオブジェクトを提供し、これらのオブジェクトへのアクセスをまったく制限しません。ただし、このサーバーをNginxなどの別の逆プロキシの後ろに置いたり、VPNに置いたりすることで、ニーズに合った方法でアクセスを制御できます。
NB(GCLoud SDKがシェルに
gcloud info
実行してインストールしている場合、ログインしていることを確認し、正しいプロジェクトIDセットがあります)。
TARGET_BUCKETS
env varは、バケツのコンマ分離リストを期待しています。
TARGET_BUCKETS='bucket-one,bucket-two'
1つ以上のターゲット_Bucketsが定義されていない限り、サーバーはスローします。
HISTORY
env varをTrueに設定すると、SPAサポートが向上するために、履歴モードでサーバーが開始されます。ファイル拡張子を持たないパスに対して、バケットルートindex.html
ファイルで応答します。
npm install
TARGET_BUCKETS="bucket-name" npm start
サーバーが稼働したら、バケツ内のプライベートオブジェクトにアクセスするには、次のようにGetリクエストを行う必要があります。
<proxy-host>:<proxy-port>/<bucket-name>/<file-path>
ファイルパスがバケットに存在し、サーバーがそれを読み取る前の前提を持っている場合、逆プロキシはその内容を応答として送信します。何らかの理由でファイルがバケットから取得できない場合、サーバーは404を返します。
要求されたバケットがターゲット_bucketsのリストにない場合、実際のバケツに関係なく403を返します。
現在、GETリクエスト方法のみがサポートされています。
単一のバケットモードを持つことは、バケット名のパスですべてのリクエストをプレフィックスする必要がないことを意味するため、 <proxy-host>:<proxy-port>/<file-path>
を要求すると、単一のターゲットバケットからファイルパスを要求します。
このプロジェクトはMicroを使用しています。つまり、開発中の優れたMicro-DEVツールを使用することができます。
TARGET_BUCKETS="bucket-name" npm run dev
ADCは、それらのサービスで実行されるアプリケーションに、エンジン、Kubernetesエンジン、アプリエンジン、クラウド機能が提供するデフォルトのサービスアカウントを使用します。
サーバーの認証のセットアップからサーバー生産アプリケーションまで
上記のため、認証が処理されるコンピューティングエンジン、Kubernetesエンジン、またはアプリエンジンを使用することをお勧めします。
ノードをインストールする必要なく、開始するためにDockerFileを提供しました。 Google Cloud SDKで認証をセットアップしないため、これはローカルでは機能しません。
ただし、Compute Engineに展開すると、VMインスタンス認証が処理されます。 VMインスタンスにDocker画像を展開する方法を確認するには、このガイドをご覧ください。 TARGET_BUCKETS
環境変数を設定することを忘れないでください。これは、このガイドに従うことで実行できます。