Skip to content

irvin/digital-service-resilience

Repository files navigation

民生數位服務韌性檢測

tags: digital-resilience, 數位韌性松, DigiResiTh0n

License under CC0, No Rights Reserved

Colloborate on HackMD

github archive

在天災人禍導致「台灣對外斷網」時,希望能盡量維持正常運作的重要網路服務。

情境: 2023年初,馬祖的對外海纜被中國的拖網漁船/挖沙船「意外」挖斷,因而斷網長達數個月。假設此一情境發生在台灣,台灣對外網路骨幹海纜斷了八九成(甚至完全中斷),有哪些服務,是維持基本生活品質必要的服務,應在「只有島內網路」的狀態下維持正常運作?

範疇: 國民第一線會使用的「網路服務」、「手機 APP」。

不納入實體離線服務如 7-11 店面與捷運⋯⋯等。也不列入各消費端服務的上游相關設施(如 EC 網站的物流,我們期待該網站能與其供應鏈上下游協作,推行進一步的韌性計畫)

目標: 對列舉的重要民生服務進行檢測,確認其相對台灣對外斷網時的韌性狀態

倡議: 民生必需的服務,應備有對外網路嚴重障礙的應變計劃,並且定期進行相關的演練。


重要數位服務與韌性檢測結果

社群共同列舉民生上重要的數位服務,及基礎架構相關服務。

範例:

服務 斷網耐受性 檢測紀錄
g0v.tw 不會動 檢測紀錄
ocf.tw 不會動 檢測紀錄

重要數位民生服務(與其替代品)

最新檢測紀錄請見: https://github.com/irvin/web-resilience-test-result


a) 服務韌性關鍵因素

  • 網站 hosting 主機
    • 所在地 & API 所在地
      • 位置:國內 / 國外
      • 是否是 anycast,且提供國內節點
  • 網站頁面 & API 是否通過 CDN
    • CDN 是否是已知有落地的單位
      • 例如:cloudflare (TPE)、Akamai
  • 網站使用的 library (jquery, anguler, vue... etc)
    • 是否使用公共的 CDN
      • 是否已知有落地
      • cdnjs (over cloudflare)
      • jsdelivr?
    • 是否與網站一起 serve

b) 韌性檢測步驟

以 Pchome 產品頁 https://24h.pchome.com.tw/prod/DCAYAD-A900BIAMV 為例(檢測過程紀錄

  1. 先打開 adblock / adguard,把不必要的元素都預先擋掉

  2. 打開瀏覽器開發工具,停用快取,載入頁面

  3. 切到 network,用 HAR 檔存下完整的 request 紀錄

  4. 資料清理

    • vscode 搜索 HAR "url": "(.*)" 抓出所有的 requests
    • 按照 hostname 排序,同一個 sub-domain 只留一條
    • 可直接丟掉的 requests 們

      可參考擋廣告軟體的效果(例:假設被 ublock 阻擋)就可以直接丟棄

      • analytics:
        • analytics.google.com
        • play.google.com/log
        • www.google-analytics.com
      • fb:
        • connect.facebook.net
        • www.facebook.com
      • 字體:
        • fonts.gstatic.com
      • ad:
        • *.doubleclick.net
        • www.google.com.tw/ads
        • *.scupio.com
        • jscdn.appier.net
      • 其他:
        • www.youtube.com/embed/*
  5. 檢視 HAR entries 下的每一個 request 項目是否有境內可用性

    第一項 https://24h.pchome.com.tw/prod/DCAYAD-A900BIAMV 為例

    a. 確認該資源資訊

     ➜  ~ ipinfo 24h.pchome.com.tw
     Core
     - IP           34.149.253.14
     - Anycast      true
     - Hostname     14.253.149.34.bc.googleusercontent.com
     - City         Kansas City
     - Region       Missouri
     - Country      United States (US)
     - Currency     USD ($)
     - Location     39.0997,-94.5786
     - Organization AS396982 Google LLC
     - Postal       64106
     - Timezone     America/Chicago
    

    b. 檢視 Anycast / 地理位置狀態

    b-1. 假設無 Anycast,則參考該 ip 的地理位置,紀錄到表格上。如位置在島內,則在「是否可及」內打 O,在島外則打 X。

    b-2. 假設有 Anycast,如果該地理位置不在島內,可檢查「該服務是否是已知有台灣節點者」,如上述範例 hostname 為GCP,對照 雲端平台--IaaS,確認其有台灣節點,則在「是否可及」內紀錄 -

    c. 最終以 X- 的數字評估該網頁的耐受度。以 pchome 產品頁 為例,共 7 個 O 位於境內、10 個 - 使用雲端服務可能有耐受性,沒有任何 X 非雲端的境外節點。

c) 自動化檢測工具

安裝步驟

git clone https://github.com/irvin/digital-service-resilience.git
cd digital-service-resilience
npm install

(optional)設定 IPinfo Token

export IPINFO_TOKEN=your_token_here  # Linux/Mac
set IPINFO_TOKEN=your_token_here     # Windows CMD
$env:IPINFO_TOKEN="your_token_here"  # Windows PowerShell

使用方式

npm check https://example.com
node no-global-connection-check.js https://example.com

檢測結果說明

  • O:服務位於台灣境內
  • ?:使用具有台灣節點的雲端服務(如 Google Cloud、AWS 等)
  • X:位於境外且非雲端服務

範例輸出

開始檢測網站: https://example.com
收集到 X 個請求
清理後剩餘 Y 個唯一域名

檢測結果:
-------------------
境內服務 (O): 3
雲端服務 (?): 5
境外服務 (X): 1

詳細資訊:
example.com: O (TW (HiNet))
cdn.example.com: - (US (GOOGLE))
api.example.com: X (US (Amazon))

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published