- OpenShift 教程
- OpenShift - 首页
- OpenShift - 概述
- OpenShift - 类型
- OpenShift - 架构
- OpenShift - 环境设置
- OpenShift - 基本概念
- OpenShift - 入门指南
- OpenShift - 自动构建
- OpenShift - 命令行界面 (CLI)
- OpenShift - CLI 操作
- OpenShift - 集群
- OpenShift - 应用伸缩
- OpenShift - 管理
- OpenShift - Docker 和 Kubernetes
- OpenShift - 安全性
- OpenShift 有用资源
- OpenShift - 快速指南
- OpenShift - 有用资源
- OpenShift - 讨论
OpenShift - 安全性
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 <none> hostmount-anyuid false [] true MustRunAs RunAsAny RunAsAny RunAsAny <none> nonroot false [] false MustRunAs MustRunAsNonRoot RunAsAny RunAsAny <none> privileged true [] true RunAsAny RunAsAny RunAsAny RunAsAny <none> restricted false [] false MustRunAs MustRunAsRange RunAsAny RunAsAny <none>
如果要使用任何预定义的 SCC,只需将用户或组添加到 SCC 组即可。
$ oadm policy add-user-to-scc <scc_name> <user_name> $ oadm policy add-group-to-scc <scc_name> <group_name>
服务账号
服务账号主要用于控制对 OpenShift 主 API 的访问,当从任何主节点或节点机器发出命令或请求时,都会调用该 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 控制访问
在这种方法中,通过 OAuth 服务器(内置于 OpenShift 主机中)获取安全令牌进行身份验证来实现对 API 控制访问的身份验证。作为管理员,您可以修改 OAuth 服务器配置。
有关 OAuth 服务器配置的更多详细信息,请参阅本教程的第 5 章。
通过自助服务 Web 控制台
此 Web 控制台安全功能内置于 OpenShift Web 控制台中。此控制台确保所有协同工作的团队在未经身份验证的情况下无法访问其他环境。OpenShift 中的多终端主机具有以下安全功能:
- 已启用 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 <project name 1> <project name 2>
这意味着上面定义的项目无法与集群中的其他项目通信。
卷安全
卷安全明确意味着保护 OpenShift 集群中项目的 PV 和 PVC。主要有四个部分来控制对 OpenShift 中卷的访问。
- 补充组
- fsGroup
- runAsUser
- seLinuxOptions
补充组 - 补充组是常规的 Linux 组。当进程在系统中运行时,它使用用户 ID 和组 ID 运行。这些组用于控制对共享存储的访问。
使用以下命令检查 NFS 挂载。
# showmount -e <nfs-server-ip-or-hostname> 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: <nfs_server_ip_or_host> path: /opt/nfs
fsGroup
fsGroup 代表文件系统组,用于添加容器补充组。补充组 ID 用于共享存储,fsGroup 用于块存储。
kind: Pod spec: containers: - name: ... securityContext: fsGroup: 2325
runAsUser
runAsUser 使用用户 ID 进行通信。这用于在 Pod 定义中定义容器镜像。如果需要,可以在所有容器中使用单个 ID 用户。
运行容器时,将定义的 ID 与导出的所有者 ID 匹配。如果指定的 ID 在外部定义,则它对 Pod 中的所有容器都全局可见。如果它与特定 Pod 一起定义,则它对单个容器特定。
spec: containers: - name: ... securityContext: runAsUser: 454265