Git LFS Server with Cloudflare
技術スタック
- Cloudflare Workers
- Cloudflare R2
- Cloudflare Zero Trust
- Hono
実装仕様
実装するものはGit LFS APIのBatch APIです。
実装方針
Git LFS API では 3 ステップの利用方針が定められています。
- Discover the LFS Server to use.
- Apply Authentication.
- Make the request. See the Batch and File Locking API sections.
1. Discover the LFS Server to use.
これは Git クライアントで直接 lfsconfig を指定します。今回作るものは foo と bar の位置をそれぞれ organization と repository として扱います。これにより名前空間単位として LFS のファイルを扱うことを意図します。
$ git config --file=.lfsconfig lfs.url https://my-impl-lfs-server.com/foo/bar
2. Apply Authentication.
Cloudflare Zero Trust の機能を活用します。
Cloudflare Zero Trust では 2つの方法により認証機能を利用できます。
Service Authentication を利用して header に払い出された ID と Token を記述することで Cloudflare が認証を提供します。これは Cloudflare Zero Trust でトークンを管理するためアプリに直接認証機能を埋め込むより便利でお手軽です。
また cloudflared を利用することで GitHub OAuth、One-time passcode などの機能を利用するトークンを発行できます。これを付与することによりユーザ毎の認証の管理ができます。
ここでは、暗黙的にプライベート git-lfs-server として認証されるとすべてのアクセス権が付与されることとします。そのため認証されたユーザはさらなる認可を得ることはなく Git LFS の仕様にある一部のアイテムへの認証は常に成功させることとします。Git サーバーの認可の設定は一切見ないこととします。
3. Make the request. See the Batch and File Locking API sections.
Cloudflare Workers を利用して Hono で書いたアプリを実行します。Workers では R2 の Pre-signed URL を発行する仲介機能を提供します。そのため Bundled プランを利用してより安価に Workers を動かすことを考えます。Workers では直接 R2 との間に立つこともできますが upload, download を適切に実装することを考えたときに対応することが増えるため避けます。