1.3. OpenShift Container Platform 如何安全?
OpenShift Container Platform 和 Kubernetes API 会验证带有凭证的用户的身份,然后根据其角色授权它们。开发人员和管理员可以通过多种方法进行身份验证,主要通过 OAuth 令牌和 X.509 客户端证书进行身份验证。OAuth 令牌使用 JSON Web Algorithm RS256 签名,这是带有 SHA-256 的 RSA 签名算法 PKCS#1 v1.5。
开发人员(系统客户端)通常从 oc
或 web 控制台 等 客户端程序发出 REST API 调用,并使用 OAuth bearer 令牌进行大部分通信。基础架构组件(如节点)使用由系统中包含其身份的客户端证书。在容器中运行的基础架构组件使用与其 服务帐户关联的 令牌来连接到 API。
授权在 OpenShift Container Platform 策略引擎中处理,它定义诸如 "create pod" 或 "list services" 的操作,并将它们分组到策略文档中的角色。角色通过用户或组标识符绑定到用户或组。当用户或服务帐户尝试操作时,策略引擎会检查一个或多个分配给该用户的角色(例如,集群管理员或当前项目的管理员),然后再继续。
由于集群中运行的每个容器都与服务帐户关联,因此也可以将 secret 与这些服务帐户关联,并将其自动传送到容器中。这可让基础架构管理用于拉取和推送镜像、构建和部署组件的 secret,同时还允许应用程序代码轻松利用这些 secret。
1.3.1. TLS 支持
所有与 REST API 的通信频道以及 etcd 和 API 服务器等 master 组件 之间都使用 TLS 保护。TLS 提供具有 X.509 服务器证书和公钥基础架构的强大加密、数据完整性和验证服务器。默认情况下,会为每个 OpenShift Container Platform 部署创建一个新的内部 PKI。内部 PKI 使用 2048 位 RSA 密钥和 SHA-256 签名。也支持公共主机的 自定义证书。
OpenShift Container Platform 使用 Golang 的 crypto/tls 的标准库实现,且不依赖于任何外部加密和 TLS 库。另外,客户端依赖于用于 GSSAPI 验证和 OpenPGP 签名的外部库。GSSAPI 通常由 MIT Kerberos 或 Heimdal Kerberos 提供,它们都使用 OpenSSL 的 libcrypto。OpenPGP 签名验证由 libgpgme 和 GnuPG 处理。
不安全的版本 SSL 2.0 和 SSL 3.0 不受支持,且不可用。OpenShift Container Platform 服务器和 oc
客户端默认只提供 TLS 1.2。TLS 1.0 和 TLS 1.1 可以在服务器配置中启用。服务器和客户端都首选使用经过身份验证的加密算法和完美转发保密性实现现代加密套件。禁用使用已弃用和不安全的算法(如 RC4、3DES 和 MD5)的密码套件。有些内部客户端(例如,LDAP 身份验证)限制了启用了 1.2 和更多密码套件的 TLS 1.0 的设置。
TLS 版本 | OpenShift Container Platform Server | oc Client | 其他客户端 |
---|---|---|---|
SSL 2.0 | 不支持 | 不支持 | 不支持 |
SSL 3.0 | 不支持 | 不支持 | 不支持 |
TLS 1.0 | 没有 [1] | 没有 [1] | 或许 [2] |
TLS 1.1 | 没有 [1] | 没有 [1] | 或许 [2] |
TLS 1.2 | 是 | 是 | 是 |
TLS 1.3 | N/A [3] | N/A [3] | N/A [3] |
- 默认禁用,但在服务器配置中可以启用。
- 一些内部客户端,如 LDAP 客户端。
- TLS 1.3 仍在开发中。
以下列出的 OpenShift Container Platform 服务器和 oc
客户端的启用密码套件按首选顺序排序:
-
TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305
-
TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305
-
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
-
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
-
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
-
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
-
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
-
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
-
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
-
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
-
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
-
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
-
TLS_RSA_WITH_AES_128_GCM_SHA256
-
TLS_RSA_WITH_AES_256_GCM_SHA384
-
TLS_RSA_WITH_AES_128_CBC_SHA
-
TLS_RSA_WITH_AES_256_CBC_SHA