云原生应用程序越来越火,但是设计容器化应用程序或微服务只是冰山一角。我们在设计中所做的工作需要进一步扩大界限。
软件不仅是要为客户提供服务,它还应具有高度的可靠性和可用性。而这,只有通过严格控制开发流程以及专注于持续集成,持续交付才能实现。
当然,作为开发人员,你不想在编写代码或定义DockerFile等文件时受到太多限制。但是你必须认识到,你对自己和团队施加的约束越多,输出就会越稳定。
当这些约束成为一种习惯时,你甚至不会再注意到它们。慢慢地,团队和团队成员将学到比预期更多的有关安全操作的知识,改进了开发和交付流程,并使软件“投产”决策变得更加简单和顺利。
在以前,当我们开发应用程序或产品时,我们通常遵循以下步骤(按此顺序或多或少):
- 分析并明确你的市场需求。
- 定义你的软件架构,数据库,模型等。
- 开始编码。
- 准备测试,实施CI / CD流程。
- 建立你的生产环境。
- 投入生产。
以前当会有一位优秀的系统管理员,来帮助你关注应用实例的安全性。但作为开发人员,你实际上会讨厌他们-因为他们总是会批评你做了“不应该做”或“不正确”的事情的。
但是在云原生应用程序中,如果我们做的事情有所不同,要确保我们为客户提供的产品高度可靠,高可用情况下,该怎么办?
1. 生产环境是关键
我们知道工作负载的任何部分都可能崩溃。
你的生产系统和客户是相互依存的。我们的目标始终是避免停机并提供最佳服务。因此,为什么不首先改变代码的设计方式?
因此,让我们更新产品创建过程:
- 分析并明确你的市场需求。
- 定义你的生产体系结构:需要的第三方类型,部署策略(CI / CD,工具等),容器技术。
- 对于上面列出的每个组件,明确安全性的限制性方法。例如:
- 为你的Dockerfile定义模板和准则
- 定义webhooks的配置,认真检查文件修改。
- 定义访问每个项目和环境的用户角色。
- 创建自定义的约束。
- 现在可以做出数据库或其他第三方组件的决策。
- 在这种情况下,编码可能会有些局限,但这是最好的。
- 投入生产
对于每个新项目,按照此过程进行更改可能在一开始都是很耗时的,但是如果我们从整体上看,我们知道它将为你的团队构建坚如磐石的工作环境,并为客户提供可靠的软件。
2. 实施Kubernetes控制策略
开发人员选择使用Kubernetes的原因有很多:好奇心,想了解“新”技术,可伸缩性需求等等。
Kubernetes不是魔术。当我开始使用它时,我感到很失望,意识到我要被yaml文件控制了。
话虽这么说,一旦你深入研究,你就会意识到它实际上可以成为各种生产环境中的强大工具。
我坚信Kubernetes是值得使用的工具,尽管它并不像我们想要的那样简单。
另外,如果它是Kubernetes的生产体系架构的一部分,则Kubernetes为你提供了许多限制环境和容器的可能性。
不幸的是,每个人都需要全心投入Kubernetes环境的配置中才能发现这些可能性,因为默认情况下它们并未嵌入大多数Managed Kubernetes产品中。
此外,对于基于角色的访问控制(RBAC),你可以在集群的所有层(从云到代码)上定义策略。
Admission controllers(准入控制器),将为你提供部署到Kubernetes集群的所有对象的规则。这些使你可以强制执行容器pull策略,证书配置,pod特权和访问等。
这就是为什么定义Kubernetes对象,容器和Pod之间的交互至关重要的原因。在生产启动并运行之后,要确定所需的限制,以确保重新部署所有对象并使其符合新策略,这将是一个真正的挑战。
3. 确保第三方组件的安全
作为开发人员,几年前,我并没有真正考虑过我所使用的第三方中组件的现有安全问题,例如Cassandra,Redis,PostgreSQL,ElasticSearch,Kibana等。
老实说,我从来没有考虑过安全方面。我仅出于服务目的使用这些工具。
但是,像所有软件一样,第三方组件也有一个缺点:都是由人类编写的,而且据我们所知,他们也经常修补漏洞。每次使用外部工具时,都应遵循安全评估流程。只要我们知道并且能够集成必要的安全层,就可以避免使用不完善和不安全的工具。
第三方代码安全性问题也会影响我们自己的代码。例如,我们使用多个库(有时甚至是同一库的不同版本),但是我们很少更新版本和关联的代码,删除不推荐使用的功能,在出现漏洞警报后没有及时修补等。
4. 速度慢一点
云原生应用程序,持续集成和持续部署等越来越快。
不幸的是,提高速度会直接影响我们产品的安全性和可靠性,使我们容易受到攻击并影响我们服务的可用性。反过来,这也会影响我们的客户。
我们为我们的产品和客户服务。但是,有时,实现我们目标的最佳方法是慢一点,总结我们的错误并从中学习。
可靠性对于你和你的客户来说是一切。
译文链接:https://thenewstack.io/how-design-impacts-the-security-of-cloud-native-applications/
登录后评论
立即登录 注册