策略角色与权限¶
从 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 中,有三个角色。
谁 |
Keystone 技术信息 |
|---|---|
project-reader |
|
project-member |
|
system-admin |
|
请注意,您不能仅通过将 admin 角色分配给用户来创建 project-admin 角色。 这样的分配会导致该用户成为 system-admin。
在 Yoga 版本中,我们计划实施完整的 Cinder 角色集
谁 |
Keystone 技术信息 |
|---|---|
project-reader |
|
project-member |
|
project-admin |
|
system-reader |
|
system-admin |
|
请注意,system-admin 的底层技术信息发生了变化,但该角色可以执行的操作范围没有变化。
Cinder 权限矩阵¶
现在您知道角色是什么,以下是它们在 Cinder 识别的策略方面可以执行的操作。 请记住,Xena 版本中仅实施了三个角色(project-reader、project-member 和 system-admin)。
注意:括号中的列将被删除;它们用于由人类验证矩阵时的比较。
功能 |
API 调用 |
策略名称 |
(旧规则) |
project-reader |
project-member |
project-admin |
system-reader |
system-admin |
(旧“所有者”) |
(旧“管理员”) |
|---|---|---|---|---|---|---|---|---|---|---|
创建附件 |
|
volume:attachment_create |
空 |
否 |
是 |
是 |
否 |
是 |
是 |
是 |
更新附件 |
|
volume:attachment_update |
rule:admin_or_owner |
否 |
是 |
是 |
否 |
是 |
是 |
是 |
删除附件 |
|
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 |
否 |
是 |
是 |
否 |
是 |
是 |
是 |
功能 |
API 调用 |
策略名称 |
(旧规则) |
project-reader |
project-member |
project-admin |
system-reader |
system-admin |
(旧“所有者”) |
(旧“管理员”) |
|---|---|---|---|---|---|---|---|---|---|---|
列出消息 |
|
message:get_all |
rule:admin_or_owner |
是 |
是 |
是 |
是 |
是 |
是 |
是 |
显示消息 |
|
message:get |
rule:admin_or_owner |
是 |
是 |
是 |
是 |
是 |
是 |
是 |
删除消息 |
|
message:delete |
rule:admin_or_owner |
否 |
是 |
是 |
否 |
是 |
是 |
是 |
功能 |
API 调用 |
策略名称 |
(旧规则) |
project-reader |
project-member |
project-admin |
system-reader |
system-admin |
(旧“所有者”) |
(旧“管理员”) |
|---|---|---|---|---|---|---|---|---|---|---|
列出集群 |
GET /clustersGET /clusters/detail |
clusters:get_all |
rule:admin_api |
否 |
否 |
否 |
否 |
是 |
否 |
是 |
显示集群 |
|
clusters:get |
rule:admin_api |
否 |
否 |
否 |
否 |
是 |
否 |
是 |
更新集群 |
|
clusters:update |
rule:admin_api |
否 |
否 |
否 |
否 |
是 |
否 |
是 |
功能 |
API 调用 |
策略名称 |
(旧规则) |
project-reader |
project-member |
project-admin |
system-reader |
system-admin |
(旧“所有者”) |
(旧“管理员”) |
|---|---|---|---|---|---|---|---|---|---|---|
清理工作器 |
|
workers:cleanup |
rule:admin_api |
否 |
否 |
否 |
否 |
是 |
否 |
是 |
功能 |
API 调用 |
策略名称 |
(旧规则) |
project-reader |
project-member |
project-admin |
system-reader |
system-admin |
(旧“所有者”) |
(旧“管理员”) |
|---|---|---|---|---|---|---|---|---|---|---|
列出快照 |
GET /snapshotsGET /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 |
是 |
是 |
是 |
是 |
是 |
是 |
是 |
创建快照 |
|
volume:create_snapshot |
rule:admin_or_owner |
否 |
是 |
是 |
否 |
是 |
是 |
是 |
显示快照 |
|
volume:get_snapshot |
rule:admin_or_owner |
是 |
是 |
是 |
是 |
是 |
是 |
是 |
更新快照 |
|
volume:update_snapshot |
rule:admin_or_owner |
否 |
是 |
是 |
否 |
是 |
是 |
是 |
删除快照 |
|
volume:delete_snapshot |
rule:admin_or_owner |
否 |
是 |
是 |
否 |
是 |
是 |
是 |
重置快照的状态。 |
|
volume_extension:snapshot_admin_actions:reset_status |
rule:admin_api |
否 |
否 |
否 |
否 |
是 |
否 |
是 |
更新快照的状态(以及可选的进度) |
|
snapshot_extension:snapshot_actions:update_snapshot_status |
空 |
否 |
是 |
是 |
否 |
是 |
是 |
是 |
强制删除快照 |
|
volume_extension:snapshot_admin_actions:force_delete |
rule:admin_api |
否 |
否 |
否 |
否 |
是 |
否 |
是 |
列出(详细)可用于管理的快照 |
GET /manageable_snapshotsGET /manageable_snapshots/detail |
snapshot_extension:list_manageable |
rule:admin_api |
否 |
否 |
否 |
否 |
是 |
否 |
是 |
管理现有快照 |
|
snapshot_extension:snapshot_manage |
rule:admin_api |
否 |
否 |
否 |
否 |
是 |
否 |
是 |
取消管理快照 |
|
snapshot_extension:snapshot_unmanage |
rule:admin_api |
否 |
否 |
否 |
否 |
是 |
否 |
是 |
功能 |
API 调用 |
策略名称 |
(旧规则) |
project-reader |
project-member |
project-admin |
system-reader |
system-admin |
(旧“所有者”) |
(旧“管理员”) |
|---|---|---|---|---|---|---|---|---|---|---|
显示快照的元数据或具有给定键的指定元数据 |
GET /snapshots/{snapshot_id}/metadataGET /snapshots/{snapshot_id}/metadata/{key} |
volume:get_snapshot_metadata |
rule:admin_or_owner |
是 |
是 |
是 |
是 |
是 |
是 |
是 |
更新快照的元数据或具有给定键的指定元数据 |
PUT /snapshots/{snapshot_id}/metadataPUT /snapshots/{snapshot_id}/metadata/{key} |
volume:update_snapshot_metadata |
rule:admin_or_owner |
否 |
是 |
是 |
否 |
是 |
是 |
是 |
删除具有给定键的快照的指定元数据 |
|
volume:delete_snapshot_metadata |
rule:admin_or_owner |
否 |
是 |
是 |
否 |
是 |
是 |
是 |
功能 |
API 调用 |
策略名称 |
(旧规则) |
project-reader |
project-member |
project-admin |
system-reader |
system-admin |
(旧“所有者”) |
(旧“管理员”) |
|---|---|---|---|---|---|---|---|---|---|---|
列出备份 |
GET /backupsGET /backups/detail |
backup:get_all |
rule:admin_or_owner |
是 |
是 |
是 |
是 |
是 |
是 |
是 |
在列出备份中包含项目属性,显示备份响应 |
Microversion 3.18
将
os-backup-project-attr:project_id 添加到以下响应GET /backups/detailGET /backups/{backup_id}执行这些 API 调用受到其他策略的约束。
|
backup:backup_project_attribute |
rule:admin_api |
否 |
否 |
否 |
否 |
是 |
否 |
是 |
创建备份 |
|
backup:create |
空 |
否 |
是 |
是 |
否 |
是 |
是 |
是 |
显示备份 |
|
backup:get |
rule:admin_or_owner |
是 |
是 |
是 |
是 |
是 |
是 |
是 |
更新备份 |
Microversion 3.9
PUT /backups/{backup_id} |
backup:update |
rule:admin_or_owner |
否 |
是 |
是 |
否 |
是 |
是 |
是 |
删除备份 |
|
backup:delete |
rule:admin_or_owner |
否 |
是 |
是 |
否 |
是 |
是 |
是 |
恢复备份 |
|
backup:restore |
rule:admin_or_owner |
否 |
是 |
是 |
否 |
是 |
是 |
是 |
导入备份 |
|
backup:backup-import |
rule:admin_api |
否 |
否 |
否 |
否 |
是 |
否 |
是 |
导出备份 |
|
backup:export-import |
rule:admin_api |
否 |
否 |
否 |
否 |
是 |
否 |
是 |
重置备份状态 |
|
volume_extension:backup_admin_actions:reset_status |
rule:admin_api |
否 |
否 |
否 |
否 |
是 |
否 |
是 |
强制删除备份 |
|
volume_extension:backup_admin_actions:force_delete |
rule:admin_api |
否 |
否 |
否 |
否 |
是 |
否 |
是 |
功能 |
API 调用 |
策略名称 |
(旧规则) |
project-reader |
project-member |
project-admin |
system-reader |
system-admin |
(旧“所有者”) |
(旧“管理员”) |
|---|---|---|---|---|---|---|---|---|---|---|
列出组 |
GET /groupsGET /groups/detail |
group:get_all |
rule:admin_or_owner |
是 |
是 |
是 |
是 |
是 |
是 |
是 |
创建分组,从源创建分组 |
POST /groupsMicroversion 3.14
POST /groups/action (create-from-src) |
group:create |
空 |
否 |
是 |
是 |
否 |
是 |
是 |
是 |
显示分组 |
|
group:get |
rule:admin_or_owner |
是 |
是 |
是 |
是 |
是 |
是 |
是 |
更新分组 |
|
group:update |
rule:admin_or_owner |
否 |
是 |
是 |
否 |
是 |
是 |
是 |
在列出分组和显示分组响应中包含项目属性 |
Microversion 3.58
在以下响应中添加
project_idGET /groups/detailGET /groups/{group_id}执行这些 API 调用受到其他策略的约束。
|
group:group_project_attribute |
rule:admin_api |
否 |
否 |
否 |
否 |
是 |
否 |
是 |
功能 |
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
创建一个组类型
|
|
group:group_types:create |
(新策略) |
否 |
否 |
否 |
否 |
是 |
n/a |
n/a |
NEW
更新分组类型
|
|
group:group_types:update |
(新策略) |
否 |
否 |
否 |
否 |
是 |
n/a |
n/a |
NEW
删除分组类型
|
|
group:group_types:delete |
(新策略) |
否 |
否 |
否 |
否 |
是 |
n/a |
n/a |
显示带有类型规范属性的分组类型 |
在以下响应中添加
group_specsGET /group_typesGET /group_types/defaultGET /group_types/{group_type_id}这些调用不受策略控制。
|
group:access_group_types_specs |
rule:admin_api |
否 |
否 |
否 |
否 |
是 |
否 |
是 |
已弃用
创建、显示、更新和删除分组类型规范
|
(注意:新的策略将 GET、POST、PUT、DELETE 分开)
GET /group_types/{group_type_id}/group_specsGET /group_types/{group_type_id}/group_specs/{g_spec_id}POST /group_types/{group_type_id}/group_specsPUT /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
创建分组类型规范
|
|
group:group_types_specs:create |
(新策略) |
否 |
否 |
否 |
否 |
是 |
n/a |
n/a |
NEW
列出分组类型规范
|
|
group:group_types_specs:get_all |
(新策略) |
否 |
否 |
否 |
否 |
是 |
n/a |
n/a |
NEW
显示分组类型规范的详细信息
|
|
group:group_types_specs:get |
(新策略) |
否 |
否 |
否 |
否 |
是 |
n/a |
n/a |
NEW
更新分组类型规范
|
|
group:group_types_specs:update |
(新策略) |
否 |
否 |
否 |
否 |
是 |
n/a |
n/a |
NEW
删除分组类型规范
|
|
group:group_types_specs:delete |
(新策略) |
否 |
否 |
否 |
否 |
是 |
n/a |
n/a |
功能 |
API 调用 |
策略名称 |
(旧规则) |
project-reader |
project-member |
project-admin |
system-reader |
system-admin |
(旧“所有者”) |
(旧“管理员”) |
|---|---|---|---|---|---|---|---|---|---|---|
列出组快照 |
GET /group_snapshotsGET /group_snapshots/detail |
group:get_all_group_snapshots |
rule:admin_or_owner |
是 |
是 |
是 |
是 |
是 |
是 |
是 |
创建分组快照 |
|
group:create_group_snapshot |
空 |
否 |
是 |
是 |
否 |
是 |
是 |
是 |
显示分组快照 |
|
group:get_group_snapshot |
rule:admin_or_owner |
是 |
是 |
是 |
是 |
是 |
是 |
是 |
删除组快照 |
|
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_idGET /group_snapshots/detailGET /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 |
(旧“所有者”) |
(旧“管理员”) |
|---|---|---|---|---|---|---|---|---|---|---|
删除分组 |
|
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 |
否 |
是 |
是 |
否 |
是 |
是 |
是 |
功能 |
API 调用 |
策略名称 |
(旧规则) |
project-reader |
project-member |
project-admin |
system-reader |
system-admin |
(旧“所有者”) |
(旧“管理员”) |
|---|---|---|---|---|---|---|---|---|---|---|
列出 qos 规范或列出所有关联 |
GET /qos-specsGET /qos-specs/{qos_id}/associations |
volume_extension:qos_specs_manage:get_all |
rule:admin_api |
否 |
否 |
否 |
否 |
是 |
否 |
是 |
显示 qos 规范 |
|
volume_extension:qos_specs_manage:get |
rule:admin_api |
否 |
否 |
否 |
否 |
是 |
否 |
是 |
创建 qos 规范 |
|
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
显示项目配额类
|
|
volume_extension:quota_classes:get |
(新策略) |
否 |
否 |
否 |
否 |
是 |
n/a |
n/a |
NEW
更新项目配额类
|
|
volume_extension:quota_classes:update |
(新策略) |
否 |
否 |
否 |
否 |
是 |
n/a |
n/a |
显示项目配额(包括使用情况和默认值) |
GET /os-quota-sets/{project_id}GET /os-quota-sets/{project_id}/defaultGET /os-quota-sets/{project_id}?usage=True |
volume_extension:quotas:show |
rule:admin_or_owner |
是 |
是 |
是 |
是 |
是 |
是 |
是 |
更新项目配额 |
|
volume_extension:quotas:update |
rule:admin_api |
否 |
否 |
否 |
否 |
是 |
否 |
是 |
删除项目配额 |
|
volume_extension:quotas:delete |
rule:admin_api |
否 |
否 |
否 |
否 |
是 |
否 |
是 |
功能 |
API 调用 |
策略名称 |
(旧规则) |
project-reader |
project-member |
project-admin |
system-reader |
system-admin |
(旧“所有者”) |
(旧“管理员”) |
|---|---|---|---|---|---|---|---|---|---|---|
显示后端功能 |
|
volume_extension:capabilities |
rule:admin_api |
否 |
否 |
否 |
否 |
是 |
否 |
是 |
功能 |
API 调用 |
策略名称 |
(旧规则) |
project-reader |
project-member |
project-admin |
system-reader |
system-admin |
(旧“所有者”) |
(旧“管理员”) |
|---|---|---|---|---|---|---|---|---|---|---|
列出所有服务 |
|
volume_extension:services:index |
rule:admin_api |
否 |
否 |
否 |
否 |
是 |
否 |
是 |
更新服务 |
PUT /os-services/enablePUT /os-services/disablePUT /os-services/disable-log-reasonPUT /os-services/freezePUT /os-services/thawPUT /os-services/failover_hostPUT /os-services/failover (microversion 3.26)PUT /os-services/set-logPUT /os-services/get-log |
volume_extension:services:update |
rule:admin_api |
否 |
否 |
否 |
否 |
是 |
否 |
是 |
冻结后端主机。辅助检查;还必须满足 volume_extension:services:update 才能进行此调用。 |
|
volume:freeze_host |
rule:admin_api |
否 |
否 |
否 |
否 |
是 |
否 |
是 |
解冻后端主机。辅助检查;还必须满足 volume_extension:services:update 才能进行此调用。 |
|
volume:thaw_host |
rule:admin_api |
否 |
否 |
否 |
否 |
是 |
否 |
是 |
故障转移后端主机。辅助检查;还必须满足 volume_extension:services:update 才能进行此调用。 |
PUT /os-services/failover_hostPUT /os-services/failover (microversion 3.26) |
volume:failover_host |
rule:admin_api |
否 |
否 |
否 |
否 |
是 |
否 |
是 |
列出所有后端池 |
|
scheduler_extension:scheduler_stats:get_pools |
rule:admin_api |
否 |
否 |
否 |
否 |
是 |
否 |
是 |
列出、更新或显示项目的宿主机
(注意:将在 Yoga 中弃用,并引入新的策略
用于 GET 和 PUT)
|
GET /os-hostsPUT /os-hosts/{host_name}GET /os-hosts/{host_id} |
volume_extension:hosts |
rule:admin_api |
否 |
否 |
否 |
否 |
是 |
否 |
是 |
显示带有已用限制属性的限制 |
|
limits_extension:used_limits |
rule:admin_or_owner |
是 |
是 |
是 |
是 |
是 |
是 |
是 |
列出(详细)可供管理的卷 |
GET /manageable_volumesGET /manageable_volumes/detail |
volume_extension:list_manageable |
rule:admin_api |
否 |
否 |
否 |
否 |
是 |
否 |
是 |
管理现有卷 |
|
volume_extension:volume_manage |
rule:admin_api |
否 |
否 |
否 |
否 |
是 |
否 |
是 |
取消管理卷 |
|
volume_extension:volume_unmanage |
rule:admin_api |
否 |
否 |
否 |
否 |
是 |
否 |
是 |
功能 |
API 调用 |
策略名称 |
(旧规则) |
project-reader |
project-member |
project-admin |
system-reader |
system-admin |
(旧“所有者”) |
(旧“管理员”) |
|---|---|---|---|---|---|---|---|---|---|---|
已弃用
创建、更新和删除卷类型
(创建/更新/删除的新策略)
|
POST /typesPUT /types/{type_id}DELETE /types |
volume_extension:types_manage |
rule:admin_api |
否 |
否 |
否 |
否 |
是 |
否 |
是 |
NEW
创建一个卷类型
|
|
volume_extension:type_create |
(新策略) |
否 |
否 |
否 |
否 |
是 |
否 |
是 |
NEW
更新卷类型
|
|
volume_extension:type_update |
(新策略) |
否 |
否 |
否 |
否 |
是 |
否 |
是 |
NEW
删除卷类型
|
|
volume_extension:type_delete |
(新策略) |
否 |
否 |
否 |
否 |
是 |
否 |
是 |
显示特定卷类型 |
|
volume_extension:type_get |
空 |
是 |
是 |
是 |
是 |
是 |
是 |
是 |
列出卷类型 |
|
volume_extension:type_get_all |
空 |
是 |
是 |
是 |
是 |
是 |
是 |
是 |
已弃用
所有卷类型加密类型操作的基本策略
(注意:不能再使用此策略,因为它为 GET 和 POST 赋予相同的权限)
|
在您不想单独配置所有 |
volume_extension:volume_type_encryption |
rule:admin_api |
否 |
是 |
|||||
创建卷类型加密 |
|
volume_extension:volume_type_encryption:create |
rule:volume_extension:volume_type_encryption |
否 |
否 |
否 |
否 |
是 |
否 |
是 |
显示卷类型的加密类型,显示加密规范项 |
GET /types/{type_id}/encryptionGET /types/{type_id}/encryption/{key} |
volume_extension:volume_type_encryption:get |
rule:volume_extension:volume_type_encryption |
否 |
否 |
否 |
否 |
是 |
否 |
是 |
更新卷类型加密 |
|
volume_extension:volume_type_encryption:update |
rule:volume_extension:volume_type_encryption |
否 |
否 |
否 |
否 |
是 |
否 |
是 |
删除卷类型加密 |
|
volume_extension:volume_type_encryption:delete |
rule:volume_extension:volume_type_encryption |
否 |
否 |
否 |
否 |
是 |
否 |
是 |
列出或显示带有额外规范属性的卷类型 |
在以下响应中添加
extra_specsGET /types/{type_id}GET /types执行这些 API 调用受到其他策略的约束。
|
volume_extension:access_types_extra_specs |
空 |
是 |
是 |
是 |
是 |
是 |
是 |
是 |
列出或显示带有访问类型 qos 规范 ID 属性的卷类型 |
在以下响应中添加
qos_specs_idGET /types/{type_id}GET /types执行这些 API 调用受到其他策略的约束。
|
volume_extension:access_types_qos_specs_id |
rule:admin_api |
否 |
否 |
否 |
否 |
是 |
否 |
是 |
显示卷类型是否在类型响应中公开 |
在以下响应中添加
os-volume-type-access:is_publicGET /typesGET /types/{type_id}POST /types执行这些 API 调用受到其他策略的约束。
|
volume_extension:volume_type_access |
rule:admin_or_owner |
否 |
是 |
是 |
否 |
是 |
否 |
是 |
NEW
列出私有卷类型访问详细信息,即列出具有访问权限的项目
(以前由 volume_extension:volume_type_access 控制)
|
|
volume_extension:volume_type_access:get_all_for_type |
(新策略) |
否 |
否 |
否 |
否 |
是 |
n/a |
n/a |
为项目添加卷类型访问权限 |
|
volume_extension:volume_type_access:addProjectAccess |
rule:admin_api |
否 |
否 |
否 |
否 |
是 |
否 |
是 |
删除项目的卷类型访问权限 |
|
volume_extension:volume_type_access:removeProjectAccess |
rule:admin_api |
否 |
否 |
否 |
否 |
是 |
否 |
是 |
功能 |
API 调用 |
策略名称 |
(旧规则) |
project-reader |
project-member |
project-admin |
system-reader |
system-admin |
(旧“所有者”) |
(旧“管理员”) |
|---|---|---|---|---|---|---|---|---|---|---|
扩展卷 |
|
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 |
否 |
是 |
是 |
否 |
是 |
是 |
是 |
重置卷状态 |
|
volume_extension:volume_admin_actions:reset_status |
rule:admin_api |
否 |
否 |
否 |
否 |
是 |
否 |
是 |
重新类型化卷 |
|
volume:retype |
rule:admin_or_owner |
否 |
是 |
是 |
否 |
是 |
是 |
是 |
更新卷的只读标志 |
|
volume:update_readonly_flag |
rule:admin_or_owner |
否 |
是 |
是 |
否 |
是 |
是 |
是 |
强制删除卷 |
|
volume_extension:volume_admin_actions:force_delete |
rule:admin_api |
否 |
否 |
否 |
否 |
是 |
否 |
是 |
上传卷到镜像,具有公共可见性 |
|
volume_extension:volume_actions:upload_public |
rule:admin_api |
否 |
否 |
否 |
否 |
是 |
否 |
是 |
上传卷到镜像 |
|
volume_extension:volume_actions:upload_image |
rule:admin_or_owner |
否 |
是 |
是 |
否 |
是 |
是 |
是 |
强制分离卷。 |
|
volume_extension:volume_admin_actions:force_detach |
rule:admin_api |
否 |
否 |
否 |
否 |
是 |
否 |
是 |
将卷迁移到指定的主机 |
|
volume_extension:volume_admin_actions:migrate_volume |
rule:admin_api |
否 |
否 |
否 |
否 |
是 |
否 |
是 |
完成卷迁移 |
|
volume_extension:volume_admin_actions:migrate_volume_completion |
rule:admin_api |
否 |
否 |
否 |
否 |
是 |
否 |
是 |
初始化卷连接 |
|
volume_extension:volume_actions:initialize_connection |
rule:admin_or_owner |
否 |
是 |
是 |
否 |
是 |
是 |
是 |
终止卷连接 |
|
volume_extension:volume_actions:terminate_connection |
rule:admin_or_owner |
否 |
是 |
是 |
否 |
是 |
是 |
是 |
将卷状态回滚到“使用中” |
|
volume_extension:volume_actions:roll_detaching |
rule:admin_or_owner |
否 |
是 |
是 |
否 |
是 |
是 |
是 |
标记卷为已保留 |
|
volume_extension:volume_actions:reserve |
rule:admin_or_owner |
否 |
是 |
是 |
否 |
是 |
是 |
是 |
取消标记卷为已保留 |
|
volume_extension:volume_actions:unreserve |
rule:admin_or_owner |
否 |
是 |
是 |
否 |
是 |
是 |
是 |
开始分离卷 |
|
volume_extension:volume_actions:begin_detaching |
rule:admin_or_owner |
否 |
是 |
是 |
否 |
是 |
是 |
是 |
添加连接元数据 |
|
volume_extension:volume_actions:attach |
rule:admin_or_owner |
否 |
是 |
是 |
否 |
是 |
是 |
是 |
清除连接元数据 |
|
volume_extension:volume_actions:detach |
rule:admin_or_owner |
否 |
是 |
是 |
否 |
是 |
是 |
是 |
功能 |
API 调用 |
策略名称 |
(旧规则) |
project-reader |
project-member |
project-admin |
system-reader |
system-admin |
(旧“所有者”) |
(旧“管理员”) |
|---|---|---|---|---|---|---|---|---|---|---|
列出卷传输 |
GET /os-volume-transferGET /os-volume-transfer/detailGET /volume-transfersGET /volume-transfers/detail |
volume:get_all_transfers |
rule:admin_or_owner |
是 |
是 |
是 |
是 |
是 |
是 |
是 |
创建卷传输 |
POST /os-volume-transferPOST /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}/acceptPOST /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}/metadataGET /volumes/{volume_id}/metadata/{key}POST /volumes/{volume_id}/action (os-show_image_metadata) |
volume:get_volume_metadata |
rule:admin_or_owner |
是 |
是 |
是 |
是 |
是 |
是 |
是 |
创建卷元数据 |
|
volume:create_volume_metadata |
rule:admin_or_owner |
否 |
是 |
是 |
否 |
是 |
是 |
是 |
更新卷的元数据或具有给定键的指定元数据 |
PUT /volumes/{volume_id}/metadataPUT /volumes/{volume_id}/metadata/{key} |
volume:update_volume_metadata |
rule:admin_or_owner |
否 |
是 |
是 |
否 |
是 |
是 |
是 |
删除具有给定键的卷的指定元数据 |
|
volume:delete_volume_metadata |
rule:admin_or_owner |
否 |
是 |
是 |
否 |
是 |
是 |
是 |
已弃用
卷的镜像元数据相关操作,创建、删除、显示和列出
|
(注意:以下引入了新的策略来拆分 GET 和 POST)
微版本 3.4
GET /volumes/detailGET /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/detailGET /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 |
否 |
否 |
否 |
否 |
是 |
否 |
是 |
功能 |
API 调用 |
策略名称 |
(旧规则) |
project-reader |
project-member |
project-admin |
system-reader |
system-admin |
(旧“所有者”) |
(旧“管理员”) |
|---|---|---|---|---|---|---|---|---|---|---|
列出类型 extra specs |
|
volume_extension:types_extra_specs:index |
空 |
是 |
是 |
是 |
是 |
是 |
是 |
是 |
创建类型 extra specs |
|
volume_extension:types_extra_specs:create |
rule:admin_api |
否 |
否 |
否 |
否 |
是 |
否 |
是 |
显示指定的类型 extra specs |
|
volume_extension:types_extra_specs:show |
空 |
是 |
是 |
是 |
是 |
是 |
是 |
是 |
更新类型 extra specs |
|
volume_extension:types_extra_specs:update |
rule:admin_api |
否 |
否 |
否 |
否 |
是 |
否 |
是 |
删除类型 extra specs |
|
volume_extension:types_extra_specs:delete |
rule:admin_api |
否 |
否 |
否 |
否 |
是 |
否 |
是 |
在显示 extra_specs 的各种卷类型响应中包含 extra_specs 字段,这些字段可能泄露有关部署的敏感信息,不应向最终用户公开。 |
GET /typesGET /types/{type_id}GET /types/{type_id}/extra_specsGET /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 |
(旧“所有者”) |
(旧“管理员”) |
|---|---|---|---|---|---|---|---|---|---|---|
创建卷 |
|
volume:create |
空 |
否 |
是 |
是 |
否 |
是 |
是 |
是 |
从镜像创建卷 |
|
volume:create_from_image |
空 |
否 |
是 |
是 |
否 |
是 |
是 |
是 |
显示卷 |
|
volume:get |
rule:admin_or_owner |
是 |
是 |
是 |
是 |
是 |
是 |
是 |
列出卷或获取卷摘要 |
GET /volumesGET /volumes/detailGET /volumes/summary |
volume:get_all |
rule:admin_or_owner |
是 |
是 |
是 |
是 |
是 |
是 |
是 |
更新卷或更新卷的可启动状态 |
PUT /volumesPOST /volumes/{volume_id}/action (os-set_bootable) |
volume:update |
rule:admin_or_owner |
否 |
是 |
是 |
否 |
是 |
是 |
是 |
删除卷 |
|
volume:delete |
rule:admin_or_owner |
否 |
是 |
是 |
否 |
是 |
是 |
是 |
强制删除卷(微版本 3.23) |
|
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}/encryptionGET /volumes/{volume_id}/encryption/{encryption_key} |
volume_extension:volume_encryption_metadata |
rule:admin_or_owner |
是 |
是 |
是 |
是 |
是 |
是 |
是 |
创建可多连接的卷 |
间接影响这些 API 调用的成功
POST /volumesPOST /volumes/{volume_id}/action (os-retype)执行这些 API 调用受到其他策略的约束。
|
volume:multiattach |
rule:admin_or_owner |
否 |
是 |
是 |
否 |
是 |
是 |
是 |
功能 |
API 调用 |
策略名称 |
(旧规则) |
project-reader |
project-member |
project-admin |
system-reader |
system-admin |
(旧“所有者”) |
(旧“管理员”) |
|---|---|---|---|---|---|---|---|---|---|---|
设置或更新项目的默认卷类型 |
|
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 |
否 |
否 |
是 |
否 |
是 |
否 |
是 |
获取所有默认类型 |
|
volume_extension:default_get_all |
role:admin and system_scope:all |
否 |
否 |
否 |
否 |
是 |
否 |
是 |
取消设置项目的默认类型 |
|
volume_extension:default_unset |
rule:system_or_domain_or_project_admin |
否 |
否 |
是 |
否 |
是 |
否 |
是 |