15、架构-可靠通讯之服务安全
概述
我们已经了解了与具体架构形式无关的业界主流安全概念和技术标准(如TLS、JWT、OAuth 2等概念),在上一章节探讨了与微服务运作特点相适应的零信任安全模型。在本节中,我们将从实践和编码的角度出发,介绍在微服务时代(以Spring Cloud为例)和云原生时代(以Istio over Kubernetes为例)分别如何实现安全传输、认证和授权。通过这两者的对比,我们将探讨在微服务架构下如何将业界的安全技术标准引入并实际落地,实现零信任网络下安全的服务访问。
建立信任
零信任网络里不存在默认的信任关系。一切服务调用、资源访问成功与否,均需以调用者与提供者间已建立的信任关系为前提。此前我们曾讨论过,真实世界里能够达成信任的基本途径不外乎基于共同私密信息的信任和基于权威公证人的信任两种。在网络世界里,因为客户端和服务端之间一般没有什么共同私密信息,所以真正能采用的就只能是基于权威公证人的信任,这种信任有一个标准的名字:公开密钥基础设施(Public Key Infrastructure, PKI)。
PKI 和 TLS
PKI是构建传输安全层(Transport Layer Security, TLS)的必要基础。在任何网络设施都不可信任的假设前提下,无论是DNS服务器、代理服务器、负载均衡器还是路由器,传输路径上的每一个节点都有可能监听或者篡改通信双方传输的信息。要保证通信过程不受到中间人攻击的威胁,启用TLS对传输通道本身进行加密,让发送者发出的内容只有接受者可以解密是唯一具备可行性的方案。
TLS的实现
建立TLS传输,看似不复杂,只要在部署服务器时预置好CA根证书,以后用该CA为部署的服务签发TLS证书便可。然而,落到实际操作上,这事情就属于典型的“必须集中在基础设施中自动进行的安全策略实施点”。面对数量庞大且能够自动扩缩的服务节点,依赖运维人员手工去部署和轮换根证书必定是难以为继的。除了随服务节点动态扩缩而来的运维压力外,微服务中TLS认证的频次也显著高于传统应用。比起公众互联网中主流的单向TLS认证,在零信任网络中,往往要启用双向TLS认证,即不仅要确认服务端的身份,还要确认调用者的身份。
单向TLS认证与双向TLS认证
-
单向TLS认证:只需要服务端提供证书,客户端通过服务端证书验证服务器的身份,但服务器并不验证客户端的身份。单向TLS用于公开服务,即任何客户端都被允许连接到服务进行访问,它保护的重点是客户端免遭冒牌服务器的欺骗。
-
双向TLS认证:客户端和服务端双方都要提供证书,双方各自通过对方提供的证书来验证对方的身份。双向TLS用于私密服务,即服务只允许特定身份的客户端访问,除了可以保护客户端不连接到冒牌服务器外,也可以保护服务端不遭到非法用户的越权访问。
认证
根据认证的目标对象,认证可以分为两种类型:一种是以机器作为认证对象,即访问服务的流量来源是另外一个服务,称为服务认证(Peer Authentication,直译为“节点认证”);另一种是以人为认证对象,即访问服务的流量来自于最终用户,称为请求认证(Request Authentication)。无论哪一种认证,无论是否有基础设施的支持,均需有可行的方案来确定服务调用者的身份,建立信任关系才能调用服务。
服务认证
Istio版本的Fenix’s Bookstore采用了双向TLS认证作为服务调用双方的身份认证手段。得益于Istio提供的基础设施的支持,我们不需要Google Front End、Application Layer Transport Security这些安全组件,也不需要部署PKI和CA,甚至无须改动任何代码就可以启用mTLS认证。
mTLS的配置
如果你的分布式系统还没有达到完全云原生的程度,其中仍存在部分不受Istio管理(即未注入边车)的服务端或者客户端,你也可以将mTLS传输声明为“宽容模式”(Permissive Mode)。宽容模式的含义是受Istio管理的服务会允许同时接收纯文本和mTLS两种流量,纯文本流量仅用于与那些不受Istio管理的节点进行交互,你需要自行解决纯文本流量的认证问题;而对于服务网格内部的流量,则强制要求使用mTLS加密。
例子配置
以下是一个示例配置:
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:name: defaultnamespace: istio-system
spec:mtls:mode: PERMISSIVE
用户认证
对于来自最终用户的请求认证,Istio版本的Fenix’s Bookstore仍然能做到单纯依靠基础设施解决问题,整个认证过程无须应用程序参与。例如,通过配置Istio的RequestAuthentication CRD,可以对外部用户的请求进行JWT验证,从而实现用户认证的自动化和透明化。
RequestAuthentication配置示例
apiVersion: security.istio.io/v1beta1
kind: RequestAuthentication
metadata:name: request-jwtnamespace: bookstore-servicemesh
spec:jwtRules:- issuer: "https://example.com"jwksUri: "https://example.com/.well-known/jwks.json"
授权
在零信任网络中,服务之间没有固有的信任关系。只有已知的、明确授权的调用者才能访问服务,阻止攻击者通过某个服务节点中的代码漏洞来越权调用其他服务。这一原则可阻止攻击者扩大其入侵范围,与微服务设计模式中使用断路器、舱壁隔离实现容错来避免雪崩效应类似,在安全方面也应当采用这种“互不信任”的模式来减小入侵危害的影响范围。
基于角色的访问控制(RBAC)
RBAC是一种常见的授权机制,通过预定义角色和角色与权限的对应关系来控制用户或服务的访问权限。在Istio中,通过配置AuthorizationPolicy CRD,可以实现基于角色的访问控制。
AuthorizationPolicy配置示例
以下配置声明了一个授权策略,允许具有“admin”角色的用户访问“bookstore-servicemesh”命名空间中的所有服务:
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:name: allow-adminnamespace: bookstore-servicemesh
spec:rules:- from:- source:principals: ["cluster.local/ns/bookstore-servicemesh/sa/admin"]
通过上述配置,我们可以确保只有具有“admin”角色的用户才能访问指定的服务,从而实现细粒度的访问控制,提升系统的安全性。
总结
服务安全是零信任网络的重要组成部分,通过建立信任、认证和授权等机制,可以有效保护微服务系统的安全性。在微服务和云原生环境下,通过使用诸如Istio等服务网格技术,可以简化安全机制的实现,确保系统在任何情况下都能安全运行。尽管实现零信任安全模型需要克服诸多技术和运维挑战,但其在提升系统安全性方面的优势无疑是显著的。
相关文章:
15、架构-可靠通讯之服务安全
概述 我们已经了解了与具体架构形式无关的业界主流安全概念和技术标准(如TLS、JWT、OAuth 2等概念),在上一章节探讨了与微服务运作特点相适应的零信任安全模型。在本节中,我们将从实践和编码的角度出发,介绍在微服务时…...
web刷题记录(5)
[羊城杯 2020]easycon 进来以后就是一个默认测试页面, 在这种默认界面里,我觉得一般不会有什么注入点之类的,所以这里先选择用御剑扫扫目录看看有没有什么存在关键信息的页面 扫了一半发现,很多都是和index.php文件有关࿰…...
Redis高并发高可用
1. 复制机制 在分布式系统中,为了解决单点问题,通常会将数据复制多个副本部署到其他机器,以满足故障恢复和负载均衡等需求。Redis提供了复制功能,实现了相同数据的多个Redis副本。复制功能是高可用Redis的基础,后面的…...
【前端取不到cookie的的原因】http-only
某条cookie有http-only属性时,下面两种方法都取不到,还是改需求吧,别取了 1、 npm install js-cookie --save import Cookies from js-cookie let cookieValue Cookies.get(name)2、document.cookie...
推荐 2 个 火火火火 的开源项目
推荐两个开源项目,一个能让你的小爱音响更聪明。另外一个可以让你简单的下载互联网网站上的视频、文件、富文本内容。 01 MiGPT: 让你的小爱音响更聪明 让你的小爱音箱更聪明,提高智能家居的互动性和个性化体验的开源利器! MiGPT 将 ChatGPT …...
从0到100:找搭子小程序开发笔记(一)
背景调查 “找搭子”小程序:能够解决人们在社交、休闲和约会方面的需求,提供方便快捷的方式来找到合适的伴侣或活动伙伴。许多人在社交场合中感到焦虑或不安,因此他们更倾向于使用在线平台来认识新的朋友或搭子。有些人可能生活在一个较小或…...
迷宫最短路径求解--c++
【代码】 #include<iostream> #include<queue> #include<stack> using namespace std; #define ROW 8 #define COL 8 //测试迷宫数据 int maze[ROW][COL] {{0,0,0,1,0,0,0,0},{0,1,0,1,0,1,0,1},{0,1,0,0,0,1,0,1},{0,1,0,1,1,1,0,1},{0,1,0,1,1,0,0,0},{0…...
SpringFramework总结
一.SpringFramework介绍 (一)Spring 广义上的 Spring 泛指以 Spring Framework 为基础的 Spring 技术栈。 Spring 已经不再是一个单纯的应用框架,而是逐渐发展成为一个由多个不同子项目(模块)组成的成熟技术,例如 Spring Frame…...
品牌与产品:消费者决策的经济逻辑与品牌宣传的战略意义
在当今日益全球化的经济环境中,品牌与产品之间的关系对于企业的成功与否起着至关重要的作用。然而,在消费者做出购买决策时,他们到底是在选择产品本身,还是在选择附着在产品之上的品牌价值?同样,当客户选择…...
MFC四种方法编写多线程
本文以四个demo为例,对MFC的多线程进行学习。学习的过程中写了四个demo,将其做成笔记,发布在csdn上面。 mfc多线程demo1 volatile BOOL m_bRun; CEdit* edit; void ThreadFunc(){CTime time;CString strTime;m_bRun true;while(m_bRun){ti…...
VPN简介
一、VPN 概念定义 VPN,即虚拟专用网络(Virtual Private Network),依靠ISP(Internet Service Provider)和NSP(Network Service Provider)在公共网络中建立的虚拟专用通信网络&#x…...
【C/C++】用C语言写一个数据仓库,存储和修改数据
这个代码实现了一个简单的数据仓库,其中数据被存储在一个3x3的二维数组中。用户可以通过控制台界面与这个数据仓库进行交互,可以选择查看数据或者修改数据。 基础版源码: #include <stdio.h>#define HOUSESIZE 3 int arr[HOUSESIZE][…...
YOLO v5与YOLO v8框图比较
1. 介绍 YOLO (You Only Look Once) 是一个用于目标检测的卷积神经网络模型,以其高精度、高速度和易用性著称。YOLO v5 是目前最流行的 YOLO 版本之一,而 YOLO v8 是 YOLO 的最新版本。 2. 原理详解 YOLO 系列模型的基本原理是将目标检测任务转化为图…...
Redis集群(5)
集群原理 节点通信 通信流程 在分布式存储系统中,维护节点元数据(如节点负责的数据、节点的故障状态等)是关键任务。常见的元数据维护方式分为集中式和P2P方式。Redis集群采用P2P的Gossip协议,这种协议的工作原理是节点之间不断…...
STM32H5 DAC 配置
STM32 H5 DAC的详细初始化过程可以分为以下几个步骤,以下是根据参考文章和相关资料整理的具体步骤和参数设置: 1、使能相关时钟: 使能GPIOA(或其他对应DAC输出引脚的GPIO端口)的时钟。这通常是通过调用RCC_APB2Perip…...
第十九节:暴力递归到动态规划
一 动画规划的概念 优化出现重复解的递归 一旦写出递归来,改动态规划就很快 尝试策略和状态转移方程是一码事 学会尝试是攻克动态规划最本质的能力 如果你发现你有重复调用的过程,动态规划在算过一次之后把答案记下来,下回在越到重复调用过程…...
服务器部署spring项目jar包使用bat文件,省略每次输入java -jar了
echo off set pathC:\Program Files\Java\jre1.8.0_191\bin START "YiXiangZhengHe-8516" "%path%/java" -Xdebug -jar -Dspring.profiles.activeprod -Dserver.port8516 YiXiangZhengHe-0.0.1-SNAPSHOT.jar 将set path后面改成jre的bin文件夹 START 后…...
2024备忘知识点
1. adb shell dumpsys package f |grep fin 过滤查找指纹服务 1. adsp write /sys/kernel/boot_adsp/boot 1 Please change replace dev_dbg into dev_err in kernel file adsp-loader.c. Then check whether "write /sys/kernel/boot_adsp/…...
JS基础与高级应用: 性能优化
在现代Web开发中,性能优化已成为前端工程师必须掌握的核心技能之一。本文从URL输入到页面加载完成的全过程出发,深入分析了HTTP协议的演进、域名解析、代码层面性能优化以及编译与渲染的最佳实践。通过节流、防抖、重复请求合并等具体技术手段࿰…...
Python | Leetcode Python题解之第145题二叉树的后序遍历
题目: 题解: class Solution:def postorderTraversal(self, root: TreeNode) -> List[int]:def addPath(node: TreeNode):count 0while node:count 1res.append(node.val)node node.righti, j len(res) - count, len(res) - 1while i < j:res…...
公司面试题总结(二)
7. 说说 JavaScript 中的数据类型?存储上的差别? • 基本类型: o Number o String o Boolean o Undefined o null o symbol • 引用类型 o Object o Array o Function • 声明变量时不同的内存地址分配: o 简单类型的…...
人脸识别和 ArcFace:用于深度人脸识别的附加角边际损失
在本文中,您将发现一种 ArcFace 方法,该方法可获得用于人脸识别的高分辨特征。阅读本文后,你将了解: 人脸识别任务如何工作。如何计算人脸匹配。SoftMax 和 ArcFace 的直观区别。ArcFace 的几何解释。ArcFace 背后的数学原理本文假定您已经熟悉用于多类分类、检测和 SoftMax…...
双标引领:汽车软件安全的ASPICE与ISO21434之道
随着汽车行业的飞速发展,尤其是智能化、网联化趋势的加剧,汽车软件开发的复杂性和安全性需求日益提升。在这样的背景下,ASPICE标准和ISO21434安全标准应运而生,为汽车软件的开发和管理提供了坚实的支撑。 ASPICE(Auto…...
再度牵手,制造升级 | 毅达科技IMS OS+通用产品集+行业套件项目正式启动!
在数字化与智能制造的浪潮中,制造业企业纷纷加快转型步伐,力求通过技术创新实现生产效率与质量的双重提升。近日,广东毅达医疗科技股份有限公司(以下简称“毅达科技”)再次携手盘古信息,正式启动了IMS 数字…...
大疆智图_空三二维重建成果传输
一、软件环境 1.1 所需软件 1、 大疆智图:点击下载; 2、 ArcGIS Pro 3.1.5:点击下载,建议使用IDM或Aria2等多线程下载器; 3、 IDM下载器:点击下载,或自行搜索; 4、 Fas…...
python实现无人机航拍图片像素坐标转世界坐标
背景 已知相机参数(传感器宽度和高度、图像宽度和高度、焦距、相对航高、像主点坐标 ),在给定像素坐标的前提下,求世界坐标,大部分通过AI来实现,不知道哪个步骤有问题,望大家指正 脚本 impor…...
C#面:什么是 Windows 服务,它的生命周期与标准的 EXE 程序有什么不同
C#中的Windows服务是一种在后台运行的长时间运行的应用程序,它可以在Windows操作系统启动时自动启动,并在系统运行期间持续运行。与标准的EXE程序相比,Windows服务具有以下不同之处: 生命周期:Windows服务的生命周期与…...
Java基础面试题自测
文章目录 一、Java 中有哪 8 种基本数据类型?说说这 8 种基本数据类型对应的包装类型?二、包装类型的常量池技术了解么?三、为什么要有包装类型?四、什么是自动拆装箱?原理?四、遇到过自动拆箱引发的 NPE 问…...
【LeetCode 第 401 场周赛】K秒后第 N 个元素的值
文章目录 1. K秒后第 N 个元素的值🆗 1. K秒后第 N 个元素的值🆗 题目链接🔗 🐧解题思路: 前缀和 小规律🍎 🍎 从上图观察可知,规律一目了然,arr[i] arr[i] 对上一…...
游戏心理学Day10
习得性动机。 习得性动机也称社会性动机是指人与社会生活相联系的后天习得的动机,这类动机比原发性动机要多很多。 成就动机。 成就动机是指个人追求进步以及达到目标的内在动力。 在游戏中设计师总会担心过多的失败,会令玩家感到挫败进而离开游戏 对…...
优秀高端网站建设报价/atp最新排名
1.提升内聚性 2.降低耦合度 3.切分关注面 4.模块化系统性关注面 5.缩小类和函数的尺寸 6.选用更好的命名,缩减冗余的注释 转载于:https://www.cnblogs.com/DjangoBlog/p/5445309.html...
网站设计风格的关键词/近几年的网络营销案例
LINUX指令认识 使用XShell远程登录LINUx 查看Linux的ip ifconfig 1.ls[选项][目录文件] 对于目录,列出目录下所以子目录与文件。对于文件,列出文件名以及其他信息 -a 列出目录下的所有文件,包括以 . 开头的隐含文件。 -d 将目录象文件一样显示…...
为什么不自己做购物网站/赣州seo
2017-08-19 主要内容:CPU和GPU介绍,几种深度学习框架的介绍 1.CPU和GPU CPU一般核数目比较少,适合做通用的计算,速度比较快,共享系统的内存 GPU一般单个核心的速度比较慢,但是核心数目很多,几千…...
温州做网站哪家好/启动互联全网营销推广
点击文章最下方左下角” ,获得更多知识。1. 如图,在边长为4的正方形ABCD中,以点B为圆心,AB为半径画弧,交对角线BD与点E,则图中阴影部分的面积是(结果保留π )A.8-π B.16-2π C.8-2π D.8-π2. 如图,∠AOB=90,∠B&…...
ps做游戏下载网站有哪些/百度搜索量统计
泛型介绍(C# 编程指南)泛型类和泛型方法同时具备可重用性、类型安全和效率,这是非泛型类和非泛型方法无法具备的。泛型通常用在集合和在集合上运行的方法中。.NET Framework 2.0 版类库提供一个新的命名空间 System.Collections.Generic&…...
手机微信官方网站/独立站seo实操
文章目录一、 关于需求分析与建模的读书心得1) 我对需求分析与建模的认识与建议1. 需求问题是当前软件开发面临的主要问题2. 需求问题具体原因分析3. 需求工程的重要性4. 需求工程的复杂性2) 我对需求分析与建模的读书心得1. 我对需求分析与建模的读书心得二、 关键词查找结合小…...