面向云原生应用的零信任安全

一、什么是好的安全体系

一个好的安全体系的前提是为合法主体建立信任关系,通过信任在保证业务的前提下降低安全成本,在运行时及时检测并消除非法主体的恶意行为,所以信任是网络安全的前提要求。

 

二、什么是信任

维基百科上对信任(Trust)的定义为:

一方(信任方)在未来依赖另一方(被信任方)行动的意愿。

假设给定三方A、B、C,三者之间都有交互,如下图所示。

那么信任是指主体A对主体B未来发生行为action(B)的依赖意愿,这里有两层含义:

  1. 信任是对主体B是否会做出行为action(B)的判断,包含了对主体本身B及其行为action(B)的双重判断。其中主体A对主体B的判断为信誉,记为Reputation(A,B)。
  2. 信任是用于判断主体B未来的行为的可能性(B以前的行为都已经成为A的经验)。说明信任度本身是主观的、不确定的(需要管理员根据具体的业务场景和安全合规需求,主观性地进行定义与配置)。模糊数学、证据理论等都是支撑信任度量的数学模型。

那么,主体A对B的信任度Trust(B,A)可形式化表述为:

Trust(B,A)=t({action (B)},Reputation(B,C)),其中t为信任评估函数

可见,主体A对B的action(B)行为的信任是结合了

  • A对B的历史行为的观察{action(B)}
  • 第三方(如主体C)对其信誉评价Reputation(B,C)的综合评估

事实上,信任度的度量会更复杂一些,需要考虑到观察行为(即证据)的可靠度,以及信任度随着时间推移衰减等因素。

而信任机制在应用时,根据不同的场景和需求会有多种形态,如IAM(Identity and AccessManagement)、访问控制、边界控制等,具体产品就更是五花八门。但核心上看,信任管理有四个要素(如上图所示):

  1. 主体身份属性确认,即Identification。
  2. 资源的属性确认,即Attribute Enumeration。
  3. 主体对资源操作的授权,即Authorization。
  4. 操作控制,即Enforcement。

行业内主流的信任管理机制都是采用了确定性的信任评估方式,设置后长期不变、控制面和数据面混合在一起,虽然简化了策略制定、系统运行时机制,但没有考虑到上下文变化,这是造成现在网络安全事件频发的根本原因之一。

  • 从主体身份的角度看,主体身份是可能被假冒的,或合法主体在某些条件下会作恶。更具体可参考密码验证登录系统的操作,虽然系统安全策略要求用户设置复杂的密码,并要求定期更新,也不能完全假定用户是可信的。攻击者可以使用钓鱼、拖库等常见的攻击手段,获得用户密码。此外,虽然用户更新的密码复杂,但为了便于记忆,每次使用的密码存在规律性,也容易被破解。所以,现在越来越多的IAM方案采用无密码(Passwordless)、多因子认证MFA、生物技术Biotech等方式。
  • 从资产属性的角度看,防火墙策略中五元组的目的地址所指示的就是被访问资源,但随着业务变更等环境变化,资源的属性也会随之变化,但如果安全策略没有及时更新,还是以之前的网络地址作为五元组的目的地址,显然会出现访问控制失效。事实上,在很多缺乏有效安全运营的大机构,这种现象是非常常见的。现在在一些以风险为基础的模型中,如Gartner的自适应访问控制,安全策略需要根据主体行为等上下文动态调整,这也体现了信任是主观、动态、不确定的。
  • 从策略控制点的角度看,如云中的访问控制,随着虚拟机迁移,主体和资源属性、安全策略都没有发生变化,但资源所在的宿主机变化了,如果还在原宿主机的虚拟网络上执行策略控制,显然无法控制主体的访问行为。又如云中虚拟子网内部的流量不会经过虚拟路由器或虚拟防火墙,如果将这些虚拟设备作为子网内部访问行为的策略控制点,也是不合适的。可见,访问控制点应根据主体和资源间的访问路径进行动态部署,且其数据平面的处置应与控制平面的安全策略一致。
  • 从控制面和数据面分离的角度看,传统的OSI TCP7层协议存在原生地安全问题,鉴权/授权的通道和数据传输的通道是混合在一起的(ip直连),这间接导致了网络缓冲区溢出、暴力破解、内网横向渗透等问题。

所以,一个好的信任管理机制,在控制平面需要保证主体、资源属性与安全策略在运行过程中保持一致;在数据平面,操作控制点能时刻在主体和资源的访问路径上;同时还要注意控制面和数据面要保持合理的独立隔离。

目前为止我们分析了信任管理,那么“零信任”又是什么呢?我们不禁要问,世界上到底有没有零信任?

答案是:“没有”,也“有”。

  • 首先,从人性的角度看,世界上“没有”零信任。信任亘古以来就是一切人类重要活动的前提,论语有云:人无信不立,业无信不兴,国无信则衰。我们经常看到,当一个机构的安全管理者认为业务存在风险时,动辄限制合法用户的访问权限,或将业务功能降级,以期满足风险合规的要求。但这种做法没有区分合法用户和恶意攻击者,一概认为用户是不可信的,从结果上看约束了业务的正常开展,降低了企业各项业务的收益。
  • 其次,从技术的角度看,世界上是“有”零信任的。至少到现在为止,我们看到区块链及其之上的应用可以是零信任的。正因为区块链有去中心化的共识机制,能让上层的智能合约全局一致地执行,从而支撑了事前无信任或弱信任的多方进行复杂交易。可以说,共识算法是公有链零信任的基础,但这样的零信任基本是建立在机器与机器之间的关系,显然不是当前业界在谈的“零信任”。以人为本的业务的信任机制还应是基于传统的信任模型。

从上面的分析可见,“零信任”从字面上看是有误导性的,世界上不存在完全不信任任何主体的业务,所谓“零信任”安全,更准确的说法应该是“默认不信任,时时处处验证”安全。

 

三、零信任的技术路线

从技术上看,要做到信任管理,或在身份上下功夫,或在控制上下功夫。现有业界的零信任方案必定落到某个具体的技术领域内,如

  • 身份和权限管理
  • 网络访问控制
  • 区域隔离
  • 应用安全等

需要注意的是,以上技术路线之间只是一种概念和侧重点上的划分,在实际的技术方案和产品中,往往是融合多种不同的技术路线。

0x1:身份和权限管理 技术路线

身份和权限管理(IAM、IDaaS和PAM)作为信任的第一个环节,也很自然地得到了业界重视,如Cisco收购的Duo Security,就是IAM起家,并融入到Cisco的零信任方案中。此外,如Centrify于2018年年底将IDaaS业务拆分为独立的公司Idaptive,在其方案中使用了零信任的概念,还有国内的九州云腾也有相似的方案。

0x2:网络访问控制 技术路线

在主体执行动作时,对主体权限和行为进行判断,最常见的是网络访问控制,这类零信任方案统称为零信任网络访问(Zero Trust Network Access,ZTNA),细分的流派有CSA SDP和BeyondCorps两类。不过Gartner在最新的报告中将这两类又统称为软件定义边界(SDP),所以文中将前者称为CSA SDP,表示它是最早由CSA提出的狭义SDP流派。

CSA SDP见下图,认证请求是由客户端Initiating SDP Host(IH)发起的,控制器经过访问控制策略判断下发指令,最终由Accepting SDP Host(AH)根据指令放行或阻断。

CSA SDP模型

BeyondCorps的路线最早见Google BeyondCorps项目,其流程见下图,认证请求是由用户访问的服务发起的,控制点也在服务侧,所以该服务的角色就是代理。

基于代理的ZTNA路线

从效果看,这两种技术路线都是隐藏后面的应用,除非用户提供了自己的身份和访问资源,否则用户是无法访问应用的。从部署上看,CSA SDP需要客户端安装Agent,所以环境要求较高,目前主要是应用于替代VPN的场景中,这类公司较多,如Cyxtera、Meta Network、Verizon等。

0x3:区域隔离 技术路线

从结果看,“零信任”与隔离有很大的相关度。一些云厂商借助微隔离技术,可天然按照不同粒度隔离业务,例如VMware在NSX产品中提出用微隔离减少攻击面。

0x4:应用安全 技术路线 

在SaaS场景中,随着敏捷开发、高效运营的驱动,用户越来越多地使用云原生的架构来开发应用。在云原生场景中,应用的颗粒度会被切得非常细,一个容器通常只运行一个或少数若干进程,故服务称为微服务。所以,通常实现一个业务需要多个微服务的交互,在云原生场景中,服务之间的访问关系非常复杂,不能依靠固化的访问控制逻辑,而是应该按照业务的逻辑确定微服务间的安全策略,划分微服务的边界进行持续有效的隔离,以及在微服务之间应用一致的访问权限控制,就变得非常重要。为了解决这个问题,云原生的系统通常都会有数据和管理平面的鉴权机制。

而在服务网格场景下,零信任还应覆盖微服务间的交互,这部分需要使用面向云原生的服务零信任机制。比较典型的方案是Google的Istio。从功能上看,Istio可为微服务无缝加入认证授权和加密通信的功能。其思想是通过策略控制器,使用Kubernetes的RBAC授权机制,对资源粒度细化到单个服务的访问控制,从而所有的服务交互都是可信的。

  • Istio在控制平面上由Citadel组件做认证,Pilot组件做授权
  • Istio在数据平面上,在源目的服务旁插入Sidecar容器,截获进出流量,在进行加解密的同时也根据Pilot的策略进行访问控制。

从效果看,如果攻击者没有合法身份,是无法在数据平面横向移动的。因为在网络层设置了网络策略白名单后,网络层的非法访问就被禁止了;而在服务层,微服务Pod的开放服务较少,且都引入了认证和业务层访问控制,攻击者也很难发起非授权的连接。

从数据平面分析,Istio和SDP都需要对网络做比较大的修改。如SDP需要添加IH和AH,客户端需要添加组件,服务端也需要部署代理,而Istio的Sidecar容器也需要部署在所有业务容器旁,且截获流量,通过重写IPTABLES的NAT表的方式将处理完的流量送回业务容器。

从结果观察,因为上述原因,SDP在传统企业网络中部署遇到了非常大的挑战,但可预计Sidecar的部署模式会在服务网格环境中成为主流的安全防护技术。原因是Sidecar虽然是一种侵入性部署模式,但全程自动化、用户友好:Istio主动监听k8s-api服务获得新服务部署事件,通过仓库自动部署Sidecar容器,通过Init容器劫持流量,最后Sidecar使用Citadel和RBAC策略进行认证授权。一方面,业务方对安全机制毫无感知,所有开发、测试和运维均保持不变;另一方面,应用间能实现完备的认证和授权,最终达到内生安全。

0x5:云化基础设施与零信任

本质上来说,云计算安全是催生零信任的最早行业推动力。

  • 公有云市场占有率不断提升,企业的关键业务会越来越多地部署在公有云上,其暴露面和攻击面越来越大,如SDP等零信任的技术可以将一些企业内部业务部署到公有云上,这些业务对外并不暴露,攻击者无法从互联网上找到这些业务,但合法用户却可以通过客户端或代理经过验证后访问这些内部业务。
  • 此外,随着SDWAN的火热发展,企业的分支机构通过uCPE进行互联,边界设备大大弱化,相反如Zscalar等SDWAN安全厂商在运营商网络中提供了各种云化的安全能力,企业员工可在任意地点、任意终端登录企业各地分支机构的服务。
  • 此外,云中虚拟资源迁移、业务变更频繁能到秒级,安全策略能否跟随业务,业务间的隔离粒度能否达到最小,也是零信任的原生需求

云计算系统的最大特点是所有资源虚拟化和软件化、平台集中化。其中,如认证和访问控制机制是云计算系统原生提供的,如

  • OpenStack提供了Keystone认证服务、安全组、防火墙即服务
  • Kubernetes支持多种认证、授权机制和网络策略

所以这些云平台的控制平面和数据平面都是原生支持零信任的。 

云计算系统数据平面的访问会涉及计算资源的隔离和访问控制,资源隔离毫无疑问是虚拟化天然的特性,至于访问控制,则分为服务暴露和内部网络访问两部分。

  • 在VPC环境中,虚拟机如果没有分配浮动IP,外部是无法访问VPC内虚拟机的
  • 又如Kubernetes只是新建了Pod或Deployment,外部也是无法访问该Pod上的业务的

所以云计算资源暴露面默认是没有的,从而避免了绝大多数来自互联网上的威胁。

至于当OpenStack为虚拟机分配了浮动IP、Kubernetes为Pod分配了Ingress或NodePort服务后,这些云资源对外提供服务,用户可在外访问,就出现了暴露的风险。所以在这种场景下,BeyondCorps的SDP模式就能帮助企业隐藏敏感服务,提供细粒度的访问控制。虽说这不是云平台原生提供的安全能力,但SDP借助云平台的开放接口,可以容易地对接到各大公有云。相比而言,如果在传统企业内网部署类似的SDP服务,则需要对传统网络结构、服务器应用进行大力度改造,这几乎是不可能实施的(所以现在传统企业采用SDP主要是代替传统VPN,实现细粒度的访问控制)。

而在内部网络中,同样也可以通过零信任的访问控制机制防止攻击者横向移动。

  • 如在OpenStack系统中,同一个主机内部的虚拟机通过vlan进行隔离,不同租户的虚拟机是隔离的,内部网络访问通过安全组(Security Group)可实现白名单机制,所以这种场景下确实能实现零信任的防护。
  • 在Kubernetes中,内部容器间访问控制和隔离可使用网络策略(Network Policy)实现,需要注意的是业务网络通常取决于CNI插件,所以网络控制也依赖于CNI的实现。如果没有打开网络策略,默认情况下Pod之间是互通的,所以要实现网络零信任,则需要将网络策略设置为白名单模式。

可见,云计算系统数据平面的可编程和软件化能力确实能够提供零信任的认证授权、资源隔离、访问控制的机制。

 

四、零信任和云原生未来的融合发展趋势

从实践来看,云原生安全和零信任安全是有一定相关性的。

  • 云原生的信任机制都是零信任的。云计算的开放环境、云服务的开放接口必然要求云原生的安全首先要做好信任管理,全局、业务一致的白名单机制就是零信任的。而且在软件定义的基础设施下,在云原生环境下实践零信任机制相对容易,无论是OpenStack Keystone的SSO模式,还是侵入式Sidecar模式,都可做到兼容业务、扩展功能,也贯彻了零信任的理念。
  • 成功的零信任机制必然是超越云原生的。虽然云原生应用越来越流行,但说到底这还是一个新兴领域,在大多数传统环境中还不能直接使用云原生中的零信任机制,这也是当前国内零信任只在少数大型机构试点的原因。但需要看到随着国外基础设施云化、企业网SDWAN化场景越来越现实,以固定网段、身份做隔离和访问控制的传统信任模型将被打破,要求不区分地区、终端、时间访问业务的需求越来越旺盛,所以零信任才被如此推崇。

基于以上,我们可以得出一个推论:云原生的(零)信任机制必然会扩展、连接到更多环境,如企业内网、移动网络,甚至物联网、工业互联网等,就如现在公有云开始连接企业内网、工业互联网连接生产环境和云平台的趋势一样。

那么,云原生的零信任机制就需要借助其先进的软件能力和先进架构,开始适配云原生以外的更多应用场景,最终实现面向融合环境的零信任机制。

另外,零信任虽然给我们一种全新的信任管理理念,但不代表实现了“零信任”机制就是万无一失、无懈可击的。在最极端的场景下,如果访问主体本身怀有恶意的意图,虽然身份和权限是正常的,但其行为本身是异常的,所以“零信任是银弹吗?”的答案显然是否定的。

零信任的最大价值在于减少暴露面和攻击面,所以应该处于Gartner的自适应安全体系的防御(Prevention)阶段,应该假定存在攻击者侵入的可能性。正如NIST的零信任模型中包含了持续诊断和缓解系统,以进行实时监测和及时响应。

所以,如何将零信任作为指导思想,融入到整个安全体系中,就需要我们设计一种零信任原生的形式化模型和安全架构。

  • 首先,应按照信任度模型定义主体、策略和资源,并根据现有安全资源的能力,动态地将策略下发到相应的安全设备、平台或强制点,实现全局按需、动态、完备的策略控制。这方面可参见Firemon的访问控制管理,不过它目前只包含对防火墙的控制,还不支持其他安全或网络设备。
  • 此外,检测后需要做自动化的响应处置,此时应能根据网络、安全资源和被攻击资源的环境动态下发控制策略,这可以借鉴软件定义安全的体系。

综上,“零信任原生安全”从设计上就体现了零信任理念,融合了多种安全能力;在实现上可适配各类应用场景的安全体系。它脱胎于零信任的理念,融合自适应安全的安全体系,有机形成预防、检测和响应的能力,利用云原生安全的架构和能力,通过软件定义的架构,可适配多种应用场景。

 

本文转载于网络 如有侵权请联系删除

相关文章

  • SAP WM 同一个工厂下跨仓库号转库初探 I

    SAPWM同一个工厂下跨仓库号转库初探ISAP制造业项目里,同一家工厂一般而言都会只设置一个仓库号,这家工厂下的多个不同的存储地点共享同一个仓库号,这是项目实践中常见的Practice。笔者一直很好奇,如果同一个工厂代码下二个不同的存储地点各自有单独的仓库号,转库的时候WM层面会是什么样子的。近日笔者利用业余时间,在一个sandbox系统里做了相关的测试和研讨,很有收获,是故写下文字对测试过程做一个记录。工厂NMDC下的存储地点0001,仓库号是NM1;存储地点1001,仓库号是NM2。如下图示:现在执行事务代码MIGO,移动类型311,将物料号820的库存从0001存储地点转入1001存储地点,数量是33EA。如下图示:保存过账,物料凭证号创建了。检查这个物料凭证号,WM选项卡数据里,仓库号是NM1,WM层面移动类型311。TR#113为该物料凭证号执行事务代码LT06,回车,进入如下界面:可以发现该物料凭证号与2个仓库号下的TR关联,一个是NM1仓库号下的TR#113,一个数NM2仓库号下的TR#3。这是同一个工厂下多个仓库号的前提下,跨存储地转库的特殊之处。发货库存地需要有WM层

  • nginx入门详解(四)- 访问控制

    这一章就结合实例来看下通过修改配置文件,实现简单的防火墙功能。这个功能的实现依靠nginx的access模块,这个模块在我们编译nginx时会默认编译进nginx的二进制文件中。语法:Syntax: allowaddress|CIDR|unix:|all; Default: — Context: http,server,location,limit_except Syntax: denyaddress|CIDR|unix:|all; Default: — Context: http,server,location,limit_except复制allow:允许访问的IP或者网段。deny:拒绝访问的ip或者网段。从语法上看,它允许配置在http指令块中,server指令块中还有locatio指令块中,这三者的作用域有所不同。如果配置在http指令块中,将对所有server(虚拟主机)生效;配置在server指令块中,对当前虚拟主机生效;配置在location指令块中,对匹配到的目录生效。ps:如果server指令块,location指令块没有配置限制指令,那么将会继承http的限制指令,

  • 使用curl控制下载速度

    1.速度控制1.1php代码方式functionhttp_request($URI) { $ch=curl_init(); curl_setopt($ch,CURLOPT_URL,$URI); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); //速度控制 $speed=100000; curl_setopt($ch,CURLOPT_MAX_RECV_SPEED_LARGE,100000); $result=curl_exec($ch); if(!$result){ echocurl_error($ch); returnfalse; } curl_close($ch); return$result; } $url="http://toutiao.sogoucdn.com/ykvideo/20181130/0575139af28f38c336912739acf33a88.mp4"; $res=http_request($url); file_put_contents("./video",$res);复

  • Spring 中的几个 PostProcessor 的区别与联系

    首先明确Bean的生命周期:首先注册Bean的定义信息;然后创建Bean的实例;最后初始化Bean,放入容器中。按照执行的顺序,可以分为以下几个步骤:BeanDefinitionRegistryPostProcessor是在注册Bean定义信息前后调用; BeanFactoryPostProcessor是在创建Bean前后调用; BeanPostProcessor是在初始化Bean前后调用;复制其中BeanDefinitionRegistryPostProcessor是BeanFactoryPostProcessor的子类,所以可以使用前者代替后者实现功能。查看IOC容器创建时的调用流程,refresh方法的代码如下://Allowspost-processingofthebeanfactoryincontextsubclasses. postProcessBeanFactory(beanFactory); //Invokefactoryprocessorsregisteredasbeansinthecontext. invokeBeanFactoryPostProcessors(be

  • 聊聊dubbo-go的GenericFilter

    序本文主要研究一下dubbo-go的GenericFilterGenericFilterdubbo-go-v1.4.2/filter/filter_impl/generic_filter.goconst( //GENERIC //genericmodulename GENERIC="generic" ) funcinit(){ extension.SetFilter(GENERIC,GetGenericFilter) } //whendoagenericinvoke,structneedtobemap //GenericFilter... typeGenericFilterstruct{}复制GenericFilter的init方法设置了GetGenericFilterGetGenericFilterdubbo-go-v1.4.2/filter/filter_impl/generic_filter.go//GetGenericFilter... funcGetGenericFilter()filter.Filter{ return&GenericFil

  • 秒杀系统流量削峰这事应该怎么做?为什么要削峰呢?

    如果你看过秒杀系统的流量监控图的话,你会发现它是一条直线,就在秒杀开始那一秒是一条很直很直的线,这是因为秒杀请求在时间上高度集中于某一特定的时间点。这样一来,就会导致一个特别高的流量峰值,它对资源的消耗是瞬时的。但是对秒杀这个场景来说,最终能够抢到商品的人数是固定的,也就是说100人和10000人发起请求的结果都是一样的,并发度越高,无效请求也越多。但是从业务上来说,秒杀活动是希望更多的人来参与的,也就是开始之前希望有更多的人来刷页面,但是真正开始下单时,秒杀请求并不是越多越好。因此我们可以设计一些规则,让并发的请求更多地延缓,而且我们甚至可以过滤掉一些无效请求。为什么要削峰为什么要削峰呢?或者说峰值会带来哪些坏处?我们知道服务器的处理资源是恒定的,你用或者不用它的处理能力都是一样的,所以出现峰值的话,很容易导致忙到处理不过来,闲的时候却又没有什么要处理。但是由于要保证服务质量,我们的很多处理资源只能按照忙的时候来预估,而这会导致资源的一个浪费。这就好比因为存在早高峰和晚高峰的问题,所以有了错峰限行的解决方案。削峰的存在,一是可以让服务端处理变得更加平稳,二是可以节省服务器的资源成本。

  • 【漫画】为什么说O(n)复杂度的基数排序没有快速排序快?

    跟着西瓜兄弟学算法老大:我简单给你讲下吧,你学过那么多排序,估计一看就懂了。基数排序,是一种基数“桶”的排序,他的排序思路是这样的:先以个位数的大小来对数据进行排序,接着以十位数的大小来多数进行排序,接着以百位数的大小……排到最后,就是一组有序的元素了。不过,他在以某位数进行排序的时候,是采用“桶”来排序的,基本原理就是把具有相同个(十、百等)位数的数放进同一个桶里。我直接给你个例子吧,保证你一看就懂。例如我们现在要对这组元素来排序:由于我们是以每个数的某位数来排序的,这位数的范围是0-9,所以我们需要10个桶。第一遍,先以个位数排序,把具有相同个位数的数放进桶里,结果如下:之后再按照从0号桶到9号桶的顺序取出来,结果如下个位数排序完成。第二遍,以十位数来排,结果如下:再取出来放回去:十位数排序完成,最终的结果就是一组有序的元素。如果元素中有百位数的话,大不了就按照百位数再给他重复排一遍。老二:那我想问下,为啥要从个位数开始排序呢?可以直接从最高位开始排序吗?如果从最高位开始排序的话,如果一个数最高位比另一个数大,那么这个数就一定比另外一个数大了,不用在比较次高位了。这样的话,不是可以

  • 在Yii2框架中使用Redis

    想要在Yii2这个PHP框架中很好的使用redis键值存储,那么首先就要推荐yii2-redis这个官方的Github库。这个库能够很好的帮助我们在Yii2框架中使用redis,它提供缓存,Session以及ActiveRecord模式的支持。安装yii2-redis库推荐使用composer安装yii2-redis库,在你的项目根目录执行phpcomposer.pharrequire--prefer-distyiisoft/yii2-redis:"~2.0.0"复制或者将"yiisoft/yii2-redis":"~2.0.0"复制加入你的composer.json文件里,之后运行composerupdate,墙内真的很慢,耐心等待即可。配置redis要正确的使用这个扩展,你必须在你的应用程序的配置文件内,配置Connection类,一般来说,配置文件是config\web.php。在你的组件里加入redis项目,如下:return[ //.... 'components'=>[ 'red

  • 罗兰贝格:中国人工智能创新应用白皮书

    近日,中国人工智能学会与罗兰贝格联合发布《中国人工智能创新应用白皮书》,详细梳理了人工智能的发展,估算了其在各行业的商业应用价值,并为各类企业在此方向的布局发展提出建议参考。报告指出,中国人工智能企业在当下人工智能第三次浪潮中的发展势头良好,处于全球优势领先地位;金融、汽车、零售和医疗将会是受其影响最大、最具成熟发展基础与市场应用潜力的传统产业,制造、教育、通信行业也值得关注。

  • 在虚拟磁盘中安装Windows Server 2016

    说起来我一直没有安装过Windows服务器版的系统,所以最近想尝试一下WindowsServer2016,这个最新的Windows服务器系统。当然如果是家用的话,肯定还是安装桌面版的系统更好,服务器版的系统主要是企业使用,日常功能反而不如桌面版的丰富。想要体验新系统无非两种办法,虚拟机和真机安装。虚拟机虽然方便,但是性能不太好。但是真机安装需要额外的空白分区。但是对于Windows系统来说,有一个办法可以兼具这两点的优势,既是真机安装,同时又不需要分区,这就是VHD(虚拟硬盘)功能。今天我顺便来试试VHD这个方便的功能,不过它好像只支持Windows系统。本文需要EasyBCD修改多次系统启动项,所以需要先下载和安装该软件,还需要一个虚拟光驱软件用来加载ISO文件。本文使用的命令大多数都需要管理员权限的Powershell才能运行,在操作时请格外注意,我就因为不小心把E盘给格式化了。下载WindowsServer2016镜像首先下载系统镜像,我一开始想尝试在微软官网上下载,但是发现需要注册比较麻烦。所以这里到MSDN我告诉你上下载,在这个网站上还可以下载所有其他Windows系统镜像、

  • 中国的铁路订票系统在世界上属于什么水平?

    大家好,我是二哥呀。每天早上的上班途中,我都会刷一会逼乎,除了看看自己有哪些装逼的回答被点赞之外,还想在知乎上刷到一些高营养高质量的帖子。虽然高质量的帖子越来越少,但刷100个里面还是能遇到一两个的。比如说今天分享的这篇:“中国的铁路订票系统在世界上属于什么水平?”再比如说我这个被382人赞同的关于高考填志愿的帖子。讲良心话,我这个帖子还是非常高质量的,如果你身边有亲戚朋友想问计算机专业方面的问题,可以把这个帖子转发给他,全文近一万字,全部干货。给大家先预览一部分内容,后面等高考分数出来,我再修改一版发到公众号。我当年读大学的时候根本就不知道计算机专业还可以分这么细!高考完填报志愿的时候,第一志愿填的机械自动化,然而没有录取上,就调剂到了计算机网络专业了,糊里糊涂地就上了!谁能想到,计算机专业这么香!本来是作为学校的垃圾专业,结果完全吊打其他专业。有一说一,我不是985、211的学长,但选计算机专业就对了,不要关什么卷不卷的问题,各行各业随着大学生数量的增加,哪能不卷呢?计算机卷,是因为它热门!为什么热门,是因为它工资高、岗位多!嗯,千万不要被一些大佬无脑劝退了!我记得当时,学校安排的

  • 腾讯云机器翻译错误码

    功能说明如果返回结果中存在Error字段,则表示调用API接口失败。例如: { "Response":{ "Error":{ "Code":"AuthFailure.SignatureFailure", "Message":"Theprovidedcredentialscouldnotbevalidated.Pleasecheckyoursignatureiscorrect." }, "RequestId":"ed93f3cb-f35e-473f-b9f3-0d451b8b79c6" } }复制 Error中的Code表示错误码,Message表示该错误的具体信息。 错误码列表公共错误码 错误码 说明 ActionOffline 接口已下线。 AuthFailure.InvalidAuthorization 请求头部的Authorization不符合腾讯云标准。 AuthFailure.InvalidSecre

  • 【Python机器学习实战】聚类算法(2)——层次聚类(HAC)和DBSCAN

    层次聚类和DBSCAN   前面说到K-means聚类算法,K-Means聚类是一种分散性聚类算法,本节主要是基于数据结构的聚类算法——层次聚类和基于密度的聚类算法——DBSCAN两种算法。 1.层次聚类   下面这样的结构应该比较常见,这就是一种层次聚类的树结构,层次聚类是通过计算不同类别点的相似度创建一颗有层次的树结构,在这颗树中,树的底层是原始数据点,顶层是一个聚类的根节点。   创建这样一棵树的方法有自底向上和自顶向下两种方式。   下面介绍一下如何利用自底向上的方式的构造这样一棵树:   为了便于说明,假设我们有5条数据,对这5条数据构造一棵这样的树,如下是5条数据:   第一步,计算两两样本之间相似度,然后找到最相似两条数据(假设1、2两个最相似),然后将其merge起来,成为1条数据:   现在数据还剩4条,然后同样计算两两之间的相似度,找出最相似的两条数据(假设前两条最相似),然后再merge起来:   现在还剩余3条数据,然后继续重复上面的步骤,假设后面两条数据最相似,那么:   然后还剩余两条数据,再把这两条数据merge起来,最终完成一个树的构建:   上

  • 线程

    线程的定义,线程的四种状态;待续

  • 《Unix/Linux网络日志分析与流量监控》获2015年度最受读者喜爱的IT图书奖

    《Unix/Linux网络日志分析与流量监控》获2015年度最受读者喜爱的IT图书奖。刊登在《中华读书报》(2015年01月28日19版)    我的2015年新作刊登在《中华读书报》(2015年01月28日19版) 原文下载:http://epaper.gmw.cn/zhdsb/images/2015-01/28/19/2015012819_pdf.pdf 这3本原创Linux图书,全部收录于中国科学院图书馆、国图以及211、985高校图书馆,广获读者好评,在当当、京东、天猫等电商,图书累计销售量近4万册,电子版图书的阅读量过50万。     今年秋天,本人的又一本原创作品《开源安全监控平台企业最佳实践》,将由清华大学出版社出版,敬请期待!

  • jQuery事件委托

    jQuery事件委托 <ulid="ulBox"> <lidata-id="1"></li> <lidata-id="2"></li> <lidata-id="3"></li> </ul> $("#ulBox").on('click','li',function(){ console.log($(this).attr("data-id")); })复制 on()事件相当于是$(document).click(function(){if(点击的是btn){}}),给document添加了一个click事件,党点击的是btn,事件冒泡原理,从里到外,就相当于点击了document,那么就会执行后面的操作,本质上只给document添加了一个事件,而click()事件是给所有btn添加了click事件。 另外on()事件可以添加多个事件。 on()委托事件的优点:原来的事件绑定,要绑定好多事件,现在只需要绑定一个事件,大大提高了效率和页面性能,解决的动态添加元素导致不能触发的bug。 Jq1

  • Codeforces 787D Legacy 线段树 最短路

    题意: 有\(n(1\leqn\leq10^5)\)个点,\(q(1\leqq\leq10^5)\)条路和起点\(s\) 路有三种类型: 从点\(v\)到点\(u\)需要花费\(w\) 从点\(v\)到区间\([l,r]\)中的点花费为\(w\) 从区间\([l,r]\)中的点到点\(v\)花费为\(w\) 求起点到各个点的最少花费 分析: 如下图,构建两颗线段树,边的花费都为\(0\) 对于第一种路直接加边即可 对于第二种路,添加从\(v\)到上面线段树对应区间中的点的边 对于第三种路,添加从下面线段树对应区间中的点到\(v\)的边 最后直接跑最短路 #include<cstdio> #include<cstring> #include<algorithm> #include<map> #include<set> #include<vector> #include<iostream> #include<string> #include<queue> usingnamesp

  • Deep Learning基础--CNN的反向求导及练习

    前言:   CNN作为DL中最成功的模型之一,有必要对其更进一步研究它。虽然在前面的博文StackedCNN简单介绍中有大概介绍过CNN的使用,不过那是有个前提的:CNN中的参数必须已提前学习好。而本文的主要目的是介绍CNN参数在使用bp算法时该怎么训练,毕竟CNN中有卷积层和下采样层,虽然和MLP的bp算法本质上相同,但形式上还是有些区别的,很显然在完成CNN反向传播前了解bp算法是必须的。本文的实验部分是参考斯坦福UFLDL新教程UFLDL:Exercise:ConvolutionalNeuralNetwork里面的内容。完成的是对MNIST数字的识别,采用有监督的CNN网络,当然了,实验很多参数结构都按照教程上给的,这里并没有去调整。   实验基础:   CNN反向传播求导时的具体过程可以参考论文NotesonConvolutionalNeuralNetworks, JakeBouvrie,该论文讲得很全面,比如它考虑了pooling层也加入了权值、偏置值及非线性激发(因为这2种值也需要learn),对该论文的解读可参考zouxy09的博文CNN卷积神经网络推

  • Jenkins安装教程

    Jenkins安装方法有很多,本文主要介绍通用安装方式(傻瓜式安装) 一、下载 进入https://jenkins.io/download/ ,按需下载。如用于生产,建议下载Long-termSupport(LTS) 版本,这样能够获得相对长期的维护;如想体验最新的功能,可尝试 Weekly 版本。可以直接下载特定系统专属的版本,也可下载 GenericJavapackage(.war) 。本文下载的是 GenericJavapackage(.war) ,这样对所有系统都通用。       二、安装 本文采用Tomcat安装方式,首先需要安装Tomcat(Tomcat安装方法请自行百度),将下载下来的Jenkins.war包放到Tomcat的webapps目录下,然后启动Tomcat即可      启动后会在webapps目录下生成一个Jenkins文件夹,然后我们访问http://localhost:18080/jenkins,即可看到如下界面

  • 进程间通信——管道通信

    Windows系统编程之进程间通信 作者:北极星2003 来源:看雪论坛(www.pediy.com) 附件:windowipc.rar  Windows 的IPC(进程间通信)机制主要是异步管道和命名管道。(至于其他的IPC方式,例如内存映射、邮槽等这里就不介绍了) 管道(pipe)是用于进程间通信的共享内存区域。创建管道的进程称为管道服务器,而连接到这个管道的进程称为管道客户端。一个进程向管道写入信息,而另外一个进程从管道读取信息。 异步管道是基于字符和半双工的(即单向),一般用于程序输入输出的重定向;命名管道则强大地多,它们是面向消息和全双工的,同时还允许网络通信,用于创建客户端/服务器系统。 一、异步管道(实现比较简单,直接通过实例来讲解) 实验目标:当前有sample.cpp, sample.exe, sample.in这三个文件,sample.exe为sample.cpp的执行程序,sample.cpp只是一个简单的程序示例(简单求和),如下: 代码: #include <iostream.h> int

  • 深入浅出INPUT文本框

    首先说明下本次测试的浏览器版本: IETesterv0.4.12IE6-IE8 IE9.08112.16421 Chrome21.0.1180.83m Firefox16.0.1 Opera12.02 Safari5.17(7534.57.2) 1、INPUT文本框的基本属性 INPUT基础知识,鉴于篇幅,请移步W3SCHOOL学习。 http://www.w3school.com.cn/tags/tag_input.asp 2、INPUT文本框在不同浏览器下的表现 我们将一个INPUT文本框字符宽度设置为30,代码如下: <inputid="demo1"name="demo1"type="text"size="30"> 看看它在不同浏览器下面的样子吧: 从外观上看,IE各版本浏览器显示长宽是一样的,都为220x21px,但是边框样式上有所不同。 Chrome、Firefox、Safari、Opera的长宽以及边框则各不相同。 其实INPUT在不同浏览器中的区别远不止这些,每个浏览器为了保证网页在没有样式表的情况下能够正常显示,它们都自带了一套默认的CSS样

相关推荐

推荐阅读