Skip to main content
Version: 2.3.3

ACL

用途說明#

用戶可設定代表之ACL群組名,使其限制對服務或路由做存取動作。此插件需要同時開啟認證插件(例如Basic AuthenticationKey Authentication或是OAuth 2.0)在服務或路由上。

欄位配置說明#

變數類型預設值說明必填
allowarray of string可填入任意群組名,代表允許接觸服務或路由的群組。 allowdeny 中需選擇其中一個欄位填寫。V
denyarray of string可填入任意群組名,代表拒絕接觸服務或路由的群組。 allowdeny 中需選擇其中一個欄位填寫。V
hide_groups_headerbooleanfalse開啟時會在傳送請求至後方服務時移除標頭 X-Consumer-GroupsV

用法示例#

在全局啟用插件#

  1. 從網站左邊Menu中 外掛插件 頁面中,點選右上角的 新增外掛插件

全局啟用畫面

  1. 點選後,選擇 安全 頁籤,並啟用ACL,填寫內容參考欄位配置說明,設定成功後,任何請求(不分服務、路由、用戶)皆需經過檢查才能通過。

在服務端上啟用插件#

  1. 從網站左邊Menu中 服務 > 服務列表 頁面中,選擇要啟用此插件的服務,假設為google,點選對應的編輯按鈕:

服務啟用畫面1

  1. 在編輯畫面中,點選上方的 外掛插件 頁籤,再點選頁籤內容上方的 新增外掛插件 按鈕:

服務啟用畫面2

點選後,選擇 安全 頁籤,並啟用ACL,填寫內容參考欄位配置說明,設定成功後,僅有此服務(範例為google)請求需經過檢查才能通過。

在路由端上啟用插件#

可以由兩種方式來選擇路由,並啟用插件:

方式一:路由列表#

  1. 從網站左邊Menu中 服務 > 路由列表 頁面中,選擇要啟用此插件的路由,假設為google,點選對應的編輯按鈕:

路由啟用畫面1

方式二:服務 > 服務列表 > 路由列表#

  1. 從網站左邊Menu中 服務 > 服務列表 頁面中,選擇要啟用此插件的路由 所屬之服務(假設為google),點選對應的編輯按鈕。

在編輯畫面中,點選上方的 路由 頁籤,選擇要啟用此插件的路由(假設為google),點選對應的編輯按鈕:

路由啟用畫面2


  1. 承第1步,點擊上述兩種方式之一的編輯按鈕後,在編輯畫面中,點選上方的 外掛插件 頁籤,再點選頁籤內容上方的 新增外掛插件 按鈕:

路由啟用畫面3

點選新增外掛插件 按鈕後,選擇 安全 頁籤,並啟用ACL,填寫內容參考欄位配置說明,設定成功後,僅有此路由(範例為google)請求需經過檢查才能通過。

驗證#

建立使用者及API金鑰#

  1. 從網站左邊Menu中 訂閱用戶 > 用戶列表 頁面中選擇右上方 新增 按鈕,新增用戶。

  2. 選擇剛建立的使用者,進入編輯頁面

    1. 選擇上方 API金鑰 頁籤,再選擇列表左上方的 新增 按鈕,然後按 送出

    create api key

    1. 選擇上方 憑證 頁籤,選擇左邊的 Basic Authentication 頁籤,再選擇列表左上方的 新增 按鈕,填入代表此用戶的用戶名稱及密碼並送出,在此填入 Testtesting 做為範例。

    create basic auth

  3. 選擇剛建立的API金鑰,進入編輯頁面,選擇上方 ACL 頁籤,點選列表左上方的 新增 按鈕,在此於 服務名稱 填入 testing 為範例送出。

acl

開啟ACL及Basic Auth插件#

  1. 選擇一路由開啟此插件服務,示範在 allow 填入 testing,如下圖。

acl2

  1. 在同一路由開啟Basic Auth插件。

  2. 此時送出以下指令

$ curl -H 'x-api-host: google' -H 'Authorization: Basic VGVzdDp0ZXN0aW5n' http://localhost:8000/index -i

會得到以下回應

HTTP/1.1 401 Unauthorized
Date: Wed, 31 Mar 2021 09:40:52 GMT
Content-Type: application/json; charset=utf-8
Connection: keep-alive
Content-Length: 42
X-Kong-Response-Latency: 7
Server: kong/2.0.4
{"message":"Your request is unauthorized"}
  1. 加入剛建立的API金鑰再送出以下指令
$ curl -H 'x-api-host: google' -H 'x-api-key: c6dc4695-9965-47c5-b840-770ca2ddfb3a' -H 'Authorization: Basic VGVzdDp0ZXN0aW5n' localhost:8000/index -i

即可得到正常的回應。