更新了下开源的 kms 实现代码 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
hxndg
V2EX    Go 编程语言

更新了下开源的 kms 实现代码

  •  
  •   hxndg 2022-05-03 13:28:25 +08:00 3266 次点击
    这是一个创建于 1262 天前的主题,其中的信息可能已经有所发展或是发生改变。

    kube kms

    魔方 kms ,使用 go 开源的 kms 系统,由于没有 HSM ,因此使用服务器上的证书私钥做密钥派生拿到数据库的 rootkey ,服务器的安全性依靠这张证书私钥来保证。 代码的 github 为 https://github.com/hxndg/qkms ,欢迎提出修改意见

    目前支持的功能

    • 用户管理:使用 grpc 的 tls 双向认证做权限控制,每张 CA 签发出来的证书对应一个用户,每个用户证书里面的 subject 需要有不同的 appkey 内容。初始化时如果没有创建 root 用户,会要求输入 root user 的 name ,然后生成 root user 的证书和私钥。后续对第三方用户签发证书私钥可以由 root user 进行管理。root user 拥有一切权限,root user 可以创建其他角色;查看 ak ;吊销用户证书等功能。
    • 角色管理:可以将 namespace 的 read/wirte 权限赋予给某个 role ,再将某个 role 赋予给相对应的用户(用户使用 appkey 区分),从而用户可以作为某个 namespace 下面的 mainter 。
    • 密钥管理:密钥三层拆封,rootkey ===> key encryption key ===> access key.用户需要先申请创建 key encryption key ,即创建 namespace 。之后即可在该 namespace 下创建对应的 accesskey 。对用户而言,kek 是透明的,
    • 密钥可见性:用户可见的为 Access key ,按照 namespace, name 索引。创建密钥后默认只有用户可读可写,如果用户授权给其他用户相应的读 /写权限,其他用户可以执行相应的操作。

    待完成功能

    • kek 轮转,定期更新所管理的 access key

    依赖

    • 使用 postgresql 做数据持久化
    • 使用 grpc 的双向 tls 做认证
    • 依赖 casbin 做 rbac 的管理
    ragnaroks
        1
    ragnaroks  
       2022-05-04 13:17:42 +08:00
    你这个 kms 是我理解的那个 kms ?还是 keymanagersystem ?
    hxndg
        2
    hxndg  
    OP
       2022-05-04 18:10:31 +08:00
    @ragnaroks
    密钥管理系统的 kms ,简单版本,毕竟个人买不起 hsm 。。。。
    sbilly
        3
    sbilly  
       2022-05-09 01:33:45 +08:00
    支持一下~
    这个领域比较少见开源
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1646 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 16:17 PVG 00:17 LAX 09:17 JFK 12:17
    Do have faith in what you're doing.
    script> (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); ga('create', 'UA-11940834-2', 'v2ex.com'); ga('send', 'pageview'); ga('send', 'event', 'Node', 'topic', 'go'); ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86