diff --git a/.vuepress/config-sidebar.js b/.vuepress/config-sidebar.js index 918a9fe..f137a54 100644 --- a/.vuepress/config-sidebar.js +++ b/.vuepress/config-sidebar.js @@ -372,36 +372,45 @@ let sidebar = { collapsable: true, children: [ { - title: '认证及授权', + title: '安全', collapsable: true, children: [ + 'k8s-advanced/sec/overview', + 'k8s-advanced/sec/pss', + 'k8s-advanced/sec/psa', { - title: '用户认证', + title: '认证及授权', collapsable: true, children: [ - 'k8s-advanced/sec/authenticate/', - 'k8s-advanced/sec/sa-admin', - // 'k8s-advanced/sec/authenticate/install', - // 'k8s-advanced/sec/authenticate/ldap', - ] - }, { - title: '用户授权', - collapsable: true, - children: [ - // 'k8s-advanced/sec/kuboard', - 'k8s-advanced/sec/rbac/auth-namespace.html', - // 'k8s-advanced/sec/rbac/list-namespace.html', - // 'k8s-advanced/sec/rbac/logs.html', - 'k8s-advanced/sec/rbac/api', - 'k8s-advanced/sec/rbac/default', - 'k8s-advanced/sec/rbac/escalation', - 'k8s-advanced/sec/rbac/cmd', - 'k8s-advanced/sec/rbac/sa', - 'k8s-advanced/sec/rbac/permissive', - 'k8s-advanced/sec/rbac/example', + { + title: '用户认证', + collapsable: true, + children: [ + 'k8s-advanced/sec/authenticate/', + 'k8s-advanced/sec/sa-admin', + // 'k8s-advanced/sec/authenticate/install', + // 'k8s-advanced/sec/authenticate/ldap', + ] + }, { + title: '用户授权', + collapsable: true, + children: [ + // 'k8s-advanced/sec/kuboard', + 'k8s-advanced/sec/rbac/auth-namespace.html', + // 'k8s-advanced/sec/rbac/list-namespace.html', + // 'k8s-advanced/sec/rbac/logs.html', + 'k8s-advanced/sec/rbac/api', + 'k8s-advanced/sec/rbac/default', + 'k8s-advanced/sec/rbac/escalation', + 'k8s-advanced/sec/rbac/cmd', + 'k8s-advanced/sec/rbac/sa', + 'k8s-advanced/sec/rbac/permissive', + 'k8s-advanced/sec/rbac/example', + ] + }, ] }, - ] + ], }, { title: '问题诊断', @@ -431,19 +440,19 @@ let sidebar = { 'k8s-advanced/logs/loki-addon' ] }, - { - title: '调度', - collapsable: true, - children: [ - 'k8s-advanced/schedule/', - 'k8s-advanced/schedule/tuning', - 'k8s-advanced/schedule/framework', - ] - }, { title: '策略', collapsable: true, children: [ + { + title: '调度', + collapsable: true, + children: [ + 'k8s-advanced/schedule/', + 'k8s-advanced/schedule/tuning', + 'k8s-advanced/schedule/framework', + ] + }, { title: 'Limit Range', collapsable: true, diff --git a/learning/k8s-advanced/sec/overview.assets/4c.png b/learning/k8s-advanced/sec/overview.assets/4c.png new file mode 100644 index 0000000..100a156 Binary files /dev/null and b/learning/k8s-advanced/sec/overview.assets/4c.png differ diff --git a/learning/k8s-advanced/sec/overview.md b/learning/k8s-advanced/sec/overview.md new file mode 100644 index 0000000..810be9f --- /dev/null +++ b/learning/k8s-advanced/sec/overview.md @@ -0,0 +1,103 @@ +--- +layout: LearningLayout +description: Kubernetes教程_本文面向集群管理员,概述了云原生安全的相关概念。 +meta: + - name: keywords + content: Kubernetes 教程,Cloud Native Security +--- + +# 云原生安全概述 + +本文档主要参考了 Kubernetes 官方文档:[Overview of Cloud Native Security](https://kubernetes.io/docs/concepts/security/overview/) + + + +本文概述了云原生环境中 Kubernetes 的安全需要考量的主要方面。 + +## 云原生 4C 安全模型 + +云原生 4C 安全模型,是指在四个层面上考虑云原生的安全: +* Cloud(云或基础设施层) +* Cluster(Kubernetes 集群层) +* Container(容器层) +* Code(代码层) + +如下图所示,云原生的每一层安全防护都是基于其外层防护之上的。没有Cloud层、Cluster层、Container层的安全防护,Code层的防护将形同虚设。因为,您在代码层所做的任何安全防护,都不能保护其外层(Cloud层、Cluster层、Container层)经受住安全入侵的攻击。 + +![云原生 4C 安全模型](./overview.assets/4c.png) + +下面我们将逐个介绍每一层安全防护需要考量的内容。 + +## Cloud 云或基础设施层安全 + +通常,Kubernetes 集群都认为其所依赖的基础设施(云、服务器、或者企业的数据中心)是安全和可信的。如果基础本身不安全(或者没有进行合理的安全防护配置),将无法保证构建在其上的组件是安全的。每一个云供应商都给出了相关的安全建议。 + +### 云安全 + +如果您的 Kubernetes 集群运行在您自己的硬件上,您需要自行考虑基础设施层面的安全防护。下表给出了部分云供应商提供的安全文档: + +| IaaS 供应商 | 链接 | +| ----------- | ----------- | +| 阿里云 | [https://www.alibabacloud.com/trust-center](https://www.alibabacloud.com/trust-center) | +| 亚马逊云 | [https://aws.amazon.com/security/](https://aws.amazon.com/security/) | +| 微软 Azure | [https://docs.microsoft.com/en-us/azure/security/azure-security](https://docs.microsoft.com/en-us/azure/security/azure-security) | + +### 基础设施安全 + +与 Kubernetes 相关的基础设施安全建议: + +| 关注点 | 建议 | +| ----------- | ----------- | +| APIServer的网络(控制节点) | 空直接点上所有端口都不应该暴露在互联网上 | +| 节点的网络 | 工作节点的端口应该只允许接受来自控制节点的网络访问,同时可以暴露一些 Service 的节点端口。工作节点应该尽可能不暴露在公网上 | +| ETCD的网络 | ETCD(Kubernetes的数据存储)应该只允许控制节点访问。尽可能使用 ETCD 的 TLS 连接(基于 kuboard-spray安装的集群已经确保了这一点)。更多信息请参考 [ETCD 文档](https://github.com/etcd-io/etcd/tree/master/Documentation) | +| ETCD 加密 | 如果可能,尽量加密存储 etcd 数据所使用的磁盘 | + +## Cluster 集群层安全 + +Kubernetes 集群的安全主要考虑如下两方面因素: +* 集群组件的安全防护 +* 集群中运行的应用程序的安全防护 + +### 集群的组件 + +如果您希望保护您的集群组件以避免非法访问,请参考文档 [集群的安全防护](./secure-a-cluster) + +### 集群中应用的安全(您的应用程序) + +不同类型的应用程序可能会暴露不同的易受安全攻击的点,因此,您最好是有针对性地进行安全防护。例如:如果您在集群上运行了应用A和应用B,其中应用A是一个关键应用,而应用B很容易受到攻击而导致资源(CPU/内存)耗尽,在这种情况下,如果您不限制应用B的最大资源(CPU/内存)使用量,应用A也会被应用B所牵连。 + +下表罗列了在 Kubernetes 集群中运行应用程序时应该主要关注的安全因素以及相关建议: + +| 关注点 | 建议 | +| ----------- | ----------- | +| 用户认证(API Server) | [用户认证概述](./authenticate/) | +| RBAC授权(API Server) | [授权用户访问名称空间](./rbac/auth-namespace) | +| 密文管理(以及存储加密) | [Secret概述](/learning/k8s-intermediate/config/secrets/)
[Encrypting Secret Data at Rest](https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/) | +| Pod Security Standards | [Pod Security Standards](./pss) | +| Quality Of Service(集群资源管理) | [Configure Quality of Service for Pods](https://kubernetes.io/docs/tasks/configure-pod-container/quality-service-pod/)
[管理容器的计算资源](/learning/k8s-intermediate/config/computing-resource.html) | +| Network Policies | [网络策略 Network Policies](/learning/k8s-intermediate/service/np.html) | +| Ingress TLS | [为 Ingress 配置 HTTPS 证书](/learning/k8s-intermediate/service/ingress.html#实战-使用-ingress-访问-web-应用) | + +## Container 容器层安全 + +本文档将不会展开容器安全的话题,下面是一些建议以及可以参考的链接: + +| 关注点 | 建议 | +| ----------- | ----------- | +| 容器安全扫描以及操作系统相关的安全性 | 在容器镜像的构建阶段,您应该对容器执行安全扫描,以便发现和修复已知的安全漏洞 | +| 镜像签名 | 使用已签名的第三方容器镜像,以确保您使用的镜像来源是可靠的。 | +| 避免使用 root 用户 | 在容器中使用非 root 用户,并避免过度授权 | + + +## Code 代码层安全 + +应用程序的代码是最容易受到攻击,同时也是您掌控面最大的地方。以下是一些建议: + +| 关注点 | 建议 | +| ----------- | ----------- | +| 使用 TLS | 如果您的代码需要 TCP 通信,请使用 TLS 传输协议。 | +| 减少通信端口 | 只暴露必须的服务通信端口或者性能信息采集端口 | +| 第三方依赖安全性 | 定期扫描应用程序的第三方依赖库,以排除潜在的安全漏洞 | +| 静态代码分析 | 执行代码安全扫描,以排除潜在的安全漏洞 | +| 动态漏洞扫描 | 使用漏洞扫描工具发现可能的安全漏洞,例如 SQL注入、CSRF、XSS 等 | \ No newline at end of file diff --git a/learning/k8s-advanced/sec/psa.md b/learning/k8s-advanced/sec/psa.md new file mode 100644 index 0000000..ec7c3ee --- /dev/null +++ b/learning/k8s-advanced/sec/psa.md @@ -0,0 +1,11 @@ +--- +layout: LearningLayout +description: Kubernetes教程_本文面向集群管理员,阐述 Pod Security Admission 的相关概念。 +meta: + - name: keywords + content: Kubernetes 教程,Pod Security Admission +--- + +# Pod Security Admission + + \ No newline at end of file diff --git a/learning/k8s-advanced/sec/pss.md b/learning/k8s-advanced/sec/pss.md new file mode 100644 index 0000000..5f6343a --- /dev/null +++ b/learning/k8s-advanced/sec/pss.md @@ -0,0 +1,11 @@ +--- +layout: LearningLayout +description: Kubernetes教程_本文面向集群管理员,阐述Pod Security Standards 的概念。 +meta: + - name: keywords + content: Kubernetes 教程,Pod Security Standards +--- + +# Pod Security Standards + + \ No newline at end of file diff --git a/learning/k8s-advanced/sec/secure-a-cluster.md b/learning/k8s-advanced/sec/secure-a-cluster.md new file mode 100644 index 0000000..005233f --- /dev/null +++ b/learning/k8s-advanced/sec/secure-a-cluster.md @@ -0,0 +1,15 @@ +--- +layout: LearningLayout +description: Kubernetes教程_本文面向集群管理员,概述了云原生安全的相关概念。 +meta: + - name: keywords + content: Kubernetes 教程,Secure a Cluster +--- + +# 集群的安全防护 + +本文档主要参考了 Kubernetes 官方文档:[Securing a Cluster](https://kubernetes.io/docs/tasks/administer-cluster/securing-a-cluster/) + + + +...文档待完善 \ No newline at end of file