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

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*…

【渝粤题库】陕西师范大学152113 统计学 作业

《统计学》作业 一、单项选择题 1、“统计”一词的三种含义是( )。 A. 统计调查、统计整理、统计分析 B. 统计工作、统计资料、统计学 C. 统计信息、统计咨询、统计监督 D. 统计理论、统计方法、统计技能 2、社会统计的研究对象是( &#xff…

【渝粤题库】陕西师范大学180212 定价理论与策略 作业(专升本)

《价格理论与实务》作业 一、单选题 1、当一切商品的价值共同表现在充当一般等价物的商品上时,此时的价值形式就是( )。 A.简单价值形式 B.扩大的价值形式 C.一般价值形式 D.货币价值形式 2、各种商品价格之间相互衔接…

android自动退出对话框,Android开发 在用EditText对话框Dialog退出后实现输入盘的退出...

前言在使用继承的Dialog的方式实现自定义Dialog,如果这个Dialog我们还添加了EditText就会发现一个问题。在输入盘显示后,Dialog退出输入盘不会退出。网上有一些奇怪的解决办法,最奇怪的是去根据Touch事件判断Touch坐标来确定是否点击了空白在…

【渝粤题库】陕西师范大学200481 高级英语(一)

《高级英语(一)》作业 I. Explain the italicized words in English 1.The very act …was for me a far greater adventure than any trip or any reportorial assignment I’d previously taken. 2.Others were using little red telephones that hung on the facades of gro…

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

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

【渝粤题库】陕西师范大学201691 日语(二) 作业

一、按要求标注: (一)给下列汉字注上假名 1、全部   2、世紀   3、政治    4、文化   5、空港  6、生活   7、本棚   8、工夫    9、意見   10、理科 11、案内  12、相談   13、満足   14、社会  15、都会 …

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

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

【渝粤题库】陕西师范大学210014幼儿园科学教育作业(高起专)

《幼儿园科学教育》作业 一、填空题 1.科学教育中常采用的观察方法是 ① 、 ② 、 ③ 。 2.幼儿劳动的种类包括 ① 、 ② 、 ③ 、 ④ 。 3.在幼儿科学教育中,情感的目标非常广泛。《纲要》突出了其中两个方面: ① 、 …

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

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

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

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

【渝粤题库】陕西师范大学400011 思想政治教育学科教学论 作业(专升本)

《思想政治学科教学论》作业 一、多选择题 在下列选项中至少有一项是符合题目要求的 1、思想政治学科教学论的学科特点包括: A.社会性 B.综合性 C .实践性 D.系统性   E.完整性 2、…

【渝粤题库】陕西师范大学700007 生态学

《生态学》作业 一、名词解释 Meta-种群生态系统次生演替边缘效应初级生产量可持续发展岛屿效应主导因子种群空间分布格局营养级物种多样性生态入侵耐性限度生态位光周期现象趋同适应生态恢复同资源种团原生演替协同进化食物链生态平衡繁殖成效内禀增长率 二、简答题简述丹麦学…

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

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

国家开放大学2021春1062文学英语赏析题目

教育 教育 试卷代号: 1062 2021年春季学期期末统一考试 文学英语赏析 试题 2021年7月 注意事项 一、将你的学号、姓名及分校(工作站)名称填写在答题纸的规定栏内。考试结束后,把试卷和答题纸放在桌上。试卷和答题纸均不得带出考…

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…

【渝粤题库】广东开放大学 大学英语B 形成性考核 (2)

选择题 题目: Do you still get free plastic bags from the supermarkets? Things have changed. China has banned free plastic bags at shops and supermarkets, and people have to pay for using plastic bags. The rule started on June 1. It came becaus…

apache camel_在WildFly中将Apache Camel和Spring添加为jboss模块

apache camel这些天,我在玩Wildfly , Apache Camel和Spring 。 在EAR / WAR之间进行通信的一种简单方法是使用Camel的direct-vm组件。 有或没有骆驼,有很多方法可以实现这一目标。 骆驼在WildFly中就像一个饰物,不需要任何额外的…

国家开放大学2021春1129土木工程力学(本)题目

教育 教育 试卷代号: 1129 2021年春季学期期末统一考试 土木工程力学(本) 试题 2021年7月 一、单项选择题(每小题3分,共30.分。在所列备选项中,选1项正确的或最好的作为答案填入括弧) 1.求图示…

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

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