6.2. 项目层次结构
6.2.1. Identity Service 中的分层多租户(HMT)
您可以使用 Identity 服务(keystone)中的多租户来嵌套项目。多租户允许子项目从父项目继承角色分配。
6.2.1.1. 创建项目和子项目
您可以使用 keystone 域和项目实施层次结构多租户(HMT)。首先创建一个新域,然后在该域内创建项目。然后,您可以向该项目添加子项目。您还可以通过将用户添加到该子项目的 admin
角色,将用户提升到子项目的管理员。
keystone 使用的 HMT 结构目前没有在仪表板中表示。
1.创建名为 corp
的新 keystone 域:
$ openstack domain create corp +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | | | enabled | True | | id | 69436408fdcb44ab9e111691f8e9216d | | name | corp | +-------------+----------------------------------+
2.在 corp
域中创建父项目(private-cloud
):
$ openstack project create private-cloud --domain corp +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | | | domain_id | 69436408fdcb44ab9e111691f8e9216d | | enabled | True | | id | c50d5cf4fe2e4929b98af5abdec3fd64 | | is_domain | False | | name | private-cloud | | parent_id | 69436408fdcb44ab9e111691f8e9216d | +-------------+----------------------------------+
3.在 private-cloud
父项目中创建子项目(dev
),同时指定 corp
域:
$ openstack project create dev --parent private-cloud --domain corp +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | | | domain_id | 69436408fdcb44ab9e111691f8e9216d | | enabled | True | | id | 11fccd8369824baa9fc87cf01023fd87 | | is_domain | False | | name | dev | | parent_id | c50d5cf4fe2e4929b98af5abdec3fd64 | +-------------+----------------------------------+
4.创建名为 qa
的另一个子项目:
$ openstack project create qa --parent private-cloud --domain corp +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | | | domain_id | 69436408fdcb44ab9e111691f8e9216d | | enabled | True | | id | b4f1d6f59ddf413fa040f062a0234871 | | is_domain | False | | name | qa | | parent_id | c50d5cf4fe2e4929b98af5abdec3fd64 | +-------------+----------------------------------+
您可以使用 Identity API 查看项目层次结构。如需更多信息,请参阅 https://developer.openstack.org/api-ref/identity/v3/index.html?expanded=show-project-details-detail
6.2.1.2. 授予用户访问权限
默认情况下,新创建的项目没有分配的角色。为父项目分配角色权限时,您可以包含 --inherited
标志,以指示子项目从父项目中继承分配的权限。例如,具有对父项目的 admin
角色的用户也具有对子项目的 admin
访问权限。
1.查看分配给项目的现有权限:
$ openstack role assignment list --project private-cloud
2.查看现有角色:
$ openstack role list +----------------------------------+-----------------+ | ID | Name | +----------------------------------+-----------------+ | 01d92614cd224a589bdf3b171afc5488 | admin | | 034e4620ed3d45969dfe8992af001514 | member | | 0aa377a807df4149b0a8c69b9560b106 | ResellerAdmin | | 9369f2bf754443f199c6d6b96479b1fa | heat_stack_user | | cfea5760d9c948e7b362abc1d06e557f | reader | | d5cb454559e44b47aaa8821df4e11af1 | swiftoperator | | ef3d3f510a474d6c860b4098ad658a29 | service | +----------------------------------+-----------------+
3.授予用户帐户 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
4.查看权限更新的结果:
$ 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
也接受对稍后创建的任何子项目的访问。
6.2.2. 删除访问权限
必须单独删除显式和继承的权限。
1.从显式分配的角色中删除用户:
$ openstack role remove --user user1 --project private-cloud member
2.查看更改的结果。请注意,继承的权限仍然存在:
$ openstack role assignment list --effective --user user1 --user-domain corp +----------------------------------+----------------------------------+-------+----------------------------------+--------+-----------+ | Role | User | Group | Project | Domain | Inherited | +----------------------------------+----------------------------------+-------+----------------------------------+--------+-----------+ | 034e4620ed3d45969dfe8992af001514 | 10b5b34df21d485ca044433818d134be | | 11fccd8369824baa9fc87cf01023fd87 | | True | | 034e4620ed3d45969dfe8992af001514 | 10b5b34df21d485ca044433818d134be | | b4f1d6f59ddf413fa040f062a0234871 | | True | +----------------------------------+----------------------------------+-------+----------------------------------+--------+-----------+
3.删除继承的权限:
$ openstack role remove --user user1 --project private-cloud member --inherited
4.查看更改的结果。继承的权限已被删除,生成的输出现在为空:
$ openstack role assignment list --effective --user user1 --user-domain corp
6.2.3. 嵌套配额
目前,尚不支持 嵌套配额。因此,您必须针对项目和子项目单独管理配额。
6.2.4. 法国概述
使用 Reseller 项目时,目标是具有域层次结构;这些域最终允许您考虑删除部分云,子域代表一个功能齐全的云。这个工作分为几个阶段,如下所示:
6.2.4.1. 1 阶段
法国(第 1 阶段)是层次结构多租户(HMT)的扩展,如下所述: 第 6.2.1 节 “Identity Service 中的分层多租户(HMT)”。在以前的版本中,keystone 域最初打算是存储用户和项目的容器,在数据库后端中都有自己的表。现在,域不再存储在自己的表中,并已合并到项目表中:
-
域现在是一个项目,由
is_domain
标志区分。 - 域表示项目层次结构中的顶级项目:域是项目层次结构中的根
API 已更新,以使用
项目
子路径来创建和检索域:-
通过创建项目并将
is_domain
标志设置为 true 来创建新域 -
列出属于 domain 的项目:获取项目,包括
is_domain
查询参数。
-
通过创建项目并将
~