Skip to content

Cloudflare / ドメイン / 認証

関連: Tasker / アーキテクチャ

ドメイン(nkjm.dev)

所持ドメイン nkjm.dev のサブドメインを用途別に使う。

ホスト 用途 MVP
ingest.finance.nkjm.dev Android / Tasker からの通知 POST 使う
finance.nkjm.dev 将来の管理画面・健康チェック等 後回し

DNS / Tunnel は Cloudflare 上の nkjm.dev ゾーンに設定する。

認証方針(二重)

スマホ (Tasker)
  │  HTTPS
  │  CF-Access-Client-Id / CF-Access-Client-Secret
  │  Authorization: Bearer ...
  ▼
Cloudflare Tunnel + Access
  ▼
Proxmox: finance-manager
  POST /ingest/notifications
  1. Cloudflare Access Service Token … Tunnel 手前で止める
  2. アプリ Bearer Token … finance-manager 側でも検証

Note

ブラウザログイン型 Access(メール OTP 等)は Tasker と相性が悪いので ingest には使わない。

Tunnel 設定

  1. Cloudflare Zero Trust / Networks で Tunnel を作成
  2. Proxmox 上で cloudflared を常駐
  3. Public Hostname を追加
  4. ingest.finance.nkjm.devhttp://127.0.0.1:8000(アプリ listen)
  5. ingest 専用サブドメインにする(他サービスと混ぜない)

Access(Service Token)

  1. Zero Trust → Access → Service Auth → Service Token 作成
    (名前例: finance-manager-tasker
  2. Client ID / Client Secret を控える(Tasker 変数へ)
  3. Access → Applications で Self-hosted Application 作成
  4. Domain: ingest.finance.nkjm.dev
  5. Policy
  6. Action: Service Auth(または Allow + Include Service Token)
  7. Include: 作成した Service Token
  8. トークンなしが拒否されることを確認

アプリ側 Bearer

  1. openssl rand -hex 32 などで生成
  2. サーバ env INGEST_BEARER_TOKEN に設定
  3. 不一致なら 401
  4. 同じ値を Tasker ヘッダへ

動作確認

# 失敗例: ヘッダなし → Access またはアプリが拒否
curl -i https://ingest.finance.nkjm.dev/ingest/notifications

# 成功例
curl -i https://ingest.finance.nkjm.dev/ingest/notifications \
  -H "CF-Access-Client-Id: $CF_ACCESS_CLIENT_ID" \
  -H "CF-Access-Client-Secret: $CF_ACCESS_CLIENT_SECRET" \
  -H "Authorization: Bearer $INGEST_BEARER_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"source":"android_notification","app":"PayPay","title":"test","text":"¥100","received_at":"2026-08-08T02:00:00+09:00"}'

補足

  • Access だけ / Bearer だけでも動くが、併用が正式方針
  • 必要なら Cloudflare 側でレート制限を追加
  • 漏洩時は Service Token と Bearer の両方をローテーション