管理项目、用户和角色¶
作为管理员,您管理项目、用户和角色。项目是云中的组织单元,您可以将用户分配给项目。项目也称为租户或帐户。用户可以是多个项目的成员。角色定义了用户可以执行哪些操作。您将角色分配给用户-项目对。
您可以在 /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 选项。
分配一个角色¶
要将用户分配给项目,您必须将角色分配给用户-项目对。
将角色分配给用户-项目对
$ 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
验证角色分配
$ 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 |
+-------------+----------------------------------+
删除一个角色¶
从用户-项目对中删除角色
运行 openstack role remove 命令
$ openstack role remove --user USER_NAME --project PROJECT_NAME ROLE_NAME
验证角色删除
$ 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_member、network_member 和 volume_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
注意
删除隐式角色会删除角色推断规则。它不会删除先前的角色或暗示的角色。因此,如果将用户分配给先前的角色,他们将不再拥有它暗示的角色。