无服务器安全性:将其置于自动驾驶仪上

Ack :本文是从个人经验以及从无服务器安全性的其他多个来源学到的东西的混合。 我无法在这里列出或确认所有这些信息; 但是,应该特别感谢The Register , Hacker Noon , PureSec以及Serverless Status和Serverless(Cron)icle新闻通讯。

我们都喜欢想象我们的系统是安全的。 然后…

破!!!

每个开发人员,系统管理员以及最终CISO都面临着一个非常普遍的噩梦。

无服务器安全

必然?

计算机安全的一项基本原则指出, 没有系统可以达到绝对安全 。 就像人一样: 没有人是完美的 。 除非与外界完全隔离,否则不可以。 按照当今的标准,这几乎是不可能的–此外,拥有一个不能接受输入和提供输出的系统的意义何在?

无论您采取何种高级安全防护措施,攻击者最终都将找到解决方法。 即使您使用具有最大可能密钥长度的最严格的加密算法,攻击者最终也会通过蛮力进行攻击。 尽管目前在时间上是不可行的,但谁能保证一场技术突破会在明天或第二天成为可能?

但这不是您真正要担心的暴力手段: 人为错误更为常见,并且可能对系统安全性造成破坏性影响; 比暴力破解的密码要重要得多。 看看这个故事吧 ,有些人走进美国国税局大楼,and走了数百万美元,却没有使用任何所谓的“黑客”技术。

只要系统是由人制造和操作的,他们就天生就是容易出错的人,那么它们将永远不会真正安全。

无服务器安全

那么,我们注定要失败吗?

没有。

见过船的内部吗?

它的船体如何划分成多个舱室,这样一个泄漏的舱室不会导致整艘船沉没?

人们通常在设计软件时采用类似的概念:多个模块,这样一个受损害的模块不会使整个系统瘫痪。

无服务器安全

结合最小特权原则 ,这意味着组件将损害最小程度的安全性-理想情况下,攻击者将只能在模块安全范围的范围内造成破坏,而永远不会超出范围。

减小组件的爆炸半径 ,从而减小整个系统暴露的冲击面

您可以说是一个安全沙箱

那是一个相当不错的。

PoLP:最小特权原则

绝对不要给某人(或某物)比他们所需的更多的自由。

更正式地说,

每个模块都只能访问其合法目的所需的信息和资源。维基百科

这样,如果模块行为异常(或被具有恶意恶意的实体( 黑客 ,英语)强迫行为),则可将其可能造成的危害降到最低; 没有采取任何预防性的“行动”,甚至在确定“违反”之前!

它永远不会变老

尽管该原则最初是在遗留系统的上下文中提出的,但它更适用于“现代”架构。 SOA(嗯,也许不是那么“现代”),微服务和FaaS(无服务器功能,因此也就是无服务器安全性)。

这个概念非常简单:使用底层访问控制机制来限制“执行单元”可用的权限; 可能是简单的HTTP服务器/代理,Web服务后端,微服务,容器或无服务器功能。

同时,在没有服务器的地方……

随着无服务器技术在全球范围内的广泛采用 ,无服务器安全性的重要性以及我们PoLP的价值变得比以往更加明显 。

少服务器=省力

无需配置和管理服务器(环境)意味着无服务器开发可以以惊人的速度进行。 有了CI / CD,这只是代码,提交和推送的问题; 几分钟之内,一切就可以启动并运行,即使不是几秒钟。 没有SSH登录,文件上载,配置同步,服务重启,路由更改或与传统部署相关的任何其他讨厌的琐事。

“稍后再修复权限。”

las,在那些“无ops”开发人员(如我自己)中,这是很常见的事情。 您急于将最新的更新推送到暂存中,而避免过多“拒绝权限”错误的“简便方法”是放宽对FaaS实体( AWS Lambda , Azure Function等)的权限。

分期将很快迁移到产品。 您的“超权限”功能也将如此。

它会留在那里。 远远超出您的想象。 最终,您会将流量转移到更新版本,而保留旧版本不变。 以免破坏其他一些依赖组件,以防您踩到它。

然后是时间的沙土,从每个人的记忆中掩盖了旧功能。

具有未打补丁的依赖关系和可能有缺陷的逻辑的过时功能,可以完全访问您的云资源。

无服务器定时炸弹 ,如果有的话。

无服务器安全

再次!

如果我们从分阶段部署开始就遵循最小特权原则,它将大大减小爆炸半径:通过限制允许执行的功能,如果系统的其余部分受到“利用的程度”,我们将自动对其进行限制控制曾经落入错误的手中。

完善无服务器安全性:在公共云平台上

这些事情说起来容易做起来难。

目前,在公共云FaaS技术的领导者中,只有AWS具有足够灵活的无服务器安全模型。 GCP会自动为给定项目中的所有功能分配一个默认的项目级Cloud Platform服务帐户 ,这意味着就安全性和访问控制而言,所有功能都将归于一揽子。 Azure的IAM模型看起来更有希望 ,但是它仍然缺少诸如AWS和GCP中可用的基于角色的自动运行时凭据自动分配之类的炫酷功能。

AWS已为其Lambda函数应用了自己的基于IAM角色的权限模型 ,从而使用户可以灵活地为每个Lambda函数定义具有完全可自定义权限的自定义IAM角色(具有完全可自定义的权限)。 它具有令人印象深刻的一系列预定义角色 ,您可以在这些角色上进行扩展,并且具有定义明确的策略,用于对资源或主体类别进行权限范围界定,合并引用同一组资源或操作的规则等。

整个层次结构最终归结为一组权限,每个权限采用一种相当简单的格式 :

{"Effect": "Allow|Deny","Action": "API operation matcher (pattern), or array of them","Resource": "entity matcher (pattern), or array of them"
}

用英语,这仅意味着:

允许 (或拒绝 )拥有此权限的实体(用户,EC2实例,lambda;无论如何)对匹配的资源执行匹配的API操作。

(也有非必填字段“ Principal和“ Condition ”,但为简洁起见,在此将其跳过。)

现在来看一些例子。

{"Effect": "Allow","Action": "s3:PutObject","Resource": "arn:aws:s3:::my-awesome-bucket/*"
}

这允许受让人将一个对象( s3:PutObject )放入名为my-awesome-bucket

{"Effect": "Allow","Action": "s3:PutObject","Resource": "arn:aws:s3:::my-awesome-*"
}

这是相似的,但是允许在名称以my-awesome-开头的任何存储桶上执行my-awesome-

{"Effect": "Allow","Action": "s3:*","Resource": "*"
}

这允许受让人针对其拥有的AWS账户中的任何存储桶执行任何 S3操作(获取/放置对象,删除对象,甚至删除存储桶 )。

现在是银弹

{"Effect": "Allow","Action": "*","Resource": "*"
}

是的,您可以自己对AWS账户中的任何 内容 执行任何操作。

无服务器安全

有点像AdministratorAccess受管策略。

而且,如果您的委托人(例如lambda)受到威胁,攻击者实际上就可以对您的AWS账户进行管理员访问!

无服务器的安全梦night。 不用说。

不惜一切代价避免。

期。

从这个意义上讲,最好的选择是一系列第一类权限; 允许范围最小(限制最大)且涵盖范围狭窄且定义明确的范围。

那有多难?

需要注意的是,您必须对该计算单元中的每个单个操作执行此操作(例如lambda)。 每一个。

当您需要配置事件源来触发这些单元时,情况会变得更糟。

假设,对于API网关触发的 lambda,必须授予API网关服务在特定APIG端点范围内(使用CloudFormation 语法 )调用您的lambda的权限:

{"Type": "AWS::Lambda::Permission","Properties": {"Action": "lambda:InvokeFunction","FunctionName": {"Ref": "LambdaFunction"},"SourceArn": {"Fn::Sub": ["arn:aws:execute-api:${AWS::Region}:${AWS::AccountId}:${__ApiId__}/*/${__Method__}${__Path__}",{"__Method__": "POST","__Path__": "/API/resource/path","__ApiId__": {"Ref": "RestApi"}}]},"Principal": "apigateway.amazonaws.com"}
}

或对于由Kinesis流提供动力的 lambda,在这种情况下情况会变得更加复杂: Lambda函数需要访问以观看流中拉出 ,而Kinesis服务也需要获得许可才能触发 lambda:

"LambdaFunctionExecutionRole": {"Type": "AWS::IAM::Role","Properties": {"ManagedPolicyArns": ["arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"],"AssumeRolePolicyDocument": {"Version": "2012-10-17","Statement": [{"Action": ["sts:AssumeRole"],"Effect": "Allow","Principal": {"Service": ["lambda.amazonaws.com"]}}]},"Policies": [{"PolicyName": "LambdaPolicy","PolicyDocument": {"Statement": [{"Effect": "Allow","Action": ["kinesis:GetRecords","kinesis:GetShardIterator","kinesis:DescribeStream","kinesis:ListStreams"],"Resource": {"Fn::GetAtt": ["KinesisStream","Arn"]}}]}}]}},"LambdaFunctionKinesisTrigger": {"Type": "AWS::Lambda::EventSourceMapping","Properties": {"BatchSize": 100,"EventSourceArn": {"Fn::GetAtt": ["KinesisStream","Arn"]},"StartingPosition": "TRIM_HORIZON","FunctionName": {"Ref": "LambdaFunction"}}},"KinesisStreamPermission": {"Type": "AWS::Lambda::Permission","Properties": {"Action": "lambda:InvokeFunction","FunctionName": {"Ref": "LambdaFunction"},"SourceArn": {"Fn::GetAtt": ["KinesisStream","Arn"]},"Principal": "kinesis.amazonaws.com"}}

因此,您将看到,这种粒度带来了强大的力量和巨大的责任感 。 一个丢失的权限(heck,一个错误键入的字母),它是403 AccessDeniedException

没有简单的方法; 您只需要跟踪函数触发或访问的每个AWS资源,查找文档,花些功夫并提供必要的权限即可。

但是……但是……那是太多的工作!

是的,是的。 如果您手动进行

但是,这些天谁开车手动? :)

幸运的是,如果您已经开始自动化,则有很多选择:

如果您在使用著名的无服务器架构 -这意味着你已经涵盖在扳机上的权限前-还有的serverless-puresec-cli从插件Puresec 。

无服务器安全

该插件可以静态分析您的lambda代码并生成最小特权角色。 看起来真的很酷,但是需要注意的是,在每次更改代码的部署之前,您必须运行serverless puresec gen-roles命令。 我还找不到自动运行的方法-例如在serverless deploy期间。 更糟糕的是,它只是将生成的角色打印到stdout中。 因此,您必须手动将其复制粘贴到serverless.yml ,或使用其他伏都教将其实际注入到部署配置中(希望将来会有所改善:))

AWS圣杯:来自众神

如果您是Python爱好者, Chalice可以自动为您自动生成权限。 圣杯在很多方面都很棒。 超快速部署,注释驱动的触发器,需要维护的配置很少甚至没有,等等。

无服务器安全

但是,尽管是从AWS众神直接获得的帮助,但它似乎在权限方面错过了“最小”一词; 如果您有列出某些存储桶foo 内容的代码,它将生成权限以列出AWS账户所有存储桶的内容( "Resource": "*"而不是"Resource": "arn:aws:s3:::foo/*" ),而不仅仅是您感兴趣的存储桶。不酷!

选择SLAppForge Sigma

如果您是初学者,或者不喜欢CLI工具,那么SLAppForge中提供了Sigma 。

无服务器安全

作为成熟的浏览器IDE,Sigma会在您编写(键入或拖放 )代码时自动分析您的代码,并为Lambda运行时和触发器获取必要的权限,因此您已全面了解。 最近引入的权限管理器还允许您根据需要修改这些自动生成的权限。 例如,如果您正在集成Sigma尚不了解的新AWS服务/运营。

另外,有了Sigma,您无需担心任何其他配置。 资源配置,触发器映射,实体相互关系等-IDE会处理所有这些。

需要注意的是,Sigma目前仅支持NodeJS。 但是Python,Java和其他很酷的语言正在兴起!

(如果您有其他凉爽的无服务器安全策略生成工具,请在下面发表评论!不, AWS Policy Generator不算在内。)

在结束时

最低特权原则对于无服务器安全和软件设计至关重要。 迟早节省您的时间。 Lambda的高度精细的IAM许可模型非常适合PoLP。

Puresec CLI插件 ,多合一Sigma IDEAWS Chalice等工具可以自动生成安全策略。 使您的生活更轻松,同时仍然遵守PoLP的承诺。

翻译自: https://www.javacodegeeks.com/2018/11/serverless-security-putting-autopilot.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/344920.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言构造报文,构造一个缓冲区溢出的C语言的例子

满意答案wk05122013.06.01采纳率:45% 等级:12已帮助:15719人#include #include #include void function(char *str){char buffer[16];strcpy(buffer, str);}void evilfunc(){printf("Am I Evil?\n");}int main(int argc, char*…

mongodb插入速度每秒_MongoDB事实:商品硬件上每秒插入80000次以上

mongodb插入速度每秒在尝试一些时间序列集合时,我需要一个大型数据集来检查我们的聚合查询在增加数据负载的情况下不会成为瓶颈。 我们解决了5000万份文档,因为超出此数目我们仍然会考虑分片。 每次事件如下所示: {"_id" : Objec…

parallels for linux,在 Parallels Desktop 上安装 Remix OS PC

前言个人觉得呢,像 Remix OS 和 Phoenix OS 这样的国产安卓桌面操作系统还是很划时代的。赋予了安卓平台多任务操作的能力,这可以给二合一设备的体验带来一定的变化,但是不像 Surface 一样后面有巨硬给撑腰可以做大做强起来,但是这…

模拟用户输入并检查输出的简单方法

最近,我的一些学生向我询问了赫尔辛基大学MOOC提供的单元测试的机制,我检查了它们的实现,并认为这对于初学者了解实际发生的情况是有帮助的,因此在此发表了这篇小文章。 我们将以“机场”项目为例,这是OOP2第一周的最…

android bench内存测试,华为p10内存测试软件(androbench) v5.0.1 免费版

华为p10内存测试软件(androbench)其实是androbench这款内存测试软件,可以用于测试你的华为p10,是一款不错的华为p10内存测试软件,可以测试你的手机闪存性能,其他的手机也可以免费测试哦。华为p10内存测试软件介绍AndroBench是衡量…

android对话框字体大小,Android Dialog 设置字体大小的具体方法

先看下面图片:这是我在做登录页面的时候,调用系统的progressdialog 进行等待,可是看起来很不协调,左边的等待图片过大,右边文字过小,看起来老别扭,虽然功能上不存在什么问题,但是我有…

android custom toast,Android自定义Toast

核心代码:package com.huatec.myapplication;import android.content.Context;import android.graphics.Bitmap;import android.support.annotation.ColorInt;import android.support.annotation.DrawableRes;import android.view.Gravity;import android.view.Layo…

华为android打开usb调试模式,华为 PE-CL00 开启USB调试模式

我们要将华为 PE-CL00与电脑进行连接,就必须要打开华为 PE-CL00系统的调试模式,不同的系统版本打开调试模式的方法有所不同,在这里我们就谈谈华为 PE-CL00各种系统版本打开USB调试模式的方法。1、针对Android 2.1-2.2版本的系统:我…

API网关和AWS Lambda进行身份验证

当Foreach最初涉足微服务领域时,我们并没有真正构建微服务。 我们以为我们做到了,但是我们所有的服务中总存在一些逻辑。 当然,每个服务实际上应该只专注于自己的任务,而不应该专注于属于另一个微服务的事物。 我们这方面最明显的…

魅蓝x android 7,魅蓝x2什么时候发布 魅蓝x2发布时间最新消息

日前,魅蓝品牌掌门人李楠或kkk便在微博上放出“bluegate(蓝色大门)”这样一个句子,似乎暗示魅蓝品牌或在近期会有动作,并且由于该条微博的尾巴显示为“下款魅蓝Android”,所以在不少网友看来,或许预示着魅蓝将有新机即…

内存泄漏代码_调查内存泄漏第1部分–编写泄漏代码

内存泄漏代码前几天,我发现了这个小问题:该服务器运行了一段时间,然后掉下来了。 然后通过启动脚本重新启动,整个过程重复进行。 听起来并没有什么坏处,因为它虽然对数据造成了重大损失,但对业务的重要性并…

Java整数缓存-为什么Integer.valueOf(127)== Integer.valueOf(127)为True

在一次采访中,我的一个朋友被问到如果我们有两个Integer对象, Integer a 127; Integer b 127; Integer a 127; Integer b 127; 为什么当a b都持有两个单独的对象时,其值为true ? 在本文中,我将尝试回答这个问题&a…

怎么删除计算机管理员用户密码,小编手把手教你Win10系统如何删除管理员账户密码...

一位用户反馈自己在windows10正式版系统电脑中设置了管理员账户密码,之后每次开机都需要输入密码才可以登录,感觉十分麻烦。那么,Win10系统下该如何删除管理员账户密码?接下来,系统之家小编就为大家分享下具体操作方法…

Hibernate事实:始终检查Criteria API SQL查询

Criteria API对于动态构建查询非常有用,但这是我使用它的唯一用例。 每当您有一个带有N个过滤器且可以以任意M个组合到达的UI时,就应该有一个API动态地构造查询,因为连接字符串始终是我所不愿使用的路径。 问题是,您是否知道您的…

以Spring方式构建企业Java应用程序

我认为可以肯定地说, Java EE在Java开发人员中享有很高的声誉。 尽管多年来确实在各个方面都有所改善,甚至将其改名为Eclipse Foundation成为Jakarta EE ,但其苦味仍然相当浓厚。 另一方面,我们拥有Spring框架 (或者为…

jaxb 映射 空字段_推土机:将JAXB对象映射到业务/域对象

jaxb 映射 空字段Dozer是开放源代码( Apache 2许可 )“ Java Bean到Java Bean映射器,可将数据从一个对象递归复制到另一个对象”。 正如从其主页上的描述所描述的那样,它用于映射两个JavaBeans实例,以在实例之间进行自…

常用计算机网络性能指标的是什么,什么是Bit?【计算机网络的性能指标】

比特(英语:Bit),亦称二进制位,指二进制中的一位,是信息的最小单位。因此一个比特就是二进制数字中的一个 1 或 0Bit是Binary digit(二进制数字)的缩写,由数学家John Wilder Tukey提出(可能是1946年提出,但有…

使用AWS Lambda在Go中构建RESTful API

在本文中,我们将学习使用AWS Lambda在Go中设计,构建和部署RESTful API。 在开始之前,让我给您简要介绍一下AWS Lambda。 什么是AWS Lambda? AWS Lambda是一种无服务器计算服务,可运行我们的代码以响应事件并自动为我…

undertow服务器分析_使用undertow构建和测试Websocket服务器

undertow服务器分析即将发布的JBoss Application Server版本将不再使用Tomcat作为集成的Web服务器,而是将其替换为undertow 。 undertow的体系结构基于可通过Builder API动态添加到服务器的处理程序。 这种方法类似于在Node.js中构造Web服务器的方式。 它使开发人员…

湖北农商行计算机类笔试,2018湖北农商行招聘考试面试考多少分,才能进笔试?...

原标题:2018湖北农商行招聘考试面试考多少分,才能进笔试?昨天,湖北农商行各地农商行面试分数线陆续出来了,恭喜过线的小伙伴,你们顺利的进入了笔试阶段,接下来小编给大家说一下各地的进笔试的分…