周志明的软件架构课
周志明
博士,远光软件研究院院长,《深入理解 Java 虚拟机》《凤凰架构》等书作者
51443 人已学习
免费领取
课程目录
已完结/共 74 讲
架构师的视角 (24讲)
周志明的软件架构课
15
15
1.0x
00:00/00:00
登录|注册

40 | 如何实现零信任网络下安全的服务访问?

你好,我是周志明。
在上节课“零信任网络安全”当中,我们探讨了与微服务运作特点相适应的零信任安全模型。今天这节课,我们会从实践和编码的角度出发,一起来了解在前微服务时代(以 Spring Cloud 为例)和云原生时代(以 Kubernetes with Istio 为例),零信任网络分别是如何实现安全传输、认证和授权的。
这里我要说明的是,由于这节课是面向实践的,必然会涉及到具体代码,为了便于讲解,在课程中我只贴出了少量的核心代码片段,所以我建议你在开始学习这节课之前,先去浏览一下这两个样例工程的代码,以便获得更好的学习效果。

建立信任

首先我们要知道,零信任网络里不存在默认的信任关系,一切服务调用、资源访问成功与否,都需要以调用者与提供者间已建立的信任关系为前提。
之前我们在第 23 讲也讨论过,真实世界里,能够达成信任的基本途径不外乎基于共同私密信息的信任和基于权威公证人的信任两种;而在网络世界里,因为客户端和服务端之间一般没有什么共同私密信息,所以真正能采用的就只能是基于权威公证人的信任,它有个标准的名字:公开密钥基础设施(Public Key Infrastructure,PKI)。
这里你可以先记住一个要点,PKI 是构建传输安全层(Transport Layer Security,TLS)的必要基础。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结
该试读文章来自《周志明的软件架构课》,如需阅读全部文章,
请先领取课程
免费领取
登录 后留言

全部留言(9)

  • 最新
  • 精选
  • 丁小明
    基于springcloud的认证授权,资源服务器是不是就必须要将每次请求携带的jwt信息,去类似auth的鉴权服务中进行鉴权,这样是不是就多了一次网络调用?

    作者回复: 使用HMAC的对称加密需要多一次交互,非对称加密不需要,直接使用公钥验证即可。

    1
  • 丁乐洪
    老师好,Spring Security 授权方法有两种 同时实现,是否可行?没有annotation就用集中配置的?

    作者回复: 可以同时使用的。

    1
  • Free
    ①学习Spring Cloud版本的Fenix's Bookstore时发现,请求认证过程中使用的是Get、用户名和密码在Get请求的url中(url:http://localhost:8080/oauth/token?username=icyfenix&password=MFfTW3uNI4eqhwDkG7HP9p2mzEUu%2Fr2&grant_type=password&client_id=bookstore_frontend&client_secret=bookstore_secret),不开启Https的情况下这是不安全的,而开启Https后由于Https也会加密Url中的参数,所以开启Https的情况是安全的。 可以参考这里:https://https.cio.gov/faq/ ②Spring Cloud版本的Fenix's Bookstore中,注册新用户会报「不允许访问」的错。原因是AccountResource的createUser方法被@PreAuthorize("#oauth2.hasAnyScope('BROWSER')")修饰,在注册场景中一般并不会登录,而对前端服务的认证授权是在用户登录过程中完成的,所以在未登录的情况下也不会有BROWSER Scope。对应的处理方式是删掉这个注解就可以,不知道理解的对不对?

    作者回复: 关于1:在27节“保密”中,我提到了自己的看法,如果要考虑MitM的话,上HTTPS几乎是唯一可行的手段。如果没有HTTPS,无论是GET还是POST,在安全性上其实并没有区别。 关于2:这就是个代码bug,没有注册的用户不会有Token,自然取不到scope,已经在代码库中删除掉了。

  • zhanyd
    用代码去保证服务之间的安全通讯问题现在还是主流,原因之一可能是因为灵活性比较高吧,每个系统的定位和需求不一样,自己用代码可以根据实际情况随时调整。 用基础设施的话,可能会造成额外的负担,增加了系统的复杂度,多了很多用不到的功能。
    8
  • neohope
    我认为边界安全模型和零信任模型会长期共存,边界安全模型毕竟更成熟,而且在资源隔离程度上,远高于零信任模型。istio们并没有提供边界模型的一些组件,比如杀毒,比如入侵检测,比如蜜罐,比如上帝视角的规则控制等。而且istio们本身也有被入侵的可能,所以不能只依赖这一个层面的安全管控,而是立体的安全管控。
    3
  • walkingonair
    又学到了,给老师点赞!实际使用中,我经历过的都是使用边界安全模型,最细粒度也是在区分内外网之后,对应用相互访问的网络安全控制精确到服务器+端口的程度,这些全部可以交给运维同学,开发同学可以只关注业务,以及业务层面的安全控制。
    1
  • 守望_Wilbur
    这个可能要取决于安全性相关的基础设施和服务应用层面关于增强安全性方面的工作是否会越来越完善。
    归属地:广东
  • Sruby
    在 Istio 版本的 Fenix's Bookstore 中,通过以下文稿这里给出的配置,就限制了来自 bookstore-servicemesh 名空间的内部流量,只允许访问 accounts、products、pay 和 settlements 四个端点的 GET、POST、PUT、PATCH 方法,而对于来自 istio-system 名空间(Istio Ingress Gateway 所在的名空间)的外部流量就不作限制,直接放行。 -------------- namespace维度对于endpoint的授权,service维度对于endpoint授权需要怎么做?
  • Sruby
    前面我提到,在零信任网络中面对可能的中间人攻击,TLS 是唯一可行的办法。其实我的言下之意是,即使应用层的认证能在一定程度上,保护服务不被身份不明的客户端越权调用,但是如果内容在传输途中被监听、篡改,或者被攻击者拿到了 JWT 令牌之后,冒认调用者的身份去调用其他服务,应用层的认证就无法防御了。 --------------- 如果某个容器内的服务被攻击成为了肉鸡,依然还是存在安全问题。
收起评论
显示
设置
留言
9
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部