OpenStack 介绍

本指南提供了关于 OpenStack 部署的安全见解。目标读者是云架构师、部署者和管理员。此外,云用户会发现本指南具有教育意义,并且在选择提供商时很有帮助,而审计员会发现它作为支持其合规性认证工作的文件很有用。本指南也推荐给对云安全感兴趣的任何人。

每个 OpenStack 部署都涵盖了各种技术,包括 Linux 发行版、数据库系统、消息队列、OpenStack 组件本身、访问控制策略、日志记录服务、安全监控工具等等。 毋庸置疑,涉及的安全问题同样多种多样,对其进行深入分析需要多本指南。我们努力找到一个平衡点,提供足够的背景信息来理解 OpenStack 安全问题及其处理方式,并提供外部参考以获取更多信息。 本指南可以从头到尾阅读,也可以像参考资料一样使用。

我们首先简要介绍云的类型(私有云、公有云和混合云),然后在本章的其余部分中介绍 OpenStack 组件及其相关的安全问题。

在整本书中,我们提到了几种类型的 OpenStack 云用户:管理员操作员用户。我们使用这些术语来识别每个角色拥有的安全访问级别,尽管实际上,我们理解不同的角色通常由同一个人担任。

云类型

OpenStack 是采用云技术的关键推动力,并且有几种常见的部署用例。 这些通常被称为公有云、私有云和混合云模型。 以下章节使用美国国家标准与技术研究院 (NIST) 云的定义来介绍这些不同类型的云,以及它们在 OpenStack 中的应用。

公有云

根据 NIST 的定义,公有云是向公众开放的基础设施,供公众使用。 OpenStack 公有云通常由 服务提供商 运营,可以被个人、公司或任何付费客户使用。 公有云提供商可能会公开一套完整的特性,例如软件定义网络或块存储,以及多种实例类型。

从本质上讲,公有云面临着更高程度的风险。 作为公有云的消费者,您应该验证您选择的提供商是否具有必要的认证、证明和其他监管方面的考虑。 作为公有云提供商,根据您的目标客户,您可能需要遵守一项或多项法规。 此外,即使没有要求满足监管要求,提供商也应确保租户隔离以及保护管理基础设施免受外部攻击。

私有云

在光谱的另一端是私有云。 按照 NIST 的定义,私有云是为单个组织独家使用的,该组织由多个消费者组成,例如业务部门。 该云可以由组织、第三方或两者兼有拥有、管理和运营,并且可以存在于内部或外部。

社区云

NIST 将社区云定义为一种基础设施,该基础设施是为特定社区的消费者独家预留的,这些组织具有共同的关注点(例如,使命、安全要求、策略或合规性考虑)。 该云可以由社区中的一个或多个组织、第三方或两者兼有拥有、管理和运营,并且可以存在于内部或外部。

混合云

NIST 将混合云定义为两个或多个不同的云基础设施的组合,例如私有云、社区云或公有云,它们仍然是独立的实体,但通过标准或专有技术绑定在一起,从而实现数据和应用程序的可移植性,例如在云之间进行负载均衡的云爆发。 例如,一家在线零售商可能会在其公有云上展示其广告和目录,从而实现弹性配置。 这使他们能够以灵活、经济高效的方式处理季节性负载。 一旦客户开始处理订单,他们就会被转移到更安全的私有云,该云符合 PCI 标准。

在本文档中,我们将社区云和混合云进行类似的处理,仅从安全角度显式处理公有云和私有云的极端情况。 您的安全措施取决于您的部署落在私有-公有连续体上的位置。

OpenStack 服务概述

OpenStack 采用模块化架构,提供一组核心服务,这些服务促进了可扩展性和弹性,作为核心设计理念。 本章简要回顾 OpenStack 组件、用例和安全注意事项。

../_images/marketecture-diagram.png

计算

OpenStack 计算服务 (nova) 提供服务来支持大规模管理虚拟机实例,这些实例托管多层应用程序、开发或测试环境、“大数据”处理 Hadoop 集群或高性能计算。

计算服务通过与受支持的虚拟机管理程序(我们稍后会详细介绍)接口的抽象层来促进这种管理。

稍后在本指南中,我们将从通用角度关注虚拟化堆栈,因为它与虚拟机管理程序相关。

有关当前功能支持状态的信息,请参阅 OpenStack 虚拟机管理程序支持矩阵

计算安全性对于 OpenStack 部署至关重要。 加强技术应包括对强大的实例隔离、计算子组件之间的安全通信以及面向公众的 API 端点的弹性支持。

对象存储

OpenStack 对象存储服务 (swift) 提供支持在云中存储和检索任意数据。 对象存储服务提供本机 API 和 Amazon Web Services S3 兼容的 API。 该服务通过数据复制提供高度的弹性,并且可以处理 PB 级的数据。

重要的是要理解,对象存储与传统的的文件系统存储不同。 对象存储最适合用于静态数据,例如媒体文件(MP3、图像或视频)、虚拟机镜像和备份文件。

对象安全性应侧重于访问控制以及传输中和静态数据的加密。 其他问题可能与系统滥用、非法或恶意内容存储以及跨身份验证攻击向量有关。

块存储

OpenStack 块存储服务 (cinder) 为计算实例提供持久块存储。 块存储服务负责管理块设备的生命周期,从创建和将卷附加到实例,到释放它们。

块存储的安全注意事项与对象存储类似。

共享文件系统

共享文件系统服务 (manila) 提供一组服务,用于管理多租户云环境中的共享文件系统,类似于 OpenStack 如何通过 OpenStack 块存储服务项目提供基于块的存储管理。 通过共享文件系统服务,您可以创建一个远程文件系统,将文件系统挂载到您的实例上,然后从您的实例读写数据到您的文件系统。

网络

OpenStack 网络服务 (neutron,以前称为 quantum) 为云用户(租户)提供各种网络服务,例如 IP 地址管理、DNS、DHCP、负载平衡和安全组(网络访问规则,如防火墙策略)。 该服务提供软件定义网络 (SDN) 的框架,允许与各种网络解决方案进行可插拔集成。

OpenStack 网络允许云租户管理其客户网络配置。 网络服务的安全问题包括网络流量隔离、可用性、完整性和机密性。

仪表盘

OpenStack 仪表板 (horizon) 为云管理员和云租户提供基于 Web 的界面。 使用此界面,管理员和租户可以配置、管理和监控云资源。 仪表板通常以面向公众的方式部署,具有所有通常的公共 Web 门户安全问题。

身份服务

OpenStack 身份服务 (keystone) 是一个 共享服务,它为整个云基础设施提供身份验证和授权服务。 身份服务对多种形式的身份验证提供可插拔支持。

身份服务的安全问题包括对身份验证的信任、授权令牌的管理以及安全通信。

镜像服务

OpenStack 镜像服务 (glance) 提供磁盘镜像管理服务,包括镜像发现、注册和交付服务到计算服务,如果需要的话。

需要可信赖的流程来管理磁盘镜像的生命周期,以及之前提到的所有与数据安全相关的问题。

数据处理服务

数据处理服务 (sahara) 提供一个平台,用于配置、管理和使用运行流行的处理框架的集群。

数据处理的安全性应侧重于数据隐私和与配置集群的安全通信。

其他支持技术

消息传递用于 OpenStack 多个服务之间的内部通信。 默认情况下,OpenStack 使用基于 AMQP 的消息队列。 与大多数 OpenStack 服务一样,AMQP 支持可插拔组件。 今天,实现后端可以是 RabbitMQ、Qpid 或 ZeroMQ。

由于大多数管理命令都通过消息队列系统流动,因此消息队列安全性是任何 OpenStack 部署的主要安全问题,并在本指南的后面详细讨论。

几个组件使用数据库,尽管没有明确说明。 保护数据库访问是另一个安全问题,因此在本指南的后面详细讨论。