增强云原生应用安全性的4个因素

云原生应用程序越来越火,但是设计容器化应用程序或微服务只是冰山一角。我们在设计中所做的工作需要进一步扩大界限。

软件不仅是要为客户提供服务,它还应具有高度的可靠性和可用性。而这,只有通过严格控制开发流程以及专注于持续集成,持续交付才能实现。

当然,作为开发人员,你不想在编写代码或定义DockerFile等文件时受到太多限制。但是你必须认识到,你对自己和团队施加的约束越多,输出就会越稳定。

当这些约束成为一种习惯时,你甚至不会再注意到它们。慢慢地,团队和团队成员将学到比预期更多的有关安全操作的知识,改进了开发和交付流程,并使软件“投产”决策变得更加简单和顺利。

在以前,当我们开发应用程序或产品时,我们通常遵循以下步骤(按此顺序或多或少):

  1. 分析并明确你的市场需求。
  2. 定义你的软件架构,数据库,模型等。
  3. 开始编码。
  4. 准备测试,实施CI / CD流程。
  5. 建立你的生产环境。
  6. 投入生产。

以前当会有一位优秀的系统管理员,来帮助你关注应用实例的安全性。但作为开发人员,你实际上会讨厌他们-因为他们总是会批评你做了“不应该做”或“不正确”的事情的。

但是在云原生应用程序中,如果我们做的事情有所不同,要确保我们为客户提供的产品高度可靠,高可用情况下,该怎么办?

1. 生产环境是关键

我们知道工作负载的任何部分都可能崩溃。

你的生产系统和客户是相互依存的。我们的目标始终是避免停机并提供最佳服务。因此,为什么不首先改变代码的设计方式?

因此,让我们更新产品创建过程:

  1. 分析并明确你的市场需求。
  2. 定义你的生产体系结构:需要的第三方类型,部署策略(CI / CD,工具等),容器技术。
  3. 对于上面列出的每个组件,明确安全性的限制性方法。例如:
    • 为你的Dockerfile定义模板和准则
    • 定义webhooks的配置,认真检查文件修改。
    • 定义访问每个项目和环境的用户角色。
  4. 创建自定义的约束。
  5. 现在可以做出数据库或其他第三方组件的决策。
  6. 在这种情况下,编码可能会有些局限,但这是最好的。
  7. 投入生产

对于每个新项目,按照此过程进行更改可能在一开始都是很耗时的,但是如果我们从整体上看,我们知道它将为你的团队构建坚如磐石的工作环境,并为客户提供可靠的软件。

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/

K8S中文社区微信公众号

评论 抢沙发

登录后评论

立即登录