Kubernetes 最佳实践:安全性





5.00/5 (2投票s)
在本文中,我们将探讨三个常见的安全挑战,以及如何克服这些挑战。
Kubernetes 最佳实践:安全性
Kubernetes 抽象了足够多的基础设施层,以便开发人员可以自由部署,同时运维团队可以保留对重要的治理和风险控制的访问权限。 挑战在于,不熟悉 Kubernetes 的开发团队可能会忽略一些关键的安全功能。 通常,让某事正常工作的最简单方法是削弱其安全性。
让我们看看三个常见的安全挑战,以及如何克服它们。
良好的流量突增 vs. 糟糕的流量突增
Kubernetes 对流量突增反应良好——无论是好是坏。 如果您看到合法的流量突增,Kubernetes 将扩展以满足需求的增长。 您的应用程序将在集群中消耗更多资源,而不会降低性能。 这是一个主要优势。 但是,如果发生拒绝服务 (DoS) 攻击,Kubernetes 将执行完全相同的操作,您将为流量超载付出代价。
K8S 最佳实践 #1 – 设置以下限制
- 每个 IP 地址的并发连接数
- 每个用户每秒、每分钟或每小时可以发出的请求数
- 请求主体的大小
- 并针对各个主机名和路径调整这些限制
授予安全级别的访问权限
部署新应用程序或配置新用户最简单的方法是授予管理员权限。 但这也是最危险的方法 - 如果攻击者获得对该帐户的访问权限,他们将可以访问所有内容。
K8S 最佳实践 #2 – 采用基于角色的访问控制 (RBAC) 来遵循最小权限原则
RBAC 允许您向用户授予对 Kubernetes API 资源的精细访问权限。 您应该使用 Roles
或 ClusterRoles
定义访问配置文件。 使用 Roles
,您将授予对单个命名空间的访问权限。 使用 ClusterRoles
,您可以授予对没有命名空间的资源(如 Nodes
和 PersistentVolumes
)以及所有命名空间资源的访问权限。
虽然 RBAC 配置可能令人困惑和冗长,但像 rbac-manager 这样的工具可以帮助简化语法。 这有助于防止错误,并提供更清晰的了解谁有权访问什么。
最终结果? 通过仅授予工作负载执行其工作所需的权限,您将限制攻击者对 Kubernetes 环境造成的损害。
保持 Kubernetes Secrets 的机密性
如果您使用 Kubernetes 基础设施即代码 (IaC) 模式,您将受益于拥有完全可重现的环境。 但这里有一个问题 - 您的部分基础设施可能包括 Kubernetes Secrets
,它存储和管理敏感信息,例如密码、OAuth 令牌和 ssh 密钥。 您不应将 Secrets
添加到您的 IaC 存储库。
将 Kubernetes Secrets
签入您的基础设施即代码存储库以便您的构建是 100% 可重现的,这很诱人。 但是,如果您关心安全性,请不要这样做。 一旦签入,您的 Secrets
将永久暴露给任何有权访问您的 Git 存储库的人。
K8S 最佳实践 #3 - 在将您的 secrets 签入到您的基础设施存储库之前对其进行加密
解决方案是折中方案:加密所有 secrets,以便您可以安全地将它们签入您的存储库,而无需担心暴露它们。 然后,您只需访问一个加密密钥即可“解锁”您的 IaC 存储库,并拥有完全可重现的基础架构。 像 Mozilla 的 SOPS 这样的开源工具可以帮助解决这个问题。
您可以阅读更多关于 k8s 安全的最佳实践,了解我们如何为客户的托管 Kubernetes 部署实施安全措施。
您还可以查看围绕效率的 Kubernetes 最佳实践。