Apigee mTLS 简介

Edge for Private Cloud v4.19.01

Apigee mTLS 功能可为私有云集群 Edge 中的组件之间的通信提高安全性。

架构概览

为了在组件之间提供安全的通信,Apigee mTLS 使用服务网格在组件之间建立安全、双向身份验证的 TLS 连接。

下图显示了 Apigee mTLS 保护的 Apigee 组件 (in red) 之间的连接。图中显示的端口仅为示例;如需查看每个组件可以使用的范围列表,请参阅端口使用情况

(请注意,以“M”表示的端口用于管理组件,必须在组件上打开,以便管理服务器访问。)

如上图所示,Apigee mTLS 可提高集群中大多数组件之间的连接的安全性,包括:

来源 目的地
管理服务器 路由器、MP、QPid、LDAP、Postgres、Zookeeper 和 Cassandra 节点
路由器 环回;Qpid、Zookeeper 和 Cassandra 节点
消息处理器 环回;Qpid、Zookeeper 和 Cassandra 节点
ZooKeeper 和 Cassandra 其他 ZooKeeper 和 Cassandra 节点
Edge 界面 SMTP(仅适用于外部 IdP)
Postgres 其他 Postgres、Zookeeper 和 Cassandra 节点

消息加密/解密

Apigee mTLS 服务网格由集群中的每个 ZooKeeper 节点上运行的 Consul 服务器以及集群中的每个节点上的以下 Consul 服务组成:

  • 用于拦截主机节点上传出消息的出站代理。此服务会在将外发消息发送到目的地之前对其进行加密。
  • 用于在主机节点上拦截传入消息的入站流量代理。此服务会在将传入的消息发送到最终目的地之前对其进行解密。

例如,当管理服务器向路由器发送消息时,出站代理服务拦截传出消息,对其进行加密,然后将其发送到路由器。当路由器的节点收到消息时,入站流量代理服务会解密消息,然后将其传递给路由器组件进行处理。

这对 Edge 组件是透明的:它们不了解 Consul 代理服务执行的加密和解密过程。

此外,Apigee mTLS 还使用 iptables 实用程序,这是一种用于管理流量重定向的 Linux 防火墙服务。

要求

Apigee mTLS 提供了配置和安装服务网格的业界标准方法。它支持软件包管理和配置自动化。

由于 Consul 代理服务作为各个进程的端口分配紧密耦合,因此对一个节点的更改会影响所有其他节点。因此,如果拓扑发生变化,您必须在集群中的每个节点上重新配置并重新初始化服务。

您的环境必须符合本部分中描述的以下要求,然后才能安装 Apigee mTLS。

这些要求包括:

  • 适用于私有云版本的 Edge
  • 一组已安装并启用的实用程序
  • 具有适当级别权限的用户账号
  • 一台管理机(推荐)

适用于私有云的 Edge 要求

Apigee mTLS 支持以下版本的私有云 Edge(但并非在所有受支持的平台上,如操作系统要求中所述):

  • 4.19.06
  • 4.19.01

Apigee mTLS 要求您的私有云集群使用包含至少三个 Zookeeper 节点的拓扑。因此,您只能在使用 5、9、12(多数据中心)或 13 个节点的拓扑上安装 Apigee mTLS。如需了解详情,请参阅安装拓扑

操作系统要求

对于私有云集群,Apigee mTLS 支持以下平台(支持 mTLS 的操作系统取决于私有云的版本):

操作系统 支持的私有云版本
v4.19.06 v4.50.00 v4.51.00
CentOS
RedHat Enterprise Linux (RHEL)
Oracle Linux
7.5、7.6、7.7 7.5、7.6、7.7、7.8、7.9 7.5、7.6、7.7、7.8、7.9、8.0

实用程序/软件包

在开始安装过程之前,Apigee mTLS 要求在集群中的每台机器(包括管理机器)上安装并启用以下软件包:

实用程序/软件包 说明 安装后确定要移除吗?
base64 验证安装脚本中的数据。
gnu-bash
gnu-sed
gnu-grep
供安装脚本和其他常用工具使用。
iptables 替换默认防火墙 firewalld
iptables-services iptables 实用程序提供功能。
lsof 供安装脚本使用。
nc 验证 iptables 个路由。
openssl 在初始引导过程中在本地对证书进行签名。

在安装过程中,您还需要在管理机器上安装 Consul 软件包,以便生成凭据和加密密钥。

apigee-mtls 软件包用于安装和配置 Consul 服务器,包括集群中的 ZooKeeper 节点上的入站流量和出站流量代理。

用户账号权限

在集群中的每个节点上执行 Apigee mTLS 安装的帐号必须能够:

  • 启动、停止、重启和初始化 Apigee 组件
  • 设置防火墙规则
  • 创建新的操作系统/系统用户账号
  • 使用 systemctl 启用、停用、启动、停止和遮盖服务

管理机(推荐)

Apigee 建议您在集群中添加一个节点,用于执行本文档中描述的各种任务,包括:

  1. 安装 HashiCorp Consul 1.6.2。
  2. 生成并分发证书/密钥对和八卦加密密钥。
  3. 更新并分发配置文件。

管理计算机需要:

  • 您已下载并安装 apigee-serviceapigee-setup 实用程序,如安装 Edge apigee-setup 实用程序中所述。
  • 对集群中的所有节点具有 scp/ssh 访问权限。如需分发配置文件和凭据,您必须拥有对集群内所有主机的 scp/ssh 访问权限。
  • 您拥有管理机器的 root 访问权限。

端口使用和分配

本部分介绍端口使用情况和端口分配,以支持与 Apigee mTLS 的 Consul 通信。

端口用量:所有运行 apigee-mtls 的节点

集群中使用 apigee-mtls 服务的所有节点都必须允许来自 localhost (127.0.0.1) 上的服务的连接。这样,Consul 代理可以在其他服务处理传入和传出消息时与其他服务进行通信。

端口使用情况:Consul 服务器节点(运行 ZooKeeper 的节点)

您必须在 Consul 服务器节点(运行 ZooKeeper 的节点)上打开以下大部分端口,才能接受来自集群中所有节点的请求:

节点 Consul 服务器端口 说明 协议 允许外部 mtls-agent
*
Consul 服务器(ZooKeeper 节点) 8300 连接集群中的所有 Consul 服务器。 RPC
8301 处理集群内的成员资格和广播消息。 UDP/TCP
8302 在多数据中心配置中处理成员资格和广播消息的 WAN 端口。 UDP/TCP
8500 处理来自同一节点上进程的 Consul 服务器 API 的 HTTP 连接。

此端口不用于远程通信或协调;它仅监听 localhost。

HTTP
8502 处理从集群中其他节点到 Consul Server API 的 gRPC+HTTPS 连接。 gRPC+HTTPS
8503 处理从集群中其他节点到 Consul Server API 的 HTTPS 连接。 HTTPS
8600 处理 Consul 服务器的 DNS。 UDP/TCP
* Apigee 建议您仅限集群成员发出入站请求(包括跨数据存储区)。您可以使用 iptables 执行此操作。

如下表所示,运行 consul-server 组件的节点(ZooKeeper 节点)必须向集群中运行 apigee-mtls 服务的所有成员开放端口 8301、8302、8502 和 8503,即使跨数据中心也是如此。未运行 ZooKeeper 的节点不需要打开这些端口。

所有 Consul 节点(包括运行 ZooKeeper 的节点)的端口分配

为了支持 Consul 通信,运行以下 Apigee 组件的节点必须允许对以下范围内的端口进行外部连接:

Apigee 组件 范围 每个节点所需的端口数
Apigee mTLS 10700 至 10799 1
Cassandra 10100 至 10199 2
消息处理器 10500 至 10599 2
OpenLDAP 10200 至 10299 1
Postgres 10300 至 10399 3
Qpid 10400 至 10499 2
路由器 10600 至 10699 2
ZooKeeper 10001 到 10099 3

Consul 以简单的线性方式分配端口。例如,如果您的集群有两个 Postgres 节点,则第一个节点使用两个端口,因此 Consul 会为其分配端口 10300 和 10301。第二个节点也使用两个端口,因此 Consol 将 10302 和 10303 分配给该节点。这适用于所有组件类型。

如您所见,实际端口数量取决于拓扑:如果您的集群有两个 Postgres 节点,则需要打开四个端口(两个节点乘以两个端口)。

请注意以下几点:

  • Consul 代理无法监听与 Apigee 服务相同的端口。
  • Consul 只有一个端口地址空间。Consul 代理端口分配在整个集群(包括数据中心)中必须是唯一的。这意味着,如果主机 A 上的代理 A 在监听端口 15000,那么主机 B 上的代理 B 就不能监听端口 15000。
  • 如前所述,使用的端口数量因拓扑而异。

多数据中心配置中,所有运行 mTLS 的主机也必须打开端口 8302。

您可以自定义 Apigee mTLS 使用的默认端口。如需了解如何执行此操作,请参阅代理端口范围自定义

限制

Apigee mTLS 存在以下限制:

  • 不会加密节点间 Cassandra 通信(端口 7000)
  • 配置和设置不具有幂等性。这意味着,如果您在一个节点上进行一项更改,则必须在所有节点上进行相同的更改;系统不会为您提取这项更改并为您将其应用到其他节点。如需了解详情,请参阅更改现有的 apigee-mtls 配置

术语

本部分使用以下术语:

术语 定义
集群 构成 Private Cloud 安装的 Edge 的机器组。
咨询 Apigee mTLS 使用的服务网格。如需了解 Consul 如何保护您的私有云通信,请参阅 Consul 的安全模型
mTLS 进行相互身份验证的 TLS。
服务网格 覆盖网络(或网络中的网络)。
TLS 事务层安全。用于安全通信的业界标准身份验证协议。