本文介绍了OpenStack身份,它为所有其他OpenStack项目提供了一种通用的身份验证方法。
每个多用户服务都需要某种机制来管理谁可以访问该应用程序以及每个人可以执行哪些操作。 私有云也不例外,OpenStack将这些功能简化为一个名为Keystone的单独项目。
Keystone是OpenStack Identity的项目名称,OpenStack Identity是一项通过OpenStack应用程序编程接口(API)提供令牌,策略和目录功能的服务。 与其他OpenStack项目一样,Keystone表示一个抽象层。 它实际上并没有实现任何用户管理功能。 相反,它提供了插件接口,以便组织可以利用其当前的身份验证服务或从市场上的各种身份管理系统中进行选择。
Keystone集成了用于身份验证,策略管理和目录服务的OpenStack功能,包括注册所有租户和用户,对用户进行身份验证并授予令牌进行授权,创建涵盖所有用户和服务的策略以及管理服务端点的目录。 身份管理系统的核心对象是用户-使用OpenStack服务的人,系统或服务的数字表示。 通常将用户分配给称为租户的容器,这些容器隔离资源和身份对象。 租户可以代表客户,帐户或任何组织单位。
身份验证是确定用户身份的过程。 Keystone确认任何传入的功能调用均源于声称提出请求的用户。 它通过测试一组采用凭据形式的声明来执行此验证。 凭证数据的区别在于,只有拥有数据的用户才能访问凭证数据。 它可以包含仅用户知道的数据(用户名,密码或密钥),用户实际拥有的内容(硬件令牌)或用户“是”的数据(虹膜扫描或指纹等生物数据)。
OpenStack身份确认用户的身份后,它将为用户提供一个令牌,该令牌可证实该身份并可用于后续资源请求。 每个令牌都包含一个范围,该范围列出了它所使用的资源。 该令牌仅在有限的时间内有效,如果需要删除特定用户的访问权限,则可以将其撤销。
安全策略是通过基于规则的授权引擎来实施的。 在对用户进行身份验证之后,下一步就是确定授权级别。 Keystone使用称为角色的概念封装了一组权利和特权。 身份服务发出的令牌包括经过身份验证的用户可以承担的角色列表。 然后由资源服务来将用户角色集与所请求的资源操作集进行匹配,并授予或拒绝访问。
Keystone的一项附加服务是用于端点发现的服务目录。 该目录提供了可用服务及其API端点的列表。 端点是网络可访问的地址,例如URL,用户可以从中使用服务。 所有OpenStack服务,包括OpenStack Compute(Nova)和OpenStack Object Storage(Swift)提供端点到Keystone的端点,用户可以通过它们请求资源和执行操作。
建筑
从结构上讲,Keystone很简单。 它处理所有API请求,提供身份,令牌,目录和策略服务。 它被组织为通过API网络公开的一组前端服务:
- 身份服务会验证身份验证凭据并提供任何关联的元数据。
- 验证用户凭据后,令牌服务将验证和管理用于验证请求的令牌。
- 目录服务提供了可用于端点发现的服务注册表。
- 策略服务公开基于规则的授权引擎。
每个Keystone功能都支持后端插件,以便集成到异构环境中并公开各种功能。 一些较常见的后端包括:
- 键值存储。 支持主键查找的接口,例如内存字典。
- Memcached。 分布式内存缓存系统
- 结构化查询语言(SQL)。 使用SQLAlchemy(Python SQL工具箱和对象关系映射器)持久存储数据
- 可插拔身份验证模块(PAM)。 使用本地系统的PAM服务进行身份验证
- 轻型目录访问协议(LDAP)。 通过LDAP连接到后端目录,例如ActiveDirectory®,以对用户进行身份验证并获取角色信息
设定
实际的安装说明在发行版和OpenStack发行版之间有很大差异。 通常,它们是发行版的一部分。 但是,必须完成相同的基本任务。 本节使您对所涉及的内容有所了解。
系统要求
OpenStack依赖于64位x86架构; 否则,它是为商品硬件设计的,因此最低的系统要求是适度的。 可以在具有8GB RAM的单个系统上运行整个OpenStack项目套件。 对于稍大的安装,可以将Keystone服务与其他项目(例如Nova控制器)一起放置。 但是,对于高度可扩展的实现,最好使用专用系统进行身份管理。 一个简单系统的一个很好的起点是带有32GB RAM和两个Gbit网络适配器的四核CPU。
安装
安装说明取决于发行版,更具体地取决于您选择的软件包管理实用程序。 在许多情况下,必须声明存储库。 因此,例如,在Zypper的情况下,您用zypper ar
向libzypp
宣布:
# zypper ar -f http://download.opensuse.org/repositories/Cloud:/OpenStack:/Grizzly/SLE_11_SP3/Cloud:OpenStack:Grizzly.repo
然后,您安装必需的Keystone软件包,并且软件包管理实用程序应自动安装任何依赖项。 完整的安装过程取决于所需的配置和相关OpenStack的确切版本。 确保查看安装指南以获取权威说明。 为了说明的目的,以下是Debian(例如Ubuntu),Red Hat(Red Hat EnterpriseLinux®,CentOS,Fedora)和openSUSE的主要命令:
- Debian。 要在基于Debian的系统(例如Ubuntu)上安装Keystone,请使用以下命令:
sudo apt-get install keystone sudo apt-get install python-keystone sudo apt-get install python-keystoneclient
- 红帽。 在Red Hat系统上,命令是:
sudo yum install openstack-keystone sudo yum install python-keystone sudo yum install python-keystoneclient
- openSUSE。 使用以下命令:
sudo zypper install openstack-keystone sudo zypper install python-keystoneclient
组态
Keystone的主要配置文件是keystone.conf,它位于/ etc / keystone /中。 它标识[auth]
部分中指定的所有身份验证插件:
-
methods
。 列出所有身份验证插件名称 -
<plugin name>
。 为每种身份验证方法指定类
例如:
[auth]
methods = password,token,oauth1
password = keystone.auth.plugins.password.Password
token = keystone.auth.plugins.token.Token
oauth1 = keystone.auth.plugins.oauth1.OAuth
插件没有标准的机制来注册其自己的配置选项,但是在配置文件中具有自己的部分是很常见的。
证明书
许多组织正朝着公钥基础结构迈进,因为它是一种高度可扩展的,基于标准的技术。 它的好处之一是它允许委派信任,这对于身份联合至关重要,但也意味着有必要通过与公认的和受信任的证书颁发机构(CA)的防篡改链接来证明真实性。
实际上,这意味着公用密钥必须使用CA认证的X.509证书进行签名。 对于纯内部实现,可以使用keystone-manage
来生成自签名证书,但是在联合环境中,可能需要来自外部CA的证书。
安装由外部CA颁发的证书涉及:
- 向外部CA请求签名证书
- 将证书和私钥都转换为增强隐私电子邮件(PEM)格式
- 通过将.pem文件复制到证书目录来安装外部签名证书
使用场景
身份管理是一项支持功能,其功能远不如大多数其他OpenStack项目那么具体。 应该将其视为简化服务发现并提供执行安全策略的统一方法的启动器。
通过将其分为两个部分来可视化它的使用可能是最容易的。 Keystone中的管理功能定义用户和项目并分配适当的授权。 配置环境后,项目和应用程序可以与Keystone交互以执行查询和验证访问控制。
行政
让我们从第一部分开始,这很容易理解,因为它已映射到Horizon仪表板。 管理员可以创建项目和用户。 可以为用户分配角色并将其聚合为组,以简化管理。
- 第一步通常是创建一个项目。 以管理员身份登录到OpenStack仪表板。 在导航窗格中的“标识面板”下,单击“ 项目” >“ 创建项目” 。
图1.创建一个新项目
- 此时,您只需要名称和描述即可。 您还需要至少一个用户。 在身份面板下,单击用户 > 创建用户 。
图2.创建一个用户
- 编辑项目。 在身份面板下,单击项目 > 编辑项目 。
图3.编辑项目
- 在“编辑项目”窗口中的“项目成员”选项卡上,您可以编辑项目成员并更改其角色。
图4.编辑项目成员及其角色
- 您也可以使用“配额”选项卡来指定项目的限制。 这在多租户环境中特别有用,以确保一个项目不会使用过多的资源并使在同一基础结构上运行的其他关键服务不堪重负。
图5.指定项目的限制
认证方式
该场景的第二部分是在执行时对服务进行身份验证。 例如,考虑使用OpenStack Swift进行对象存储的应用程序。 无论它是否作为OpenStack计算实例的一部分运行,它都必须能够进行身份验证,这意味着它需要访问有效的凭据。
应用程序首先需要连接到身份验证服务并提供其凭据。 然后,它收到一个身份验证令牌,该令牌可以传递给所有容器和对象操作的OpenStack对象存储。 在某些情况下,可能未为应用程序预配置所有连接参数。 它也可以从Keystone获取这些参数。 例如,它可以查询Keystone以发现它可以访问哪些项目并请求其所需服务的URL。
结论
只要您坚持使用Horizon用户界面,用户管理就不会困难。 它隐藏了内部流程以及与其他用户存储库(例如Active Directory或任何LDAP目录)的任何必要集成。
翻译自: https://www.ibm.com/developerworks/cloud/library/cl-openstack-keystone/index.html