8.6. 项目层次结构
您可以使用 Identity 服务(keystone)中的多租户项目嵌套项目。多租户允许子项目从父项目继承角色分配。
8.6.1. 创建分层项目和子项目 复制链接链接已复制到粘贴板!
您可以使用 keystone 域和项目实施层次结构多租户(HMT)。首先创建新域,然后在该域内创建项目。然后,您可以将子项目添加到该项目中。您还可以通过将用户添加到该子项目的 admin 角色,将用户提升为子项目的管理员。
keystone 使用的 HMT 结构目前没有在仪表板中表示。
流程
创建名为
corp的新 keystone 域:示例命令
$ openstack domain create corp输出示例
+-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | | | enabled | True | | id | 6059b0b93b8d4ddb9d31ea47de93f0ab | | name | corp | | options | {} | | tags | [] | +-------------+----------------------------------+在
corp域中创建父项目(private-cloud):示例命令
$ openstack project create private-cloud --domain corp输出示例
+-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | | | domain_id | 6059b0b93b8d4ddb9d31ea47de93f0ab | | enabled | True | | id | e86f182e16e24441b71c7296585c2e21 | | is_domain | False | | name | private-cloud | | options | {} | | parent_id | 6059b0b93b8d4ddb9d31ea47de93f0ab | | tags | [] | +-------------+----------------------------------+在
私有云父项目中创建子项目(dev),同时指定corp域:示例命令
$ openstack project create dev --parent private-cloud --domain corp输出示例
+-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | | | domain_id | 6059b0b93b8d4ddb9d31ea47de93f0ab | | enabled | True | | id | 71f05cdd5b8a45d4b1a928bfe7c2e20d | | is_domain | False | | name | dev | | options | {} | | parent_id | e86f182e16e24441b71c7296585c2e21 | | tags | [] | +-------------+----------------------------------+创建名为
qa的另一个子项目:示例命令
$ openstack project create qa --parent private-cloud --domain corp输出示例
+-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | | | domain_id | 6059b0b93b8d4ddb9d31ea47de93f0ab | | enabled | True | | id | 03801ad929b84c8fb091bf3248e6db68 | | is_domain | False | | name | qa | | options | {} | | parent_id | e86f182e16e24441b71c7296585c2e21 | | tags | [] | +-------------+----------------------------------+
您可以使用 Identity API 查看项目层次结构。如需更多信息,请参阅 https://developer.openstack.org/api-ref/identity/v3/index.html?expanded=show-project-details-detail
8.6.2. 配置对分层项目的访问 复制链接链接已复制到粘贴板!
默认情况下,新创建的项目没有分配的角色。当您为父项目分配角色权限时,您可以包含- inherited 标志,以指示子项目从父项目中继承分配的权限。例如,具有对父项目的 admin 角色的用户也具有对子项目的 admin 访问权限。
授予用户访问权限
查看分配给项目的现有权限:
$ openstack role assignment list --project private-cloud查看现有角色:
示例命令
$ openstack role list输出示例
+----------------------------------+-----------------+ | ID | Name | +----------------------------------+-----------------+ | 01d92614cd224a589bdf3b171afc5488 | admin | | 034e4620ed3d45969dfe8992af001514 | member | | 0aa377a807df4149b0a8c69b9560b106 | ResellerAdmin | | cfea5760d9c948e7b362abc1d06e557f | reader | | d5cb454559e44b47aaa8821df4e11af1 | swiftoperator | | ef3d3f510a474d6c860b4098ad658a29 | service | +----------------------------------+-----------------+授予用户帐户
user1对private-cloud项目的访问权限:$ openstack role add --user user1 --user-domain corp --project private-cloud member使用-
inherited标志重新运行此命令。因此,user1还有权访问private-cloud子项目,它们继承了角色分配:$ openstack role add --user user1 --user-domain corp --project private-cloud member --inherited查看权限更新的结果:
示例命令
$ openstack role assignment list --effective --user user1 --user-domain corp输出示例
+----------------------------------+----------------------------------+-------+----------------------------------+--------+-----------+ | Role | User | Group | Project | Domain | Inherited | +----------------------------------+----------------------------------+-------+----------------------------------+--------+-----------+ | 034e4620ed3d45969dfe8992af001514 | 10b5b34df21d485ca044433818d134be | | c50d5cf4fe2e4929b98af5abdec3fd64 | | False | | 034e4620ed3d45969dfe8992af001514 | 10b5b34df21d485ca044433818d134be | | 11fccd8369824baa9fc87cf01023fd87 | | True | | 034e4620ed3d45969dfe8992af001514 | 10b5b34df21d485ca044433818d134be | | b4f1d6f59ddf413fa040f062a0234871 | | True | +----------------------------------+----------------------------------+-------+----------------------------------+--------+-----------+
user1 用户继承了对 qa 和 dev 项目的访问权限。此外,因为- inherited 标志应用于父项目,user1 也接收对稍后创建的任何子项目的访问。
删除用户的访问权限
必须单独删除显式和继承的权限。
从显式分配的角色中删除用户:
$ openstack role remove --user user1 --project private-cloud member检查更改的结果。请注意,继承的权限仍然存在:
示例命令
$ openstack role assignment list --effective --user user1 --user-domain corp输出示例
+----------------------------------+----------------------------------+-------+----------------------------------+--------+-----------+ | Role | User | Group | Project | Domain | Inherited | +----------------------------------+----------------------------------+-------+----------------------------------+--------+-----------+ | 034e4620ed3d45969dfe8992af001514 | 10b5b34df21d485ca044433818d134be | | 11fccd8369824baa9fc87cf01023fd87 | | True | | 034e4620ed3d45969dfe8992af001514 | 10b5b34df21d485ca044433818d134be | | b4f1d6f59ddf413fa040f062a0234871 | | True | +----------------------------------+----------------------------------+-------+----------------------------------+--------+-----------+删除继承的权限:
$ openstack role remove --user user1 --project private-cloud member --inherited检查更改的结果。继承的权限已被删除,生成的输出现在为空:
$ openstack role assignment list --effective --user user1 --user-domain corp
8.6.3. 经销商项目概述 复制链接链接已复制到粘贴板!
使用 Reseller 项目,目标是拥有域的层次结构;这些域最终允许您考虑将云的部分重新销售,其子域代表完全启用的云。这个工作分为几个阶段,阶段 1 如下所示:
经销商的第 1 阶段
经销商(阶段 1)是层次结构多租户(HMT)的扩展,如下所述: 创建分层项目和子项目。在以前的版本中,keystone 域最初是存储用户和项目的容器,并在数据库后端中使用自己的表。现在,域不再存储在自己的表中,并已合并到项目表中:
-
域现在是项目的类型,可通过
is_domain标志区分。 - 域表示项目层次结构中的顶级项目: domains 是项目层次结构中的根项
API 已更新,以使用
projects子路径创建和检索域:-
通过创建一个将
is_domain标志设为 true 的项目来创建新域 -
列出属于域的项目:get 项目,包括
is_domain查询参数。
-
通过创建一个将