策略角色与权限

从 Xena 版本开始,块存储服务 API v3 利用 Keystone 项目提供的默认身份验证和授权机制,为操作员提供一套丰富的默认策略,以控制用户与块存储服务 API 的交互方式。

本文档描述了 Cinder 在 OpenStack 服务中提供一致且有用的默认 RBAC 配置方面所做的工作。 (这项工作简称为“安全 RBAC”。)

术语说明

我们需要澄清一些将在下面使用的术语。

项目

这是将用户分组为可以拥有云资源的单位。 (这过去被称为“租户”,但您不应该这样称呼它。) 用户、项目以及它们之间的关联在 Keystone 中创建。

服务

这是一个 OpenStack 组件,用户通过它提供的 API 与之交互。 例如,“Cinder” 是 OpenStack 代码名称,用于提供块存储 API 第 3 版。 Cinder 也被称为 OpenStack 块存储服务。

做出这种区分的目的是,‘项目’一词还有另一种相关的用法,但我们不会使用它。 每个 OpenStack 服务都是由一个“项目团队”生产和维护的。 我们不会在此文档中使用 ‘项目’ 这个词。 我们将始终使用 ‘服务’ 这个词。 (如果您是 OpenStack 新手,这不会有问题。 但是,如果您正在与一位在 OpenStack 领域工作一段时间的人讨论此内容,您需要明确这一点,以免彼此无意中产生误解。)

Cinder 角色

如果我们将 Cinder 识别的五个“角色”介绍出来,这将更容易解释。 在下面的列表中,“系统”指的是已部署的系统(即 Cinder 及其所有服务),而“项目”指的是资源的容器或命名空间。

  • 为了消费资源,用户必须通过在项目中赋予其角色(例如 ‘member’)来分配到项目中。 这在 Keystone 中完成;这不是 Cinder 关心的问题。

    有关更多信息,请参阅 Keystone 文档中的 默认角色

五个角色

做什么

project-reader

具有访问 API 的权限,用于只读请求,这些请求仅影响项目特定的资源(即,无法在项目中创建、更新或删除资源)

project-member

项目中的普通用户。

project-admin

所有普通功能加上特定项目中的一些小的管理权限,例如,能够为项目设置默认卷类型。 (这些管理权限是“小的”,因为它们不会影响 Cinder 系统,它们只允许项目管理员进行系统安全的更改,这些更改隔离在该项目中。)

system-reader

具有对 API 的只读访问权限;与 project-reader 类似,但可以读取 cinder 识别的任何项目。

system-admin

具有系统上最高级别的授权,可以执行 Cinder 中的任何操作。 在大多数部署中,只有操作员、部署者或其他高度信任的人员才会被分配此角色。 这是一个 Cinder 超级用户,可以对 Cinder 系统和所有单个项目执行所有操作

注意

Keystone 项目提供了描述其他角色的能力,但 Cinder 目前不识别它们。 特别是

  • Cinder 根本不识别 domain 范围。 因此,即使您成功从 Identity 服务请求“域范围”令牌,也无法在 Cinder 中使用它。 相反,为要在其上操作的域中的特定项目请求“项目范围”令牌。

  • Cinder 不识别“system-member”角色,即在 system 上具有 member 角色的用户。 默认的 Cinder 策略配置将此类用户视为与上述system-reader 角色相同。

有关角色和范围的更多信息,请参阅 Keystone 管理员指南

注意

隐私期望

Cinder 的资源模型(卷、备份、快照等)是它们由项目拥有。 因此,它们由具有该项目上角色分配的所有用户共享,无论该用户被分配了哪个角色。

例如,如果 Alice 和 Bob 在项目 P 中,并且 Alice 具有 project-member 角色,而 Bob 具有 project-reader 角色,如果 Alice 在项目 P 中创建卷 V,Bob 可以在卷列表响应中看到卷 V,并且 Bob 可以读取 Alice 可以读取的所有卷元数据——即使是 Alice 可能已添加到卷中的卷元数据。 关键点是,即使 Alice 创建了卷 V,它不是她的卷。 该卷“由”项目 P 拥有,可供通过 keystone 中的角色分配在项目上具有授权的所有用户使用。 用户可以对卷 V 执行什么操作取决于该用户在项目 P 中是否具有管理员、成员或读取者角色。

对于项目 P,具有系统范围(system-admin 和 system-reader)的角色对项目具有访问权限,因为 cinder system-admin 可以对项目 P 执行项目管理员可以执行的任何操作,以及一些额外的权限。 cinder system-reader 可以访问项目 P 中 system-admin 可以访问的所有内容的只读权限。

以上描述了 Cinder 的默认策略配置。 可以修改策略以获得不同的行为,但这超出了本文档的范围。

实施计划

由于在本节中将变得清楚,安全 RBAC 工作在 Cinder 中分两个阶段实施。 在 Xena 中,有三个角色。

3 个 Xena 角色

Keystone 技术信息

project-reader

reader 角色在 project 上,导致项目范围

project-member

member 角色在 project 上,导致项目范围

system-admin

admin 角色在 project 上,但 Cinder 识别为具有在 cinder 系统上执行操作的权限

请注意,您不能仅通过将 admin 角色分配给用户来创建 project-admin 角色。 这样的分配会导致该用户成为 system-admin。

在 Yoga 版本中,我们计划实施完整的 Cinder 角色集

5 个 Yoga 角色

Keystone 技术信息

project-reader

reader 角色在 project 上,导致项目范围

project-member

member 角色在 project 上,导致项目范围

project-admin

admin 角色在 project 上,导致项目范围

system-reader

reader 角色在 system 上,导致系统范围

system-admin

admin 角色在 system 上,导致系统范围

请注意,system-admin 的底层技术信息发生了变化,但该角色可以执行的操作范围没有变化。

Cinder 权限矩阵

现在您知道角色是什么,以下是它们在 Cinder 识别的策略方面可以执行的操作。 请记住,Xena 版本中仅实施了三个角色(project-reader、project-member 和 system-admin)。

注意:括号中的列将被删除;它们用于由人类验证矩阵时的比较。

附件 (Microversion 3.27)

功能

API 调用

策略名称

(旧规则)

project-reader

project-member

project-admin

system-reader

system-admin

(旧“所有者”)

(旧“管理员”)

创建附件

POST /attachments

volume:attachment_create

更新附件

PUT  /attachments/{attachment_id}

volume:attachment_update

rule:admin_or_owner

删除附件

DELETE  /attachments/{attachment_id}

volume:attachment_delete

rule:admin_or_owner

将卷附件过程标记为已完成(使用中)

Microversion 3.44
POST  /attachments/{attachment_id}/action (os-complete)

volume:attachment_complete

rule:admin_or_owner

允许附加可引导卷

这是对
POST  /attachments
的二次检查

volume:multiattach_bootable_volume

rule:admin_or_owner

用户消息 (Microversion 3.3)

功能

API 调用

策略名称

(旧规则)

project-reader

project-member

project-admin

system-reader

system-admin

(旧“所有者”)

(旧“管理员”)

列出消息

GET  /messages

message:get_all

rule:admin_or_owner

显示消息

GET  /messages/{message_id}

message:get

rule:admin_or_owner

删除消息

DELETE  /messages/{message_id}

message:delete

rule:admin_or_owner

集群 (Microversion 3.7)

功能

API 调用

策略名称

(旧规则)

project-reader

project-member

project-admin

system-reader

system-admin

(旧“所有者”)

(旧“管理员”)

列出集群

GET  /clusters
GET  /clusters/detail

clusters:get_all

rule:admin_api

显示集群

GET  /clusters/{cluster_id}

clusters:get

rule:admin_api

更新集群

PUT  /clusters/{cluster_id}

clusters:update

rule:admin_api

工作器 (Microversion 3.24)

功能

API 调用

策略名称

(旧规则)

project-reader

project-member

project-admin

system-reader

system-admin

(旧“所有者”)

(旧“管理员”)

清理工作器

POST  /workers/cleanup

workers:cleanup

rule:admin_api

快照

功能

API 调用

策略名称

(旧规则)

project-reader

project-member

project-admin

system-reader

system-admin

(旧“所有者”)

(旧“管理员”)

列出快照

GET  /snapshots
GET  /snapshots/detail

volume:get_all_snapshots

rule:admin_or_owner

列出或显示具有扩展属性的快照

GET  /snapshots/{snapshot_id}
GET  /snapshots/detail

volume_extension:extended_snapshot_attributes

rule:admin_or_owner

创建快照

POST  /snapshots

volume:create_snapshot

rule:admin_or_owner

显示快照

GET  /snapshots/{snapshot_id}

volume:get_snapshot

rule:admin_or_owner

更新快照

PUT  /snapshots/{snapshot_id}

volume:update_snapshot

rule:admin_or_owner

删除快照

DELETE  /snapshots/{snapshot_id}

volume:delete_snapshot

rule:admin_or_owner

重置快照的状态。

POST  /snapshots/{snapshot_id}/action (os-reset_status)

volume_extension:snapshot_admin_actions:reset_status

rule:admin_api

更新快照的状态(以及可选的进度)

POST  /snapshots/{snapshot_id}/action (os-update_snapshot_status)

snapshot_extension:snapshot_actions:update_snapshot_status

强制删除快照

POST  /snapshots/{snapshot_id}/action (os-force_delete)

volume_extension:snapshot_admin_actions:force_delete

rule:admin_api

列出(详细)可用于管理的快照

GET  /manageable_snapshots
GET  /manageable_snapshots/detail

snapshot_extension:list_manageable

rule:admin_api

管理现有快照

POST  /manageable_snapshots

snapshot_extension:snapshot_manage

rule:admin_api

取消管理快照

POST  /snapshots/{snapshot_id}/action (os-unmanage)

snapshot_extension:snapshot_unmanage

rule:admin_api

快照元数据

功能

API 调用

策略名称

(旧规则)

project-reader

project-member

project-admin

system-reader

system-admin

(旧“所有者”)

(旧“管理员”)

显示快照的元数据或具有给定键的指定元数据

GET  /snapshots/{snapshot_id}/metadata
GET  /snapshots/{snapshot_id}/metadata/{key}

volume:get_snapshot_metadata

rule:admin_or_owner

更新快照的元数据或具有给定键的指定元数据

PUT  /snapshots/{snapshot_id}/metadata
PUT  /snapshots/{snapshot_id}/metadata/{key}

volume:update_snapshot_metadata

rule:admin_or_owner

删除具有给定键的快照的指定元数据

DELETE  /snapshots/{snapshot_id}/metadata/{key}

volume:delete_snapshot_metadata

rule:admin_or_owner

备份

功能

API 调用

策略名称

(旧规则)

project-reader

project-member

project-admin

system-reader

system-admin

(旧“所有者”)

(旧“管理员”)

列出备份

GET  /backups
GET  /backups/detail

backup:get_all

rule:admin_or_owner

在列出备份中包含项目属性,显示备份响应

Microversion 3.18
os-backup-project-attr:project_id 添加到以下响应
GET  /backups/detail
GET  /backups/{backup_id}
执行这些 API 调用受到其他策略的约束。

backup:backup_project_attribute

rule:admin_api

创建备份

POST  /backups

backup:create

显示备份

GET  /backups/{backup_id}

backup:get

rule:admin_or_owner

更新备份

Microversion 3.9
PUT  /backups/{backup_id}

backup:update

rule:admin_or_owner

删除备份

DELETE  /backups/{backup_id}

backup:delete

rule:admin_or_owner

恢复备份

POST  /backups/{backup_id}/restore

backup:restore

rule:admin_or_owner

导入备份

POST  /backups/{backup_id}/import_record

backup:backup-import

rule:admin_api

导出备份

POST  /backups/{backup_id}/export_record

backup:export-import

rule:admin_api

重置备份状态

POST  /backups/{backup_id}/action (os-reset_status)

volume_extension:backup_admin_actions:reset_status

rule:admin_api

强制删除备份

POST  /backups/{backup_id}/action (os-force_delete)

volume_extension:backup_admin_actions:force_delete

rule:admin_api

分组 (Microversion 3.13)

功能

API 调用

策略名称

(旧规则)

project-reader

project-member

project-admin

system-reader

system-admin

(旧“所有者”)

(旧“管理员”)

列出组

GET  /groups
GET  /groups/detail

group:get_all

rule:admin_or_owner

创建分组,从源创建分组

POST  /groups
Microversion 3.14
POST  /groups/action (create-from-src)

group:create

显示分组

GET  /groups/{group_id}

group:get

rule:admin_or_owner

更新分组

PUT  /groups/{group_id}

group:update

rule:admin_or_owner

在列出分组和显示分组响应中包含项目属性

Microversion 3.58
在以下响应中添加 project_id
GET  /groups/detail
GET  /groups/{group_id}
执行这些 API 调用受到其他策略的约束。

group:group_project_attribute

rule:admin_api

分组类型 (Microversion 3.11)

功能

API 调用

策略名称

(旧规则)

project-reader

project-member

project-admin

system-reader

system-admin

(旧“所有者”)

(旧“管理员”)

已弃用
创建、更新或删除分组类型
(注意:新的策略将 POST、PUT、DELETE 分开)
POST /group_types/
PUT /group_types/{group_type_id}
DELETE /group_types/{group_type_id}

group:group_types_manage

rule:admin_api

NEW
创建一个组类型

POST /group_types/

group:group_types:create

(新策略)

n/a

n/a

NEW
更新分组类型

PUT /group_types/{group_type_id}

group:group_types:update

(新策略)

n/a

n/a

NEW
删除分组类型

DELETE /group_types/{group_type_id}

group:group_types:delete

(新策略)

n/a

n/a

显示带有类型规范属性的分组类型

在以下响应中添加 group_specs
GET  /group_types
GET  /group_types/default
GET  /group_types/{group_type_id}
这些调用不受策略控制。

group:access_group_types_specs

rule:admin_api

已弃用
创建、显示、更新和删除分组类型规范
(注意:新的策略将 GET、POST、PUT、DELETE 分开)
GET /group_types/{group_type_id}/group_specs
GET /group_types/{group_type_id}/group_specs/{g_spec_id}
POST /group_types/{group_type_id}/group_specs
PUT /group_types/{group_type_id}/group_specs/{g_spec_id}
DELETE  /group_types/{group_type_id}/group_specs/{g_spec_id}

group:group_types_specs

rule:admin_api

NEW
创建分组类型规范

POST /group_types/{group_type_id}/group_specs

group:group_types_specs:create

(新策略)

n/a

n/a

NEW
列出分组类型规范

GET /group_types/{group_type_id}/group_specs

group:group_types_specs:get_all

(新策略)

n/a

n/a

NEW
显示分组类型规范的详细信息

GET /group_types/{group_type_id}/group_specs/{g_spec_id}

group:group_types_specs:get

(新策略)

n/a

n/a

NEW
更新分组类型规范

PUT /group_types/{group_type_id}/group_specs/{g_spec_id}

group:group_types_specs:update

(新策略)

n/a

n/a

NEW
删除分组类型规范

DELETE /group_types/{group_type_id}/group_specs/{g_spec_id}

group:group_types_specs:delete

(新策略)

n/a

n/a

分组快照 (Microversion 3.14)

功能

API 调用

策略名称

(旧规则)

project-reader

project-member

project-admin

system-reader

system-admin

(旧“所有者”)

(旧“管理员”)

列出组快照

GET  /group_snapshots
GET  /group_snapshots/detail

group:get_all_group_snapshots

rule:admin_or_owner

创建分组快照

POST  /group_snapshots

group:create_group_snapshot

显示分组快照

GET  /group_snapshots/{group_snapshot_id}

group:get_group_snapshot

rule:admin_or_owner

删除组快照

DELETE  /group_snapshots/{group_snapshot_id}

group:delete_group_snapshot

rule:admin_or_owner

更新分组快照

PUT  /group_snapshots/{group_snapshot_id}
注意:即使定义了策略,此调用在块存储 API 中未实现。

group:update_group_snapshot

rule:admin_or_owner

重置分组快照状态

Microversion 3.19
POST  /group_snapshots/{group_snapshot_id}/action (reset_status)

group:reset_group_snapshot_status

rule:admin_api

在列出分组快照和显示分组快照响应中包含项目属性

Microversion 3.58
在以下响应中添加 project_id
GET  /group_snapshots/detail
GET  /group_snapshots/{group_snapshot_id}
执行这些 API 调用受到其他策略的约束。

group:group_snapshot_project_attribute

rule:admin_api

分组操作

功能

API 调用

策略名称

(旧规则)

project-reader

project-member

project-admin

system-reader

system-admin

(旧“所有者”)

(旧“管理员”)

删除分组

POST  /groups/{group_id}/action (delete)

group:delete

rule:admin_or_owner

重置分组状态

Microversion 3.20
POST  /groups/{group_id}/action (reset_status)

group:reset_status

rule:admin_api

启用复制

Microversion 3.38
POST  /groups/{group_id}/action (enable_replication)

group:enable_replication

rule:admin_or_owner

禁用复制

Microversion 3.38
POST  /groups/{group_id}/action (disable_replication)

group:disable_replication

rule:admin_or_owner

故障转移复制

Microversion 3.38
POST  /groups/{group_id}/action (failover_replication)

group:failover_replication

rule:admin_or_owner

列出故障转移复制

Microversion 3.38
POST  /groups/{group_id}/action (list_replication_targets)

group:list_replication_targets

rule:admin_or_owner

QOS 规范

功能

API 调用

策略名称

(旧规则)

project-reader

project-member

project-admin

system-reader

system-admin

(旧“所有者”)

(旧“管理员”)

列出 qos 规范或列出所有关联

GET  /qos-specs
GET  /qos-specs/{qos_id}/associations

volume_extension:qos_specs_manage:get_all

rule:admin_api

显示 qos 规范

GET  /qos-specs/{qos_id}

volume_extension:qos_specs_manage:get

rule:admin_api

创建 qos 规范

POST  /qos-specs

volume_extension:qos_specs_manage:create

rule:admin_api

更新 qos 规范:更新 qos-spec 中的键/值或更新与 qos-spec 关联的卷类型

PUT  /qos-specs/{qos_id}
GET  /qos-specs/{qos_id}/associate?vol_type_id={volume_id}
GET  /qos-specs/{qos_id}/disassociate?vol_type_id={volume_id}
GET  /qos-specs/{qos_id}/disassociate_all
(是的,这些 GET 实际上是更新)

volume_extension:qos_specs_manage:update

rule:admin_api

删除 qos-spec,或从 qos-spec 中删除键列表

DELETE  /qos-specs/{qos_id}
PUT  /qos-specs/{qos_id}/delete_keys

volume_extension:qos_specs_manage:delete

rule:admin_api

配额

功能

API 调用

策略名称

(旧规则)

project-reader

project-member

project-admin

system-reader

system-admin

(旧“所有者”)

(旧“管理员”)

已弃用
显示或更新项目配额类
(注意:新的策略将 GET 和 PUT 分开)
GET  /os-quota-class-sets/{project_id}
PUT  /os-quota-class-sets/{project_id}

volume_extension:quota_classes

rule:admin_api

NEW
显示项目配额类

GET  /os-quota-class-sets/{project_id}

volume_extension:quota_classes:get

(新策略)

n/a

n/a

NEW
更新项目配额类

PUT  /os-quota-class-sets/{project_id}

volume_extension:quota_classes:update

(新策略)

n/a

n/a

显示项目配额(包括使用情况和默认值)

GET  /os-quota-sets/{project_id}
GET  /os-quota-sets/{project_id}/default
GET  /os-quota-sets/{project_id}?usage=True

volume_extension:quotas:show

rule:admin_or_owner

更新项目配额

PUT  /os-quota-sets/{project_id}

volume_extension:quotas:update

rule:admin_api

删除项目配额

DELETE  /os-quota-sets/{project_id}

volume_extension:quotas:delete

rule:admin_api

功能

功能

API 调用

策略名称

(旧规则)

project-reader

project-member

project-admin

system-reader

system-admin

(旧“所有者”)

(旧“管理员”)

显示后端功能

GET  /capabilities/{host_name}

volume_extension:capabilities

rule:admin_api

服务

功能

API 调用

策略名称

(旧规则)

project-reader

project-member

project-admin

system-reader

system-admin

(旧“所有者”)

(旧“管理员”)

列出所有服务

GET  /os-services

volume_extension:services:index

rule:admin_api

更新服务

PUT  /os-services/enable
PUT  /os-services/disable
PUT  /os-services/disable-log-reason
PUT  /os-services/freeze
PUT  /os-services/thaw
PUT  /os-services/failover_host
PUT  /os-services/failover (microversion 3.26)
PUT  /os-services/set-log
PUT  /os-services/get-log

volume_extension:services:update

rule:admin_api

冻结后端主机。辅助检查;还必须满足 volume_extension:services:update 才能进行此调用。

PUT  /os-services/freeze

volume:freeze_host

rule:admin_api

解冻后端主机。辅助检查;还必须满足 volume_extension:services:update 才能进行此调用。

PUT  /os-services/thaw

volume:thaw_host

rule:admin_api

故障转移后端主机。辅助检查;还必须满足 volume_extension:services:update 才能进行此调用。

PUT  /os-services/failover_host
PUT  /os-services/failover (microversion 3.26)

volume:failover_host

rule:admin_api

列出所有后端池

GET  /scheduler-stats/get_pools

scheduler_extension:scheduler_stats:get_pools

rule:admin_api

列出、更新或显示项目的宿主机
(注意:将在 Yoga 中弃用,并引入新的策略
用于 GET 和 PUT)
GET  /os-hosts
PUT  /os-hosts/{host_name}
GET  /os-hosts/{host_id}

volume_extension:hosts

rule:admin_api

显示带有已用限制属性的限制

GET  /limits

limits_extension:used_limits

rule:admin_or_owner

列出(详细)可供管理的卷

GET  /manageable_volumes
GET  /manageable_volumes/detail

volume_extension:list_manageable

rule:admin_api

管理现有卷

POST  /manageable_volumes

volume_extension:volume_manage

rule:admin_api

取消管理卷

POST  /volumes/{volume_id}/action (os-unmanage)

volume_extension:volume_unmanage

rule:admin_api

卷类型

功能

API 调用

策略名称

(旧规则)

project-reader

project-member

project-admin

system-reader

system-admin

(旧“所有者”)

(旧“管理员”)

已弃用
创建、更新和删除卷类型
(创建/更新/删除的新策略)
POST  /types
PUT  /types/{type_id}
DELETE  /types

volume_extension:types_manage

rule:admin_api

NEW
创建一个卷类型

POST  /types

volume_extension:type_create

(新策略)

NEW
更新卷类型

PUT  /types/{type_id}

volume_extension:type_update

(新策略)

NEW
删除卷类型

DELETE  /types/{type_id}

volume_extension:type_delete

(新策略)

显示特定卷类型

GET  /types/{type_id}

volume_extension:type_get

列出卷类型

GET  /types

volume_extension:type_get_all

已弃用
所有卷类型加密类型操作的基本策略
(注意:不能再使用此策略,因为它为 GET 和 POST 赋予相同的权限)

在您不想单独配置所有 volume_type_encryption 策略的情况下,方便的默认策略

volume_extension:volume_type_encryption

rule:admin_api

创建卷类型加密

POST  /types/{type_id}/encryption

volume_extension:volume_type_encryption:create

rule:volume_extension:volume_type_encryption

显示卷类型的加密类型,显示加密规范项

GET  /types/{type_id}/encryption
GET  /types/{type_id}/encryption/{key}

volume_extension:volume_type_encryption:get

rule:volume_extension:volume_type_encryption

更新卷类型加密

PUT  /types/{type_id}/encryption/{encryption_id}

volume_extension:volume_type_encryption:update

rule:volume_extension:volume_type_encryption

删除卷类型加密

DELETE  /types/{type_id}/encryption/{encryption_id}

volume_extension:volume_type_encryption:delete

rule:volume_extension:volume_type_encryption

列出或显示带有额外规范属性的卷类型

在以下响应中添加 extra_specs
GET  /types/{type_id}
GET  /types
执行这些 API 调用受到其他策略的约束。

volume_extension:access_types_extra_specs

列出或显示带有访问类型 qos 规范 ID 属性的卷类型

在以下响应中添加 qos_specs_id
GET  /types/{type_id}
GET  /types
执行这些 API 调用受到其他策略的约束。

volume_extension:access_types_qos_specs_id

rule:admin_api

显示卷类型是否在类型响应中公开

在以下响应中添加 os-volume-type-access:is_public
GET  /types
GET  /types/{type_id}
POST  /types
执行这些 API 调用受到其他策略的约束。

volume_extension:volume_type_access

rule:admin_or_owner

NEW
列出私有卷类型访问详细信息,即列出具有访问权限的项目
(以前由 volume_extension:volume_type_access 控制)

GET  /types/{type_id}/os-volume-type-access

volume_extension:volume_type_access:get_all_for_type

(新策略)

n/a

n/a

为项目添加卷类型访问权限

POST  /types/{type_id}/action (addProjectAccess)

volume_extension:volume_type_access:addProjectAccess

rule:admin_api

删除项目的卷类型访问权限

POST  /types/{type_id}/action (removeProjectAccess)

volume_extension:volume_type_access:removeProjectAccess

rule:admin_api

卷操作

功能

API 调用

策略名称

(旧规则)

project-reader

project-member

project-admin

system-reader

system-admin

(旧“所有者”)

(旧“管理员”)

扩展卷

POST  /volumes/{volume_id}/action (os-extend)

volume:extend

rule:admin_or_owner

扩展已附加的卷

Microversion 3.42
POST  /volumes/{volume_id}/action (os-extend)

volume:extend_attached_volume

rule:admin_or_owner

将卷恢复到快照

Microversion 3.40
POST  /volumes/{volume_id}/action (revert)

volume:revert_to_snapshot

rule:admin_or_owner

重置卷状态

POST  /volumes/{volume_id}/action (os-reset_status)

volume_extension:volume_admin_actions:reset_status

rule:admin_api

重新类型化卷

POST  /volumes/{volume_id}/action (os-retype)

volume:retype

rule:admin_or_owner

更新卷的只读标志

POST  /volumes/{volume_id}/action (os-update_readonly_flag)

volume:update_readonly_flag

rule:admin_or_owner

强制删除卷

POST  /volumes/{volume_id}/action (os-force_delete)

volume_extension:volume_admin_actions:force_delete

rule:admin_api

上传卷到镜像,具有公共可见性

POST  /volumes/{volume_id}/action (os-volume_upload_image)

volume_extension:volume_actions:upload_public

rule:admin_api

上传卷到镜像

POST  /volumes/{volume_id}/action (os-volume_upload_image)

volume_extension:volume_actions:upload_image

rule:admin_or_owner

强制分离卷。

POST  /volumes/{volume_id}/action (os-force_detach)

volume_extension:volume_admin_actions:force_detach

rule:admin_api

将卷迁移到指定的主机

POST  /volumes/{volume_id}/action (os-migrate_volume)

volume_extension:volume_admin_actions:migrate_volume

rule:admin_api

完成卷迁移

POST  /volumes/{volume_id}/action (os-migrate_volume_completion)

volume_extension:volume_admin_actions:migrate_volume_completion

rule:admin_api

初始化卷连接

POST  /volumes/{volume_id}/action (os-initialize_connection)

volume_extension:volume_actions:initialize_connection

rule:admin_or_owner

终止卷连接

POST  /volumes/{volume_id}/action (os-terminate_connection)

volume_extension:volume_actions:terminate_connection

rule:admin_or_owner

将卷状态回滚到“使用中”

POST  /volumes/{volume_id}/action (os-roll_detaching)

volume_extension:volume_actions:roll_detaching

rule:admin_or_owner

标记卷为已保留

POST  /volumes/{volume_id}/action (os-reserve)

volume_extension:volume_actions:reserve

rule:admin_or_owner

取消标记卷为已保留

POST  /volumes/{volume_id}/action (os-unreserve)

volume_extension:volume_actions:unreserve

rule:admin_or_owner

开始分离卷

POST  /volumes/{volume_id}/action (os-begin_detaching)

volume_extension:volume_actions:begin_detaching

rule:admin_or_owner

添加连接元数据

POST  /volumes/{volume_id}/action (os-attach)

volume_extension:volume_actions:attach

rule:admin_or_owner

清除连接元数据

POST  /volumes/{volume_id}/action (os-detach)

volume_extension:volume_actions:detach

rule:admin_or_owner

卷传输

功能

API 调用

策略名称

(旧规则)

project-reader

project-member

project-admin

system-reader

system-admin

(旧“所有者”)

(旧“管理员”)

列出卷传输

GET  /os-volume-transfer
GET  /os-volume-transfer/detail
GET  /volume-transfers
GET  /volume-transfers/detail

volume:get_all_transfers

rule:admin_or_owner

创建卷传输

POST  /os-volume-transfer
POST  /volume-transfers

volume:create_transfer

rule:admin_or_owner

显示指定的卷传输

GET  /os-volume-transfer/{transfer_id}
GET  /volume-transfers/{transfer_id}

volume:get_transfer

rule:admin_or_owner

接受卷传输

POST  /os-volume-transfer/{transfer_id}/accept
POST  /volume-transfers/{transfer_id}/accept

volume:accept_transfer

删除卷传输

DELETE  /os-volume-transfer/{transfer_id}
DELETE  /volume-transfers/{transfer_id}

volume:delete_transfer

rule:admin_or_owner

卷元数据

功能

API 调用

策略名称

(旧规则)

project-reader

project-member

project-admin

system-reader

system-admin

(旧“所有者”)

(旧“管理员”)

显示卷的元数据或具有给定键的指定元数据。

GET  /volumes/{volume_id}/metadata
GET  /volumes/{volume_id}/metadata/{key}
POST /volumes/{volume_id}/action (os-show_image_metadata)

volume:get_volume_metadata

rule:admin_or_owner

创建卷元数据

POST  /volumes/{volume_id}/metadata

volume:create_volume_metadata

rule:admin_or_owner

更新卷的元数据或具有给定键的指定元数据

PUT  /volumes/{volume_id}/metadata
PUT  /volumes/{volume_id}/metadata/{key}

volume:update_volume_metadata

rule:admin_or_owner

删除具有给定键的卷的指定元数据

DELETE  /volumes/{volume_id}/metadata/{key}

volume:delete_volume_metadata

rule:admin_or_owner

已弃用
卷的镜像元数据相关操作,创建、删除、显示和列出
(注意:以下引入了新的策略来拆分 GET 和 POST)
微版本 3.4
GET  /volumes/detail
GET  /volumes/{volume_id}
POST  /volumes/{volume_id}/action (os-set_image_metadata)
POST  /volumes/{volume_id}/action (os-unset_image_metadata)
(注意:POST /volumes/{volume_id}/action (os-show_image_metadata) 由 volume:get_volume_metadata 规范)

volume_extension:volume_image_metadata

rule:admin_or_owner

NEW
在显示 extra_specs 的各种卷类型响应中包含卷的镜像元数据
微版本 3.4
GET  /volumes/detail
GET  /volumes/{volume_id}
执行这些 API 调用受到其他策略的约束。

volume_extension:volume_image_metadata:show

(新策略)

NEW
设置卷的镜像元数据
微版本 3.4
POST  /volumes/{volume_id}/action (os-set_image_metadata)

volume_extension:volume_image_metadata:set

(新策略)

NEW
删除卷的特定镜像元数据
微版本 3.4
POST  /volumes/{volume_id}/action (os-unset_image_metadata)

volume_extension:volume_image_metadata:remove

(新策略)

更新卷管理员元数据。

完成以下操作需要此权限
POST  /volumes/{volume_id}/action (os-update_readonly_flag)
POST  /volumes/{volume_id}/action (os-attach)
执行这些 API 调用受到其他策略的约束。

volume:update_volume_admin_metadata

rule:admin_api

卷类型 Extra-Specs

功能

API 调用

策略名称

(旧规则)

project-reader

project-member

project-admin

system-reader

system-admin

(旧“所有者”)

(旧“管理员”)

列出类型 extra specs

GET  /types/{type_id}/extra_specs

volume_extension:types_extra_specs:index

创建类型 extra specs

POST  /types/{type_id}/extra_specs

volume_extension:types_extra_specs:create

rule:admin_api

显示指定的类型 extra specs

GET  /types/{type_id}/extra_specs/{extra_spec_key}

volume_extension:types_extra_specs:show

更新类型 extra specs

PUT  /types/{type_id}/extra_specs/{extra_spec_key}

volume_extension:types_extra_specs:update

rule:admin_api

删除类型 extra specs

DELETE  /types/{type_id}/extra_specs/{extra_spec_key}

volume_extension:types_extra_specs:delete

rule:admin_api

在显示 extra_specs 的各种卷类型响应中包含 extra_specs 字段,这些字段可能泄露有关部署的敏感信息,不应向最终用户公开。

GET  /types
GET  /types/{type_id}
GET  /types/{type_id}/extra_specs
GET  /types/{type_id}/extra_specs/{extra_spec_key}
执行这些 API 调用受到其他策略的约束。

volume_extension:types_extra_specs:read_sensitive

rule:admin_api

功能

API 调用

策略名称

(旧规则)

project-reader

project-member

project-admin

system-reader

system-admin

(旧“所有者”)

(旧“管理员”)

创建卷

POST  /volumes

volume:create

从镜像创建卷

POST  /volumes

volume:create_from_image

显示卷

GET  /volumes/{volume_id}

volume:get

rule:admin_or_owner

列出卷或获取卷摘要

GET  /volumes
GET  /volumes/detail
GET  /volumes/summary

volume:get_all

rule:admin_or_owner

更新卷或更新卷的可启动状态

PUT  /volumes
POST  /volumes/{volume_id}/action (os-set_bootable)

volume:update

rule:admin_or_owner

删除卷

DELETE  /volumes/{volume_id}

volume:delete

rule:admin_or_owner

强制删除卷(微版本 3.23)

DELETE  /volumes/{volume_id}?force=true

volume:force_delete

rule:admin_api

列出或显示具有主机属性的卷

os-vol-host-attr:host 添加到以下响应中
GET  /volumes/{volume_id}
GET  /volumes/detail
执行这些 API 调用受到其他策略的约束。

volume_extension:volume_host_attribute

rule:admin_api

列出或显示具有“租户属性”(实际上是项目 ID)的卷

os-vol-tenant-attr:tenant_id 添加到以下响应中
GET  /volumes/{volume_id}
GET  /volumes/detail
执行这些 API 调用受到其他策略的约束。

volume_extension:volume_tenant_attribute

rule:admin_or_owner

列出或显示具有迁移状态属性的卷

os-vol-mig-status-attr:migstat 添加到以下响应中
GET  /volumes/{volume_id}
GET  /volumes/detail
执行这些 API 调用受到其他策略的约束。

volume_extension:volume_mig_status_attribute

rule:admin_api

显示卷的加密元数据

GET  /volumes/{volume_id}/encryption
GET  /volumes/{volume_id}/encryption/{encryption_key}

volume_extension:volume_encryption_metadata

rule:admin_or_owner

创建可多连接的卷

间接影响这些 API 调用的成功
POST  /volumes
POST  /volumes/{volume_id}/action (os-retype)
执行这些 API 调用受到其他策略的约束。

volume:multiattach

rule:admin_or_owner

默认卷类型(微版本 3.62)

功能

API 调用

策略名称

(旧规则)

project-reader

project-member

project-admin

system-reader

system-admin

(旧“所有者”)

(旧“管理员”)

设置或更新项目的默认卷类型

PUT  /default-types

volume_extension:default_set_or_update

rule:system_or_domain_or_project_admin

获取项目的默认类型

GET  /default-types/{project-id}
(注意:项目-* persona 始终可以通过发出 GET /v3/{project_id}/types/default 调用来确定其有效的默认类型,该调用由 volume_extension:type_get 策略规范)

volume_extension:default_get

rule:system_or_domain_or_project_admin

获取所有默认类型

GET  /default-types/

volume_extension:default_get_all

role:admin and system_scope:all

取消设置项目的默认类型

DELETE  /default-types/{project-id}

volume_extension:default_unset

rule:system_or_domain_or_project_admin