---
# System prepended metadata

title: 實踐 Zero Trust：使用 Cloudflare Access 整合 GitHub Organization 實現精準存取控制

---

# 實踐 Zero Trust：使用 Cloudflare Access 整合 GitHub Organization 實現精準存取控制

[TOC]

---

在當前「零信任」（Zero Trust）的安全架構下，驗證使用者身份不再僅僅依賴於密碼。對於開發團隊而言，利用現有的 GitHub Organization 成員名單作為存取門神，是既安全又高效的方案。

本文將詳細介紹如何透過 Cloudflare Access 整合 GitHub OAuth，確保您的內部工具或服務「僅限特定組織成員」存取，並避開常見的設定陷阱。

## 一、 為什麼選擇 Cloudflare Access + GitHub？
對於開發者而言，維持一個獨立的員工帳號系統（如 LDAP 或 AD）成本極高。而 GitHub 組織通常已經定義好了團隊成員與權限。透過 Cloudflare Access，我們可以在不需要修改任何程式碼的情況下，為任何 Web 服務加上一層強大的身份驗證。

## 二、 Step-by-Step 設定流程
1. 在 GitHub 端建立 OAuth 應用程式
    - 首先，我們需要讓 GitHub 信任來自 Cloudflare 的驗證請求。

    - 登入 GitHub，前往組織或個人設定中的 Settings > Developer settings > OAuth Apps。
        - ![image](https://hackmd.io/_uploads/ryR3_6v4-e.png =200x)

    - 點擊 New OAuth App。
        - ![image](https://hackmd.io/_uploads/BJzj_6w4bl.png)

    - 填寫以下資訊：


        - **Application name：** 建議填寫 Cloudflare Access - [Your Team Name]。
        - **Homepage URL：** 填入您的 Cloudflare Team Domain（例如 https://<your-lab>.cloudflareaccess.com）。
        - **Authorization callback URL：** 這是最關鍵的欄位，格式固定為： https://<your-team-name>.cloudflareaccess.com/cdn-cgi/access/callback
    
    - 點擊 Register application。

    - 在設定頁面中，記下 Client ID，並點擊 Generate a new client secret。請務必立即保存此密鑰，關閉頁面後將無法再次查看。
        - ![image](https://hackmd.io/_uploads/HJAIt6DEWg.png)


2. 在 Cloudflare 中設定身分提供者 (IdP)
    - 接著，我們將 GitHub 的憑證交給 Cloudflare。

    - 進入 Cloudflare Zero Trust 控制台。
        - ![image](https://hackmd.io/_uploads/SJoUcavVWg.png)



    - 前往 Integrations > Identity providers。
        - ![image](https://hackmd.io/_uploads/HJlNo6PNZl.png)

    - 在 Login methods 區塊點擊 Add new，並在清單中選擇 GitHub。
        - ![image](https://hackmd.io/_uploads/r1GOiaPEWx.png)


    - 填入剛才從 GitHub 取得的 Client ID 與 Client Secret。
        - ![image](https://hackmd.io/_uploads/HktFopDE-x.png)

    - 點擊 Save。
    
    - 如果您為 GitHub 組織管理員，請按下完成設定，並完成 GitHub 驗證。
        - ![image](https://hackmd.io/_uploads/ByC-2aD4-l.png)




3. 關鍵步驟：授權組織存取 (Organization Access)
    - 這是許多人會忽略的一步。如果您的組織開啟了第三方存取限制，Cloudflare 將無法讀取成員名單，導致驗證失敗。

    - 在 GitHub 組織頁面中，前往 Settings > Third-party access > OAuth application policy。

    - 確認 Policy 是否為 Access restricted。

    - 如果 Cloudflare 的應用程式出現在 Pending requests，請點擊 Approve。

    - 若未看到申請，請確保在 Cloudflare 設定 GitHub IdP 時，彈出的 GitHub 授權視窗中，您已針對特定組織點擊了 Grant。


4. 配置 Access 原則 (Policies) —— 避開邏輯漏洞
- 這是本文的核心。設定 Access 原則時，必須正確理解 Include（包含）與 Require（需要）的邏輯。

- ❌ 錯誤範例（會導致安全性漏洞）：
    - 如果您在同一個原則中並列了兩個 Include 選取器：

        - Include: Emails (user@gmail.com)
        - Include: Login Method (GitHub)

    - 結果：任何擁有 GitHub 帳號的人都能進入，因為邏輯是「滿足其中一個即可（OR）」。

- ✅ 正確範例：
    - 如果您希望限制「特定組織」且「特定地區」，應如此設定：

    - 前往 Access > Applications，選擇您的應用程式。

    - 在 Policies 分頁，新增一條原則（Action 設為 Allow）。

    - Configure rules 設定如下：

        - Include (必須滿足其一)：
    
            - Selector: GitHub Organization
            - Value: NZ-s-LAB (注意：必須填寫網址名稱 Slug，而非顯示名稱)

        - Require (強制滿足)：

            - Selector: Country
            - Value: Taiwan
    - 範例
        - 記得原則建立完後，要去需要啟用的應用程式加入原則及登入方式。
        - ![image](https://hackmd.io/_uploads/SJl3TpD4Ze.png)
        - ![image](https://hackmd.io/_uploads/SkQgCpDEZx.png)
        - ![image](https://hackmd.io/_uploads/S1JGRTP4Ze.png)





## 三、 常見疑難排解 (Troubleshooting)
1. 出現 no such github organization 錯誤
    檢查 Slug：GitHub 組織名稱不是顯示名稱。請查看網址 github.com/org-name ，這裡的 org-name 才是正確的填寫值。

    檢查授權：回到 GitHub 檢查 OAuth App 是否被組織管理員批准。


## 四、 總結
透過 Cloudflare Access 與 GitHub Organization 的整合，我們成功建立了一道強大的防線。這不僅解決了身份驗證的問題，更透過地理位置限制（Country Require）進一步縮小了攻擊面。

這種「配置即安全」的模式，正是現代資訊安全從業員應該掌握的利器。
    
    