在單體式應用裡,系統常倚賴「內外網邊界」與單一登入機制;然而到了微服務世界,每一次呼叫都是跨網路、每一個服務都是潛在邊界。因此,安全與存取控制不再是附加功能,而是系統設計的第一性原則。本篇聚焦四個核心觀念與做法:零信任(Zero Trust)、mTLS、OAuth2 與 OpenID Connect (OIDC),並說明在微服務環境下如何落地、何時選用,以及常見誤區與最佳實務。
定義:不預設信任任何請求,無論來源在「內」或「外」。每次存取都需明確驗證身份、最小權限授權、持續性評估(使用者、裝置、環境)。
核心原則:
• 永不信任、持續驗證(Never trust, always verify)
• 最小權限(Least privilege)
• 偵測與回應(Assume breach)
定義:雙向 TLS。客戶端與伺服器端互相出示憑證並驗證,確保「你是你、我也是我」,且傳輸加密。
微服務價值:保護東西向流量(服務對服務),避免內網被動手腳時資料外洩。
定義:一個授權框架,讓資源擁有者在不交出密碼的情況下,授權第三方應用存取其資源(以 Access Token 為票據)。
常見流程:Authorization Code(含 PKCE)、Client Credentials、Device Code 等。
定義:建立在 OAuth2 之上的身份層協定,提供標準化的登入流程與 ID Token(JWT),讓服務端能驗證使用者身份、取得基本宣告(claims)。
• 攻擊面爆炸:服務從 1 變成 10、100,入口、出口與相依數量倍增。
• 環境多樣:多雲、混合雲、邊緣、容器與 VM 夾雜。
• 人與機器雙身份:人(User-to-Service)與服務(Service-to-Service)同時需要身份與授權治理。
• 網路不可信:即便在「內網」,也要假設已有入侵者。
• 零信任 → 提供整體安全策略與治理框架。
• mTLS → 解決東西向密通與實體身份驗證(Workload Identity)。
• OAuth2 / OIDC → 解決邊界與應用層的授權 / 身份問題(人與應用雙場景)。
A. 零信任實作藍圖
常見工具:BeyondCorp 模型、Azure Zero Trust、OPA/Gatekeeper、Kyverno、HashiCorp Vault(憑證/密鑰生命週期)。
B. mTLS:把「你是誰」刻在連線上
如何落地:
工具:Istio/Envoy、Linkerd、Consul、cert-manager、SPIRE(Workload Identity)。
C. OAuth2 與 OIDC:人與應用的「身份與授權語言」
• 典型架構:
Authorization Server(AS):Keycloak、Auth0、Okta、Azure AD、Cognito。
Resource Server(RS):你的微服務,用於驗證 Access Token、檢查 scope/audience。
Client:Web、Mobile、API Gateway、BFF。
• 流程選擇:
Authorization Code + PKCE:瀏覽器與行動裝置首選。
Client Credentials:服務到服務(B2B / 機器對機器)。
Device Code:無鍵盤裝置。
• Token 治理:
短時效 Access Token + 可撤銷 Refresh Token。
使用 audience、scope、resource indicators 做最小權限。
JWT 驗簽(JWKS)、時鐘漂移(clock skew)容錯。
• OIDC 要點:
ID Token 只為「身份」,不要用來授權資源;授權靠 Access Token。
Nonce、防重放、單點登出(Front/Back-channel Logout)策略。
工具:Keycloak、Auth0、Okta、Spring Security、OPA/Envoy ext-authz。
邊界(North-South)
由 API Gateway / Ingress 統一入口:TLS、WAF、DDoS 防護、Rate Limit。
使用 OIDC 完成使用者登入、取得 ID Token 與 Access Token。
Gateway 驗 Token(包括簽章、時效、audience、scope),通過後轉發至後端。
東西向(East-West)
服務間以 mTLS 建立信道安全與實體身份。
針對使用者情境需要「權限傳遞」時,使用 Token 轉換 / 下游再授權(Token Exchange、Propagate JWT with least scope)。
搭配 OPA/Envoy AuthorizationPolicy 在 proxy 層做細緻授權(ABAC/RBAC/REBAC)。
密鑰管理
秘密集中管理與審核:Vault 或 KMS;禁止把秘密寫進 image / repo。
自動輪替:TLS 憑證、JWT 簽章金鑰(JWKS 旋轉)。
可觀測與稽核
稽核日誌:登入、授權決策、策略變更。
分散式追蹤:把 user id / session id / trace id 串起來。
政策即程式:Rego 規則版本化、PR 審查與回溯。
• 零信任:多雲/多區/遠端混合辦公;大量外包人員或供應商接入;醫療、金融、政府等高敏產業。
• mTLS:任何需要保護服務間通訊與實體身份的內部調用;特別是包含敏感資料(病歷、支付)。
• OAuth2/OIDC:對外 API、行動 App、第三方整合、企業 SSO、多租戶平台。
案例拼圖(醫療場景示意):
• 民眾端 App/院所端 Web 皆走 OIDC + OAuth2。
• 內部微服務以 mTLS + SPIFFE ID 互認,並在 Service Mesh 做授權策略。
• API Gateway 依客戶端型態(BFF)發不同細緻 API,並實作流量治理。
• Keycloak 管控使用者身份、角色與同意(consent);Vault 管控密鑰;OPA 管控細粒度授權。
• 把 JWT 當 Session:ID Token 不是用來授權資源;Access Token 要短效且可撤銷。
• 長壽命 Token:高風險。建議短效(數分鐘)+ Refresh Token(可撤銷)。
• 只在邊界 TLS:內部通訊未加密、未驗證身份 → 必須導入 mTLS。
• 繞過 Gateway:內部服務直接暴露;應強制內外分層與零信任網路策略。
• 共享「超級金鑰」:所有服務共用同一組憑證或 client secret;要改為每服務一把鑰(最小權限)。
• 憑證輪替沒演練:到期才驚覺會停機;把輪替做成定期演練。
• Scope 設計過粗:導致權限擴散;以 audience + scope + resource 精準劃分。
• 忽略稽核軌跡:沒有誰在何時做了什麼的證據;開啟審計日誌與變更記錄。
• 安全單元測試:Token 驗簽、期限、scope、audience、拒絕清單(revocation)。
• 整合測試:BFF/Gateway ↔ AS ↔ Service 的串接流程;Token 轉換、逾時、重試。
• 政策測試:OPA Rego 規則以單元測試覆蓋(授權通過/拒絕的邊界案例)。
• 掃描與壓測:ZAP/DAST 漏洞掃描、mTLS 壓測、WAF 規則調校。
• 演練:金鑰輪替、憑證過期、AS 停機降級方案(本地快取、只讀模式)。
類別 | 推薦工具 | 作用 |
---|---|---|
身份/授權 | Keycloak, Auth0, Okta, Azure AD, Cognito | OIDC/OAuth2 AS、金鑰輪替、同意管理 |
Service Mesh | Istio, Linkerd, Consul Connect | mTLS、自動 sidecar、L7 授權 |
憑證/身分 | cert-manager, SPIFFE/SPIRE, Vault | 憑證簽發與輪替、Workload Identity、秘密管理 |
政策治理 | OPA/Gatekeeper, Kyverno | Policy-as-Code、K8s 准入控制 |
Gateway | Envoy, Kong, APISIX, NGINX, Spring Cloud Gateway | 邊界控制、驗證、流量治理 |
可觀測 | Prometheus, Grafana, Loki/ELK, Jaeger/Zipkin | 指標、日誌、追蹤、警示 |
• 前 30 天:
選定 AS(如 Keycloak),實作 OIDC 登入(Authorization Code + PKCE)。
API Gateway 端到端 TLS;存取日誌與審計打底。
• 60 天:
導入 Service Mesh,內部流量切到 mTLS PERMISSIVE → 觀察 → 切 STRICT。
引入 OPA/AuthorizationPolicy 針對敏感路徑做細權限。
• 90 天:
憑證與金鑰輪替自動化、演練。
Token 生命週期收斂(短效化 + 轉換策略)。
安全測試/政策測試進 CI/CD,定期 DAST/SAST。
微服務的價值在於獨立演進與快速交付,而要讓這個價值可持續,安全機制必須「預設即存在」。
• 零信任提供了宏觀框架;
• mTLS確保服務實體間的真實身份與通道安全;
• OAuth2 / OIDC則讓「誰是誰、能做什麼」有了標準語言與治理手段。
把這四塊拼好,你的微服務才真正站上「安全可運營」的地基,進而放心地擴張、調整與創新。