Cloudflare Zero Trust
Cloudflareが提供している製品です、Cloudflareで管理するドメインに対してアクセス時にOAuth認証やService Accountでの認証を追加します。この製品を利用することで自分が管理するアプリケーションのアクセスに対して柔軟に認証機能を提供します。現在は50人まで無料で使えます。
https://www.cloudflare.com/ja-jp/zero-trust
Cloudflareは様々な用途に対応するためツールを作成しています。
- 開発ツールとして
wrangler
を提供しています。 - ネットワークの管理ツールとして
cloudflared
を提供しています。 - Cloudflareのネットワークに直接アクセスするツールとして
WARP
を提供しています。
Zero Trustの文脈ではWARPを利用して開発組織の権限を持つと認識させることができるため、Zero Trustを簡単に実現します。cloudflared を利用するとCLI上でのトークン取得ができます。WARPが利用できない環境での認証機能を利用できます。
Cloudflared
cloudflared にはngrokの代替となるlocalhostのhttps公開という機能があります。その他にもCloudflare Zero Trustへのトークン管理という側面もあります。
CLI上でのloginを実行した場合にはbrowserでのやり取りを通じてOAuthの認証やメールリンクでの認証が利用できます。これを実行するとCloudflare Zero Trustで利用されるJWTトークンが取得できます。
$ cloudflared access login <Zero Trust Setup URL>
このトークンでは内部的に以下のようなデータをやり取りします。これをCloudflareがよしなに解釈して認証を提供します。
// Header
{
"alg": "RS256",
"kid": "287374abddca37ff6b5ac4c80dbcaba36362983dfafddacc2737ac7738281288"
}
// Payload
{
"aud": [
"abab38aabb38203923ddb73837498fff2374987234dacb98b723a49d71239e84"
],
"email": "[email protected]",
"exp": 1293061349,
"iat": 1291851749,
"nbf": 1291851749,
"iss": "https://organization.cloudflareaccess.com",
"type": "app",
"identity_nonce": "AjofiewJFkjdfKK",
"sub": "edf0d58e-6a1d-5247-b604-6a0fd4a1ae27",
"sub": "afdf3483-aa23-1238-c373-87818adcb929",
"country": "JP"
}
Gitの認証機能
例えば、GitのホスティングサービスではGitHubを使うことで認可を操作します。これに加えてGit LFSなどの外部拡張を使う場合にはGitHubが提供しているLFSストレージへの包括的な認可まで一貫して提供します。
これをLFSサーバのみ自前で用意する、GitサーバとGit LFSサーバの両方を自前で管理することを考えます。OSSとしての開発であっても、任意のユーザが好き勝手にGitリポジトリへの編集をされると困るためアクセスするユーザは認証を通過させる必要があります。これをCloudflare Zero Trustで認証機能を後付で実現します。
例えば git clone
をする場合にはcloneにヘッダーを追記することで外部の認証を通すことが可能になります。
$ brew install cloudflare/cloudflare/cloudflared
$ cloudflared access login <Zero Trust Setup URL>
$ git clone --config "http.extraHeader"="cf-access-token: $(cloudflared access token -app=<Zero Trust Setup URL>)" <repo-url>
コマンド参考: https://github.com/git-lfs/git-lfs/blob/main/t/t-extra-header.sh