微服务中采用开源 NoSQL 的一般怎么监权? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
请不要在回答技术问题时复制粘贴 AI 生成的内容
fyooo

微服务中采用开源 NoSQL 的一般怎么监权?

  •  
  •   fyooo Dec 3, 2020 3396 views
    This topic created in 1974 days ago, the information mentioned may be changed or developed.
    日常工作是做螺丝钉,没有接触过这块,好奇问问。

    比如我要用 redis 之类的 NoSQL 存放数据,怎么防止非授权的访问?

    我的一个想法是做一个 proxy,即部署了 Redis 的服务器,通过 iptables 之类的技术限制只有 proxy 可以访问其 IP 。把监权的逻辑放到 proxy 中,比如某数据的 Redis 只允许部分白名单的微服务访问之类,又或者校验来源微服务的票据,检查票据对应的 Reids 中的数据是否对应(比如 A 用户不能访问 B 用户的数据之类)

    对后台不太熟悉,是否 envoy 就是做这样的事情的?
    22 replies    2020-12-03 13:48:26 +08:00
    hotcool100
        1
    hotcool100  
       Dec 3, 2020
    你会把 mysql 端口映射到外网?同理,nosql 也一样。
    fyooo
        2
    fyooo  
    OP
       Dec 3, 2020
    @hotcool100 肯定不会映射到外网哈,我的意思是在怎么做内网层面的防御?比如有商业间谍入职,负责其他非核心微服务模块的开发,又或者万一某个对外服务被入侵导致作为内网跳板,怎么防御这块?
    tabris17
        3
    tabris17  
       Dec 3, 2020 via iPhone   1
    内鬼也得是 dba 层级的,跟你说,这种完全挡不住,想想斯诺登
    cheng6563
        4
    cheng6563  
       Dec 3, 2020 via Android
    套个双向验证的 tls
    tabris17
        5
    tabris17  
       Dec 3, 2020 via iPhone
    如果你们公司任一员工都能访问到生产环境数据,那说明你们公司管理非常混乱
    whileFalse
        6
    whileFalse  
       Dec 3, 2020   2
    @fyooo #2 很简单,你关系型数据库怎么防御?
    还不是靠用户名密码防御。然后很多微服务的用户名密码要么是直接写在环境变量里面,要么是存储在配置中心里,然后配置中心的用户名密码地址写在环境变量里面。人家要是都进了你的微服务为所欲为了,关系型数据库的用户名密码能防得住?
    所以 Redis 这种呢,你高兴就配个密码,然后它的安全性就和关系数据库一样了,是不是很令人安心?
    dayeye2006199
        7
    dayeye2006199  
       Dec 3, 2020
    配置数据库允许的访问来源,禁掉非生产环境,非目标应用的访问。
    labulaka521
        8
    labulaka521  
       Dec 3, 2020 via iPhone
    监听本地 搭建 ssh 隧道
    yzbythesea
        9
    yzbythesea  
       Dec 3, 2020   2
    envoy 是 reverse-proxy,不做授权。

    一般首先生产数据的 redis 在自己的 VPC 网络;第二 redis 连接是 mutual TLS,你没有授权连不进去。
    zy445566
        10
    zy445566  
       Dec 3, 2020
    你的微服务接口进行封装 redis,外部直接调用你微服务的接口不就好了,你想怎么鉴权就怎么鉴权
    laminux29
        11
    laminux29  
       Dec 3, 2020
    用 docker 或虚机来跑 redis,每个容器跑一个库。

    再用 docker 或虚机建立跳板机,redis 设置 ip 只允许跳板机与中间件或 web server 直连。

    需要连接 redis 的员工,从跳板机给权限并做访问 log 。
    gadsavesme
        12
    gadsavesme  
       Dec 3, 2020
    这种内网的东西防人就行了
    way2explore2
        13
    way2explore2  
       Dec 3, 2020
    我没觉着你说的有问题。

    只是我觉着这个不叫 proxy 这个叫 gateway.
    onehao28
        14
    onehao28  
       
    微服务之间调用一般有 APIGateWay, 如果是 nosql 之间的话 得看具体是哪个了。 当前中间件有很多鉴权方式,有普通的密码建群,TLS 、OAuth2 、kerberos 、JWT 还有 scram 认证
    onehao28
        15
    onehao28  
       Dec 3, 2020   1
    微服务之间调用一般有 APIGateWay, 如果是 nosql 之间的话 得看具体是哪个了。 当前中间件有很多鉴权方式,有普通的密码建群,TLS 、OAuth2 、kerberos 、JWT 还有 scram 认证
    @onehao28 打错了 密码鉴权
    hantsy
        16
    hantsy  
       Dec 3, 2020
    @onehao28 这种都是应用层面的。

    对于数据库,一般生产环境如果对安全要求很高,单纯的 user/password 不够,除了安全证书使用外,要用到一些专业的安全方案,比如 Vault 之类的。

    https://www.vaultproject.io/

    @whileFalse 密码写进环境变量也太夸张了。当然一般内网,没有外部访问,问题不大。
    hantsy
        17
    hantsy  
       Dec 3, 2020
    从 Vault 网站页看,基本上所有最流行的 Cloud Infrastructure (包括 AliCloud )和数据库都支持了。Vault 应该是目前云环境中支持最广泛的方案之一。
    whileFalse
        18
    whileFalse  
       Dec 3, 2020
    @hantsy
    密码进环境变量一点不夸张,微服务容器环境下多正常啊。
    镜像都是一样的。在哪个环境运行就注入哪个环境的环境变量。如果有配置中心就写入配置中心,并在环境变量中写入配置中心的链接方式。没有配置中心全写入环境变量也能行,只是环境变量有最大容量限制。
    不然微服务环境里,这些环境相关的信息放哪儿?打到 jar 包里吗?那不是最佳实践。打 jar 包里意味着构建系统需要为每个环境单独运行构建,意味着镜像不能共享,并且难以追踪镜像之间差异,维护起来也麻烦。
    hantsy
        19
    hantsy  
       Dec 3, 2020
    这些开发人员都是清楚的,环境变量,ConfigMap,对于一般配置没问题。

    对于生产环境中,充分考虑到安全因素,敏感信息自然要加一层套(就是 Vault 啦),在 service 调用的时侯这个密码是可以从 Vault 服务来,动态的。
    nnnToTnnn
        20
    nnnToTnnn  
       Dec 3, 2020
    @fyooo 我都能渗透到服务器了,写个 dll 注入,或者写个 hook,或者修改调用 redis 的 connect 拿到 connect 直接一顿操作就可以了。
    no1xsyzy
        21
    no1xsyzy  
       Dec 3, 2020
    “A 用户不能访问 B 用户的数据之类”……
    你这不是典型的业务逻辑控制么?
    除非你上端对端加密,不然几乎都是你写的程序内进行跨用户访问控制的。
    至于你写了个 proxy 还是写了个 SDK 就不重要了。
    不过如果你做一个后端到数据库的七层代理也不是什么大问题,也确实这东西不叫 proxy (因为 proxy 不应当干预双方交互,不然就叫 mitmproxy 了)。

    @whileFalse 除了环境变量还有动态挂载的文件,docker 有 /run/secrets 专门放这类东西。
    whileFalse
        22
    whileFalse  
       Dec 3, 2020
    @no1xsyzy #21 我可没说环境变量是怎么挂进去的……外面看可能是加密的,挂进去内部看全是明文
    About     Help     Advertise     Blog     API     FAQ     Solana     2236 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 64ms UTC 00:51 PVG 08:51 LAX 17:51 JFK 20:51
    Do have faith in what you're doing.
    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