Nacos 1.2.0 權(quán)限控制介紹和使用

本文來自于Nacos官網(wǎng):Nacos 1.2.0 權(quán)限控制介紹和使用,轉(zhuǎn)載請保留鏈接 ;)

Nacos權(quán)限控制設(shè)計方案

方案背景

Nacos自開源以來,權(quán)限控制一直需求比較強烈,這也反應(yīng)了用戶需求將Nacos部署到生產(chǎn)環(huán)境的需求孙咪。最新發(fā)布的Nacos 1.2.0版本已經(jīng)支持了服務(wù)發(fā)現(xiàn)和配置管理的權(quán)限控制票唆,保障用戶安全上生產(chǎn)逊躁。本文主要介紹Nacos權(quán)限控制的設(shè)計方案和使用指南茅信。

什么是權(quán)限控制盾舌?

在分布式服務(wù)調(diào)用時,需要對未知的或者不受信任的請求來源的請求進行識別和拒絕蘸鲸。權(quán)限控制一般分為兩個階段:身份識別(Authentication)和權(quán)限識別(Authorization)妖谴。身份認(rèn)證主要確定訪問者的身份,權(quán)限識別則判斷這個訪問者是否有對應(yīng)資源的權(quán)限酌摇。

在Nacos的場景中膝舅,配置管理的權(quán)限控制指的是設(shè)置某個配置能否被某個用戶讀寫,這個比較好理解窑多,沒有權(quán)限的用戶舊無法讀取或者寫入對應(yīng)的配置仍稀。服務(wù)發(fā)現(xiàn)的權(quán)限控制指的是用戶是否有權(quán)限進行某個服務(wù)的注冊或者訂閱,這里需要注意的是服務(wù)發(fā)現(xiàn)的權(quán)限控制只能夠控制用戶是否可以從Nacos獲取到服務(wù)的地址或者在Nacos上修改服務(wù)的地址怯伊。但是如果已經(jīng)獲取到了服務(wù)的地址琳轿,Nacos無法在服務(wù)真正調(diào)用時進行權(quán)限控制,這個時候的權(quán)限控制需要由服務(wù)框架來完成耿芹。

1576216016307-2da56934-917f-46ec-b3eb-a221bc91a9e0.png

常見實現(xiàn)方式

認(rèn)證(Authentication)
  • 用戶名+密碼
  • Cookie(只適用于瀏覽器)
  • Session
  • Token(JWT崭篡,Oauth,LDAP吧秕,SAML琉闪,OpenID)
  • AK/SK
鑒權(quán)(Authorization)
  • ACL: 規(guī)定資源可以被哪些主體進行哪些操作;
  • DAC: 規(guī)定資源可以被哪些主體進行哪些操作 同時砸彬,主體可以將資源的權(quán)限颠毙,授予其他主體
  • MAC:a. 規(guī)定資源可以被哪些類別的主體進行哪些操作 b. 規(guī)定主體可以對哪些等級的資源進行哪些操作 當(dāng)一個操作砂碉,同時滿足a與b時蛀蜜,允許操作
  • RBAC: a. 規(guī)定角色可以對哪些資源進行哪些操作 b. 規(guī)定主體擁有哪些角色當(dāng)一個操作增蹭,同時滿足a與b時滴某,允許操作
  • ABAC: 規(guī)定哪些屬性主體可以對哪些屬性資源在哪些屬性的情況下進行哪些操作滋迈。

方案詳情

Nacos的權(quán)限控制霎奢,目標(biāo)是能夠滿足用戶基本的鑒權(quán)需求,同時能夠保持?jǐn)U展性饼灿,可以支持去對接用戶自帶的用戶管理系統(tǒng)或者鑒權(quán)系統(tǒng)幕侠,包括后面和K8S生態(tài)以及Service Mesh生態(tài)能夠無縫的融合“恚基于這樣的考慮晤硕,目前Nacos權(quán)限控制的設(shè)計是自帶一個基本的實現(xiàn)悼潭,然后可以支持用戶擴展。具體的設(shè)計如下窗骑。

模塊設(shè)計

整體的模塊設(shè)計是盡量將鑒權(quán)的邏輯抽象出來女责,不在服務(wù)發(fā)現(xiàn)模塊或者配置管理模塊添加相關(guān)的邏輯。通過配置文件可以選擇當(dāng)前使用的鑒權(quán)系統(tǒng)创译。Nacos自帶的認(rèn)證系統(tǒng)使用JWT Token抵知,自帶的鑒權(quán)系統(tǒng)使用的是RBAC。

1576219027093-45345003-c583-46ec-a161-01b5f4b3ff47.png

認(rèn)證算法

對于用戶來說软族,不管是在控制臺還是在客戶端刷喜,都是上傳用戶名和密碼來獲取一個token,然后后續(xù)的每一次到Nacos的請求都會帶上這個token來表明身份立砸。這個token會有一個失效時間掖疮,對于控制臺來說,只需要直接提示用戶重新登錄即可颗祝,對于客戶端則需要有一個定期到Nacos刷新token的邏輯浊闪。

1576219050917-51013ce2-49f3-4a86-b5f9-bd07fc88f8e8.png

鑒權(quán)算法

Nacos自帶的鑒權(quán)系統(tǒng)使用的是RBAC模型,可以在網(wǎng)上查詢相關(guān)的資料螺戳。

數(shù)據(jù)模型

鑒權(quán)的數(shù)據(jù)模型也是基于標(biāo)準(zhǔn)的RBAC來設(shè)計的搁宾,分為用戶、角色和權(quán)限三部分倔幼。用戶就是由用戶名和密碼組成的用戶信息盖腿,角色則是一個邏輯上的用戶組,Nacos啟動時會自帶一個全局管理員的角色损同,只有這個全局管理員的角色可以進行添加用戶翩腐、添加角色、添加授權(quán)等操作膏燃,保證安全性茂卦。而權(quán)限則是由資源+動作來組成。

1576736418792-936a9d1a-5095-47fc-9f87-230abed38384.png

接口設(shè)計

以下接口涉及到登錄和鑒權(quán)的所有邏輯组哩,這些接口除了登錄接口疙筹,其他接口都只能由全局管理員來調(diào)用。

用戶管理
  • 創(chuàng)建用戶:POST<br />
    /nacos/v1/auth/users?username=xx&password=yy
  • 刪除用戶:DELETE /nacos/v1/auth/users?username=xx&password=yy
  • 更新用戶:PUT /nacos/v1/auth/users?username=xx&oldPassword=yy&newPassword=zz
  • 登錄:POST<br />
    /nacos/v1/auth/users/login?username=xxx&password=yyy
角色管理
  • 創(chuàng)建角色/綁定用戶到角色:POST /nacos/v1/auth/roles?role=xx&username=yy
  • 刪除某個用戶的角色:DELETE /nacos/v1/auth/roles?role=xx&username=yy
  • 獲取用戶的所有角色:GET /nacos/v1/auth/roles?username=xxx
權(quán)限管理
  • 給角色添加權(quán)限:POST /nacos/v1/auth/permissions?role=xxx&resource=yyy&action=zzz
  • 從角色刪除權(quán)限:DELETE /nacos/v1/auth/permissions?role=xxx&resource=yyy&action=zzz
  • 獲取某個角色的權(quán)限:GET /nacos/v1/auth/permissions?role=xxx

Nacos權(quán)限控制實戰(zhàn)

安裝Nacos 1.2.0

  1. 部署包準(zhǔn)備禁炒。可以直接下載安裝包:https://github.com/alibaba/nacos/releases/tag/1.2.0霍比,也可以將Nacos master分支clone下來進行源碼編譯:
mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U
  1. 安裝包解壓幕袱,然后使用distribution/nacos-mysql.sql進行數(shù)據(jù)庫初始化,主要是新增了users, roles, permissions三張表悠瞬,standalone模式使用distribution/schema.sql進行初始化们豌。
  2. Server端打開權(quán)限控制開關(guān)涯捻。修改con/application.properties內(nèi)容:
nacos.core.auth.enabled=true

這個開關(guān)采用了熱加載模式,無需重啟Server即可生效望迎。因此當(dāng)權(quán)限控制功能使用有異常時障癌,可以直接回滾到不鑒權(quán)的模式。

注意: Nacos 1.2.0里登錄和鑒權(quán)是綁定關(guān)系辩尊,而由于這個開關(guān)的默認(rèn)值為false涛浙,因此默認(rèn)啟動時,是沒有登錄界面的摄欲,這點請讀者注意轿亮。

使用權(quán)限控制

  1. 使用管理員賬號登錄Nacos控制臺(如果頁面提示錯誤,可以清空瀏覽器緩存刷新頁面):
1580890674563-4d235fd9-983c-4b03-b45c-b1e164152ac7.png

可以看到胸墙,左側(cè)邊欄增加了一個父菜單和三個子菜單我注,分別用于權(quán)限控制里的用戶創(chuàng)建、角色創(chuàng)建以及權(quán)限管 理迟隅。這個菜單欄只會在管理員登錄的時候顯示但骨,也就意味著只有管理員才能進行權(quán)限的管理和分配。

  1. 管理用戶智袭。點擊“用戶列表”奔缠,進入用戶管理頁面,可以進行用戶的創(chuàng)建补履、修改和刪除:
1580890674569-a729854e-a72d-4b3b-bc4c-53f9df831f3e.png
  1. 管理角色添坊。因為Nacos的自帶的權(quán)限是基于角色來進行分配的,因此需要給創(chuàng)建好的用戶綁定一些角色:
1580890674603-f69520a1-f53e-4eb7-9186-f2963e7b3d65.png
  1. 管理權(quán)限箫锤。角色創(chuàng)建好以后贬蛙,就可以給這個角色賦予特定的權(quán)限了:
1580890674580-e22945e1-be3a-46bd-b8f3-11b38eee0786.png

在“添加資源”對話框里,可以選擇綁定的角色谚攒,命名空間資源以及對應(yīng)的動作類型阳准,例如在上圖中,我們給角色role1綁定命名空間test的讀寫權(quán)限馏臭。然后又因為剛剛我們是將user1綁定到了role1上野蝇,那么user1這個用戶就可以對test這個命名空間的資源進行讀寫操作了。

  1. 使用user1登錄控制臺括儒。點擊控制臺右上角绕沈,退出admin賬號,然后用剛才創(chuàng)建的user1進行登錄:
1580890674574-ca6eee1f-b749-4275-897d-ab9fba0ebf80.png

如上圖所示帮寻,首先是左側(cè)的權(quán)限管理菜單消失了乍狐,因為當(dāng)前用戶不是管理員。其次是會彈出一個鑒權(quán)失敗的提示框固逗。不用擔(dān)心浅蚪,這個提示框意思是user1沒有public命名空間的讀權(quán)限藕帜,所以會彈出,但是不影響我們將命名空間切換到test:

1580890674621-bc16b2ad-4a9e-4ebc-83e8-fa41f4a0cba4.png

如上圖所示惜傲,我們可以看到test命名空間的配置數(shù)據(jù)了洽故,下面我們再來介紹客戶端的使用。

  1. 首先依賴最新的nacos 1.2.0客戶端盗誊,然后在初始化時添加如下代碼:
Properties properties = new Properties();
properties.put(PropertyKeyConst.NAMESPACE, "99a791cf-41c4-4535-9e93-b0141652bad0");
properties.put(PropertyKeyConst.SERVER_ADDR, "127.0.0.1:8848");
// 配置用戶名:
properties.put(PropertyKeyConst.USERNAME, "user1");
// 配置密碼:
properties.put(PropertyKeyConst.PASSWORD, "pwd1");
ConfigService iconfig = NacosFactory.createConfigService(properties);
  1. 使用客戶端進行正常的讀寫配置操作时甚。

我們在招人

阿里巴巴云原生基礎(chǔ)技術(shù)中臺是隸屬于阿里云基礎(chǔ)產(chǎn)品事業(yè)部的核心研發(fā)團隊,致力于打造穩(wěn)定浊伙、標(biāo)準(zhǔn)撞秋、先進的云原生應(yīng)用基礎(chǔ)平臺,推動行業(yè)面向云原生技術(shù)升級與革命嚣鄙。在這里吻贿,你將與來自云計算、大數(shù)據(jù)領(lǐng)域的頂尖技術(shù)專家親密合作哑子,在全球獨一無二的場景和規(guī)模中從事Kubernetes舅列、Service Mesh、Serverless卧蜓、Open Application Model(OAM)、Cloud Native Microservices榨惠、OpenMessaging盛霎、Event Streaming等云原生生態(tài)核心基礎(chǔ)技術(shù)及Apache Dubbo赠橙、Apache RocketMQ愤炸、Nacos期揪、Arthas等頂級開源項目的研發(fā)和落地工作规个。在標(biāo)桿級的平臺上,既服務(wù)阿里巴巴全球經(jīng)濟體翼虫,更服務(wù)全世界的開發(fā)者用戶。目前在招聘技術(shù)專家崗位,詳情可參考:http://www.posterhr.com/html/CkgpBwD6f?from=timeline&isappinstalled=0(可以直接投遞规哪,也可以將簡歷直接發(fā)送到dungu.zpf#alibaba-inc.com。#替換為@)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末获诈,一起剝皮案震驚了整個濱河市戳表,隨后出現(xiàn)的幾起案子色瘩,更是在濱河造成了極大的恐慌簇宽,老刑警劉巖魏割,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡搓茬,警方通過查閱死者的電腦和手機犹赖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來卷仑,“玉大人峻村,你說我怎么就攤上這事∥” “怎么了粘昨?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我张肾,道長芭析,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任吞瞪,我火速辦了婚禮放刨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘尸饺。我一直安慰自己,他們只是感情好助币,可當(dāng)我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布浪听。 她就那樣靜靜地躺著,像睡著了一般眉菱。 火紅的嫁衣襯著肌膚如雪迹栓。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天俭缓,我揣著相機與錄音克伊,去河邊找鬼。 笑死华坦,一個胖子當(dāng)著我的面吹牛愿吹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播惜姐,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼犁跪,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了歹袁?” 一聲冷哼從身側(cè)響起坷衍,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎条舔,沒想到半個月后枫耳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡孟抗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年迁杨,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片夸浅。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡仑最,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出帆喇,到底是詐尸還是另有隱情警医,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站预皇,受9級特大地震影響侈玄,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜吟温,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一序仙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鲁豪,春花似錦潘悼、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至糙申,卻和暖如春宾添,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背柜裸。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工缕陕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人疙挺。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓扛邑,卻偏偏與公主長得像,于是被迫代替她去往敵國和親铐然。 傳聞我的和親對象是個殘疾皇子鹿榜,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內(nèi)容