iT邦幫忙

2025 iThome 鐵人賽

DAY 23
0
Cloud Native

與雲原生精靈共舞:APISIX使用者的兩年旅程系列 第 23

Ch16 - 身份驗證守門人,APISIX保護上游的兩種基本方式:Key-Auth和Basic-Auth

  • 分享至 

  • xImage
  •  

您可以將 APISIX 網關作為所有業務的流量入口,它提供了 動態路由、動態上游、動態憑證、A/B 測試、灰度發布(金絲雀發布)、藍綠部署、限速、防攻擊、收集指標、監控警報、可觀測性、服務治理 等功能。
--〈APISIX文件-入門指南〉

斷路器/限流」一章中,示範了以限流/限速和斷路器的插件保護上游的方式。此外,APISIX還可以與身份驗證服務配合,透過身份驗證的插件,保護上游的存取,包含key-authbasic-authldap-authjwt-authopenid-connectauthz-keycloakopaforward-authmulti-auth插件等。

Key-Auth

key-auth效果其實就像是[Admin API]使用X-API-KEY作為驗證一樣。類似的,可以將「新竹百貨公司」只提供給VIP進入。為了使用插件,需要在apisix_config/config.yamlplugins啓用該插件(預設是啓用的):

plugins:
  - key-auth                       # priority: 2500
  - openid-connect                 # priority: 2599
  - cas-auth                       # priority: 2597
  - authz-casbin                   # priority: 2560
  - authz-casdoor                  # priority: 2559
  - wolf-rbac                      # priority: 2555
  - ldap-auth                      # priority: 2540
  - hmac-auth                      # priority: 2530
  - basic-auth                     # priority: 2520
  - jwt-auth                       # priority: 2510
  - consumer-restriction           # priority: 2400
  - forward-auth                   # priority: 2002
  - opa                            # priority: 2001
  - authz-keycloak                 # priority: 2000

同樣可以在apisix_dashboard_config/config.yaml啓用該插件,好讓在Dashboard Web UI同樣可以進行設定調整。

然後針對「新竹百貨公司」的路由添加key-auth插件:

{
  "_meta": {
    "disable": true
  },
  "header": "X-VIP-KEY",
  "hide_credentials": true
}

https://ithelp.ithome.com.tw/upload/images/20251007/20112470eAQ85kS7X2.png

接著,要透過Consumer建立一個可用的X-VIP-KEY

https://ithelp.ithome.com.tw/upload/images/20251007/20112470KFYtlhTyYm.png

建立Bob Consumer,然後同樣找到key-auth插件,將key設置為bob-key

https://ithelp.ithome.com.tw/upload/images/20251007/201124708Hbn97oZKv.png

現在直接瀏覽 http://新竹百貨公司.com:9080/ 會被拒於門外。

https://ithelp.ithome.com.tw/upload/images/20251007/20112470E4qGCmBUI3.png

需要在請求Header添加X-VIP-KEY

curl  http://新竹百貨公司.com:9080/ \
  -H 'X-VIP-KEY: bob-key'

https://ithelp.ithome.com.tw/upload/images/20251007/20112470l1DpmkIgEi.png

Basic-Auth

可以將key-auth改成basic-auth,透過驗證帳號密碼登入的方式驗證。

https://ithelp.ithome.com.tw/upload/images/20251007/20112470BeYkl2uNXK.png

該插件不需要額外的參數。同樣的在Bob的Consumer也需要提供帳號密碼的設置。

https://ithelp.ithome.com.tw/upload/images/20251007/20112470gdSCN9IdBF.png

再一次瀏覽 http://新竹百貨公司.com:9080/ 時,會跳出輸入帳號密碼的提示框,正確輸入帳密即可進入百貨公司。

https://ithelp.ithome.com.tw/upload/images/20251007/20112470TYPK7dH6rO.png

注意: 9080端口使用HTTP服務,建議實際使用參考「TLS」一章設置,改用9443端口。

更多關於身份驗證

更多的時候,不會由APISIX的Consumer提供VIP-KEY,可能會將Key放在專用的Vault系統。密碼也不會直接使用APISIX進行設定,而是使用其他身份驗證服務,比如LDAP、OIDC。APISIX甚至可以配合Keycloak的授權機制系統(Authorization),顆粒化(fine-grained)的放行請求,或是透過其他第三方到授權引擎如OpenPolicy Agent(opa)、Casdoor協助處理。亦可以結合多個驗證機制multi-auth或將驗證轉發forward-auth

但其實還有一點很重要的事!不管是限流、斷路器,還是這些身份驗證的插件,如果有機會繞過APISIX直達上游服務節點的話,一切都沒有意義。因此這部分依然而需要好好考量,是應該透過防火牆還是其他方式防範?

直達「新竹百貨公司」節點,繞過身份驗證,可以直接連線 http://127.0.0.1:8081


上一篇
幕間3 - 工程師的告白:換掉 Nginx,其實是為了實現一個「小小的私心」
下一篇
Ch17 - APISIX x Keycloak:為 K8S Dashboard 部署「特勤門禁」—— Edge Gateway SSO 實戰
系列文
與雲原生精靈共舞:APISIX使用者的兩年旅程24
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言