# Cloudflare Access 設定メモ

## 目的

`portal.zerotry.dev` を Cloudflare Pages で公開し、Cloudflare Access を前段に置いて社内メンバーだけが閲覧できるようにする。

## 本番URL

1. Cloudflare Pages で `company-portal` プロジェクトを作成する。
2. GitHub repository `zerotry-dev/company-portal` を接続する。
3. Build command は空欄、Build output directory は `/` にする。
4. Custom domain に `portal.zerotry.dev` を追加する。
5. Cloudflare Zero Trust で `Access controls > Applications` を開く。
6. `Add an application` から `Self-hosted` を選ぶ。
7. Public hostname に `portal.zerotry.dev` を設定する。
8. Policy は Allow とし、Include に `Emails ending in zerotry.dev` または個別メールを追加する。
9. ワンタイムPINで運用する場合は、One-time PIN のログイン方法が有効になっていることを確認する。
10. ブラウザで `portal.zerotry.dev` を開き、許可メールでログインできること、未許可メールで入れないことを確認する。

## プレビューURL

Cloudflare Pages の preview deployment URL はデフォルトでは公開されます。社内ポータルを扱う場合は対象プロジェクトで以下を有効化します。

```txt
Workers & Pages
→ company-portal
→ Settings
→ General
→ Enable access policy
```

この設定は hash 付き preview URL を保護します。`company-portal.pages.dev` や `portal.zerotry.dev` は別途 Access application 側で保護します。

## ポリシー例

社内全員:

```txt
Action: Allow
Include: Emails ending in zerotry.dev
```

初期メンバーだけ:

```txt
Action: Allow
Include: iwata.s@zerotry.dev
Include: member@zerotry.dev
```

パス別に分ける場合:

```txt
portal.zerotry.dev/docs/*
portal.zerotry.dev/dev/*
portal.zerotry.dev/ops/*
```

## 注意

Cloudflare Access は閲覧制限です。リポジトリやデプロイ済み静的ファイルの中に秘密情報を置く設計にはしないでください。

参考:

- https://developers.cloudflare.com/cloudflare-one/identity/one-time-pin/
- https://developers.cloudflare.com/cloudflare-one/applications/configure-apps/self-hosted-apps/
- https://developers.cloudflare.com/pages/configuration/preview-deployments/
- https://developers.cloudflare.com/pages/functions/wrangler-configuration/
