如何在智能告警平台CA触发测试告警
863
2022-10-30
Kubernetes 安全基础
Kubernetes在开发者和管理员中很受欢迎,人们都非常熟悉部署、扩展和管理容器化应用程序这些概念。而在讨论生产部署时,对生产部署至关重要的一个 Kubernetes 领域就是安全性。了解平台如何管理用户和应用程序的身份验证和授权十分重要。
如果您的 Kubernetes 集群包含敏感信息,例如银行账户明细、病历或任何机密信息,应利用 Kubernetes 提供的所有安全预防措施。此外,您还可以使用大量非 Kubernetes 特定的安全工具和方法来添加额外的安全层。
Kubernetes 重要的安全组件
Kubernetes API 服务器 (kube-apiserver) 是接收所有传入请求的组件。传入的请求经过处理以修改集群的状态。Kubernetes 中的所有请求都源自:
外部用户服务帐户Kubernetes 组件
在访问 kube-apiserver 之前,有一些安全组件可帮助您为应用程序引入安全措施。以下是可帮助您保护 Kubernetes 应用程序的组件:
身份验证授权准入控制器
图 1 展示了 Kubernetes 工作流程图。在请求流经身份验证模块、授权模块和准入控制器后,将处理该请求。
图 1:Kubernetes 工作流程
身份验证模块
如果请求的来源未知,Kubernetes 会将其视为匿名请求。根据组件的配置,身份验证模块可能会允许或丢弃匿名请求。以下是一些最常用的身份验证策略:
客户端证书
认证中心可帮助创建 X509 证书,从而帮助验证客户端证书。
静态令牌
API 服务器使用静态文件读取不记名令牌。令牌文件是逗号分隔的文件,其中包含 secret、user、uid、group1 和 group2。
基本身份验证
Kubernetes 还支持基本身份验证。身份验证凭证以 password、user、uid、group1 和 group2 形式存储在 CSV 文件中。
服务帐户令牌
服务帐户由 kube-apiserver 创建,并且与 pod 关联。它用于验证签名的不记名令牌。
Webhook 令牌
Kubernetes 在集群外部调用 REST API,以确定用户的身份。
授权模块
一旦身份验证模块标识了请求的来源,主动授权模块就会根据用户的授权策略来评估请求的属性,以允许或拒绝该请求。每个请求都按顺序流经授权模块,如果任何模块提供允许或拒绝请求的决定,那么会自动接受或拒绝该请求。以下是一些常用的授权策略:
请求属性
授权模块将解析请求中的一组属性,以确定应解析、允许还是拒绝该请求。
节点
节点授权模式向 kubelets 授予访问服务、端点、节点、pod、密钥和节点持久卷的权限。
基于属性的访问控制 (ABAC)
使用 ABAC,可以通过根据请求的属性验证策略来允许请求。
基于角色的访问控制 (RBAC)
通过 RBAC,使用分配给各个用户的角色来管理对资源的访问。
Webhook
与用于身份验证的 Webhook 模式类似,用于授权的 Webhook 模式使用远程 API 服务器来检查用户权限。
准入控制器
准入控制器是在对请求进行身份验证和授权后,用于拦截对 API 服务器的请求的模块。在修改集群中对象的状态之前,控制器会验证和更改请求。控制器可以同时进行更改和验证。如果任何一个控制器拒绝请求,就会立即丢弃该请求,并且向用户返回错误,以便不处理该请求。您可以使用 --enable-admission-plugins 标志启用准入控制器。重要的准入控制器包括:
AlwaysAdmitAlwaysPullImagesEventRateLimitLimitRangerNodeRestrictionPersistentVolumeClaimResizePodSecurityPolicySecurityContextDenyServiceAccount
保护容器镜像
您应该安排定期扫描容器镜像。容器镜像扫描工具(例如 Portieris 和 Grafeas)可检查镜像中包含的软件包,并帮助报告这些软件包中包含的任何已知漏洞。当您确定容器镜像包含带有漏洞的软件包时,应更新容器,以使其使用该软件包的固定版本。
最佳做法是不要通过 SSH 连接到正在运行的容器。如果纳入了 Kubernetes 的自我修复特性(可确保将发生故障的容器替换为新容器)和自动缩放功能(可自动创建和销毁容器),那么就无法手动执行修补过程。
CI/CD 最佳实践
可以将镜像扫描集成到持续集成和持续交付 (CI/CD) 流水线中。遵循一些最佳实践:
扫描失败会导致构建失败。部署前扫描失败可能会使镜像无法部署。对已在生产中的镜像扫描失败可能会导致出现警报,从而使操作员能够采取补救措施。
有关 RBAC 的更多信息
基于角色的访问控制 (RBAC) 是一种向用户授予特定资源访问权的安全方法。以下是 RBAC 的大致步骤:
创建客户端证书。创建用户。向用户授予访问权。
创建 Role。创建 RoleBinding,其中 Role 将绑定到主题(此例中为用户)。
测试访问权。
Role 和 RoleBinding 的作用域为名称空间。如果要将 Role 分配给多个名称空间,那么使用 ClusterRole 和 ClusterRoleBinding。以下是针对 RBAC 可参考的一些命令。
创建客户端证书
使用 OpenSSL 生成密钥:
openssl genrsa -out
生成证书签署请求 (CSR):
openssl req -new -key
生成证书:
openssl x509 -req -in
创建用户
在 kubeconfig 中设置用户条目:
kubectl config set-credentials
向用户授予访问权
创建 Role 和 RoleBinding YAML 文件,以将 read-pods 的操作分配给
kubectl apply -f role.yaml kubectl apply -f role-binding.yaml
基本上,命令 kubectl get pods 应访存这些结果。
测试访问权
将上下文切换到用户上下文:
kubectl config use-context
这应该会生成输出:
kubectl get pods
注意:上述命令仅供参考。
结束语
本文描述了始终应考虑的一些 Kubernetes 重要安全组件。在实现应用程序现代化时,应优先考虑安全性。
发表评论
暂时没有评论,来抢沙发吧~