管理项目、用户和角色

作为管理员,您管理项目、用户和角色。项目是云中的组织单元,您可以将用户分配给项目。项目也称为租户帐户。用户可以是多个项目的成员。角色定义了用户可以执行哪些操作。您将角色分配给用户-项目对。

您可以在 /etc/PROJECT/policy.yaml 文件中定义 OpenStack 服务角色的操作。例如,在 /etc/nova/policy.yaml 文件中定义 Compute 服务角色的操作。

您可以独立地管理项目、用户和角色。

在云设置期间,操作员会定义至少一个项目、用户和角色。

您可以添加、更新和删除项目和用户,将用户分配到一个或多个项目,以及更改或删除分配。要启用或暂时禁用项目或用户,请更新该项目或用户。您还可以更改项目级别的配额。

在删除用户帐户之前,您必须将其从其主项目中删除。

在运行客户端命令之前,您需要一个云配置文件,或者您可以下载并导入一个 OpenStack RC 文件。有关更多详细信息,请参阅 python-openstackclient 项目的 配置 文档。

项目

项目是一组零个或多个用户。在 Compute 中,项目拥有虚拟机。在对象存储中,项目拥有容器。用户可以与多个项目关联。每个项目和用户配对都可以关联一个角色。

列出项目

列出所有项目及其 ID、名称以及是否启用或禁用

$ openstack project list
+----------------------------------+--------------------+
| ID                               | Name               |
+----------------------------------+--------------------+
| f7ac731cc11f40efbc03a9f9e1d1d21f | admin              |
| c150ab41f0d9443f8874e32e725a4cc8 | alt_demo           |
| a9debfe41a6d4d09a677da737b907d5e | demo               |
| 9208739195a34c628c58c95d157917d7 | invisible_to_admin |
| 3943a53dc92a49b2827fae94363851e1 | service            |
| 80cab5e1f02045abad92a2864cfd76cb | test_project       |
+----------------------------------+--------------------+

创建一个项目

创建一个名为 new-project 的项目

$ openstack project create --description 'my new project' new-project \
  --domain default
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | my new project                   |
| domain_id   | e601210181f54843b51b3edff41d4980 |
| enabled     | True                             |
| id          | 1a4a0618b306462c9830f876b0bd6af2 |
| is_domain   | False                            |
| name        | new-project                      |
| parent_id   | e601210181f54843b51b3edff41d4980 |
| tags        | []                               |
+-------------+----------------------------------+
  • 如果不使用域范围令牌(即使用项目范围令牌或系统范围令牌),并且没有指定域或 domain_id,则项目将自动在默认域中创建。

更新一个项目

指定要更新的项目 ID。您可以更新项目的名称、描述和启用状态。

  • 要暂时禁用一个项目

    $ openstack project set PROJECT_ID --disable
    
  • 要启用一个禁用的项目

    $ openstack project set PROJECT_ID --enable
    
  • 要更新项目的名称

    $ openstack project set PROJECT_ID --name project-new
    
  • 要验证您的更改,请显示更新后的项目信息

    $ openstack project show PROJECT_ID
    +-------------+----------------------------------+
    | Field       | Value                            |
    +-------------+----------------------------------+
    | description | my new project                   |
    | domain_id   | e601210181f54843b51b3edff41d4980 |
    | enabled     | True                             |
    | id          | 0b0b995694234521bf93c792ed44247f |
    | is_domain   | False                            |
    | name        | new-project                      |
    | parent_id   | e601210181f54843b51b3edff41d4980 |
    | tags        | []                               |
    +-------------+----------------------------------+
    

删除一个项目

指定要删除的项目 ID

$ openstack project delete PROJECT_ID

用户

列出用户

列出所有用户

$ openstack user list
+----------------------------------+----------+
| ID                               | Name     |
+----------------------------------+----------+
| 352b37f5c89144d4ad0534139266d51f | admin    |
| 86c0de739bcb4802b8dc786921355813 | demo     |
| 32ec34aae8ea432e8af560a1cec0e881 | glance   |
| 7047fcb7908e420cb36e13bbd72c972c | nova     |
+----------------------------------+----------+

创建一个用户

要创建一个用户,您必须指定一个名称。您可以选择性地指定项目 ID、密码和电子邮件地址。建议您包括项目 ID 和密码,因为用户无法在没有此信息的情况下登录到仪表板。

创建 new-user 用户

$ openstack user create --project new-project --password PASSWORD new-user
+------------+----------------------------------+
| Field      | Value                            |
+------------+----------------------------------+
| email      | None                             |
| enabled    | True                             |
| id         | 6322872d9c7e445dbbb49c1f9ca28adc |
| name       | new-user                         |
| project_id | 0b0b995694234521bf93c792ed44247f |
| username   | new-user                         |
+------------+----------------------------------+

更新一个用户

您可以更新用户的名称、电子邮件地址和启用状态。

  • 要暂时禁用一个用户帐户

    $ openstack user set USER_NAME --disable
    

    如果您禁用了用户帐户,则用户无法登录到仪表板。但是,用户帐户的数据会保留,因此您可以随时启用该用户。

  • 要启用一个禁用的用户帐户

    $ openstack user set USER_NAME --enable
    
  • 要更改用户帐户的名称和描述

    $ openstack user set USER_NAME --name user-new --email new-user@example.com
    User has been updated.
    

删除一个用户

删除指定的用户帐户

$ openstack user delete USER_NAME

角色和角色分配

列出可用角色

列出可用的角色

$ openstack role list
+----------------------------------+---------------+
| ID                               | Name          |
+----------------------------------+---------------+
| 71ccc37d41c8491c975ae72676db687f | member        |
| 149f50a1fe684bfa88dae76a48d26ef7 | ResellerAdmin |
| 9fe2ff9ee4384b1894a90878d3e92bab | reader        |
| 6ecf391421604da985db2f141e46a7c8 | admin         |
| deb4fffd123c4d02a907c2c74559dccf | anotherrole   |
+----------------------------------+---------------+

创建一个角色

用户可以是多个项目的成员。要将用户分配给多个项目,请定义一个角色并将该角色分配给用户-项目对。

创建 new-role 角色

$ openstack role create new-role
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | None                             |
| domain_id   | None                             |
| id          | a34425c884c74c8881496dc2c2e84ffc |
| name        | new-role                         |
+-------------+----------------------------------+

注意

如果您使用的是 identity v3,则可能需要使用带有特定域名名称的 --domain 选项。

分配一个角色

要将用户分配给项目,您必须将角色分配给用户-项目对。

  1. 将角色分配给用户-项目对

    $ openstack role add --user USER_NAME --project PROJECT_NAME ROLE_NAME
    

    例如,将 new-role 角色分配给 demo 用户和 test-project 项目对

    $ openstack role add --user demo --project test-project new-role
    
  2. 验证角色分配

    $ openstack role assignment list --user USER_NAME \
      --project PROJECT_NAME --names
    +-------------+--------------+-------+--------------+--------+--------+-----------+
    | Role        | User         | Group | Project      | Domain | System | Inherited |
    +-------------+--------------+-------+--------------+--------+--------+-----------+
    | new-role    | demo@Default |       | demo@Default |        |        | False     |
    | member      | demo@Default |       | demo@Default |        |        | False     |
    | anotherrole | demo@Default |       | demo@Default |        |        | False     |
    +-------------+--------------+-------+--------------+--------+--------+-----------+
    

注意

在 Newton 版本之前,用户会运行 openstack role list --user USER_NAME --project TENANT_ID 命令来验证角色分配。

查看角色详情

查看指定角色的详细信息

$ openstack role show ROLE_NAME
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | None                             |
| domain_id   | None                             |
| id          | a34425c884c74c8881496dc2c2e84ffc |
| name        | new-role                         |
+-------------+----------------------------------+

删除一个角色

从用户-项目对中删除角色

  1. 运行 openstack role remove 命令

    $ openstack role remove --user USER_NAME --project PROJECT_NAME ROLE_NAME
    
  2. 验证角色删除

    $ openstack role assignment list --user USER_NAME --project PROJECT_NAME --names
    

    如果删除了角色,则命令输出将省略已删除的角色。

创建隐式角色

可以通过让角色暗示其他角色来构建角色层次结构。这些称为隐式角色或角色推断规则。

为了说明该功能,让我们让 admin 角色暗示 member 角色。在此示例中,如果将用户分配给先前的角色(在本例中为 admin 角色),他们也会获得它暗示的 member 角色。

$ openstack implied role create admin --implied-role member
+------------+----------------------------------+
| Field      | Value                            |
+------------+----------------------------------+
| implies    | 71ccc37d41c8491c975ae72676db687f |
| prior_role | 29c09e68e6f741afa952a837e29c700b |
+------------+----------------------------------+

注意

角色暗示只有单向的,从“先前的”角色到“暗示的”角色。因此,将 member 分配给用户不会授予他们 admin 角色。

这使得将大型角色分解为更小的部分变得容易,从而实现细粒度的权限,同时仍然可以轻松地将所有部分分配为单个角色。例如,您可以让 member 角色暗示 compute_membernetwork_membervolume_member,然后将完整的 member 角色分配给用户或任何一个子集。

列出隐式角色

要列出隐式角色

$ openstack implied role list
+----------------------------------+-----------------+----------------------------------+-------------------+
| Prior Role ID                    | Prior Role Name | Implied Role ID                  | Implied Role Name |
+----------------------------------+-----------------+----------------------------------+-------------------+
| 29c09e68e6f741afa952a837e29c700b | admin           | 71ccc37d41c8491c975ae72676db687f | member            |
+----------------------------------+-----------------+----------------------------------+-------------------+

删除隐式角色

要删除角色推断规则

$ openstack implied role delete admin --implied-role member

注意

删除隐式角色会删除角色推断规则。它不会删除先前的角色或暗示的角色。因此,如果将用户分配给先前的角色,他们将不再拥有它暗示的角色。