保护群集
理解 DC/OS 中的安全特性
一般安全概念
DC/OS 基于 Linux 内核和用户空间。保护任何 Linux 系统的最佳实践均适用于保护 DC/OS,包括设置正确文件权限、限制 root 和普通用户帐户、使用 iptables
或其他防火墙保护网络接口,并定期应用配合 DC/OS 使用的 Linux 分发的更新,以确保系统库、实用程序和核心服务(如 systemd 和 OpenSSH)安全。
网络安全
您必须采用适当的网络机制,防止未经授权访问群集节点。
根据群集环境,这可能包括:
- 使用物理或虚拟子网隔离 [DC/OS 安全区](#安全区);
- 使用路由器防火墙或安全组限制对端口的访问;
- 在节点上使用防火墙软件(例如,
iptables
)来限制对端口的访问。
- 在管理节点之间:允许在所有端口上建立连接。
- 在代理节点之间:允许在所有端口上建立连接。
- 从管理节点到代理节点:允许在所有端口上建立连接。
- 从代理节点到管理节点:允许在 TCP 端口 8201 和 26257 之外的所有端口上建立连接。
- 从外部设备到管理节点:阻止除 TCP 端口 80 和 443 之外的所有端口上的连接请求。
- 从外部设备到专用代理节点:阻止所有端口上的连接请求。
- 从外部设备到共用代理节点:阻止所有端口上的连接请求 广告端口范围。
ssh
)的管理任务。虽然 DC/OS 组件当前不支持专用网络选择,但您可以将ssh
配置为可以使用 [ListenAddress
] (https://man.openbsd.org/sshd_config#ListenAddress)指示访问专用管理网络。
安全区
在最高级别上,我们可以区分 DC/OS 部署中的三个安全区,即管理、私有和公共安全区。
管理区
可通过 HTTP/HTTPS 和 SSH 连接访问 管理 区,并提供对管理节点的访问。它还提供通过 URL 路由对群集中的其他节点的反向代理访问。安全起见,DC/OS 云模板允许配置白名单,这样仅特定 IP 地址范围可以访问管理区。
Admin Router
Admin Router 控制对管理区的访问。
传入 DC/OS 群集的 HTTP 请求通过 Admin Router 代理(使用 Nginx ,其核心是 OpenResty)。Admin Router 拒绝访问大多数 HTTP 端点以获取未经身份认证的请求。为了请求进行身份认证,它必须在其身份认证标头中提供有效的认证令牌。可通过身份验证流程获得令牌。请参阅 安全文档了解详情。
经过验证的用户有权在其群集中执行任何操作。除了是否有权访问服务之外,DC/OS 目前还没有细分的访问权限控制。
保护 Admin Router 的步骤
默认情况下,Admin Router 将允许未加密的 HTTP 流量。我们认为这样不安全,您必须提供有效的 TLS 证书并将所有 HTTP 流量重定向到 HTTPS,才能妥善保障安全访问群集。在您获得有效的 TLS 证书之后,在每个管理节点上安装证书。将证书和私钥复制到众所周知的位置,如在 /etc/ssl/certs
位置下。
如果您在 Admin Router 前运行 HAProxy,您应该保护它们之间的通信。有关保护您的通信的信息,请参阅文档。
专用区
私有 区是一个非可路由网络,访问仅限于管理区或从公共区通过边缘路由器来访问它。已部署的服务在私人区运行。该区是运行大部分代理节点的地方。
公共区
可选的公共区是运行公共可访问的应用程序的地方。通常,此区中仅运行少量代理节点。边缘路由器将流量转发给专用区中运行的应用程序。
公共区中的代理节点被标记为特殊角色,以便只能在此处安排特定任务。这些代理节点具有公共和专用 IP 地址,也只能在其iptables
防火墙中打开特定端口。
默认情况下,使用基于云的安装程序(例如 AWS Cloudformation 模板)时,大量端口都会接触到公共区的互联网。在生产系统中,这些端口全都会暴露出来。建议您关闭除 80 和 443 之外的所有端口(针对 HTTP/HTTPS 流量),并使用带有 HTTPS 的 [Marathon-LB] (/mesosphere/dcos/services/marathon-lb/latest/)来管理入口流量。
典型 AWS 部署
包括 AWS 负载均衡器的典型 AWS 部署如下所示:
图 1. AWS 部署中的安全区