Kubernetes 安全基础

网友投稿 863 2022-10-30

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

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 2048

生成证书签署请求 (CSR):

openssl req -new -key -out -subj

生成证书:

openssl x509 -req -in -CA -CAkey -CAcreateserial -out -days

创建用户

在 kubeconfig 中设置用户条目:

kubectl config set-credentials --client-certificate= --client-key= kubectl config set-context user-context --cluster= --user=user kubectl config view kubectl config use-context

向用户授予访问权

创建 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 重要安全组件。在实现应用程序现代化时,应优先考虑安全性。

上一篇:地震勘探工作
下一篇:系统主要功能与特点
相关文章

 发表评论

暂时没有评论,来抢沙发吧~