Skip to main content
Version: 2.8.1

ACL

用途說明#

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

欄位配置說明#

變數類型預設值說明必填
allowarray of string可填入任意群組名,代表允許接觸服務或路由的群組。
注意:allowdeny 中需選擇其中一個欄位填寫。
denyarray of string可填入任意群組名,代表拒絕接觸服務或路由的群組。
注意:allowdeny 中需選擇其中一個欄位填寫。
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)請求需經過檢查才能通過。

驗證#

路由啟用 ACL 插件 + 使用者 API金鑰存取#

  1. 以下範例選擇 google 的路由開啟 ACL 插件服務,示範在 allow 填入 test-group,如下圖。

acl2

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

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

    1. 選擇上方 API金鑰 頁籤,再選擇列表左上方的 新增 按鈕,填寫對應欄位後,按下 送出

    create api key

    note

    創立後預設 API金鑰會是一個亂數的 uuid 格式,可以先把這個 API金鑰複製起來,下方呼叫請求時會需要帶入 x-api-key 標頭內。

  3. 選擇剛建立的 API金鑰,進入編輯頁面,選擇上方 ACL 頁籤,點選列表左上方的 新增 按鈕,於 群組名稱 欄位中填入 test-group 後送出。

acl

  1. 送出以下指令發送請求:
$ curl -H 'x-api-host: google' <GOC API Gateway protocol>://<GOC API Gateway ip>:<GOC API Gateway proxy port>/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. x-api-key 標頭中加入剛建立的 API金鑰,假設為 c6dc4695-9965-47c5-b840-770ca2ddfb3a,送出以下指令:
$ curl -H 'x-api-host: google' -H 'x-api-key: c6dc4695-9965-47c5-b840-770ca2ddfb3a' <GOC API Gateway protocol>://<GOC API Gateway ip>:<GOC API Gateway proxy port>/index -i

即可得到正常的回應。

路由啟用 ACL 插件 + 使用者用帳密 (Basic Auth) 存取#

  1. 以下範例選擇 google 的路由開啟 ACL 插件服務,示範在 allow 填入 test-group,如下圖。

acl2

  1. 在相同的路由開啟 Basic Authentication 插件服務。

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

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

    1. 切換到認證頁面,選擇 Basic Authentication 頁籤,再選擇列表左上方的 新增 按鈕,填入帳號與密碼,範例輸入 accpwd

      acl2

  4. 送出以下指令發送請求:

$ curl -H 'x-api-host: google' <GOC API Gateway protocol>://<GOC API Gateway ip>:<GOC API Gateway proxy port>/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":"Unauthorized"}
  1. Authorization 標頭中加入 Base64 encode 後的帳密 (acc:pwd),送出以下指令:
$ curl -H 'x-api-host: google' -H 'Authorization: Basic YWNjOnB3ZA==' <GOC API Gateway protocol>://<GOC API Gateway ip>:<GOC API Gateway proxy port>/index -i

即可得到正常的回應。