保护微服务需要知道的那些事

随着容器的持续流行,将应用改造成云上的微服务,对于很多希望IT运营更加敏捷高效的企业来说是显而易见的下一步。但是,在容器化应用并且部署之前,需要首先确保你的应用是安全的。云托管的微服务所带来的安全挑战,和传统应用情况并不完全一样,我们必须妥善解决这些问题,避免暴露重大的安全漏洞。

1.什么让微服务如此不同

要理解为什么必须保护微服务,比如那些运行在Docker容器里的应用,你首先需要理解微服务和传统应用之间的主要区别。

传统来说,程序员构建“单体”应用。也就是说应用使用的整个软件堆栈被组织成一个单一的可交付的实体。比如,你的团队可能已经通过编写前端代码为应用构建了web应用,将其和MySQL数据库集成来存储数据,并且将所有东西打包到一个基于Linux的虚拟机镜像里,从而可以将其部署到公有云服务,比如AWS或者Azure上。

微服务方案通过将应用分解成模块化碎片改变了这一切。它们是分布式的,并且通常并不依赖于特定类型的操作系统来运行。这意味着上述描述的应用并不会以虚拟机镜像的形式分发。相反,前端代码可以被打包进一个容器镜像。数据库可以运行在单独的容器里。所有这些容器都在Docker或者其他容器平台上运行,并且底层操作系统或者托管它们的云环境和容器本身并不相关。

2.微服务和安全

微服务消除了一些和单体应用相关的安全挑战。它们让应用环境更加一致,简化了安全监控。它们还增加了应用不同部分之间的隔离性,降低了入侵应用的一部分就可以控制整个堆栈的风险。并且它们可以帮助提供抵御分布式拒绝服务攻击的弹性,因为容器可以带来更大的灵活性和可扩展性,并且能够更好地抵御通过向服务器发送过多请求来摧毁其基础架构的攻击。

保护微服务架构时也会遇到一些挑战。包括:

更大的攻击面。有更多的组件意味着有更多黑客可以利用的可能漏洞。比如,单体软件堆栈可能不依赖于网络在前端应用和数据库之间发送信息,而容器通常是这么做的。这带来了新的可能的攻击向量。

更少的内部一致性。微服务的优势之一是它们允许开发人员在开发语言和框架间轻松改变。比如,如果你目前用PHP开发应用,但是想切换成Go,那么当应用前端和堆栈其他部分解耦合时就很容易完成这样的切换。但是应用内部可以按照开发人员喜好频繁改动的事实也意味着更少的一致性。无论何时发生变化,也正是新的安全漏洞可能产生之时。

现有工具无法保护微服务。大部分目前可用的久经考验的安全工具都是在微服务变革之前设计的。新的方案正在涌现,但是目前的事实是,很多漏洞扫描工具在容器或者其他基于微服务的应用上无法正常工作。

全新的信任关系。容器化基础架构的优势之一是可以从公开存储库里免费快速地下载并且部署容器镜像。想要搭建MySQL数据库或者Ubuntu Linux服务器?一个简单的docker --pull 命令就能够在几秒内获得所需的容器镜像。缺点正是这些来自于公开存储库的容器镜像。这并不意味着这些镜像不安全,但是的确意味着如果使用这些镜像,你就和堆栈里的第三方软件合并了。你无法保证不受你控制的代码的安全性。

3.保护微服务的步骤

制定正确的策略,可以减轻在云上运行微服务架构的应用程序相关的安全风险。如下步骤特别有效:

保护内部环境。虽然微服务涉及更多部分,但是可以通过确保托管微服务的环境的尽可能安全来降低总体安全风险。如果在云上运行Docker 环境,这意味着确保除了你没有其他人能够访问你的云主机,并且除非必要,将 Docker容器配置成拒绝公开网络的连接。

使用安全扫描器。大部分传统的安全工具仍然在尝试适用微服务的过程中。但是已经有一些好用的工具可用,比如Docker Security Scanning和CoreOS的Clair。这些工具帮助你寻找并且解决容器内的安全漏洞。

使用访问控制。可以在软件堆栈的不同层面使用访问控制限制来降低安全风险。比如,在管理层面,必须确保能够运行Docker命令的用户才有执行Unix系统的Docker CLI工具的权限。还可以在大部分容器存储库里配置访问权限,避免公开的访问。

确保沟通。确保负责构建并且部署企业软件的团队的所有成员不断地沟通,而不是各自为战。这样能够确保运维的所有人都知道upstream或者downstream所发生的变化——以及可能的安全隐患。

越来越多的企业开始向基于DevOps的工作流和容器这样的技术转变,微服务的安全会变得越来越容易管理。但是,现在,微服务能使用的安全工具的缺失意味着企业需要特别前瞻性地保护计划在微服务架构下运行的软件。

本文作者:佚名

来源:51CTO

时间: 2024-09-29 04:45:39

保护微服务需要知道的那些事的相关文章

论微服务安全:保护微服务的两大方案

每个人都在讨论微服务,每个人也都希望能够实现微服务架构,而微服务安全也日渐成为大家关注的重要问题.今天与大家分享的文章,就从应用层面深入探讨了应对微服务安全挑战的方案,为微服务安全提供了新的思路. 面向服务架构(简称 SOA)引入了一类设计规范,其核心思路在于采用高度解耦式服务部署,其中各项服务可通过一套标准信息格式经由网络实现彼此通信.这套方案与具体技术无关,即不考虑各项服务具体是如何实现的.每项服务都拥有一个明确定义,用于发布服务描述或者服务接口.在实践当中,这类信息格式通过 SOAP 实现

保护微服务架构的10个有效方式

微服务是一种创新的方式来加速和改进软件开发.该术语是指可以单独开发的应用程序子组件,并且通常专注于一个特定功能.例如,用于在线购物的电子商务应用需要具备订单收集.账户访问.库存管理和运输的几个微服务.很多知名的电子商务或社交媒体组织,如Twitter.PayPal.亚马逊.eBay和Netflix都依赖于微服务. 微服务与容器类似,但不完全相同.我们将微服务看做分子,容器看做原子:微服务可以在容器中运行,反之亦然.微服务经由应用程序编程接口(API)实现通信,作为应用程序的整个生态系统或架构的一

微服务实践(七):从单体式架构迁移到微服务架构

本文讲的是微服务实践(七):从单体式架构迁移到微服务架构,[编者的话]这是用微服务开发应用系列博客的第七篇也是最后一篇.第一篇中介绍了微服务架构模式,并且讨论了微服架构的优缺点:接续文章讨论了微服务架构不同方面:使用API网关,进程间通信,服务发现,事件驱动数据管理以及部署微服务.本篇,我们将探讨将应用从单体式架构迁移到微服务架构需要考虑的策略. 希望读者通过本系列文章对微服务优缺点有一个比较好的理解,以及何时使用这种架构.也许微服务架构比较适合你的应用.也许你正在开发一个大型.复杂单体式应用,

微服务架构核心:专注执行同一件事并做好

微服务有且仅有一种非常专项的功能,通过远程API来提供系统其余功能.举个例子:试想一下仓库的管理系统,这样的系统中微服务可能提供的一些功能有: 接收库存 计算新的库存该存到什么地方 计算在仓库内将库存运往正确放置点的路线 为仓库员工分配运送路线 接收订单 计算仓库内指定一组订单的拣货路线 为仓库员工分配拣货路线 以上这些功能(可能还会有更多)都是由单个微服务实现的.每个微服务都有单独的运行线程,并且可以独立于其他微服务进行部署.同样每个微服务都有自己的专用数据库,尽管每个微服务都会与其他微服务协

关于微服务和物联网的未来五件事

微服务正在成为创建企业应用程序的首选方式.就像五年前的移动应用开发应用一样,缺乏专业知识可能会降低一些公司的追求.然而,随着物联网发展的不断上升,微服务器将成为开发者在今天和未来的首选架构. 虽然受到批评不适合某些DevOps文化,但微服务越来越多地被采纳,并赢得了众多行业粉丝.像Amazon.Netflix和Twitter这样的大规模在线服务都从单片技术堆栈发展成为微型服务驱动的架构,从而使他们能够在今天扩大规模.微服务器是支持跨平台,移动和物联网(包括可穿戴设备)的一系列平台和设备的理想选择

无服务器的微服务

在 2015年的LinuxCon/ContainerCon 上我呈现了一次演示驱动的演讲,标题叫做"没有服务器的微型服务". 其中,我创建了一个图片处理的微型服务,将其部署到了多个区域,构建了一个移动 app 并使用它(译者注:指的是这个微型服务)作为后台,添加了一个使用了 Amazon API 网关的基于 HTTP 的 API 和一个网站,并且对它进行了单元和负载测试,所有这些都没有用到任何服务器. 这篇博文对演讲的细节进行了重制,为你逐步完成所有必要的比周,并深入到了架构中去.而高

微服务框架和工具大全

在<Java微服务>一书中,我们使用 Spring Cloud,它提供使微服务非常容易地开发所需的所有工具和平台.Spring Cloud使用 Netflix开放源码软件( OSS).让我们探讨 Netflix OSS--一个完整的软件包. Netflix开放源码软件(OSS) Netflix开放源码软件中心是基于 Java的微服务开放源码项目最流行和最广泛使用的开放源码软件.世界上最成功的视频租赁服务依赖于它.Netflix已经有超过 4000万用户,他们在全球各地使用其服务.Netflix

微服务架构的核心要点和实现原理

微服务架构中职能团队的划分 传统单体架构将系统分成具有不同职责的层次,对应的项目管理也倾向于将大的团队分成不同的职能团队,主要包括:用户交互UI团队.后台业务逻辑处理团队与数据存取ORM团队.DBA团队等.每个团队只对自己分层的职责负责,并对使用方提供组件服务质量保证.如果其中一个模块化组件需要升级.更新,那么这个变更会涉及不同的分层团队,即使升级和变更的改变很小,也需要进行跨团队沟通:需求阶段需要跨团队沟通产品功能,设计阶段需要跨团队沟通设计方案,开发阶段需要跨团队沟通具体的接口定义,测试阶段

微服务与SOA架构

本文讲的是微服务与SOA架构[编者的话]本文是Mark Richards写的微服务与面向服务架构完整报告. 基于服务架构的世界 微服务和SOA都被认为是基于服务的架构,这意味着这两种架构模式都非常强调将"服务"作为其架构中的首要组件,用于实现各种功能(包括业务层面和非业务层面).微服务和SOA是两种差异很大的架构模式,但是他们仍有一些相同的特征. 所有基于服务的架构的一个共性是他们一般都是分布式架构,也就是服务组件都是通过远程访问协议来实现的,例如REST.SOAP.AMQP.JMS.