API 端点配置建议

内部 API 通信

OpenStack 提供面向公网和私有的 API 端点。默认情况下,OpenStack 组件使用公开定义的端点。建议配置这些组件以使用适当安全域内的 API 端点。

服务基于 OpenStack 服务目录选择各自的 API 端点。这些服务可能不会遵守列出的公共或内部 API 端点值。这可能导致内部管理流量被路由到外部 API 端点。

在 Identity 服务目录中配置内部 URL

Identity 服务目录应该了解您的内部 URL。虽然默认情况下不使用此功能,但可以通过配置利用它。此外,一旦此行为成为默认设置,它应该与预期的更改兼容。

要注册端点的内部 URL

$ openstack endpoint create identity \
  --region RegionOne internal \
  https://MANAGEMENT_IP:5000/v3

MANAGEMENT_IP 替换为您的控制器节点的管理 IP 地址。

为内部 URL 配置应用程序

您可以强制某些服务使用特定的 API 端点。因此,建议每个与另一个服务的 API 通信的 OpenStack 服务都必须显式配置为访问正确的内部 API 端点。

每个项目可能以不一致的方式定义目标 API 端点。OpenStack 的未来版本旨在通过一致使用 Identity 服务目录来解决这些不一致性。

配置示例 #1:nova

cinder_catalog_info='volume:cinder:internalURL'
glance_protocol='https'
neutron_url='https://neutron-host:9696'
neutron_admin_auth_url='https://neutron-host:9696'
s3_host='s3-host'
s3_use_ssl=True

配置示例 #2:cinder

glance_host = 'https://glance-server'

Paste 和中间件

OpenStack 中的大多数 API 端点和其他 HTTP 服务都使用 Python Paste Deploy 库。从安全角度来看,该库允许通过应用程序的配置操作请求过滤器管道。此链中的每个元素都称为中间件。更改管道中过滤器的顺序或添加额外的中间件可能会产生不可预测的安全影响。

通常,实施者添加中间件以扩展 OpenStack 的基本功能。我们建议实施者仔细考虑通过将非标准软件组件添加到其 HTTP 请求管道中引入的潜在风险。

有关 Paste Deploy 的更多信息,请参阅 Python Paste Deployment 文档

API 端点进程隔离和策略

您应该隔离 API 端点进程,尤其是那些位于公共安全域内的进程,应尽可能隔离。在允许部署的情况下,API 端点应部署在单独的主机上以提高隔离性。

命名空间

许多操作系统现在提供分区支持。Linux 支持命名空间,以将进程分配到独立的域。本指南的其他部分将更详细地介绍系统分区。

网络策略

由于 API 端点通常连接多个安全域,因此必须特别注意 API 进程的分区。有关此领域的更多信息,请参阅 连接安全域

通过仔细建模,您可以使用网络 ACL 和 IDS 技术来强制执行网络服务之间的显式点对点通信。作为关键的跨域服务,这种显式强制对于 OpenStack 的消息队列服务非常有效。

为了强制执行策略,您可以配置服务、基于主机的防火墙(例如 iptables)、本地策略(SELinux 或 AppArmor)以及可选的全局网络策略。

强制访问控制

您应该将 API 端点进程彼此隔离,并与其他机器上的进程隔离。这些进程的配置应仅限于这些进程,不仅通过自主访问控制,还通过强制访问控制。这些增强的访问控制的目标是帮助遏制和升级 API 端点安全漏洞。使用强制访问控制,此类漏洞会严重限制对资源的访问,并能更早地发出此类事件的警报。

API 端点速率限制

速率限制是一种控制基于网络应用程序接收到的事件频率的手段。如果不存在强大的速率限制,则可能导致应用程序容易受到各种拒绝服务攻击。对于 API 而言,尤其如此,因为 API 本质上被设计为接受高频率的类似请求类型和操作。

在 OpenStack 中,建议通过速率限制代理或 Web 应用程序防火墙,为所有端点(尤其是公共端点)提供额外的保护层。

在配置和实施任何速率限制功能时,操作员必须仔细规划并考虑 OpenStack 云中用户和服务的各个性能需求。

提供速率限制的常用解决方案包括 Nginx、HAProxy、OpenRepose 或 Apache 模块,例如 mod_ratelimit、mod_qos 或 mod_security。