# 取得 Cloudflare API Token 全流程（給 relay DDNS 用）

> 目的：產生一把「只能編輯 asiaware-stk.com 這個網域 DNS」的 API Token，
> 給 `cf_ddns.py / cf_ddns.exe` 用來自動更新 `relay.asiaware-stk.com` 的 IP。
> 整個流程約 3 分鐘。

---

## 0. 前置觀念
- Token = 給程式用的「密碼」，比帳號密碼安全（可限定權限、可隨時撤銷）。
- 我們只要兩個權限：**讀得到 Zone** + **改得了 DNS**，限定在 asiaware-stk.com。
- 這把 Token **只顯示一次**，建立後要馬上複製存好。

---

## 1. 進網站、登入
1. 開瀏覽器 → 網址列輸入 **https://dash.cloudflare.com**
2. 用你的 Cloudflare 帳號登入（管 asiaware-stk.com 的那個帳號）。

---

## 2. 進到 API Tokens 頁
1. 右上角點**帳號頭像 / 帳號圖示**。
2. 選 **My Profile（我的個人資料）**。
3. 左側選單點 **API Tokens**。
   - 或直接開：**https://dash.cloudflare.com/profile/api-tokens**
4. 點 **Create Token（建立權杖）**。

---

## 3. 選範本：Custom token
- 範本清單最底下找 **Create Custom Token（自訂權杖）** → **Get started**。
- （新版介面叫「Permission policies / Edit policy」，做法一樣。）

---

## 4. 填 Token 名稱
- **Token name**：填 `stk-ddns`（方便日後辨識，名字隨意）。

---

## 5. 設定權限（最重要，2 個）
在 **Permissions / Edit policy** 區，加兩條權限：

| # | 群組（左欄） | 項目（中欄） | 權限（右欄） |
|---|-------------|-------------|-------------|
| 1 | Zone | DNS | **Edit（編輯）** |
| 2 | Zone | Zone | **Edit（編輯）**（或 Read 也可，Edit 較保險） |

> 新版介面：展開 **DNS & Zones** 群組 → 把 **DNS** 勾 **Edit**、**Zone** 勾 **Edit**
> → 該群組會顯示 **2/6**，代表選了 2 項，就對了。

---

## 6. 限定網域（Zone Resources / All Domains）
- 找 **Zone Resources**（舊版）或最上面的 **All Domains 下拉**（新版）。
- 選 **Specific zone / 特定網域** → **asiaware-stk.com**。
- 若只有一個網域，留 **All Domains** 也可以（等於就是限定它）。

---

## 7. 有效期 / IP 限制
- **Token expiration（有效期）**：選 **No expiration（無期限）** —— DDNS 要一直跑、不能過期。
- **Client IP address filtering（來源 IP 限制）**：**留空** —— 我們的公網 IP 會變，填了會把自己擋掉。

---

## 8. 建立並複製 Token
1. 點 **Review token（檢視權杖）** / Continue to summary。
2. 確認摘要寫的是 `DNS:Edit` + `Zone`。
3. 點 **Create Token（建立權杖）**。
4. ★ **馬上複製** 那一長串（新版開頭是 `cfat_...`，只顯示這一次！）。
5. 同畫面也會顯示 **Account ID**（DDNS 不一定需要，但可一併記下）。
6. 點 **Confirm / Done** 關掉。

---

## 9. 填進設定檔
編輯 **Server** 的 `C:\socket\relay\cf_ddns.ini`：
```ini
[cloudflare]
api_token = cfat_你複製的那串
zone      = asiaware-stk.com
record    = relay.asiaware-stk.com
ttl       = 120
```
> 用記事本存檔，編碼 ANSI 或 UTF-8 皆可。

---

## 10. 驗證
在 Server（或同一條網路線、共用公網 IP 的機器）跑：
```
cf_ddns.exe
```
看同層 `cf_ddns.log` 出現：
```
建立 relay.asiaware-stk.com -> 114.34.143.x (proxied=False)
```
即成功。再用 `nslookup relay.asiaware-stk.com` 應解析到你的公網 IP。

---

## 11. 設成自動（每 5 分鐘）
以系統管理員身分跑 `install_cf_ddns.bat` → 註冊排程 **STK_CF_DDNS**
（`/sc minute /mo 5 /ru SYSTEM`），之後固定 IP 變動 5 分鐘內自動追上。

---

## 安全注意
- Token = 能改你 DNS 的密碼，**別外流、別貼到公開處、別放進會上傳 FTP 的檔**。
- `cf_ddns.ini` 已列入 server_updater 的 **NO_OVERWRITE**（更新不覆蓋），
  且 **dev 來源那份 token 清空**，token 只放 Server 本機。
- 萬一外洩：Cloudflare → API Tokens → 該 Token → **Roll（重新產生）** 換一條，
  再更新 ini 即可，舊的立刻失效。

---

## 重點權限對照（避免選錯）
| 想做的事 | 需要的權限 |
|----------|-----------|
| 找到 asiaware-stk.com 這個 zone | Zone : Zone : Read（Edit 含此） |
| 更新 relay 的 A 紀錄 | Zone : DNS : Edit |
| ★ 灰雲 proxied=False | 由 cf_ddns.py 程式碼控制，非 Token 權限 |
