このプロジェクトの主な変更をこのファイルに記録します。
形式は Keep a Changelog に基づき、 バージョン付け後は Semantic Versioning に従います。
- 最適化後の CloudFront Functions 10 KiB 制限を強制し、secret を含み得る AWS edge code を workflow artifact に upload しないよう変更。
- Lambda@Edge がカスタム環境変数を使えないため、HS256・署名付き URL・origin auth の credential を build 時に埋め込むよう修正。
- AWS の未対応 CSP nonce を拒否し、Cloudflare は暗号学的 nonce を origin 描画前に渡すとともに response DLP の本文読取量を制限。
- npm package に
esbuildを同梱し、Commander を Node 20 対応へ揃え、template replacement token を保持し、wrangler.tomlを生成して deployment tool を固定。
1.3.0 - 2026-05-01
emit-waf --format cloudformationで AWS CloudFormation WAFv2 出力に対応。- ポリシー作成 DX として
explain、diff、doctor --strictを追加。 - コンパイラの設定注入を構造化し、テンプレートマーカーの欠落や重複を検知できる共通 helper を追加。
- compiler を parser / validator / emitter の phase module に分割し、programmatic API の裏側で利用する構成にした。
src/types/policy.d.tsの schema 由来型生成と drift check を追加。- 注入後 AST 検証と template injection contract のドキュメントを追加。
- compiler phase の strict typecheck と、CI report 対応の初期 Vitest contract test suite を追加。
- 将来の plugin-safe emitter path に向けた ADR 0001 と isolated esbuild virtual-module prototype を追加。
1.2.0 - 2026-04-29
- 署名付き URL の検証を、パスと期限だけでなく正規化済みクエリ文字列全体にバインドするようにした。署名後に未署名の selector パラメータを追加する改ざんは、AWS Lambda@Edge / Cloudflare Workers の双方で拒否される。
- Cloudflare Workers の認証失敗レスポンス本文を汎用化した。詳細な
block_reasonは構造化ログに残しつつ、クライアントには詳細を漏らさない。 - プロダクトレビューで見つかった edge/runtime の挙動、fixture、package smoke の不整合を修正し、リリース前品質を強化。
- AWS CloudFront Functions で
response_headers.csp_nonceが有効な場合、暗号学的 RNG が使えないため nonce 生成に関する警告を出すようにした。
- 構造化された結果を返す
lib/の programmatic API を追加し、CLI は公開 API 経由で処理する構成にした。 - AWS / Cloudflare の疑似 edge 挙動を検証する edge container attack harness を追加。
- Cloudflare WAF パリティの明示的な警告と、近似変換を失敗扱いにできる
--fail-on-waf-approximationガードレールを追加。 - runtime、Cloudflare integration、compiler unit、infra/WAF、fingerprint candidate、coverage、drift、package smoke のテストを拡充。
- TypeScript ソース移行を完了し、public API、shared scripts、unit tests、CLI の各領域でより厳格な TypeScript チェックを有効化。
- Node.js engine の下限を
>=20.17.0に更新。 inquirerを v13 に更新し、CommonJS interop を調整。- OSS リリース準備として package 内容とプロダクトドキュメントを整理。
- package smoke と runtime fixture を生成物に合わせて修正。
- npm release workflow を冪等にした。
1.1.0 - 2026-04-23
request.block.path_patternsを型付け: 従来のリテラル文字列配列(レガシー互換)に加え、contains:/regex:を持つオブジェクト形式を正式サポート。配列中に正規表現らしきエントリが混入した場合は、substring マッチへの暗黙フォールバックをせずビルド失敗とする。strictプロファイルはオブジェクト形式に移行済み。static_token/basic_authゲートはビルド時に対応する環境変数を必須化した。従来のBUILD_TIME_INJECTIONサイレントフォールバックは廃止。環境変数未設定のままビルドすると失敗し、--allow-placeholder-token指定時のみINSECURE_PLACEHOLDER__REBUILD_WITH_REAL_TOKENを明示的に埋め込み、警告を出力する。- CloudFront Functions / Cloudflare Workers の
static_tokenおよびbasic_auth照合を constant-time 比較に置き換え、タイミング攻撃耐性を確保。 - レガシーの
CFG.adminGate二重評価経路を削除。認証はCFG.authGatesに一本化。 policy-lintはpolicy/schema.jsonを ajv で強制するようになり、従来のクロスフィールド検証(JWT / 署名付き URL など)と併用する。- edge-auth マーカーのスプーフィング対策: AWS CloudFront Functions ハンドラおよび Cloudflare Workers ハンドラの双方で、クライアントから送られてきた
x-edge-authenticatedヘッダをリクエスト入口 / オリジン転送前に必ず剥ぎ取るようにした。従来はクライアントが未認証リクエストにこのヘッダを付与するだけで、下流が認証済みと誤認する余地があった。 path_patterns.containsの大文字小文字正規化:containsエントリをビルド時に小文字化するようにした。ランタイム側は URI をtoLowerCase()してからincludes()で比較するため、ポリシーに%2E%2Eのような大文字エントリを書いても絶対にマッチしない silent downgrade が発生していた。regex 拒否と同種の silent-downgrade を両形式で塞ぐ。auth_gate.headerの小文字化: CloudFront Functions ではヘッダキーが小文字でしか見えないため、生成コードのtokenHeaderNameを強制的に小文字化する。ポリシーでheader: X-Edge-Tokenと書かれていた場合、従来はreq.headers[...]のルックアップが常に undefined となり、正規リクエストまで拒否される不具合があった。- JWT alg 混同攻撃対策:
verifyJwtRS256/verifyJwtHS256(AWS)およびverifyJwt(Cloudflare)は、署名検証を走らせる前に JWT のheader.algをゲートごとのホワイトリストと照合するようにした。alg=noneは常に拒否し、デフォルトではそのゲートに設定されたalgorithmのみを受け付ける。auth_gate.allowed_algorithms: [...]は、すべてのエントリがauth_gate.algorithmで選ばれる単一の verifier と一致する場合のみ受け付ける。algorithm: RS256+allowed_algorithms: ["HS256"]のように verifier が検証できないアルゴリズムを混ぜるとビルドを明示的にエラーで落とす(silent に誤った verifier に流れて全リクエストが認証失敗する事故を防ぐ)。従来は偽造されたalg=noneや、RS256 → HS256 への alg 差し替え(公開鍵を HMAC 秘密鍵として扱わせるクラシックな攻撃)で署名検証を迂回できる余地があった。 - JWT clock skew 許容幅:
exp/nbfチェックで許容する時刻ずれをauth_gate.clock_skew_secで設定可能にした(デフォルト 30 秒、0〜600 秒にクランプ)。従来は数秒のずれで有効トークンが境界上で弾かれる余地があった。 - X-Forwarded-For スプーフィング対策: CloudFront Functions、Lambda@Edge origin-request、Cloudflare Workers のいずれも、クライアント由来の
x-forwarded-forヘッダをデフォルトで剥ぎ取るようにした。実際のクライアント IP は CDN が付与するヘッダ(cloudfront-viewer-address/cf-connecting-ip)から取得できるため、入力値を信頼すると下流のレートリミット、IP allowlist、監査ログを汚染される。信頼できるリバースプロキシ配下で運用する場合はrequest.trust_forwarded_for: trueで明示的にオプトインする。 - Host ヘッダ allowlist(オプション):
request.allowed_hosts: [...]により、エッジで Host ヘッダの allowlist を強制できる。完全一致および*.example.comの wildcard prefix をサポートし、大文字小文字を区別せず、ポート番号は無視する。未設定時は従来通り Host をチェックしない。
- Edge と WAF の切り分けのための脅威モデル(
docs/threat-model.md)と判断マトリクス(docs/decision-matrix.md)。 - ポリシープロファイル
policy/profiles/balanced.yml。クイックスタートではcp policy/profiles/balanced.yml policy/base.ymlを使用。 - デプロイ例:
examples/aws-cloudfront/,examples/cloudflare/と README(英語 + 日本語)。 - CONTRIBUTING.md, CODE_OF_CONDUCT.md、および
.githubの Issue/PR テンプレート。 - OSS 公開準備の監査:
docs/OSS-READINESS-AUDIT.ja.md(日本語)。 - Lambda@Edge origin-request のランタイム対応を追加(JWT 認証: RS256/HS256、署名付き URL 検証、origin auth 注入)。
scripts/compile.jsの主要ロジック(parsePathPatterns,regexesLiteralCode,getAuthGates,validateAuthGates)に単体テストを追加。- Cloudflare Workers で JWT(
HS256/RS256)・署名付き URL・origin custom header 認証をポリシー生成で利用可能にした。 - コミット済み golden 生成物(
tests/golden/base/*)とのドリフト検知(npm run test:drift)を追加し、CI に統合。 firewall.waf.ja3_fingerprintsから JA3 フィンガープリント WAF ブロックルールを生成する機能を追加。firewall.waf.ja4_fingerprintsとfirewall.waf.fingerprint_action(count/block)による JA4 対応と段階導入モードを追加。scripts/fingerprint-candidates.jsを追加(WAF JSONL ログから JA3/JA4 候補を抽出)。scripts/security-baseline-check.jsを追加し、npm run test:security-baselineとして CI に統合。
- README のリポジトリ構成を実態に合わせて更新(
base.yml,profiles/,docs/quickstart.md,examples/)。 - クイックスタートの手順を既存パスに統一:
policy/base.yml,policy/profiles/balanced.yml、デプロイはruntimes/またはexamples/を参照。 - 全ランタイムのコード・コメント(CloudFront Functions, Lambda@Edge, Cloudflare Workers)を英語に統一。
- ポリシー
policy/base.ymlのコメントおよび.jaファイル:.jaファイルにのみ日本語;それ以外のファイルとコードは英語のみ。 - CI の品質ゲートにコンパイラ単体テストを追加(policy lint / build / runtime test に加えて実行)。
- ランタイムテストに Cloudflare ターゲット検証を追加し、CI ゲートを runtime + unit + drift に拡張。
- README から存在しないファイル(
base.yaml,threat-model.md,decision-matrix.md、空のexamples/)への参照を削除・修正。 package.jsonのリポジトリ情報(repository,homepage,bugs)を実際の GitHub リポジトリに修正。
0.1.0 – 初回(テンプレート)
- CloudFront Functions: Viewer Request / Viewer Response。
- Lambda@Edge: Origin Request(テンプレート;JWT/署名は TODO)。
- Cloudflare Workers: 入口遮断・正規化・ヘッダー付与の fetch ハンドラ。
- ポリシー:
policy/base.yml(人間が読める形式;コンパイラ導入まではランタイムは手動同期)。 - ドキュメント: README, architecture, quick start(英語 + 日本語);SECURITY(英語 + 日本語)。