kubernetes Authorization

kubernetes受權設置算法

在kubernetes中受權 和 認證是各自獨立的部分。認證部分參見 kubernetes認證
受權操做適用於全部面向於kubernetes api的http請求。json

受權 將會針對每個請求,根據訪問策略來檢查對比請求中的屬性信息(好比 用戶,資源,namespace等)。一個API請求必須知足指定的策略才能繼續執行。segmentfault

有以下幾種策略方式:api

  • --authorization_mode=AlwaysDeny
  • --authorization_mode=AlwaysAllow
  • --authorization_mode=ABAC

AlwaysDeny 阻止全部請求(一般用在測試環境);AlwaysAllow容許全部請求,若是不想用受權機制能夠這麼設置;ABAC容許用戶自定義的受權策略,ABAC的全寫爲:Attribute-Based Access Control(面向屬性的受權控制)。測試

ABAC Mode

請求屬性

在受權設置中,能夠用到的屬性設置有4個:spa

  • user ,已經被認證的用戶;
  • 請求是不是隻讀的;
  • 被請求的資源是什麼,只接受針對api endpoint的請求,如/api/v1/namespaces/default/pods,對於其餘的endpoint,如/version,資源描述則爲空string;
  • 訪問對象的namespace,若是訪問的對象不支持namespace,則爲空string

受權文件格式

設置參數爲: --authorization_policy_file=SOME_FILENAME,這樣便開啓ABAC模式。
在指定的文件中,一行爲一個json對象,這個json對象包含幾個map格式,這些map對象有以下:對象

  • user,string類型,對應--token_auth_file 中的user屬性;
  • readonly,bool類型,當設置爲true時,只接受GET請求;
  • resource,string類型,請求URL中對應的資源類型,如pod;
  • namespace,string類型,對應namespace。

若是屬性沒有設置,那麼默認值爲0 或 false 或 空string。token

受權算法

一個請求中設置的屬性決定了這個請求所能擁有的特性(好繞~)資源

當收到一個請求,就獲取了這個請求應該擁有的相應特性,若是某些屬性沒有設置,那麼會默認設置爲這個屬性類型對應的空值,如0,false,空string 等。get

若是在受權文件中某個屬性被重複定義了,那麼只要有一個知足受權條件,那麼這個請求就被認爲是被受權的。

若是在受權條件中將user設置爲空,那麼不會對任何用戶作限制; 若是在受權條件中獎namespace設置爲空,那麼不對任何namespace作限制。

Examples

  1. {"user":"alice"}:
    用戶alice 能夠作任何事!
  2. {"user":"kubelet", "resource": "pods", "readonly": true}:
    kubelet能夠GET任何pod的信息。
  3. {"user":"kubelet", "resource": "events"}:
    kubelet能夠對events作任何讀寫操做。
  4. {"user":"bob", "resource": "pods", "readonly": true, "ns": "projectCaribou"}: Bob 僅僅能GET處於namespace projectCaribou下的pod。
相關文章
相關標籤/搜索