如何创建Kubernetes安全策略
如果您希望将Kubernetes的安全性提高到一个新的级别,则需要开始使用pod安全策略。
Kubernetes是一个功能强大的容器管理工具。如果您使用容器足够长的时间,您肯定知道安全性在应用程序和服务的部署中扮演重要角色。如果不锁定这些容器,可能会对您的网络造成严重破坏。
那么,你能做什么呢?对于Kubernetes,您应该考虑建立pod安全策略。
1、什么是pod?
如果您不熟悉Kubernetes,则可能不知道什么是Pod。简而言之,Kubernetes pod是构成容器的一系列过程的集合,例如:
储存资源、唯一的网络IP地址、控制容器应如何运行的选项。
换句话说,pod是一个部署单元——单个容器或多个容器一起工作。
现在您了解了什么是Pod,下面让我们看看如何制定安全策略。
2、什么是Pod安全策略?
Kubernetes Pod安全策略是控制Pod规范安全性的资源。使用PodSecurityPolicy对象定义,您可以控制以下内容:
运行特权容器的能力
特权升级
访问卷类型
访问主机文件系统
主机网络的使用
但是如何定义策略呢?与Kubernetes中的几乎所有内容一样,这是在YAML文件中定义的。
3、如何创建Kubernetes Pod安全策略
让我们创建一个Kubernetes Pod安全策略,该策略可以防止创建特权Pod并控制对卷的访问。首先,我们必须创建YAML文件。在终端窗口中,发出命令:
nano psp.yaml
在该文件中,粘贴以下内容:
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
name: psp
spec:
privileged: false
seLinux:
rule: RunAsAny
supplementalGroups:
rule: RunAsAny
runAsUser:
rule: RunAsAny
fsGroup:
rule: RunAsAny
volumes:
- '*'
在该文件中,我们使用以下代码来阻止创建特权pod:
privileged: false
我们还允许以下内容(通过RunAsAny规则):
SeLinux -允许任何用户在豆荚内控制SeLinux
Linux groups - 补充组
runAsUse- 允许用户以不同的用户名运行容器入口点
fsGroup - 支持所有权管理的卷
保存并关闭文件。
现在我们必须应用该策略。这是通过以下命令完成的:
kubectl apply -f psp.yaml
该命令将报告:
podsecurity.policy/psp created
您可以随时修改策略YAML文件并运行相同命令以重新配置策略。
发出以下命令,以检查策略是否可用:
kubectl get psp
输出将列出该策略的详细信息。
4、如何分配Kubernetes Pod安全策略
现在,您已经创建了策略,如何分配它?这是使用基于角色的访问控制(RBAC)完成的。使用以下命令为该策略创建RBAC配置:
nano rbac-psp.yaml
在该文件中,粘贴以下内容:
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: psp:psp
rules:
- apiGroups:
- extensions
resources:
- podsecuritypolicies
resourceNames:
- psp
verbs:
- use
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: psp:psp
subjects:
- kind: Group
name: system:authenticated
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: psp:psp
apiGroup: rbac.authorization.k8s.io
上面的文件将创建一个名为psp的群集范围内的角色,可以使用名为psp的新策略。这还将创建一个群集范围的角色绑定,该绑定使每个经过身份验证的用户都可以访问psp:psp角色。
保存并关闭文件。使用以下命令创建此策略:
kubectl apply -f rbac-psp.yaml
现在,我们已经创建了一个策略和一个RBAC控件。让我们看看我们现在是否可以使用这项新策略。发出命令:
kubectl auth can-i use psp/psp
输出应显示“YES”。
当然,因为我是管理员用户,所以这里是“YES”。但是,如果我们对任何用户进行测试怎么办?使用以下命令执行此操作:
kubectl auth can-i use psp/psp --as-group=system:authenticated --as=any-user
您现在应该在响应中看到“NO”。
您刚刚创建了一个Kubernetes pod安全策略,并为其分配了RBAC,并对其进行了测试以确保该策略确实有效。