访问权限冲突定义_一文读懂F5 REST API的细粒度角色访问控制
閱讀提示|本文大概4718字? ?閱讀需要12分鐘
寫在前面:
前兩天一個(gè)保險(xiǎn)的客戶聯(lián)系我說有個(gè)需求,問通過調(diào)用F5 REST API可否實(shí)現(xiàn)?:
需要把F5負(fù)載均衡上面的配置相關(guān)的信息,包含每個(gè)VirtualServer(業(yè)務(wù))相關(guān)聯(lián)的Pool、會(huì)話保持、iRules、SSL Profile中的SSL證書過期時(shí)間等配置信息輸出給CMDB部門做統(tǒng)一的配置維護(hù)、SSL證書過期時(shí)間管理
F5只給CMDB服務(wù)端調(diào)用F5 REST API查看指定資源對(duì)象的配置的權(quán)限,不允許創(chuàng)建、修改、刪除資源對(duì)象等高風(fēng)險(xiǎn)操作
在聊F5? RESTful? API的細(xì)粒度角色訪問控制之前,先搬運(yùn)一下簡書上AWeiLoveAndroid寫的一篇關(guān)于RESTful API的介紹,內(nèi)容好,簡單羅列下關(guān)鍵的幾個(gè)資源對(duì)象的介紹?
什么是REST API:
要理解RESTful架構(gòu),最好的方法就是去理解Representational State Transfer這個(gè)詞組到底是什么意思,它的每一個(gè)詞代表了什么涵義。如果你把這個(gè)名稱搞懂了,也就不難體會(huì)REST是一種什么樣的設(shè)計(jì)。
資源(Resources)ier,統(tǒng)一資源標(biāo)識(shí)符所謂"資源",就是網(wǎng)絡(luò)上的一個(gè)實(shí)體,或者說是網(wǎng)絡(luò)上的一個(gè)具體信息。它可以是一段文本、一張圖片、一首歌曲、一種服務(wù),總之就是一個(gè)具體的實(shí)在。你可以用一個(gè)URI(統(tǒng)一資源標(biāo)識(shí)符)指向它,每種資源對(duì)應(yīng)一個(gè)特定的URI。要獲取這個(gè)資源,訪問它的URI就可以,因此URI就成了每一個(gè)資源的地址或獨(dú)一無二的識(shí)別符。
URI:Uniform Resource Identifier,統(tǒng)一資源標(biāo)識(shí)符
URL:Uniform Resource Location統(tǒng)一資源定位符
表現(xiàn)層(Representation)
"資源"是一種信息實(shí)體,它可以有多種外在表現(xiàn)形式。我們把"資源"具體呈現(xiàn)出來的形式,叫做它的"表現(xiàn)層"(Representation)。比如,文本可以用txt格式表現(xiàn),也可以用HTML格式、XML格式、JSON格式表現(xiàn),甚至可以采用二進(jìn)制格式;圖片可以用JPG格式表現(xiàn),也可以用PNG格式表現(xiàn)。
URI只代表資源的實(shí)體,不代表它的形式。嚴(yán)格地說,有些網(wǎng)址最后的".html"后綴名是不必要的,因?yàn)檫@個(gè)后綴名表示格式,屬于"表現(xiàn)層"范疇,而URI應(yīng)該只代表"資源"的位置。它的具體表現(xiàn)形式,應(yīng)該在HTTP請(qǐng)求的頭信息中用Accept和Content-Type字段指定,這兩個(gè)字段才是對(duì)"表現(xiàn)層"的描述。
狀態(tài)轉(zhuǎn)化(State Transfer):
訪問一個(gè)網(wǎng)站,就代表了客戶端和服務(wù)器的一個(gè)互動(dòng)過程。在這個(gè)過程中,勢(shì)必涉及到數(shù)據(jù)和狀態(tài)的變化。互聯(lián)網(wǎng)通信協(xié)議HTTP協(xié)議,是一個(gè)無狀態(tài)協(xié)議。這意味著,所有的狀態(tài)都保存在服務(wù)器端。因此,如果客戶端想要操作服務(wù)器,必須通過某種手段,讓服務(wù)器端發(fā)生"狀態(tài)轉(zhuǎn)化"(State Transfer)。而這種轉(zhuǎn)化是建立在表現(xiàn)層之上的,所以就是"表現(xiàn)層狀態(tài)轉(zhuǎn)化"。
客戶端用到的手段,只能是HTTP協(xié)議。具體來說,就是HTTP協(xié)議里面,四個(gè)表示操作方式的動(dòng)詞:GET、POST、PUT、DELETE。它們分別對(duì)應(yīng)四種基本操作:GET用來獲取資源,POST用來新建資源(也可以用于更新資源),PUT用來更新資源,DELETE用來刪除資源。
綜合上面的解釋,我們總結(jié)一下什么是RESTful架構(gòu):
(1)每一個(gè)URI代表一種資源;
(2)客戶端和服務(wù)器之間,傳遞這種資源的某種表現(xiàn)層;
(3)客戶端通過四個(gè)HTTP動(dòng)詞,對(duì)服務(wù)器端資源進(jìn)行操作,實(shí)現(xiàn)"表現(xiàn)層狀態(tài)轉(zhuǎn)化"。
由于篇幅有限,本篇文章將著重介紹通過F5 RESTful API訪問資源對(duì)象的資源劃分和的用戶訪問權(quán)限控制部分。為了更直觀的演示,通過使用瀏覽器訪問F5 RESTful API 接口獲取VirtualServer相關(guān)的配置信息及SSL證書信息。生產(chǎn)上建議使用F5 SDK的方式。
需求一:
通過F5 RESTful API去查詢每個(gè)VirtualServer(業(yè)務(wù))相關(guān)聯(lián)的Pool、會(huì)話保持、iRules、SSL Profile中的SSL證書過期時(shí)間等配置信息
上下滑動(dòng)查看F5 RESTful API?獲取信息,如圖所示,串聯(lián)起了一個(gè)VirtualServer相關(guān)的配置信息:對(duì)外發(fā)布的業(yè)務(wù)IP地址、關(guān)聯(lián)的各種profile信息及SSL證書信息(Common Name、ExpirationDate)。? ??
上下滾動(dòng)查看更多
需求二:
CMDB服務(wù)端調(diào)用F5 REST API查看指定資源對(duì)象的配置的權(quán)限,不允許創(chuàng)建、修改、刪除資源對(duì)象等高風(fēng)險(xiǎn)操作
F5的基于角色的訪問控制(RBAC)機(jī)制允許 BIG-IP 管理員為用戶分配適當(dāng)?shù)脑L問權(quán)限。例如,對(duì)于operator角色,只允許用戶啟用或禁用node和池Pool member,對(duì)于guest角色,只允許用戶查看配置信息,不允許客戶增刪查改設(shè)備配置信息。
為了滿足用戶需求這里我們新建一個(gè)foo用戶,用戶角色為testRole,訪問方式和資源在testResourceGroup中定義,然后從testRole中引用,不允許執(zhí)行其他操作,如PATCH、DELETE等操作,只允許“GET”,并且只給foo用戶訪問/mgmt/tm/ltm/virtual/和/mgmt/tm/sys/的權(quán)限
使用curl命令創(chuàng)建用戶foo,密碼是Foo,描述是Foo Bar?角色是所有分區(qū)的guest
PS*需要注意的是當(dāng)角色與細(xì)粒度 RBAC 之間存在訪問權(quán)限沖突時(shí),選擇更嚴(yán)格的授權(quán)
curl -sku admin: https:///mgmt/tm/auth/user -X POST -H "Content-Type: application/json" \-d '{"name":"foo", "password":"foo", "description":"Foo Bar", "partitionAccess":[ { "name":"all-partitions", "role":"guest"} ] }'
在 v13.1.0中,一個(gè)新創(chuàng)建的本地用戶被自動(dòng)添加到 iControl _ REST _ api _ user 中,它不需要任何設(shè)置就可以訪問 iControl REST。為了避免分配多個(gè)權(quán)限,需要從/mgmt/shared/authz/roles/iControl_REST _ api_user中刪除用戶引用。
從/mgmt/shared/authz/roles/iControl_REST_api_user 獲取數(shù)據(jù)并將其重定向到一個(gè)文件
curl -sku admin: https:///mgmt/shared/authz/roles/iControl_REST_API_User \ | python -m json.tool > file編輯該文件。該文件包含一行用戶“ foo” ,如下所示,刪除包括開頭和結(jié)尾大括號(hào)加逗號(hào)的行,保存文件
"name": "iControl_REST_API_User", "userReferences": [ { "link": "https://localhost/mgmt/shared/authz/users/foo" }, ....通過將文件放置到端點(diǎn)來覆蓋當(dāng)前數(shù)據(jù)
curl -sku admin: https:///mgmt/shared/authz/roles/iControl_REST_API_User -X PUT -d@file創(chuàng)建一個(gè)自定義資源組
資源組由一組資源和方法組成。在本例中,資源組名為“ testResourceGroup” ,它允許角色對(duì)資源/mgmt/tm/ltm/?和/mgmt/tm/sys/執(zhí)行 GET 請(qǐng)求。“ testResourceGroup”稍后將在定制角色中使用。
curl -sku admin: https:///mgmt/shared/authz/resource-groups -X POST -H "Content-Type: application/json" \ -d '{"name":"testResourceGroup", "resources":[ {"restMethod":"GET", "resourceMask":"/mgmt/tm/ltm/**" }, {"restMethod":"GET", "resourceMask":"esourceMask":"/mgmt/tm/sys/**" } ]}'返回的JSON對(duì)象如下所示:
{ "id": "fe7a1ebc-3e61-30aa-8a5d-c7721f7c6ce2", "name": "testResourceGroup", "resources": [ { "resourceMask": "/mgmt/tm/ltm/**", "restMethod": "GET"??},??{???"resourceMask":?"/mgmt/tm/sys/**", "restMethod": "GET"? } ], "generation": 1, "lastUpdateMicros": 1521682571723849, "kind": "shared:authz:resource-groups:roleresourcegroupstate", "selfLink": "https://localhost/mgmt/shared/authz/resource-groups/fe7a1ebc-3e61-30aa-8a5d-c7721f7c6ce2"}請(qǐng)注意,資源組條目是由“ id”而不是“ name”鍵控的。
用用戶“ foo”和資源組“ testResourceGroup”創(chuàng)建角色“ testRole”。這使用戶成為角色“ testRole”的成員
curl -sku admin:https:///mgmt/shared/authz/roles -X POST -H "Content-Type: application/json" \ -d '{"name":"testRole", "userReferences":[ {"link":"https://localhost/mgmt/shared/authz/users/foo"} ], "resourceGroupReferences":[{"link":"https://localhost/mgmt/shared/authz/resource-groups/fe7a1ebc-3e61-30aa-8a5d-c7721f7c6ce2"}]}'下面的 F5 RESTful 調(diào)用演示了結(jié)果
curl?-D?-sku?foo:Foo?https:///mgmt/tm/ltm/virtual/virtual?|?grep?HTTPHTTP/1.1 200 OKcurl?-D?-sku?foo:Foo?https:///mgmt/tm/sys?|?grep?HTTPHTTP/1.1 200 OKcurl?-D?-sku?foo:Foo?https:///mgmt/tm/ltm/virtual?-X?PATCH?-d?'{"test":"test"}'?|?grep?HTTPHTTP/1.1?401?F5?Authorization?Required原文連接
https://devcentral.f5.com/s/articles/icontrol-rest-fine-grained-role-based-access-control-30773
- EOF -
推薦閱讀??點(diǎn)擊標(biāo)題可跳轉(zhuǎn)1、【更新】F5 接入安全策略限制
2、【玩轉(zhuǎn)k8s系列之入門篇】搭建k8s基礎(chǔ)環(huán)境
3、淺談AppleCare+ 延保政策發(fā)布!裸奔黨的福音
覺得本文對(duì)你有幫助,請(qǐng)分享給更多人
掃碼關(guān)注「小咩社長」
總結(jié)
以上是生活随笔為你收集整理的访问权限冲突定义_一文读懂F5 REST API的细粒度角色访问控制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《赠故人马子乔诗》第七句是什么
- 下一篇: 《白鹿原》剧中音乐原声歌曲有哪些