DC/OS Enterprise 安全性

了解 DC/OS Enterprise 安全功能

DC/OS Enterprise 提供一系列功能,允许您保护群集并防止破坏和其他攻击。本节概述了强化群集的安全功能和建议。

DC/OS 安全性的目标是:

  • 严密保护内部群集通信、容器和沙盒。
  • 通过支持第三方安全集成来增强集群安全性。
DC/OS 基于 Linux 内核和 userspace。保护任何 Linux 系统的最佳实践同样适用于保护 DC/OS,包括设置正确的文件权限、限制根用户和普通用户帐户、使用 或其他防火墙保护网络接口以及定期应用与 DC/OS 配合使用的 Linux 发行版的更新,以确保 systemd 和 OpenSSH 等系统库、实用程序和核心服务是安全的。 # 安全区 在最高级别上,我们可以区分 DC/OS 部署的三个安全区域,即管理、专用和公共安全区。 ## 管理区 管理区可通过 HTTP/HTTPS 和 SSH 连接访问,并提供对主节点的访问。它还可通过 URL 路由向群集中的其他节点提供反向代理访问。为了安全起见,DC/OS 云模板允许配置白名单,以便只允许特定的 IP 地址范围访问管理区。 ### Admin Router 对管理区的访问由 控制。 传入 DC/OS 群集的 HTTP 请求通过 Admin Router 代理(使用 Nginx ,其核心是 )。Admin Router 拒绝访问大多数 HTTP 端点以获取未经身份认证的请求。为了请求进行身份认证,它需要在其 Authorization 标头中提供有效的认证令牌。可通过验证流程获得令牌。 ## 专用区 专用区是非可路由网络,仅可从管理区或通过公共区的边缘路由器访问。部署的服务在专用区运行。此区域是运行大多数代理节点的位置。 ## 公共区 可选的公共区是运行公共可访问的应用程序的地方。通常,此区域只运行少量代理节点。边缘路由器将流量转发给专用区中运行的应用程序。公共区中的代理节点被标记为特殊角色,以便只能在此处安排特定任务。这些代理节点具有公共和专用 IP 地址,也只能在其 iptables 防火墙中打开特定端口。 典型部署(包括负载均衡器)如下所示: 图 1. 安全区典型部署 # 安全模式 您可以通过资源和操作(创建、读取、更新、删除)来控制 DC/OS Enterprise 访问。可用的安全模式为宽容和严格。严格的模式提供了最好的细粒度控制。根据您的安全模式执行 DC/OS 权限。安全模式在 DC/OS 安装 过程中设置,并且只能通过执行升级进行更改。 有关完整说明,请参阅。 ### 宽容 此模式提供了一些安全功能,但不包括 Mesos 权限。 ### 严格 此模式提供最强大的安全状态,需要大量配置。 ## 设置安全模式 安全模式在 DC/OS 安装 过程中设置,并且只能通过执行 进行更改。安全模式在安装配置文件中使用 security 参数进行设置。 重要信息:升级期间,权限只能从“宽容”变为“严格”。 ## 了解您的安全模式 您可以使用以下任一方法来确定现有群集的安全模式。
  • 向以下端点发送 GET 请求:http[s]: /mesosphere/dcos//<cluster-url>/dcos-metadata/bootstrap-config.json要求:您的用户帐户必须具有 dcos:adminrouter:ops:metadata fulldcos:superuser 权限。在 permissivestrict 模式下,您必须使用 HTTPS。查看 ,了解如何获取 DC/OS CA 的根证书,并将其置备到首选客户端。
  • SSH 进入主服务器并查看 /opt/mesosphere/etc/bootstrap-config.json 内容。

身份认证

DC/OS 群集外部的所有请求都需要认证令牌。根据您的安全模式,可能需要群集内认证令牌。如需更多信息,请参阅 服务账户文档

DC/OS 认证令牌是 ,默认情况下,在发布后五天到期。默认到期时间可在 自定义安装或升级 期间进行修改。

在 bootstrap 序列期间,DC/OS 使用 ZooKeeper 凭据提供主节点。这使得主节点可以将自己指定未潜在的 Mesos 主节点。

重要信息:除非在安装或升级期间进行了更改,否则每个群集将使用相同的默认 ZooKeeper 凭据(强烈建议)。参见,了解更多信息。

您可以使用 DC/OS GUI、DC/OS CLI 或编程式客户端登录。

  • 如果已配置 LDAP 目录服务器,则 DC/OS 会将您的凭据传递到 LDAP 目录服务器进行验证。
  • 如果您已配置 SAML 或 OpenID Connect 身份提供程序 (Idp),则会将凭据直接传递给 IdP。
注意:如果您使用 DC/OS GUI、SAML 和 OpenID Connect 提供程序登录,则他们可能会在浏览器 Cookie 中发现必要的登录详细信息。在这种情况下,您无需传递凭据。 下图详细说明了顺序。 用户身份认证 图 2. 用户身份认证顺序 认证令牌到期后,您可以重新验证以接收另一个认证令牌。 使用 DC/OS GUI 登录时,Identity 和 Access Manager 会生成包含认证令牌的 Cookie。虽然它收到 HttpOnly 标志的保护,但您应在浏览器会话结束时注销以清除此 Cookie。 请注意,清除 Cookie 不会使认证失效。如果监测到未加密的连接或从 cookie 中提取,则可能有人使用认证令牌登录了 DC/OS。为降低此风险,我们建议在 和 strict 模式下设置,如[强化]中所述(/mesosphere/dcos/cn/2.0/security/ent/hardening/#secure-flag)。 ## 密码 群集本地用户帐户(不使用 LDAP、SAML 或 OpenID Connect 的账户)的凭据包含用户名和密码,可用于验证但不能复制用户密码。使用 crypt(3) SHA-512 对密码进行单独加盐和加密散列。这会导致单向散列,可用于验证但不能复制用户密码。为了进一步阻止暴力攻击并达到或超过 NIST FIPS 安全要求,散列函数使用 128 位盐长度执行多次迭代。 在 DC/OS IAM 验证了您的凭据后,就会将认证令牌返回给您。然后,认证令牌将用于会话期间进一步请求身份认证。这样,密码不需要存储在客户端,并且只能在输入后立即通过电报发送。通过电报,使用 TLS 加密身份认证请求。TLS 是必需的,并以严格模式执行,但在宽容模式下可选。有关更多信息,请参阅。 ## 服务身份认证 服务帐户为 服务 提供身份,以使用 DC/OS 进行身份认证。服务帐户控制服务与 DC/OS 组件之间的通信。DC/OS 服务可能需要 ,这取决于您的安全模式。 ## 组件身份认证 DC/OS 在 bootstrap 序列期间使用服务账户自动配置 DC/OS 组件(DC/OS 节点上的系统服务)。 例如,Mesos 代理节点配置了用于向 Mesos 主节点进行身份认证的服务帐户。这确保仅授权代理节点可加入 Mesos 群集、宣传资源并被要求启动任务。 您可以从 DC/OS GUI 的 Organization -> Service Accounts 选项卡查看 systemd 服务帐户。这些服务帐户以 dcos_ 为前缀。 警告:修改任何自动配置服务账户的权限可能会导致服务失败。 # 授权 除了对请求进行身份认证之外,DC/OS 还会检查与该帐户关联的权限,以确定请求者是否有权访问所请求的资源。 下图说明了授权顺序。 图 3. 授权顺序 图中的 OPT 序列说明了权限执行如何因安全模式而异。
  • Admin Router 和密钥存储库在所有安全模式下执行其权限。
  • Metronome 和 Marathon 在 permissivestrict 模式执行其权限。但是,只有在请求者提供认证令牌时才会执行 permissive 模式,这在 permissive 模式下是可选的。如果群集中的请求者未提供认证令牌,Metronome 和 Marathon 则将按照具有 dcos:superuser 权限的用户所作请求进行操作。
  • Mesos 主节点的和代理节点仅在 strict 安全模式下执行其权限。
该图未显示密钥存储库序列。Admin Router 不会检查向密钥存储库请求的权限。它将这些请求发送给密钥存储库,后者会针对每个请求执行自己的权限。 有关权限的更多信息,请参阅。 # 传输层安全性 (TLS) 加密 DC/OS 通信的加密因安全模式而异。 与群集以外的客户端的通信。例如,浏览器和 DC/OS CLI。 ** 在任何安全模式下未加密的 ZooKeeper 实例之间的节点间通信除外。每个主节点都有 ZooKeeper 实例。这些 ZooKeeper 实例定期通信,以保持其内存数据库同步。您可以使用 对这些通信进行手动加密。 目前,并非所有现有用户服务都支持加密。如果服务支持加密,则可以在 permissive 模式下启用它。在 strict 模式下,执行用户服务通信加密。因此,只能在 strict 模式下部署支持加密的用户服务。 节点间通信通过 TLS 1.2 进行。为确保浏览器支持,外部通信目前接受 TLS 1.0、1.1 和 1.2。这些设置是可配置的。 有关更多信息,请参阅使用 TLS 确保通信安全。 # 空间 空间允许您: 我们建议至少使用空间来限制对密钥的服务访问。 ## 服务和作业空间 空间的一个方面涉及服务和作业组。您可以在任何安全模式下将服务和作业放入组中。这可帮助用户找到与其相关的作业或服务。 您可以使用来限制用户对每个服务/作业或服务/作业组的访问。 若要了解如何执行此操作,请参阅控制用户对服务的访问和。 ## 密钥空间 密钥路径控制哪些服务可以访问它。如果在存储密钥时未指定路径,则任何服务均可访问它。 密钥路径与服务组配合使用,以控制访问。但是,您无需让服务组控制对密钥的访问,您也可以使用服务的名称。下表提供了一些示例,以说明其工作方式。 ### Notes
  • 如果只有单个服务需要访问密钥,则将密钥存储在与服务名称匹配的路径中(例如, hdfs/secret)。这可防止其他服务访问。
  • 服务组以 / 开头,而密钥路径则不是。

为了保护私钥、API 令牌和数据库密码等敏感值,DC/OS提供:

DC/OS 使用 Galois 计数器模式 (GCM) 中的高级加密标准 (AES) 算法将密钥存储库数据存储在 ZooKeeper 中。密钥存储库将密钥发送到 ZooKeeper 之前使用开封密钥加密密钥,并在从 ZooKeeper 收到密钥后解密密钥。这可确保密钥在休息和传输时都被加密。TLS 为从 ZooKeeper 传输到密钥存储库的密钥提供了额外的加密层。

密钥存储库适用于所有安全模式。默认情况下,您不能存储大于一兆字节的密钥。如果您需要超过此限制,请联系 Mesosphere 支持中心。我们目前不支持替代或额外的密钥存储库。您应只使用 Mesosphere 提供的 default 密钥存储库。

DC/OS 允许您限制:

  • 应用程序对密钥的访问:使用 空间以控制哪些应用程序可以检索哪些密钥。

Linux 用户帐户

任务和沙盒文件的默认 Linux 用户根据您的安全模式和任务在其中运行的而有所不同。

默认情况下,所有任务将在 Docker 容器内运行。有关示例,请参阅将基于 Docker 的服务部署到 Marathon

下表列出了每种情况下的默认 Linux 用户。

默认情况下,Docker 任务在 root 下运行,但 Docker 用户权限仅限于 Docker 容器。如果您希望更改默认任务用户,请修改 Docker 容器。有关更多信息,请参考 以及用户服务文档

注意:如果压缩了提取的文件,内部的单个文件将保留文件压缩时分配的权限和所有权,并且不受任何其他配置或设置的影响。

请参阅 。

ENTERPRISE

管理用户和组…Read More

授予访问 UI 的权限

ENTERPRISE

权限管理

ENTERPRISE

管理权限…Read More

权限参考

ENTERPRISE

了解 DC/OS 访问和权限参考…Read More

ENTERPRISE

通过 LDAP 设置基于目录的身份认证服务器…Read More

密钥

ENTERPRISE

了解密钥存储库…Read More

基于身份提供程序的身份认证

ENTERPRISE

配置基于身份提供程序的身份认证…Read More

服务认证

ENTERPRISE

认证服务帐户…Read More

ENTERPRISE

使用 DC/OS UI 在宽容模式下实现多租户…Read More

强化

ENTERPRISE

增加群集的安全性…Read More

身份和访问管理 API

ENTERPRISE

使用 IAM API 管理用户和权限…Read More

确保与 TLS 通信的安全

ENTERPRISE