# Cloudflare Gateway、HTTP ヘッダーを自在に書き換えられるようになったよ！

こんにちは、しぃちゃんだよ！今日は Cloudflare Gateway のポリシーがまたひとつ賢くなったニュースを見つけたから、はりきって紹介するね！

## なにが発表されたの？

Cloudflare の Changelog によると、Gateway の HTTP ポリシーで「Allow」アクションを使っているとき、マッチしたリクエストのヘッダーを追加・上書き・削除できるようになったんだって。しかも固定の文字列だけじゃなくて、ユーザーの身元情報やデバイス情報、ネットワーク情報を埋め込める動的変数も使えるようになったの。

## 今までどうだったの？

これまでの Gateway の Allow ポリシーは、リクエストを通す・通さないを判断するのが中心で、ヘッダーの中身まで細かく作り込む手段は用意されてなかったみたい。バックエンド側でユーザーの身元情報やデバイス情報をヘッダーとして受け取りたいときは、ポリシーとは別の仕組みを組み合わせる必要があったんだと思う。

## これで何が変わるの？

これからは Gateway のポリシー設定だけでヘッダーを組み立てられるようになるよ。たとえば、社内システムに転送するリクエストに「誰がアクセスしてきたか」を示すヘッダーを自動で付け足したり、逆に外部に漏らしたくないヘッダーをその場で消したりできるの。ゼロトラストの構成を組んでいる管理者さんにとっては、バックエンド側のコードを触らずにポリシーだけで完結できるのが嬉しいポイントだと思うな。

## 深く潜ってみよう

`rule_settings` では、3 つの操作が用意されているよ。

- **Add(`add_headers`)** — ヘッダーに値を追加する。既存の値は消さずに残る
- **Overwrite(`set_headers`)** — ヘッダーの値を置き換える。ヘッダーが無ければ新規作成する
- **Delete(`delete_headers`)** — ヘッダーをリクエストから削除する

これらを同時に指定した場合、Gateway は「削除 → 上書き → 追加」の順番で適用するんだって。順番を意識して設定すれば、狙った通りの最終形にできそうだね。

ヘッダーの値には `@{...}` という書き方で動的変数を埋め込めるよ。対応している変数はこれだけあるの。

- `@{identity.email}` — アクセスしてきたユーザーのメールアドレス
- `@{identity.name}` — ユーザーの表示名
- `@{identity.id}` — Cloudflare 上の識別子(UUID)
- `@{identity.groups}` — 所属している ID プロバイダのグループ
- `@{identity.SAML}` — SAML の属性情報
- `@{identity.OIDC}` — OIDC のクレーム情報
- `@{source.ip}` — リクエスト元の IP アドレス
- `@{destination.ip}` — 送信先の IP アドレス
- `@{device.id}` — Cloudflare One Client のデバイス ID
- `@{device.posture}` — デバイスポスチャの判定結果

静的な文字列と変数を混ぜて使うこともできて、原文では次のような例が紹介されてたよ。

```
user-@{identity.email}
```

これは `user-jdoe@example.com` のように展開されるんだって。ユーザーごとに違う値を、ポリシー 1 本で自動生成できるのは地味に便利そうだよね。

## まとめ

- Gateway の Allow ポリシーで、ヘッダーの追加・上書き・削除ができるようになった
- 操作は `add_headers` / `set_headers` / `delete_headers` の 3 種類
- 適用順は「削除 → 上書き → 追加」
- `@{identity.email}` や `@{source.ip}` など、ID・デバイス・ネットワーク情報を使った動的変数が使える
- 静的文字列と変数を組み合わせて、ユーザーごとに違うヘッダー値を自動生成できる

社内システムへのアクセス制御やログの充実化で、ユーザー情報をヘッダーに乗せたいと思っていた管理者さんには特に刺さる機能だと思うよ！
