在 Kubernetes 中安全地运行应用

在 Kubernetes 中安全地运行应用

背景

在近期的工作当中我大量接触 Kubernetes 集群以及容器化应用,在完成 Operator 拓展的开发和发布后,有海外用户反映在 OpenShift 平台上运行我们的容器化应用会遇到安全性问题,具体而言是我们的容器化应用默认需要 root 用户运行,而 OpenShift 平台如果不进行专门的设置是不允许容器使用 root 用户的。为了解决该用户的问题我们花费了一些功夫,正好我也想以此为契机进一步了解如何在 Kubernetes 中安全地运行应用。本文将记录我在调研和学习过程中的一些心得体会。

容器安全

Docker Init CLI

Docker Init 命令是用来创建遵循最佳实践的 Docker 配置文件的命令行工具。在使用时通过选择需要运行的应用类型(例如 Go、Python、Node、Rust 等),Docker 会自动帮助用户创建出符合最佳实践的 Dockerfile 和 compose.yaml 文件。

我的操作系统是 macOS, Docker 版本为 25.0.5,后续的版本中支持的应用类型可能会更多。

阅读更多

论文阅读: Role-Based Access Control Models, 1996

摘要

论文描述的方法简称 RBAC,基于角色的访问控制,是目前非常主流的访问控制方法。用户(User)、角色(Role)和权限(Permission)是论文中最主要的三个概念。角色和用户组这个概念很像,但是用户组仅仅只是一个用户集合,而角色则联系着用户和权限。说到底都是为了让用户获取权限来执行相应的操作,不管是加入角色还是用户组,都只是一个中间态。

RBAC0 是基础模型,是任何系统实现 RBAC 的最低要求。RBAC1 和 RBAC2 都包含了 RBAC0,但是分别加入了不同的特性。RBAC1 加入了角色层级特性,即角色 A 可以通过继承角色 B 获取角色 B 拥有的权限。RBAC2 加入了约束特性,控制用户对 RBAC 中不同资源、组件的权限。而 RBAC3 包括了角色层级和约束。示意图如下所示,其中基础模型 RBAC0 是实线部分。

阅读更多