搜索

6.6. 项目层次结构

download PDF

您可以使用身份服务(keystone)中的多租户项目嵌套项目。多租户允许子项目从父项目继承角色分配。

6.6.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.6.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. 授予用户帐户 user1private-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 用户继承了对 qadev 项目的访问权限。此外,由于 --inherited 标志应用到父项目,user1 也接收对稍后创建的任何子项目的访问权限。

从用户中删除访问

必须单独删除显式和继承的权限。

  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.6.3. 经销商项目概述

使用 Reseller 项目时,目标是拥有域层次结构;这些域最终允许您考虑转销部分云,其带有代表完全启用云的子域。这个工作分为几个阶段,阶段 1 如下所示:

经销商阶段 1

经销商(阶段 1)是层次结构多租户(HMT)的扩展,如下所述: 创建分层项目和子项目。在以前的版本中,keystone 域最初设计为是存储用户和项目的容器,其具有他们在数据库后端中的表。因此,域现在不再存储在自己的表中,并已合并到项目表中:

  • 域现在是项目的类型,可通过 is_domain 标志区分。
  • 域代表项目层次结构中的顶级项目:域是项目层次结构中的 roots
  • API 已更新,以使用 项目 子路径创建和检索域:

    • 通过创建将 is_domain 标志设为 true 的项目来创建新域
    • 列出 domain: get projects,包括 is_domain 查询参数。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.