📜  OpenShift-安全

📅  最后修改于: 2020-10-31 13:58:02             🧑  作者: Mango


OpenShift安全性主要是主要处理安全性约束的两个组件的组合。

  • 安全上下文约束(SCC)
  • 服务帐号

安全上下文约束(SCC)

它基本上用于Pod限制,这意味着它定义了Pod的限制,例如它可以执行的操作以及在集群中可以访问的所有事物。

OpenShift提供了一组预定义的SCC,管理员可以使用,修改和扩展它们。

$ oc get scc
NAME              PRIV   CAPS  HOSTDIR  SELINUX    RUNASUSER         FSGROUP   SUPGROUP  PRIORITY
anyuid            false   []   false    MustRunAs  RunAsAny          RunAsAny  RunAsAny  10
hostaccess        false   []   true     MustRunAs  MustRunAsRange    RunAsAny  RunAsAny  
hostmount-anyuid  false   []   true     MustRunAs  RunAsAny          RunAsAny  RunAsAny  
nonroot           false   []   false    MustRunAs  MustRunAsNonRoot  RunAsAny  RunAsAny  
privileged        true    []   true     RunAsAny   RunAsAny          RunAsAny  RunAsAny  
restricted        false   []   false    MustRunAs  MustRunAsRange    RunAsAny  RunAsAny  

如果希望使用任何预定义的scc,可以通过简单地将用户或组添加到scc组来完成。

$ oadm policy add-user-to-scc  
$ oadm policy add-group-to-scc  

服务帐号

服务帐户基本上用于控制对OpenShift主API的访问,当从任何主计算机或节点计算机上发出命令或请求时,就会调用该服务。

每当应用程序或流程需要受限的SCC不允许的功能时,您将必须创建一个特定的服务帐户并将该帐户添加到相应的SCC中。但是,如果SCC不适合您的要求,那么最好创建一个针对您的要求的新SCC,而不是使用最合适的SCC。最后,将其设置为部署配置。

$ oc create serviceaccount Cadmin
$ oc adm policy add-scc-to-user vipin -z Cadmin

集装箱安全

在OpenShift中,容器的安全性基于容器平台的安全性以及容器在何处运行的概念。当我们谈论容器安全性以及需要注意的问题时,会有很多事情发生。

图像来源-建立了安全的标签系统,可以准确无误地识别在生产环境中运行的容器的来源。

安全扫描-图像扫描仪会自动检查所有图像中的已知漏洞。

审核-定期审核生产环境,以确保所有容器均基于最新的容器,并且主机和容器均已安全配置。

分离和最小特权-容器与有效所需的函数最少的资源和权限运行。它们不能过分干扰主机或其他容器。

运行时威胁检测-一种功能,可以在运行时检测对容器化应用程序的活动威胁,并自动对其做出响应。

访问控制-Linux安全模块(例如AppArmor或SELinux)用于实施访问控制。

归档容器安全性的关键方法很少。

  • 通过oAuth控制访问
  • 通过自助式Web控制台
  • 通过平台证书

通过OAuth控制访问

在此方法中,对API控件访问的身份验证会进行归档,以获取通过OAuth服务器进行身份验证的安全令牌,该令牌内置在OpenShift主计算机中。作为管理员,您可以修改OAuth服务器配置的配置。

有关OAuth服务器配置的更多详细信息,请参阅本教程的第5章。

通过自助服务Web控制台

此Web控制台安全功能内置于OpenShift Web控制台中。此控制台可确保所有一起工作的团队未经身份验证都无法访问其他环境。 OpenShift中的多telnet主站具有以下安全功能-

  • 启用TCL层
  • 使用x.509证书进行身份验证
  • 保护主机上的etcd配置

通过平台证书

通过这种方法,将在安装过程中通过Ansible为每个主机配置证书。由于它通过Rest API使用HTTPS通信协议,因此我们需要TCL安全连接到不同的组件和对象。这些是预定义的证书,但是,甚至可以在主群集上安装自定义证书以进行访问。在主服务器的初始设置过程中,可以使用openshift_master_overwrite_named_certificates参数覆盖现有证书来配置自定义证书。

openshift_master_named_certificates = [{"certfile": "/path/on/host/to/master.crt", 
"keyfile": "/path/on/host/to/master.key", 
"cafile": "/path/on/host/to/mastercert.crt"}]

有关如何生成自定义证书的更多详细信息,请访问以下链接-

https://www.linux.com/learn/creating-self-signed-ssl-certificates-apache-linux

网络安全

在OpenShift中,软件定义网络(SDN)用于通信。网络名称空间用于群集中的每个Pod,其中每个Pod都有自己的IP和一定范围的端口来获取网络流量。通过这种方法,一个人可以隔离pod,因此它无法与另一个项目中的pod通信。

隔离项目

集群管理员可以使用CLI中的以下oadm命令来完成此操作。

$ oadm pod-network isolate-projects  

这意味着上面定义的项目无法与集群中的其他项目进行通信。

卷安全

批量安全性显然意味着确保OpenShift集群中项目的PV和PVC。主要有四个部分来控制对OpenShift中卷的访问。

  • 补充团体
  • fsGroup
  • runAsUser
  • seLinuxOptions

补充组-补充组是常规Linux组。当进程在系统中运行时,它将以用户ID和组ID运行。这些组用于控制对共享存储的访问。

使用以下命令检查NFS安装。

# showmount -e 
Export list for f21-nfs.vm:
/opt/nfs *

使用以下命令检查安装服务器上的NFS详细信息。

# cat /etc/exports
/opt/nfs *(rw,sync,no_root_squash)
...
# ls -lZ /opt/nfs -d
drwxrws---. nfsnobody 2325 unconfined_u:object_r:usr_t:s0 /opt/nfs
# id nfsnobody
uid = 65534(nfsnobody) gid = 454265(nfsnobody) groups = 454265(nfsnobody)

/ opt / nfs /导出可通过UID 454265和组2325访问

apiVersion: v1
kind: Pod
...
spec:
   containers:
   - name: ...
      volumeMounts:
      - name: nfs
         mountPath: /usr/share/...
   securityContext:
      supplementalGroups: [2325]
   volumes:
   - name: nfs
      nfs:
      server: 
      path: /opt/nfs

fsGroup

fsGroup代表用于添加容器补充组的文件系统组。补充组ID用于共享存储,而fsGroup用于块存储。

kind: Pod
spec:
   containers:
   - name: ...
   securityContext:
      fsGroup: 2325

runAsUser

runAsUser使用用户ID进行通信。这用于在容器定义中定义容器映像。如果需要,可以在所有容器中使用一个ID用户。

运行容器时,已定义的ID与导出中的所有者ID匹配。如果指定的ID是在外部定义的,则它对于容器中的所有容器都是全局的。如果使用特定的容器定义,则该容器将特定于单个容器。

spec:
   containers:
   - name: ...
      securityContext:
         runAsUser: 454265