🗂

【PoC 用】Cloudflare Partial (CNAME) setup の手順

に公開

はじめに

  • PoC の前に Partial(CNAME) Setup で FQDN をプロキシーしておくまでの手順
  • オリジンサーバーだけでなく権威 DNS サーバーの設定追加がスグできる環境だと加速
  • Cloudflare のダッシュボードはインターネットの変化に合わせ常に変貌するので、スクショは参考まで

アカウントとユーザーの作成 🔗

サインアップページから Email Password を入力し Sign up

GUI

Email は所属組織のもの(個人あるいはグループエイリアス)で

Eメールを確認し Verify your email

Eメール

ダッシュボードが開く

こういうのでたら `Skip`

アカウント名の変更 🔗

ダッシュボード左上の<Eメール>'s Accountをクリック

GUI

アカウントの名前をわかりやすいものに変更

GUI

【アカウント】Manage Account > Settings > Preferences > Account name > Change name

名前変え

Done

ゾーン(ドメイン)の追加 🔗

アカウントにゾーン(ドメイン)を追加

GUI

【アカウント】Account Home Domains
PoC のドメイン名を入力 Manually enter DNS records Continue

ゾーン(ドメイン)に Free プランを適用

GUI

【ゾーン】ドメイン名の横のステータスが Finish setup
Overview Free を選択

ドメイン名の横のステータスが Invalid nameservers に遷移
Continue to activation は無視

GUI

別の方法
【ゾーン】上部のプランをクリック

プラン選択画面

とりあえず、ここまでで OK

PoC の依頼

  • ここまでできたら Cloudflare 担当チームに PoC を依頼
  • Cloudflare の準備完了連絡を待つ
  • 連絡が来たら次に進む

Enterprise プランへの変更 🔗

GUI

【ゾーン】Overview Plan and Add-ons Change

Enterprise Confirm

Partial setup への変更とアクティブ化 🔗

GUI

【ゾーン】Overview DNS Convert to CNAME DNS setup

Convert

Convert

Continue

CNAME setup に変更された

DNS Verification TXT RR の入手 🔗

次の手順で使うため NameContent をコピー

GUI

【ゾーン】DNS Records Verification TXT Record

権威 DNS サーバーに TXT RR 登録 🔗

表示された TXT RR を権威 DNS サーバーに登録

Route 53 の例

正しく設定されたことを確認 cloudflare-verify.<ドメイン名> TXT

dig cloudflare-verify.oymk.click TXT +short

"578489773-1124702988"

ドメイン所有権の検証再開

Cloudflare によるドメイン所有権の検証を再開

GUI

【ゾーン】Overview Re-activate
Re-activate のあと Pending TXT recordActive になるのを待機

Active!

GUI

【ゾーン】Overview Active
Enterprise plan Partial

Eメールも確認

Eメール

PoC 対象 FQDN とオリジンサーバーの登録 🔗

DNS にオリジンサーバーを登録 🔗
まずは DNS 応答でオリジンサーバーをそのまま返す DNS only 🔗

GUI

【ゾーン】DNS Records Add Record

PoC に使う FQDN の DNS 登録
Type: RR Type(CNAME, A, AAAA)
Name: RR owner name(ホスト名)
Target: RR RDATA(オリジンサーバーのFQDN または IPv4、IPv6 アドレス)
Proxy status: まずは DNS only

DNS チェック

PoC に使う FQDN に Partial Zone Suffix を追加し、DNS が引けることを確認

<FQDN>.cdn.cloudflare.netTarget

dig www.oymk.click.cdn.cloudflare.net +noal +an

; <<>> DiG 9.10.6 <<>> www.oymk.click.cdn.cloudflare.net +noal +an
;; global options: +cmd
www.oymk.click.cdn.cloudflare.net. 300 IN CNAME	www.oymk.click.s3.us-east-1.amazonaws.com.
:

次に DNS 応答で Cloudflare IP を返しプロキシーするよう変更 Proxied 🔗

GUI

レコード右端の Edit
Proxy statusProxied Save

DNS チェック

Proxied にすることで応答が変わることを確認

<FQDN>.cdn.cloudflare.net ➜ Cloudflare の Anycast IP

dig www.oymk.click.cdn.cloudflare.net +noal +an

; <<>> DiG 9.10.6 <<>> www.oymk.click.cdn.cloudflare.net +noal +an
;; global options: +cmd
www.oymk.click.cdn.cloudflare.net. 300 IN A	104.18.28.44
www.oymk.click.cdn.cloudflare.net. 300 IN A	104.18.29.44

TLS 証明書(エッジ証明書)の展開 🔗

エッジ証明書にはデフォルトで Universal 証明書が有効

  • Partial セットアップの場合、Proxied 状態の FQDN については、自動で Universal 証明書の発行手続きが開始
  • 発行にあたり CA が DCV を実施
  • DCV に向けてユーザー側で作業が必要

エッジ証明書の種類

  • エッジ証明書には Cloudflare が発行手続きを代行する方式(UniversalAdvanced)、ユーザーが持ち込む方式(Custom)がある
  • PoC でどれにするかを選択

Notification の設定 🔗

エッジ証明書発行の状態変化の通知を仕込む

GUI

【アカウント】Notifications All Notifications Add

Product SSL 検索

Advanced Certificate alert Universal SSL alert

Notification Name Notification Email Save

Done
Test 送信可能

宛先 Webhook も定義可能
Destination Webhooks Create

Eメール

ステータスが変わると連絡が来る

Universal 証明書の有効化 🔗

まず Universal から
(Advanced や Custom でカバーできれば無効にすることも可能)

ACME DCV の選択

PoC での ACME DCV は下記で選択

有効化に必要なユーザー作業

FQDN 証明書 DCV 作業対象 作業内容
PoC のために用意 Universal HTTP-01 権威 DNS CNAME 追加
現行稼働中 Universal HTTP-01 現行 Web URL 追加
現行稼働中 Universal DNS-01 権威 DNS TXT 追加

デフォルトの DCV は HTTP-01

以下 ①②③ いずれかで Universal を Active 化

HTTP-01

① DNS CNAME RR 🔗

権威 DNS サーバーで FQDN の CNAME を新規作成

Route 53 の例

<FQDN>cdn.cloudflare.net で CNAME RR

正常に解決できることを確認
(Cloudflare の当該 DNS RR は Proxied

dig www.oymk.click +short

www.oymk.click.cdn.cloudflare.net.
104.18.28.44
104.18.29.44
② HTTP URL 🔗

現行 Web サーバーに ACME URL を配置

S3 の例

Certificate validation request の URL を掘り
Certificate validation response のテキストを置く

現行 Web サーバーに ACME URL を追加

S3 の例

現行 Web サーバーにリクエストし、指定の Token が戻ることを確認

# HTTP

curl http://www.oymk.click/.well-known/acme-challenge/HnPGn9iquC2XvTJKUoR1Gzlw0v-0u06gernravkpcNVZmb7z8sAm61l4w2snd580

HnPGn9iquC2XvTJKUoR1Gzlw0v-0u06gernravkpcNVZmb7z8sAm61l4w2snd580.r54qAqCZSs4xyyeamMffaxyR1FWYVb5OvwUh8EcrhpI

DNS-01

③ DNS TXT RR 🔗

DCV 方式の変更

API 操作の準備(認可 Token の作成)

API 🔗
この API エンドポイントに必要な権限を確認
Accepted Permissions (at least one required)

SSL and Certificates Write を有効にした Token を作成
【ユーザー】API Tokens Create Token

Custom token Get started

Token name
Permissions Zone SSL and Certificates Edit
Continue to summary

Create token

Token をコピーして、次の操作に使用
テスト用 curl コマンドも表示される

Zone の証明書の一覧を確認する API 🔗
?status=all をつけ、すべてリストする

/zones/{zone_id}/ssl/certificate_packs/?status=all
export TOKEN=<コピーしたToken>
export ZONE=<前に確認した Zone ID>

curl --location  "https://api.cloudflare.com/client/v4/zones/$ZONE/ssl/certificate_packs/?status=all" \
--header "Authorization: Bearer $TOKEN" -s | jq '.result[]'

{
  "id": "22cc8b25-af75-40c1-9c98-316f438a6e2f",
  "type": "universal",
  "hosts": [
    "www.oymk.click"
  ],
  "primary_certificate": "0",
  "status": "pending_validation",
  "certificates": [],
  "created_on": "2025-10-13T01:54:14.495312Z",
  "validity_days": 90,
  "validation_method": "http",
  "validation_records": [
    {
      "status": "pending",
      "http_url": "http://www.oymk.click/.well-known/acme-challenge/ehoG9hBa_WU-yQiX0gPW1hvlQ_khV66ES6zMdoy-WvL8W0io1JnV_eOCFk_XHh_T",
      "http_body": "ehoG9hBa_WU-yQiX0gPW1hvlQ_khV66ES6zMdoy-WvL8W0io1JnV_eOCFk_XHh_T.r54qAqCZSs4xyyeamMffaxyR1FWYVb5OvwUh8EcrhpI"
    }
  ],
  "certificate_authority": "google"
}
API

HTTP-01 から DNS-01 に変更
API 🔗
GET /zones/{zone_id}/ssl/verification

curl --location --request GET "https://api.cloudflare.com/client/v4/zones/$ZONE/ssl/verification?retry" \
--header "Authorization: Bearer $TOKEN"

validation_methodhttp
cert_pack_uuid をコピー

PATCH /zones/{zone_id}/ssl/verification/{certificate_pack_id}
validation_methodtxt に変更

curl --location --request PATCH "https://api.cloudflare.com/client/v4/zones/$ZONE/ssl/verification/$CERTID" \
--header 'Content-Type: application/json' \
--header "Authoization: Bearer $TOKEN" \
--data-raw '{
    "validation_method": "txt"
}'

text_name text_value をメモ

権威 DNS サーバー

TXT RR の追加

Route 53 の例

Active になったら TLS 接続確認

Active!

いずれも待っていると CA のバックオフスケジュールタイミングで Active 化 🔗

GUI

DCV を再開する場合は API で同じ validation_method を指定して PATCH 🔗

API
  • Universal
    API 🔗
    /zones/{zone_id}/ssl/verification/{certificate_pack_id}

  • Advanced
    API 🔗
    /zones/{zone_id}/ssl/certificate_packs/{certificate_pack_id}

TLS 接続確認
TLS 接続と証明書の確認

<FQDN>.cdn.cloudflare.net への TLS 接続

サーバー証明書
openssl s_client -connect www.oymk.click.cdn.cloudflare.net:443 -servername www.oymk.click < /dev/null

Connecting to 104.18.29.44
CONNECTED(00000006)
depth=2 C=US, O=Google Trust Services LLC, CN=GTS Root R4
verify return:1
depth=1 C=US, O=Google Trust Services, CN=WE1
verify return:1
depth=0 CN=www.oymk.click
verify return:1
---
Certificate chain
 0 s:CN=www.oymk.click
   i:C=US, O=Google Trust Services, CN=WE1
   a:PKEY: EC, (prime256v1); sigalg: ecdsa-with-SHA256
   v:NotBefore: Oct  6 11:17:18 2025 GMT; NotAfter: Jan  4 12:17:14 2026 GMT
 1 s:C=US, O=Google Trust Services, CN=WE1
   i:C=US, O=Google Trust Services LLC, CN=GTS Root R4
   a:PKEY: EC, (prime256v1); sigalg: ecdsa-with-SHA384
   v:NotBefore: Dec 13 09:00:00 2023 GMT; NotAfter: Feb 20 14:00:00 2029 GMT
 2 s:C=US, O=Google Trust Services LLC, CN=GTS Root R4
   i:C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA
   a:PKEY: EC, (secp384r1); sigalg: sha256WithRSAEncryption
   v:NotBefore: Nov 15 03:43:21 2023 GMT; NotAfter: Jan 28 00:00:42 2028 GMT
---
Server certificate
-----BEGIN CERTIFICATE-----
:
-----END CERTIFICATE-----
subject=CN=www.oymk.click
issuer=C=US, O=Google Trust Services, CN=WE1
---
No client certificate CA names sent
Peer signing digest: SHA256
Peer signature type: ecdsa_secp256r1_sha256
Negotiated TLS1.3 group: X25519MLKEM768
---
SSL handshake has read 3903 bytes and written 1627 bytes
Verification: OK
---
New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384
Protocol: TLSv1.3
Server public key is 256 bit
This TLS version forbids renegotiation.
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)
---
^C

Advanced 証明書の有効化 🔗

デフォルト指定 Certificate Hostnames (Zone APEXWildcard)で有効化

GUI

Cloudflare PoC 担当チームに Advanced certificate 有効化の依頼
You have used 0 out of 100 Advanced certificates.
➜ Advanced 証明書が有効になっている
Order Advanced Certificate

Certificate Authority

Certificate Hostnames ➜ デフォルトは Zone APEXWildcard
Certificate validation method ➜ Wildcard が入ると DCV は DNS TXT(DNS-01)のみ
Certificate Validity Period
Save

DCV 待ち 🔗
Certificate validation TXT name Certificate validation TXT value(x2)をメモ

API

GUI の代わりに API で確認の場合 🔗
txt_name txt_value をメモ(x2)

/zones/$ZONE/ssl/certificate_packs/
curl --location  "https://api.cloudflare.com/client/v4/zones/$ZONE/ssl/certificate_packs/?status=all" \
--header 'Content-Type: application/json' \
--header "Authorization: Bearer $TOKEN" -s | jq '.result[]|select(.type=="advanced")'
{
  "id": "997ecca1-cc28-4a4f-8519-9da068397cb4",
  "type": "advanced",
  "hosts": [
    "oymk.click",
    "*.oymk.click"
  ],
  "primary_certificate": "0",
  "status": "pending_validation",
  "certificates": [],
  "created_on": "2025-10-12T11:15:17.748236Z",
  "validity_days": 90,
  "validation_method": "txt",
  "validation_records": [
    {
      "status": "pending",
      "txt_name": "_acme-challenge.oymk.click",
      "txt_value": "O5Yywd9qW9y7yTfEwQMIOzqtAa00Tokur2mOU9tmw_Y"
    },
    {
      "status": "pending",
      "txt_name": "_acme-challenge.oymk.click",
      "txt_value": "uZASKY8FcDxAHJkLSe3WsFFwO-9LAyj7uHmEgo5e_-s"
    }
  ],
  "dcv_delegation_records": [
    {
      "cname": "_acme-challenge.oymk.click",
      "cname_target": "oymk.click.baf8bfbb3d8a330d.dcv.cloudflare.com"
    }
  ],
  "certificate_authority": "google"
}
DCV(DNS-01)

権威 DNS TXT(x2)設定完了

DNS TXT RR
dig _acme-challenge.oymk.click txt +short

"O5Yywd9qW9y7yTfEwQMIOzqtAa00Tokur2mOU9tmw_Y"
"uZASKY8FcDxAHJkLSe3WsFFwO-9LAyj7uHmEgo5e_-s"

DCV 再開 🔗

PATCH
curl --location -X PATCH "https://api.cloudflare.com/client/v4/zones/$ZONE/ssl/certificate_packs/$CERTID" \
--header 'Content-Type: application/json' \
--header "Authorization: Bearer $TOKEN" \
--data-raw '{
    "validation_method": "txt"
}' -s | jq '.'

Active!

DCV(DNS-01)Delegate DCV を使う

Delagete DCV を使うことで、DCV を Cloudflare に任せることが可能
DCV delegation for Partial zones

CNAME RR の入手
cname cname_target をメモ(x1)

API
curl --location  "https://api.cloudflare.com/client/v4/zones/$ZONE/ssl/certificate_packs/?status=all" \
--header "Authorization: Bearer $TOKEN" -s | jq '.result[]|select(.certificate_authority|contains("let"))|.dcv_delegation_records'
[
  {
    "cname": "_acme-challenge.oymk.click",
    "cname_target": "oymk.click.baf8bfbb3d8a330d.dcv.cloudflare.com"
  }
]

権威 DNS サーバーで TXT と CNAME を差し替え

DNS
dig _acme-challenge.oymk.click txt @ns-535.awsdns-02.net. +norec +noal +an

; <<>> DiG 9.10.6 <<>> _acme-challenge.oymk.click txt @ns-535.awsdns-02.net. +norec +noal +an
;; global options: +cmd
_acme-challenge.oymk.click. 60	IN	CNAME	oymk.click.baf8bfbb3d8a330d.dcv.cloudflare.com.

dig _acme-challenge.oymk.click TXT +short

oymk.click.baf8bfbb3d8a330d.dcv.cloudflare.com.
この状態では Universal が優先 🔗
FQDN Type www.oymk.click
oymk.click Advanced -
*.oymk.click Advanced -
www.oymk.click Unversal ✅️

Advanced が使われるようにする

2 つのパターン

Universal を Disable 🔗
FQDN Type www.oymk.click
oymk.click Advanced -
*.oymk.click Advanced ✅️
GUI

Disable Universal SSL

I understood Confirm

Advanced のみ

FQDN 指定での追加
FQDN Type www.oymk.click
oymk.click Advanced -
*.oymk.click Advanced -
www.oymk.click Advanced ✅️
www.oymk.click Unversal -
GUI

Order Advanced Certificate
Certificate hostnames FQDN のみ指定
Certificate validation method HTTP でテスト

Certificate validation request Certificate validation response(x2)をメモ

DCV(HTTP-01 の例)

FQDN(Non-wildcard)の場合 DNS-01、HTTP-01 どちらでも可
HTTP-01 の場合、Universal 同様

  • DNS が Cloudflare に向き Proxy していれば Cloudflare が返すので配置不要
  • 現行 Web サーバー稼働中の場合 ACME Token URL を配置
curl http://www.oymk.click/.well-known/acme-challenge/X6I696t7Zni-p5gwAciLCQ

X6I696t7Zni-p5gwAciLCQ.PEOY-NtnbUH5Y1FPAC5Dl6QUHSDzv5zF3SajokK1Zg0

curl http://www.oymk.click/.well-known/acme-challenge/cYcWtkY3rq7fuD_D4_Awlw

cYcWtkY3rq7fuD_D4_Awlw.x79ivA5u8mG8syNawpZ9o2VofCjAwIwF41w-QY86tu0

Active!

API
ssl.com で active になっている

curl --location  "https://api.cloudflare.com/client/v4/zones/$ZONE/ssl/certificate_packs/?status=all" \
--header 'Content-Type: application/json' \
--header "Authorization: Bearer $TOKEN" -s | jq '.result[]|select(.certificate_authority|contains("ssl"))'
{
  "id": "4f05d848-a453-4d24-9c58-16800f9ec8db",
  "type": "advanced",
  "hosts": [
    "www.oymk.click"
  ],
  "primary_certificate": "001046cf-2a14-4c3a-9882-7f67cda88fb1",
  "status": "active",
  "certificates": [
    {
      "id": "001046cf-2a14-4c3a-9882-7f67cda88fb1",
      "hosts": [
        "www.oymk.click"
      ],
      "issuer": "CLOUDFLAREINC",
      "signature": "SHA256WithRSA",
      "status": "active",
      "bundle_method": "ubiquitous",
      "zone_id": "59f0cf72f06cf4f21707d98a7902ae09",
      "uploaded_on": "2025-10-12T12:12:50.439117Z",
      "modified_on": "2025-10-12T12:12:36.369038Z",
      "expires_on": "2026-01-10T12:01:20.000000Z",
      "priority": null
    },
    {
      "id": "c59e93b9-c77f-4925-a653-fcbaa6c64754",
      "hosts": [
        "www.oymk.click"
      ],
      "issuer": "CLOUDFLAREINC",
      "signature": "ECDSAWithSHA256",
      "status": "active",
      "bundle_method": "ubiquitous",
      "zone_id": "59f0cf72f06cf4f21707d98a7902ae09",
      "uploaded_on": "2025-10-12T12:12:50.439148Z",
      "modified_on": "2025-10-12T12:12:36.369038Z",
      "expires_on": "2026-01-10T12:01:21.000000Z",
      "priority": null
    }
  ],
  "created_on": "2025-10-12T12:01:18.317120Z",
  "validity_days": 90,
  "validation_method": "http",
  "certificate_authority": "ssl_com"
}
TLS 疎通確認

SSL.com が見れる

openssl s_client -connect www.oymk.click.cdn.cloudflare.net:443 -servername www.oymk.click < /dev/null |grep -i notb

Connecting to 104.18.28.44
depth=3 C=GB, ST=Greater Manchester, L=Salford, O=Comodo CA Limited, CN=AAA Certificate Services
verify return:1
depth=2 C=US, O=SSL Corporation, CN=SSL.com TLS Transit ECC CA R2
verify return:1
depth=1 C=US, O=CLOUDFLARE, INC., CN=Cloudflare TLS Issuing ECC CA 1
verify return:1
depth=0 CN=www.oymk.click
verify return:1
DONE
   v:NotBefore: Oct 12 12:02:33 2025 GMT; NotAfter: Jan 10 12:01:21 2026 GMT
   v:NotBefore: Oct 31 17:17:49 2023 GMT; NotAfter: Oct 28 17:17:48 2033 GMT
   v:NotBefore: Jun 21 00:00:00 2024 GMT; NotAfter: Dec 31 23:59:59 2028 GMT

Custom 証明書の持ち込み 🔗

OV や EV が必要な場合など 🔗

Custom 証明書の例

セルフサイン証明書の例(もちろん真っ当な証明書も同様に登録可能)
https://zenn.dev/oymk/articles/17f998dbbd9861

HTTP プロキシー疎通確認

FQDN の IP が Cloudflare を向いている場合

DNS が Cloudflare の IP を示すので、通常通りアクセス

Cloudflare にリクエスト送信
curl https://www.oymk.click/index.html

<!doctype html>
<html lang="en">
  <head>
  </head>

  <body>
      <h1>Demo</h1>
  </body>
</html>
dig www.oymk.click +short

www.oymk.click.cdn.cloudflare.net.
104.18.28.44
104.18.29.44

curl "https://www.oymk.click/index.html" -v 2>&1 |grep "server:"

< server: cloudflare

curl "https://www.oymk.click/cdn-cgi/trace" -s| head -2

fl=408f295
h=www.oymk.click

FQDN の IP が Cloudflare を向いていない場合

テスト端末側で FQDN を Cloudflare の IPv4・IPv6 に向ける
(hosts ファイル や dnsmasq リゾルバ、コマンドのオプションなどで)

Cloudflare にリクエスト送信
curl コマンドオプションの例
dig www.oymk.click.cdn.cloudflare.net A +short

104.18.28.44
104.18.29.44

dig www.oymk.click.cdn.cloudflare.net AAAA +short

2606:4700::6812:1c2c
2606:4700::6812:1d2c

curl https://www.oymk.click/index.html --resolve www.oymk.click:443:104.18.29.44

<!doctype html>
<html lang="en">
  <head>
  </head>

  <body>
      <h1>Demo</h1>
  </body>
</html>

curl https://www.oymk.click/index.html --resolve www.oymk.click:443:'[2606:4700::6812:1c2c]'

<!doctype html>
<html lang="en">
  <head>
  </head>

  <body>
      <h1>Demo</h1>
  </body>
</html>

Cloudflare とオリジンサーバーの間

疎通ができない場合、Cloudflare とオリジンサーバー間の接続も確認
(後述の Instant logs も活用可能)

観測

通信確認に使えるログや分析機能

ログ 🔗

Instant Logs 🔗

通信しながら HTTP リクエストログを見る

GUI

【ゾーン】Analytics & logs Instant Logs Start streaming

脇でリクエストすると、ログが流れ、クリックすると詳細を確認可能

https://zenn.dev/oymk/articles/b37b89582424f0

Logpush 🔗

各種ログをクラウドストレージや SIEM に送る

GUI(R2 の例)

【ゾーン】Analytics & logs Logpush
Create a Logpush job

Select Destination R2 Object Storage Automatic

その他の宛先

Create a Logpush job Dataset HTTP requests

R2 Logpush log created Go to R2 bucket
【アカウント】R2 object storage Overview
自動作成された R2 Bucket 名 cloudflare-managed-*を確認

HTTP リクエストのログが R2 に Logpush される

Automatic で R2 Write に利用される R2 Token
【アカウント】Manage Account Account API tokens

https://zenn.dev/oymk/articles/af803af11d4792

ログ確認(R2 の例)
rclone lsf r2:cloudflare-managed-1bf3af5d/20251010/

20251010T113640Z_20251010T113735Z_3c9e0772.log.gz
test.txt.gz
rclone cat r2:cloudflare-managed-1bf3af5d/20251010/20251010T113640Z_20251010T113735Z_3c9e0772.log.gz --s3-decompress | jq .

{
  "CacheCacheStatus": "dynamic",
  "CacheReserveUsed": false,
  "CacheResponseBytes": 2238,
  "CacheResponseStatus": 304,
  "CacheTieredFill": false,
  "ClientASN": 13335,
  "ClientCity": "San Francisco",
  "ClientCountry": "us",
  "ClientDeviceType": "desktop",
  :

https://zenn.dev/oymk/articles/4344e3d38f3d7b#rclone-を使ってログを確認する例

Log Explorer 🔗

Cloudflare 上でログを検索できる便利な機能

GUI

Cloudflare PoC 担当チームに Log Exploer 有効化の依頼
【ゾーン】Log Explorer Log search Add a dataset

Manage datasets Add detaset

Select a dataset HTTP requests Add

しばらくリクエストを流す
クエリーと表示をデフォルトのフィルターで実施
Log search Run query

Columns 取得項目を絞る

Custom SQLSELECT 文を直接編集
Show/Hide columns で表示項目を一括制御
Save query でクエリーを保存

Queries 過去のクエリー履歴も確認可能

https://zenn.dev/oymk/articles/15ef90b3136db5

可視化・分析 🔗

プロキシー

ゾーン(ドメイン)の概況(一日まつ)🔗

GUI

【ゾーン】Overview

HTTP リクエスト統計を多角的に分析 🔗

GUI

【ゾーン】Analytics & Logs HTTP Traffic

セキュリティ

HTTP リクエスト統計をセキュリティ観点で分析 🔗

GUI

【ゾーン】Security Analytics Traffic Traffic analysis


Top statistics リクエスト統計上位分析

Sampled logs 統計元のログデータ

View related security events を見ると処理したセキュリティルールが見れる

セキュリティルールのイベントを発火したリクエストだけをみる 🔗

GUI

【ゾーン】Security Analytics Events

パフォーマンス

Caching 🔗

キャッシュ状況の確認

GUI

【ゾーン】Caching Overview

Synthetic monitoring (beta) 🔗

Web サイトのパフォーマンスを Cloudflare から計測

GUI

【ゾーン】Speed Synthetic monitoring (beta)
Browser tests PoC の URL を指定 Run test once

結果

Cloudflare でプロキシーしていない場合
RecommendationProxy your site through Cloudflare と出る

Cloudflare でプロキシーしている場合
Recommendation に改善に使えそうな機能が表示される

再開
Run test now

履歴
View results

View history report

History report

Real user monitoring 🔗

ブラウザーからパフォーマンス情報を収集(Javascript が注入される点など確認のうえ、設定)

GUI

【ゾーン】Speed Real user monitoring
Enable Globally

十分なリクエスト量、かつ、ブラウザー側でJavascript の実行が必要(curl だけ、とかでは統計が取れない)

無効化は Manage RUM settings

【アカウント】Analytics & Logs Web analytics Manage site

Disable Update

Observatory (Beta) 🔗

一目でパフォーマンスの現状と改善点がわかる場所、を目指していそう

GUI

今後はこれが起点となって進化するのかも
【ゾーン】Speed Observatory (Beta)
Summary All suggestions

設定チェック

Trace(Beta)🔗

設定したトラフィック制御 Rule がリクエストにどう働くかをシミュレート、可視化

GUI

Cloudflare に DNS が向いていなくても確認可能

【ゾーン】Rules Trace (beta)
URL

Send Trace

結果
Matched が適用対象の Rule

https://qiita.com/KeioCF/items/84d3fd6e4d66323d57c7

API
curl \
--url https://api.cloudflare.com/client/v4/accounts/$ACCOUNT/request-tracer/tracer \
--header 'Content-Type: application/json' \
--header "Authorization: Bearer $CF_AUTH_TOKEN" \
--data '{"url":"https://www.oymk.click/index.html","method":"GET"}' -s | jq '.result.trace[]|select(.matched==true)'

{
  "step_name": "http_request_firewall_managed",
  "type": "phase",
  "matched": true,
  "public_name": "WAF Managed Rules",
  "trace": [
    {
      "step_name": "0fea3f5a773d4202baeb89c705a2e74a",
      "type": "ruleset",
      "matched": true,
      "name": "root",
      "kind": "root",
      "trace": [
        {
          "step_name": "67199769b2e44c178f90271943e7ee16",
          "type": "rule",
          "matched": true,
          "action_parameter": {
            "id": "efb7b8c949ac4650a09736fc376e9aee",
            "version": "latest"
          },
          "expression": "true",
          "description": "新しい管理",
          "action": "execute",
          "trace": [
            {
              "step_name": "efb7b8c949ac4650a09736fc376e9aee",
              "type": "ruleset",
              "matched": true,
              "description": "Created by the Cloudflare security team, this ruleset is designed to provide fast and effective protection for all your applications. It is frequently updated to cover new vulnerabilities and reduce false positives.",
              "name": "Cloudflare Managed Ruleset",
              "kind": "managed"
            }
          ]
        }
      ]
    }
  ]
}
{
  "step_name": "http_request_sbfm",
  "type": "phase",
  "matched": true,
  "public_name": "Super Bot Fight Mode",
  "trace": [
    {
      "step_name": "73b7a8a52de44f9db074e4138a3e2ab1",
      "type": "ruleset",
      "matched": true,
      "name": "zone",
      "kind": "zone",
      "trace": [
        {
          "step_name": "bbfd94974c0d43fb96c884e5ccb5056d",
          "type": "rule",
          "matched": true,
          "action_parameter": {
            "id": "3e677e63d4e9479382576f3fa66279e7",
            "version": "latest",
            "overrides": {
              "rules": [
                {
                  "id": "7bd01eeccb6b420fa0be30264603a5cb",
                  "action": "block",
                  "enabled": true
                }
              ]
            }
          },
          "expression": "true",
          "action": "execute"
        }
      ]
    }
  ]
}

https://zenn.dev/oymk/articles/062aa3f9c05f8c

役立ち集

ダッシュボード 🔗

  • 今触っている項目の Dev docs を見る
GUI

各項目に Documentation のリンクあり

Dev docs が表示され、Go to full documentaiotn することも可能

  • 今触っている項目の Help を見る
GUI

Help

  • 今触っている項目の API を見る
GUI

API

ドキュメント(with 生成 AI) 🔗

Cloudflare MCP Servers 🔗

Gemini の例

”Cloudflare の Universal SSL と Advanced の証明書の違いをまとめて”
search_cloudflare_documentation (cloudflare MCP Server) {"query":"Cloudflare Universal SSL vs Advanced Certificates"}

結果

Claude の例

コードで管理 🔗

Cloudflare はプログラマブルなプラットフォームなので

API

API docs のサンプルコードは各言語で見れる

API Token はユーザーレベルとアカウントレベルの二種

【ユーザー】My profile API Tokens

【アカウント】Manage Account Account API tokens

IaC ツール

ライブラリ

おわりに

以上。
Partial(CNAME)セットアップで疎通できたら、準備完了。
これから PoC の始まり
セキュリティ、パフォーマンスなど、各成功要件の達成を目指して進める。

Discussion