本文來自于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ù)框架來完成耿芹。
常見實現(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。
認(rèn)證算法
對于用戶來說软族,不管是在控制臺還是在客戶端刷喜,都是上傳用戶名和密碼來獲取一個token,然后后續(xù)的每一次到Nacos的請求都會帶上這個token來表明身份立砸。這個token會有一個失效時間掖疮,對于控制臺來說,只需要直接提示用戶重新登錄即可颗祝,對于客戶端則需要有一個定期到Nacos刷新token的邏輯浊闪。
鑒權(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)限則是由資源+動作來組成。
接口設(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
- 部署包準(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
- 安裝包解壓幕袱,然后使用distribution/nacos-mysql.sql進行數(shù)據(jù)庫初始化,主要是新增了users, roles, permissions三張表悠瞬,standalone模式使用distribution/schema.sql進行初始化们豌。
- 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)限控制
- 使用管理員賬號登錄Nacos控制臺(如果頁面提示錯誤,可以清空瀏覽器緩存刷新頁面):
可以看到胸墙,左側(cè)邊欄增加了一個父菜單和三個子菜單我注,分別用于權(quán)限控制里的用戶創(chuàng)建、角色創(chuàng)建以及權(quán)限管 理迟隅。這個菜單欄只會在管理員登錄的時候顯示但骨,也就意味著只有管理員才能進行權(quán)限的管理和分配。
- 管理用戶智袭。點擊“用戶列表”奔缠,進入用戶管理頁面,可以進行用戶的創(chuàng)建补履、修改和刪除:
- 管理角色添坊。因為Nacos的自帶的權(quán)限是基于角色來進行分配的,因此需要給創(chuàng)建好的用戶綁定一些角色:
- 管理權(quán)限箫锤。角色創(chuàng)建好以后贬蛙,就可以給這個角色賦予特定的權(quán)限了:
在“添加資源”對話框里,可以選擇綁定的角色谚攒,命名空間資源以及對應(yīng)的動作類型阳准,例如在上圖中,我們給角色role1綁定命名空間test的讀寫權(quán)限馏臭。然后又因為剛剛我們是將user1綁定到了role1上野蝇,那么user1這個用戶就可以對test這個命名空間的資源進行讀寫操作了。
- 使用user1登錄控制臺括儒。點擊控制臺右上角绕沈,退出admin賬號,然后用剛才創(chuàng)建的user1進行登錄:
如上圖所示帮寻,首先是左側(cè)的權(quán)限管理菜單消失了乍狐,因為當(dāng)前用戶不是管理員。其次是會彈出一個鑒權(quán)失敗的提示框固逗。不用擔(dān)心浅蚪,這個提示框意思是user1沒有public命名空間的讀權(quán)限藕帜,所以會彈出,但是不影響我們將命名空間切換到test:
如上圖所示惜傲,我們可以看到test命名空間的配置數(shù)據(jù)了洽故,下面我們再來介紹客戶端的使用。
- 首先依賴最新的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);
- 使用客戶端進行正常的讀寫配置操作时甚。
我們在招人
阿里巴巴云原生基礎(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。#替換為@)