云原生时代,你的 Kubernetes 应用安全是否还需要 VPC 来保证?

2024-02-28 07:20

本文主要是介绍云原生时代,你的 Kubernetes 应用安全是否还需要 VPC 来保证?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

公众号关注 「奇妙的 Linux 世界」

设为「星标」,每天带你玩转 Linux !

9b5617e2d01f9b2f557a2ee0c3511f58.png

本文翻译自 2020 年的一篇英文文章 DO I REALLY NEED A VPC?[1]

由于译者水平有限,本文不免存在遗漏或错误之处。如有疑问,请查阅原文。

以下是译文。



从安全的角度来说,VPC 非但不是一种超能力,反而是另一层责任(another layer of responsibility)。

准备在 AWS 上部署应用?那你需要一个 VPC[2]:这种虚拟私有网络(virtual private network)能够保护你的应用免受来自公网的攻击, 就像它们部署在老式数据中心一样。这是“虚拟机为王” —— 即所谓 的 Cloud 1.0 (IaaS 浪潮) —— 时代的指导哲学

但如今,当我在云上构建新应用或与同行交流类似主题时,我们通常都不会提到 “VPC”。这 是因为,人们越来越倾向于将云原生应用(cloud-native applications)直接部署在更 高层的托管服务之上 —— 例如 Lambda、API Gateway 和 DynamoDB —— 这些服务通过 API 与彼此进行通信。在 AWS 上,这种情况下的最佳实践是 使用 IAM[3] 做认证和鉴权,以保障微服务间的通信安全。

如果需要将公有云和私有数据中心打通,那 VPC 是不可或缺的。但**现代云原生应用 的安全,真的还需要 VPC 扮演关键角色吗?**在给出我自己的答案之前,我先陈述几位业 内专家的观点。

1. 需求分析:VPC 是可选还是必需?

也许此刻你正在与安全团队一起,评估你们为本地部署的应用(on-prem applications )设计的云原生方案【译者注 1】。你们的评估方式是:对照一个清单(checklist),逐 一检查方案是否满足其中列出的要求,满足的就打对勾(checking the box)。我们来听听 PurpleBox Security 公司的 Nihat Guven 对此怎么说:“安全(security)与合规 (compliance)在其中同样重要,二者互相追赶(playing catch-up)”。但是,相比 于真正去思考 VPC 能否提供安全优势、能提供哪些安全优势,“大家更多地将精力放在了 合规方面,即 —— 遵循既有标准,只要清单上列出了(例如,VPC),我们就做”。

【译者注 1】

On-premises 表示部署在私有数据中心。这个词来源于单词 “premises”,注意这是一个 独立的单词,并不是 “premise”(“前提、假设”)的复数形式(虽然 “premise” 的复数也 是“premises”)。单词 “premises” 表示“(企业、机构的)营业场所”,由此引申出两个 早期术语:

  • on-premises:本地机房

  • off-premises:非本地机房

到了云计算时代,公有云显然就是 off-premises 模式(不过没人这么叫);与此相 对应,on-premises 指没有部署在公有云上的,一般就是公司自己的数据中心,不管是自建的 还是租赁的,也不管是自维护的还是托管的。On-premises 或 on-premises deployment 现在一般翻译为“本地部署”,虽然“本地”一词通常让人首先想到的是 “local”。

另一位 AWS hero Teri Radichel(即将出版的 *Cloud Security for Executives* 一 书的作者)赞同这样一种观点:VPC 并没有什么神奇之处。“VPC 实际上并没有做任何 事情”,她指出。“你真正需要的是一个包含 NACL、子网和安全组的合理网络架构。你 需要知道如何构建这样的架构,然后才能针对攻击做好监控。此外,你还要理解网络的各个 分层、攻击的种类,以及攻击者是如何渗透网络的。”

这引出了问题的关键所在:基于 IAM 的安全方案,其暴露面已经是理论上最小的;而为应 用添加 VPC 这件事情,最终都会变成在这个最小暴露面之外,再加额外的防护层( adding layers of security to the theoretical minimum imposed by IAM)。所以你 引入 VPC 并不是为了解决某个问题,而是为了 —— 例如,增加额外的保护层防止数据渗透( data exfiltration),或者能够对流量模式进行更细粒度的分析。

以上例子都说明,很多时候 VPC 只是可选项,而非必需。遗憾的是,很多工程师并没有理 解到这一层。

2. 利弊权衡:额外的责任而非超能力

从安全的角度来说,VPC 非但不是一种超能力(superpower),反而是额外的责任 (additional responsibility)

“如果没有业务需求 —— 例如与私有数据中心互联 —— 那最好不要引入 VPC”,否则,“由 于 VPC 而引入的额外复杂性对安全配置来说非但无益,反而有害”。– Don Magee,前 AWS 安全专家

确实,对于安全配置来说,越多并非永远意味着越好(more is not always better) 。如果你连配置 IAM 角色都还没搞熟,那又如何相信你能做好 VPC 安全?如果你连 S3 bucket 的 public 属性都不清楚,那又如何确定你能管好安全组、ACL 以及 VPC 引入的 subnets?

VPC 确实会带来一些额外的网络监控工具,例如 flow logs,但问题又来了:你知道如何高 效地使用这些工具吗?如果不知道,那就是在花大价钱抓数据,但又没有如何分析这些数据 的清晰计划。

另外,并不是说引入了 VPC,它就自动为你的数据提供一层额外的防护。正如 Magee 提醒我们的:“即使在 VPC 内,数据的保护也仅仅 HTTPS 加密 —— 就像你自己用 HTTPS 加 密一样。你觉得这种安全值得信赖吗?”。

3. 云原生安全:模型抽象与安全下沉

云安全太难了!但我显然不是在鼓励大家因此而放弃。相反,正是因为云安全如此困难且重 要(both hard and important),我才建议你不要轻易引入自己的网络控制方案,而 应该尽可能用好平台提供的安全能力

这听起来像是 “serverless” 的套路 —— 事实上,我们确实离此不远了。毕竟,如 AWS Lambda 项目的创始人 Tim Wagner 所乐于指出[4]的,所有 Lambda functions 默认都在 VPC 内运 行 —— 这种 VPC 是 AWS 托管的,因此比大部分人自维护的 VPC 要更安全(我们得 承认这个事实)。

这是目前大的技术趋势。AWS 仍然会维护主机层安全(host-level security),同时也会 提供更上层的服务,例如 AppSync 和 DynamoDB。但我并不是说网络安全在这些领域已经式 微了,而是说越来越多的职责下沉到了云提供商那里。你确实会失去一些控制能力 ,但换来的是 AWS 最佳实践的保驾护航之下,更快的应用构建速度

你可能会说,保护云原生应用的安全其实最后就是:“要么裸奔,要么上云”(letting go and letting cloud)。确实,但这种职责模型转变(paradigm shift)是传统的安全团队才需要关心的[5] ;对于用户来说,只需要用好这种优势,自然就会取得巨大收益。

4344f59db9be99d8b1a7f2db7f786599.png

因此,尝试去建立你的威胁模型,理解你面临的风险,对你的团队进行恰当的培训。做完这 些你可能会发现,你最终还是需要 VPC,但那说明你是真的需要它,而不是为了合规或其 他需求而无脑地引入。

如果有一天,你的云原生蜘蛛侠(cloud-native Spidey)意识开始变得模糊,有一点还请 牢记:有时候,责任越小,能力越大(sometimes, great power comes from less responsibility)。

引用链接

[1]

DO I REALLY NEED A VPC?: https://info.acloud.guru/resources/do-i-really-need-a-vpc

[2]

VPC: https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html

[3]

IAM: https://aws.amazon.com/iam/

[4]

所乐于指出: https://medium.com/@timawagner/not-using-serverless-yet-why-you-need-to-care-about-re-invent-2019s-serverless-launches-c26fa0263d77

[5]

传统的安全团队才需要关心的: https://containerjournal.com/topics/container-ecosystems/comparing-serverless-and-containers-which-is-best/

原文链接:https://arthurchiao.art/blog/do-i-really-need-a-vpc-zh/

本文转载自:「云原生实验室」,原文:https://tinyurl.com/htn44edf,版权归原作者所有。欢迎投稿,投稿邮箱: editor@hi-linux.com。

cbf4497c56dbf170d1ec70f64ba32cb3.gif

ae0e4115aa0dfcb89658fbb53ae8e342.png

你可能还喜欢

点击下方图片即可阅读

53398fdf7227478e9b4d19f6d2d81176.png

超实用,推荐一款命令行终端网页分享利器

1e48cf2d9c2979427214baa16a752dc0.png
点击上方图片,『美团|饿了么』外卖红包天天免费领

7aa803de29934a0ab353119687c153ec.png

更多有趣的互联网新鲜事,关注「奇妙的互联网」视频号全了解!

这篇关于云原生时代,你的 Kubernetes 应用安全是否还需要 VPC 来保证?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/754774

相关文章

Java实现检查多个时间段是否有重合

《Java实现检查多个时间段是否有重合》这篇文章主要为大家详细介绍了如何使用Java实现检查多个时间段是否有重合,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录流程概述步骤详解China编程步骤1:定义时间段类步骤2:添加时间段步骤3:检查时间段是否有重合步骤4:输出结果示例代码结语作

Java判断多个时间段是否重合的方法小结

《Java判断多个时间段是否重合的方法小结》这篇文章主要为大家详细介绍了Java中判断多个时间段是否重合的方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录判断多个时间段是否有间隔判断时间段集合是否与某时间段重合判断多个时间段是否有间隔实体类内容public class D

C#比较两个List集合内容是否相同的几种方法

《C#比较两个List集合内容是否相同的几种方法》本文详细介绍了在C#中比较两个List集合内容是否相同的方法,包括非自定义类和自定义类的元素比较,对于非自定义类,可以使用SequenceEqual、... 目录 一、非自定义类的元素比较1. 使用 SequenceEqual 方法(顺序和内容都相等)2.

查询Oracle数据库表是否被锁的实现方式

《查询Oracle数据库表是否被锁的实现方式》本文介绍了查询Oracle数据库表是否被锁的方法,包括查询锁表的会话、人员信息,根据object_id查询表名,以及根据会话ID查询和停止本地进程,同时,... 目录查询oracle数据库表是否被锁1、查询锁表的会话、人员等信息2、根据 object_id查询被

5分钟获取deepseek api并搭建简易问答应用

《5分钟获取deepseekapi并搭建简易问答应用》本文主要介绍了5分钟获取deepseekapi并搭建简易问答应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1、获取api2、获取base_url和chat_model3、配置模型参数方法一:终端中临时将加

JavaScript中的isTrusted属性及其应用场景详解

《JavaScript中的isTrusted属性及其应用场景详解》在现代Web开发中,JavaScript是构建交互式应用的核心语言,随着前端技术的不断发展,开发者需要处理越来越多的复杂场景,例如事件... 目录引言一、问题背景二、isTrusted 属性的来源与作用1. isTrusted 的定义2. 为

浅析Rust多线程中如何安全的使用变量

《浅析Rust多线程中如何安全的使用变量》这篇文章主要为大家详细介绍了Rust如何在线程的闭包中安全的使用变量,包括共享变量和修改变量,文中的示例代码讲解详细,有需要的小伙伴可以参考下... 目录1. 向线程传递变量2. 多线程共享变量引用3. 多线程中修改变量4. 总结在Rust语言中,一个既引人入胜又可

Python调用另一个py文件并传递参数常见的方法及其应用场景

《Python调用另一个py文件并传递参数常见的方法及其应用场景》:本文主要介绍在Python中调用另一个py文件并传递参数的几种常见方法,包括使用import语句、exec函数、subproce... 目录前言1. 使用import语句1.1 基本用法1.2 导入特定函数1.3 处理文件路径2. 使用ex

Kubernetes常用命令大全近期总结

《Kubernetes常用命令大全近期总结》Kubernetes是用于大规模部署和管理这些容器的开源软件-在希腊语中,这个词还有“舵手”或“飞行员”的意思,使用Kubernetes(有时被称为“... 目录前言Kubernetes 的工作原理为什么要使用 Kubernetes?Kubernetes常用命令总

k8s部署MongDB全过程

《k8s部署MongDB全过程》文章介绍了如何在Kubernetes集群中部署MongoDB,包括环境准备、创建Secret、创建服务和Deployment,并通过Robo3T工具测试连接... 目录一、环境准备1.1 环境说明1.2 创建 namespace1.3 创建mongdb账号/密码二、创建Sec