IAM系統(tǒng)是什么
IAM(Identity and Access Management桌肴,身份識別與訪問管理)系統(tǒng)是用Go語言編寫的一個Web服務(wù),用于給第三方用戶提供訪問控制服務(wù)水醋。
IAM系統(tǒng)可以幫用戶解決的問題:在特定的條件下,誰能夠/不能夠?qū)δ切┵Y源做哪些操作蝇恶。即完成資源的授權(quán)功能撮弧。
IAM系統(tǒng)如何進(jìn)行資源授權(quán)呢耀盗?
- 用戶需要提供用戶名、密碼舌厨、郵箱等信息注冊登錄到 IAM 系統(tǒng)裙椭。以用戶名署浩、密碼作為唯一的身份標(biāo)識來訪問 IAM 系統(tǒng),并且完成認(rèn)證炊汤。
- 因?yàn)樵L問 IAM 的 資源授權(quán)接口 是通過密鑰(secretKey)的方式進(jìn)行認(rèn)證的弊攘,所以用戶需要在 IAM 中創(chuàng)建屬于自己的密鑰資源襟交。
- 因?yàn)?IAM 通過 授權(quán)策略 完成授權(quán)捣域,所以用戶需要在 IAM 中創(chuàng)建授權(quán)策略。
- 請求 IAM 提供的 授權(quán)接口 迹鹅,IAM 會根據(jù)用戶的 請求內(nèi)容 和 授權(quán)策略 來決定一個授權(quán)請求是否被允許丘侠。
功能示意圖
IAM系統(tǒng)架構(gòu)
IAM架構(gòu)中包括9大組件和3大數(shù)據(jù)庫:
- 3大數(shù)據(jù)庫
Mariadb蜗字、Redis、MongoDB - 5個核心組件
iamctl粗梭、marmotedu-sdk-go、iam-apiserver断医、iam-authz-server滞乙、iam-pump - 4個旁路組件
app、iam-webconsole鉴嗤、iam-operating-system斩启、Loadbalance
IAM系統(tǒng)使用到的3中系統(tǒng)資源
- 用戶(User)
- 密鑰(Secret)
- 策略(Policy)
整個架構(gòu)可以拆分為三部分:
-
控制流 - 用戶、密鑰醉锅、授權(quán)策略的管理
涉及組件及數(shù)據(jù)庫為:
iamctl兔簇、iam-webconsole、iam-apiserver硬耍、marmotedu-sdk-go垄琐、Mariadb- iam-webconsole
IAM系統(tǒng)的前端经柴,通過 RESTful API 調(diào)用 iam-apiserver 實(shí)現(xiàn)用戶狸窘、密鑰、策略的CURD - iamctl
IAM系統(tǒng)的客戶端坯认,通過 marmotedu-sdk-go 訪問 iam-apiserver翻擒。iam-ctl 封裝了 iam-apiserver 的所有 RESTful API,還封裝了其它功能牛哺【麓纾可以通過命令行的方式訪問 iam-apiserver。 - marmotedu-sdk-go
IAM系統(tǒng)的 golang sdk荆隘,封裝了 iam-apiserver 和 iam-authz-server 的所有 RESTful API。 - iam-apiserver
核心組件赴背,通過 RESTful API 完成用戶椰拒、密鑰、授權(quán)策略的CURD -
Mariadb
持久性存儲用戶凰荚、密鑰燃观、授權(quán)策略
控制流
- iam-webconsole
-
數(shù)據(jù)流
APP
第三方應(yīng)用,IAM系統(tǒng)的使用方便瑟。通過 RESTful API 或者 marmotedu-sdk-go 調(diào)用 iam-authz-server 提供的 /v1/authz 接口缆毁,完成資源的授權(quán)。-
iam-authz-server
授權(quán)服務(wù)
為了提高 /v1/authz 接口的性能到涂, iam-authz-server 通過調(diào)用 iam-apiserver 提供的 gRPC接口脊框,將 密鑰和授權(quán)策略 信息緩存在 Redis 中颁督,以便實(shí)現(xiàn)快速查詢。同時浇雹,為了使 Redis 中的緩存信息和 iam-apiserver 中的信息 保持一致 沉御,當(dāng) iam-apiserver 中有密鑰或策略被更新時, iam-apiserver 會往特定的 Redis Channel 中發(fā)送 PolicyChanged 和 SecretChanged 消息昭灵。當(dāng) iam-authz-server 監(jiān)聽到有新消息時就會獲取并解析消息吠裆,根據(jù)消息內(nèi)容判斷是否需要重新調(diào)用 gRPC 接口來獲取密鑰和授權(quán)策略信息。
iam-authz-server 會將授權(quán)日志上報到 Redis中
Redis
用來緩存密鑰烂完、授權(quán)策略试疙,降低訪問延時;
用來緩存授權(quán)日志抠蚣,作為運(yùn)營系統(tǒng)的數(shù)據(jù)來源祝旷。
-
運(yùn)營平臺
iam-pump
從 Redis 中拉取緩存的授權(quán)日志,分析后存入 Mongo 數(shù)據(jù)庫中柱徙。iam-operating-system
IAM營運(yùn)系統(tǒng)缓屠,可以用來展示運(yùn)營數(shù)據(jù),或者對IAM系統(tǒng)進(jìn)行運(yùn)營類管理护侮。-
MongoDB
存儲授權(quán)日志敌完,供后期運(yùn)營系統(tǒng)展示和分析
運(yùn)營平臺
-
架構(gòu)全貌
IAM