跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 微服务中采用开源 NoSQL 的一般怎么监权?
未分類
4 12 月 2020

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

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

資深大佬 : fyooo 2

日常工作是做螺丝钉,没有接触过这块,好奇问问。

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

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

对后台不太熟悉,是否 envoy 就是做这样的事情的?

大佬有話說 (22)

  • 資深大佬 : hotcool100

    你会把 mysql 端口映射到外网?同理,nosql 也一样。

  • 主 資深大佬 : fyooo

    @hotcool100 肯定不会映射到外网哈,我的意思是在怎么做内网层面的防御?比如有商业间谍入职,负责其他非核心微服务模块的开发,又或者万一某个对外服务被入侵导致作为内网跳板,怎么防御这块?

  • 資深大佬 : tabris17

    内鬼也得是 dba 层级的,跟你说,这种完全挡不住,想想斯诺登

  • 資深大佬 : cheng6563

    套个双向验证的 tls

  • 資深大佬 : tabris17

    如果你们公司任一员工都能访问到生产环境数据,那说明你们公司管理非常混乱

  • 資深大佬 : whileFalse

    @fyooo #2 很简单,你关系型数据库怎么防御?
    还不是靠用户名密码防御。然后很多微服务的用户名密码要么是直接写在环境变量里面,要么是存储在配置中心里,然后配置中心的用户名密码地址写在环境变量里面。人家要是都进了你的微服务为所欲为了,关系型数据库的用户名密码能防得住?
    所以 Redis 这种呢,你高兴就配个密码,然后它的安全性就和关系数据库一样了,是不是很令人安心?

  • 資深大佬 : dayeye2006199

    配置数据库允许的访问来源,禁掉非生产环境,非目标应用的访问。

  • 資深大佬 : labulaka521

    监听本地 搭建 ssh 隧道

  • 資深大佬 : yzbythesea

    envoy 是 reverse-proxy,不做授权。

    一般首先生产数据的 redis 在自己的 VPC 网络;第二 redis 连接是 mutual TLS,你没有授权连不进去。

  • 資深大佬 : zy445566

    你的微服务接口进行封装 redis,外部直接调用你微服务的接口不就好了,你想怎么鉴权就怎么鉴权

  • 資深大佬 : laminux29

    用 docker 或虚机来跑 redis,每个容器跑一个库。

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

    需要连接 redis 的员工,从跳板机给权限并做访问 log 。

  • 資深大佬 : gadsavesme

    这种内网的东西防人就行了

  • 資深大佬 : way2explore2

    我没觉着你说的有问题。

    只是我觉着这个不叫 proxy 这个叫 gateway.

  • 資深大佬 : onehao28

    微服务之间调用一般有 APIGateWay, 如果是 nosql 之间的话 得看具体是哪个了。 当前中间件有很多鉴权方式,有普通的密码建群,TLS 、OAuth2 、kerberos 、JWT 还有 scram 认证

  • 資深大佬 : onehao28

    微服务之间调用一般有 APIGateWay, 如果是 nosql 之间的话 得看具体是哪个了。 当前中间件有很多鉴权方式,有普通的密码建群,TLS 、OAuth2 、kerberos 、JWT 还有 scram 认证
    @onehao28 打错了 密码鉴权

  • 資深大佬 : hantsy

    @onehao28 这种都是应用层面的。

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

    https://www.vaultproject.io/

    @whileFalse 密码写进环境变量也太夸张了。当然一般内网,没有外部访问,问题不大。

  • 資深大佬 : hantsy

    从 Vault 网站页看,基本上所有最流行的 Cloud Infrastructure (包括 AliCloud )和数据库都支持了。Vault 应该是目前云环境中支持最广泛的方案之一。

  • 資深大佬 : whileFalse

    @hantsy
    密码进环境变量一点不夸张,微服务容器环境下多正常啊。
    镜像都是一样的。在哪个环境运行就注入哪个环境的环境变量。如果有配置中心就写入配置中心,并在环境变量中写入配置中心的链接方式。没有配置中心全写入环境变量也能行,只是环境变量有最大容量限制。
    不然微服务环境里,这些环境相关的信息放哪儿?打到 jar 包里吗?那不是最佳实践。打 jar 包里意味着构建系统需要为每个环境单独运行构建,意味着镜像不能共享,并且难以追踪镜像之间差异,维护起来也麻烦。

  • 資深大佬 : hantsy

    这些开发人员都是清楚的,环境变量,ConfigMap,对于一般配置没问题。

    对于生产环境中,充分考虑到安全因素,敏感信息自然要加一层套(就是 Vault 啦),在 service 调用的时侯这个密码是可以从 Vault 服务来,动态的。

  • 資深大佬 : nnnToTnnn

    @fyooo 我都能渗透到服务器了,写个 dll 注入,或者写个 hook,或者修改调用 redis 的 connect 拿到 connect 直接一顿操作就可以了。

  • 資深大佬 : no1xsyzy

    “A 用户不能访问 B 用户的数据之类”……
    你这不是典型的业务逻辑控制么?
    除非你上端对端加密,不然几乎都是你写的程序内进行跨用户访问控制的。
    至于你写了个 proxy 还是写了个 SDK 就不重要了。
    不过如果你做一个后端到数据库的七层代理也不是什么大问题,也确实这东西不叫 proxy (因为 proxy 不应当干预双方交互,不然就叫 mitmproxy 了)。

    @whileFalse 除了环境变量还有动态挂载的文件,docker 有 /run/secrets 专门放这类东西。

  • 資深大佬 : whileFalse

    @no1xsyzy #21 我可没说环境变量是怎么挂进去的……外面看可能是加密的,挂进去内部看全是明文

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具