共享类型访问控制

共享类型是由管理员定义的“服务类型”,包含一个租户可见的描述,以及一个列表,其中包含非租户可见的键值对 - 额外的规范。manila-scheduler 使用额外的规范来做出调度决策,驱动程序控制共享的创建。

管理员可以创建和删除共享类型,并管理赋予它们在共享文件系统服务中意义的额外规范。租户可以列出共享类型,并可以使用它们来创建新的共享。有关管理共享类型的详细信息,请参阅 共享文件系统 API共享类型管理 文档。

共享类型可以创建为公共私有。这是共享类型的可见性级别,定义了其他租户是否可以在共享类型列表中看到它并使用它来创建新的共享。

默认情况下,共享类型被创建为公共的。在创建共享类型时,使用 --is_public 参数设置为 False 以使您的共享类型变为私有,这将阻止其他租户在共享类型列表中看到它并使用它创建新的共享。另一方面,公共共享类型对云中的每个租户都可用。

共享文件系统服务允许管理员授予或拒绝租户对私有共享类型的访问权限。也可以获取有关指定私有共享类型访问权限的信息。

提示

由于共享类型由于其额外的规范有助于在用户创建共享之前过滤或选择后端,因此使用对共享类型的访问,您可以限制客户端对特定后端的选择。

例如,作为 admin 租户中的管理员用户,您可以创建一个名为 my_type 的私有共享类型并在列表中看到它。在控制台示例中,省略了登录和注销,并提供了环境变量以显示当前登录的用户。

$ env | grep OS_
...
OS_USERNAME=admin
OS_TENANT_NAME=admin
...
$ manila type-list --all
+----+--------+-----------+-----------+-----------------------------------+-----------------------+
| ID | Name   | Visibility| is_default| required_extra_specs              | optional_extra_specs  |
+----+--------+-----------+-----------+-----------------------------------+-----------------------+
| 4..| my_type| private   | -         | driver_handles_share_servers:False| snapshot_support:True |
| 5..| default| public    | YES       | driver_handles_share_servers:True | snapshot_support:True |
+----+--------+-----------+-----------+-----------------------------------+-----------------------+

demo 用户在 demo 租户中可以列出类型,并且名为 my_type 的私有共享类型对他不可见。

$ env | grep OS_
...
OS_USERNAME=demo
OS_TENANT_NAME=demo
...
$ manila type-list --all
+----+--------+-----------+-----------+----------------------------------+----------------------+
| ID | Name   | Visibility| is_default| required_extra_specs             | optional_extra_specs |
+----+--------+-----------+-----------+----------------------------------+----------------------+
| 5..| default| public    | YES       | driver_handles_share_servers:True| snapshot_support:True|
+----+--------+-----------+-----------+----------------------------------+----------------------+

管理员可以使用等于 df29a37db5ae48d19b349fe947fada46 的租户 ID,向 demo 租户授予对私有共享类型的访问权限

$ env | grep OS_
...
OS_USERNAME=admin
OS_TENANT_NAME=admin
...
$ openstack project list
+----------------------------------+--------------------+
| ID                               | Name               |
+----------------------------------+--------------------+
| ...                              | ...                |
| df29a37db5ae48d19b349fe947fada46 | demo               |
+----------------------------------+--------------------+
$ manila type-access-add my_type df29a37db5ae48d19b349fe947fada46

因此,现在 demo 租户中的用户可以看到私有共享类型并在共享创建中使用它

$ env | grep OS_
...
OS_USERNAME=demo
OS_TENANT_NAME=demo
...
$ manila type-list --all
+----+--------+-----------+-----------+-----------------------------------+-----------------------+
| ID | Name   | Visibility| is_default| required_extra_specs              | optional_extra_specs  |
+----+--------+-----------+-----------+-----------------------------------+-----------------------+
| 4..| my_type| private   | -         | driver_handles_share_servers:False| snapshot_support:True |
| 5..| default| public    | YES       | driver_handles_share_servers:True | snapshot_support:True |
+----+--------+-----------+-----------+-----------------------------------+-----------------------+

要拒绝对指定项目的访问,请使用 manila type-access-remove <share_type> <project_id> 命令。

提示

一个实际生产用例,展示了共享类型及其访问权限的目的,是当您拥有两个后端的情况:廉价的 LVM 作为公共存储,以及昂贵的 Ceph 作为私有存储。在这种情况下,您可以授予某些租户访问权限,并使用 user/group 身份验证方法。