Kubernetes访问控制的10个关键要素

admin 2022年3月29日13:30:18评论32 views字数 4139阅读13分47秒阅读模式

Kubernetes访问控制的10个关键要素Kubernetes是一种用于管理容器化应用程序的自动化系统,它为开发人员提供了多种好处。它通过在现有 pod 崩溃时自动创建新 pod 来消除应用程序停机时间,并且它允许团队轻松扩展应用程序以适应流量的增加或减少。由于这些和其他功能,许多组织正在将其现有应用程序迁移到 Kubernetes。

使用云供应商提供的托管 Kubernetes 服务时,例如 Amazon Elastic Kubernetes Service (Amazon EKS)、Google Kubernetes Engine (GKE) 或 Azure Kubernetes Service (AKS),您需要确定用户对该服务的访问权限. Kubernetes 提供了一个命令行客户端工具 kubectl,它使用您的管理配置文件来访问您的 Kubernetes 集群。如果其他团队成员需要访问该集群,您需要创建一个具有适当访问权限的单独配置文件,这可以通过 Kubernetes 访问控制来处理。

但并非组织的所有成员都需要相同级别的访问权限。例如开发和销售团队将有不同的需求。因为跨组织的过于广泛的访问可能会增加人为错误或安全漏洞的风险,所以 Kubernetes 允许您创建不同的角色并将所需的权限分配给这些角色,然后将角色分配给不同的用户。

在分配 Kubernetes 访问控制时,需要牢记一些基本组件。以下是其中的十个组件,它们将帮助您改善开发人员体验 (DX) 和安全性,并优化您的应用程序的可扩展性。

1. 单点登录

您可以使用单点登录 (SSO) 身份验证来访问您的 Kubernetes 集群,而不是依赖可能会带来安全风险的静态密码。Kubernetes 提供了使用OpenID Connect (OIDC) 令牌对 SSO 进行身份验证的能力,这提供了用户友好的登录体验。OIDC 支持 Salesforce、Azure AD 和 Google 等身份提供商,它们将为您提供访问令牌、ID 令牌和刷新令牌。ID 令牌是一个JWT,您可以随后将其用于授权。

Dex是 Kubernetes 集群上的另一个 SSO 开源工具,由 CoreOS 开发。Dex 支持用于 SSO 的 LDAP、GitHub、SAML 2.0、GitLab、OAuth 2.0、Google、LinkedIn、Microsoft、Bitbucket Cloud、OpenShift、Atlassian Crowd、Gitea 和 OpenStack Keystone。您可以使用 Dex 控制登录后的令牌生成,并在需要时强制用户重新进行身份验证。Dex 还提供了强大的文档来实现各种连接器。

2. 审计日志

审计日志功能记录对 Kubernetes 集群的所有请求。它捕获 Kubernetes API 服务器中请求的 URL、哪些用户或服务发出了请求、发出请求的时间、发出请求的位置,以及请求被放行或拒绝的原因。审计日志以JSON Lines格式存储数据,并在键值对中包含元数据。

有许多工具可用于分析审计日志文件,例如Prometheus和Grafana。分析可帮助您检测身份验证或授权失败以及 API 请求缓慢等问题。您还可以使用日志报告数据来识别集群的异常流量,这可以帮助您缓解任何攻击。

这对于您的服务器应用程序来说是一项至关重要的功能,因为日志会告诉您集群的执行情况以及是否存在问题。

3. 基于角色的访问控制

基于角色的访问控制(RBAC) 用于向 Kubernetes 集群添加新用户或组。默认情况下,管理员配置证书文件不能分发给所有用户。通过使用 RBAC,您可以定义哪些用户可以访问哪些 Kubernetes 组件以及他们可以对每个组件执行哪些活动。

RBAC 的四个组成部分是Role、ClusterRole、RoleBinding和ClusterRoleBindingRole ClusterRole定义访问权限。并将RoleBinding和ClusterRoleBinding绑定到用户。和是相同的,但是为特定命名空间创建的,而是用于集群的。

RBAC 可以与 OIDC 一起使用,因此您可以控制 Kubernetes 组件对创建的用户或组的访问权限。Role通过使用 RBAC,您可以使用和定义哪些用户或组可以访问哪些资源RoleBinding。RBAC 允许灵活的访问控制;您可以随时添加或修改访问权限。

4.策略配置

Kubernetes 策略允许您限制资源使用并保护组件免受未经授权的访问。策略包括资源配额、Pod 安全策略和网络策略。

网络策略允许您通过限制节点端口访问来控制 Pod 的网络访问。资源配额用于限制 Kubernetes 组件对 CPU 和内存的使用。如果组件超出限制,则无法创建这些组件,这将返回 HTTP 状态码403 Forbidden。最后,Kubernetes 集群中的 pod 用于运行应用程序。Pod 安全策略允许您定义某些条件,并且 Pod 只有在满足这些条件时才会运行。

5. Kubernetes 上下文

kubeconfig 文件用于身份验证和授权。在该文件中,kube-context 包含 Kubernetes 集群(服务器 URL 和证书颁发机构数据)、用户名和命名空间。这种类型的文件是使用 RBAC 或托管 Kubernetes 提供程序创建的。

上下文定义了哪个用户与哪个命名空间和哪个集群相关联,因为 kubeconfig 文件可以选择定义多个 Kubernetes 集群 URL。使用kubectl config current-context命令获取当前上下文,然后使用kubectl config use-context namespace_name命令切换到不同的上下文。

etcd是一个 Kubernetes 控制平面组件,是一个高可用的键值对存储。所有 Kubernetes 集群数据都将存储在 etcd 中,作为分布式数据库。ectd 允许 Kubernetes 集群中的所有节点读写组件的状态数据。它存储 Kubernetes 组件的实际状态和期望状态。该kubectl get命令从 etcd 读取数据,并且该kubectl create命令在 etcd 中创建新条目。保护 etcd 很重要,因为如果未经授权的人获得访问权限,他们可以修改或删除 Kubernetes 组件的任何数据。所以要为 etcd 启用TLS以保护其免受未经授权的访问。

7. 强化工作节点访问

每当您使用 kubectl 发出命令时,Kubernetes 集群中的工作节点都会为您完成工作。控制平面根据命令指示工作节点,然后将组件状态数据存储在 etcd 数据库中。这意味着 pod 将仅在工作节点上运行。

如果有人使用 SSH 连接获得对工作节点的访问权限,他们可能会对您的应用程序造成安全威胁。您不应该直接访问您的工作节点。确保节点已禁用 SSH 访问。控制工作节点中的网络端口访问,以避免不必要的问题。

8. 外部密钥存储

Kubernetes Secret 用于存储敏感信息,例如密码。但是,默认情况下数据是 Base64 编码的,这不足以保护应用程序凭据。

建议使用外部机密管理器,因为如果用户可以访问这些凭据,则会增加滥用的可能性。有许多工具和提供程序可以存储您的敏感数据,例如AWS Secrets Manager和HashiCorp Vault。

9. 命名空间

命名空间用于隔离 Kubernetes 组件。您可以根据需要将 pod、服务或机密等组件放置在不同的命名空间中,甚至可以在一个命名空间中运行数据库 pod,在另一个命名空间中运行前端应用程序 pod。

如果您拆分前端应用程序和数据库应用程序,您可以使用 RBAC 创建访问权限并轻松限制对 Kubernetes 组件的访问。带有命名空间的 RBAC 将帮助您实现更好的资源访问控制。

10. 持续更新

Kubernetes 每年发布 3 次新版本,每次都应该更新集群。新版本将解决任何现有的错误并添加新功能。例如,在 Kubernetes 1.6 版中添加了 RBAC。如果您不不断更新,那么您将无法使用最新的功能。

如果您使用托管 Kubernetes 提供程序,那么升级过程会更容易。您的提供商将处理工作并为您提供更新的用户界面。

总结

Kubernetes 虽然很受欢迎,但它是一个复杂的平台,您必须密切关注您在集群上提供的用户访问权限。并非所有用户都需要对所有组件具有相同级别的访问权限。确保特定用户访问将帮助您确保集群安全并确保整个组织的透明度更高,因为每个团队成员都将知道他们在 Kubernetes 应用程序中定义的角色。

这些访问控制组件的实施听起来可能很耗时,但您的托管 Kubernetes 提供商可以帮助甚至为您完成大部分工作。提前花时间确保适当的访问控制将使您和您的组织免于遇到不可预估的麻烦。

推荐阅读 点击标题可跳转

《Docker是什么?》

《Kubernetes是什么?》

《Kubernetes和Docker到底有啥关系?》

《教你如何快捷的查询选择网络仓库镜像tag》

《Docker镜像进阶:了解其背后的技术原理》

《教你如何修改运行中的容器端口映射》

《k8s学习笔记:介绍&上手》

《k8s学习笔记:缩扩容&更新》

《Docker 基础用法和命令帮助》

《在K8S上搭建Redis集群》

《灰度部署、滚动部署、蓝绿部署》

《PM2实践指南》

《Docker垃圾清理》

《Kubernetes(k8s)底层网络原理刨析》

《容器环境下Node.js的内存管理》

《MySQL 快速创建千万级测试数据》

《Linux 与 Unix 到底有什么不同?》

《浅谈几种常见 RAID 的异同》

《Git 笔记-程序员都要掌握的 Git》

《老司机必须懂的MySQL规范》

《Docker中Image、Container与Volume的迁移》

《漫画|如何用Kubernetes搞定CICD》

《写给前端的Docker实战教程》

《Linux 操作系统知识地图2.0,我看行》

《16个概念带你入门 Kubernetes》

《程序员因接外包坐牢456天,长文叙述心酸真实经历》

《IT 行业老鸟,有话对你说》

《HTTPS 为什么是安全的?说一下他的底层实现原理?



免责声明:本文内容来源于网络,所载内容仅供参考。转载仅为学习和交流之目的,如无意中侵犯您的合法权益,请及时联系Docker中文社区!



Kubernetes访问控制的10个关键要素

Kubernetes访问控制的10个关键要素

原文始发于微信公众号(Docker中文社区):Kubernetes访问控制的10个关键要素

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年3月29日13:30:18
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Kubernetes访问控制的10个关键要素http://cn-sec.com/archives/850543.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息