1
hotcool100 2020-12-03 09:06:04 +08:00
你会把 mysql 端口映射到外网?同理,nosql 也一样。
|
2
fyooo OP @hotcool100 肯定不会映射到外网哈,我的意思是在怎么做内网层面的防御?比如有商业间谍入职,负责其他非核心微服务模块的开发,又或者万一某个对外服务被入侵导致作为内网跳板,怎么防御这块?
|
3
tabris17 2020-12-03 09:11:13 +08:00 via iPhone 1
内鬼也得是 dba 层级的,跟你说,这种完全挡不住,想想斯诺登
|
4
cheng6563 2020-12-03 09:11:37 +08:00 via Android
套个双向验证的 tls
|
5
tabris17 2020-12-03 09:13:00 +08:00 via iPhone
如果你们公司任一员工都能访问到生产环境数据,那说明你们公司管理非常混乱
|
6
whileFalse 2020-12-03 09:13:37 +08:00 2
@fyooo #2 很简单,你关系型数据库怎么防御?
还不是靠用户名密码防御。然后很多微服务的用户名密码要么是直接写在环境变量里面,要么是存储在配置中心里,然后配置中心的用户名密码地址写在环境变量里面。人家要是都进了你的微服务为所欲为了,关系型数据库的用户名密码能防得住? 所以 Redis 这种呢,你高兴就配个密码,然后它的安全性就和关系数据库一样了,是不是很令人安心? |
7
dayeye2006199 2020-12-03 09:15:55 +08:00
配置数据库允许的访问来源,禁掉非生产环境,非目标应用的访问。
|
8
labulaka521 2020-12-03 09:25:45 +08:00 via iPhone
监听本地 搭建 ssh 隧道
|
9
yzbythesea 2020-12-03 09:28:58 +08:00 2
envoy 是 reverse-proxy,不做授权。
一般首先生产数据的 redis 在自己的 VPC 网络;第二 redis 连接是 mutual TLS,你没有授权连不进去。 |
10
zy445566 2020-12-03 09:34:50 +08:00
你的微服务接口进行封装 redis,外部直接调用你微服务的接口不就好了,你想怎么鉴权就怎么鉴权
|
11
laminux29 2020-12-03 09:55:35 +08:00
用 docker 或虚机来跑 redis,每个容器跑一个库。
再用 docker 或虚机建立跳板机,redis 设置 ip 只允许跳板机与中间件或 web server 直连。 需要连接 redis 的员工,从跳板机给权限并做访问 log 。 |
12
gadsavesme 2020-12-03 10:09:04 +08:00
这种内网的东西防人就行了
|
13
way2explore2 2020-12-03 11:18:28 +08:00
我没觉着你说的有问题。
只是我觉着这个不叫 proxy 这个叫 gateway. |
14
onehao28 2020-12-03 11:25:44 +08:00
微服务之间调用一般有 APIGateWay, 如果是 nosql 之间的话 得看具体是哪个了。 当前中间件有很多鉴权方式,有普通的密码建群,TLS 、OAuth2 、kerberos 、JWT 还有 scram 认证
|
15
onehao28 2020-12-03 11:26:07 +08:00 1
微服务之间调用一般有 APIGateWay, 如果是 nosql 之间的话 得看具体是哪个了。 当前中间件有很多鉴权方式,有普通的密码建群,TLS 、OAuth2 、kerberos 、JWT 还有 scram 认证
@onehao28 打错了 密码鉴权 |
16
hantsy 2020-12-03 11:38:17 +08:00
@onehao28 这种都是应用层面的。
对于数据库,一般生产环境如果对安全要求很高,单纯的 user/password 不够,除了安全证书使用外,要用到一些专业的安全方案,比如 Vault 之类的。 https://www.vaultproject.io/ @whileFalse 密码写进环境变量也太夸张了。当然一般内网,没有外部访问,问题不大。 |
17
hantsy 2020-12-03 11:45:10 +08:00
从 Vault 网站页看,基本上所有最流行的 Cloud Infrastructure (包括 AliCloud )和数据库都支持了。Vault 应该是目前云环境中支持最广泛的方案之一。
|
18
whileFalse 2020-12-03 12:04:53 +08:00
@hantsy
密码进环境变量一点不夸张,微服务容器环境下多正常啊。 镜像都是一样的。在哪个环境运行就注入哪个环境的环境变量。如果有配置中心就写入配置中心,并在环境变量中写入配置中心的链接方式。没有配置中心全写入环境变量也能行,只是环境变量有最大容量限制。 不然微服务环境里,这些环境相关的信息放哪儿?打到 jar 包里吗?那不是最佳实践。打 jar 包里意味着构建系统需要为每个环境单独运行构建,意味着镜像不能共享,并且难以追踪镜像之间差异,维护起来也麻烦。 |
19
hantsy 2020-12-03 12:22:24 +08:00
这些开发人员都是清楚的,环境变量,ConfigMap,对于一般配置没问题。
对于生产环境中,充分考虑到安全因素,敏感信息自然要加一层套(就是 Vault 啦),在 service 调用的时侯这个密码是可以从 Vault 服务来,动态的。 |
20
nnnToTnnn 2020-12-03 12:41:09 +08:00
@fyooo 我都能渗透到服务器了,写个 dll 注入,或者写个 hook,或者修改调用 redis 的 connect 拿到 connect 直接一顿操作就可以了。
|
21
no1xsyzy 2020-12-03 13:40:12 +08:00
“A 用户不能访问 B 用户的数据之类”……
你这不是典型的业务逻辑控制么? 除非你上端对端加密,不然几乎都是你写的程序内进行跨用户访问控制的。 至于你写了个 proxy 还是写了个 SDK 就不重要了。 不过如果你做一个后端到数据库的七层代理也不是什么大问题,也确实这东西不叫 proxy (因为 proxy 不应当干预双方交互,不然就叫 mitmproxy 了)。 @whileFalse 除了环境变量还有动态挂载的文件,docker 有 /run/secrets 专门放这类东西。 |
22
whileFalse 2020-12-03 13:48:26 +08:00
@no1xsyzy #21 我可没说环境变量是怎么挂进去的……外面看可能是加密的,挂进去内部看全是明文
|