
# 策略授权参考
本章节介绍DMS for RabbitMQ策略授权场景下支持的策略授权项。
#### 支持的授权项
策略包含系统策略和自定义策略，如果系统策略不满足授权要求，管理员可以创建自定义策略，并通过给用户组授予自定义策略来进行精细的访问控制。策略支持的操作与API相对应，授权项列表说明如下：
- 权限：允许或拒绝对指定资源在特定条件下进行某项操作。
- 对应API接口：自定义策略实际调用的API接口。
- 授权项：自定义策略中支持的Action，在自定义策略中的Action中写入授权项，可以实现授权项对应的权限功能。
- 依赖的授权项：部分Action存在对其他Action的依赖，需要将依赖的Action同时写入授权项，才能实现对应的权限功能。
- IAM项目(Project)/企业项目(Enterprise Project)：自定义策略的授权范围，包括IAM项目与企业项目。授权范围如果同时支持IAM项目和企业项目，表示此授权项对应的自定义策略，可以在IAM和企业管理两个服务中给用户组授权并生效。如果仅支持IAM项目，不支持企业项目，表示仅能在IAM中给用户组授权并生效，如果在企业管理中授权，则该自定义策略不生效。管理员可以在授权项列表中查看授权项是否支持IAM项目或企业项目，"√"表示支持，"×"表示暂不支持。关于IAM项目与企业项目的区别，详情请参见：[IAM与企业管理的区别](https://support.huaweicloud.com/iam_faq/iam_01_0101.html)。
DMS for RabbitMQ的支持自定义策略授权项如下所示：
- [生命周期管理]，包含RabbitMQ实例所有生命周期接口对应的授权项，如创建实例、查询实例列表、修改实例信息、批量删除实例等接口。
- [实例管理]，包括RabbitMQ实例管理接口对应的授权项，如重置密码、查询插件列表、开启或关闭插件接口。
- [规格变更管理]，包括实例规格变更管理接口对应的授权项，如查询新规格可扩容规格列表、新规格实例的规格变更等接口。
- [Vhost管理]，包括Vhost管理接口对应的授权项，如创建Vhost、查询Vhost列表等接口。
- [Exchange管理]，包括Exchange管理接口对应的授权项，如创建Exchange、查询Exchange列表等接口。
- [Queue管理]，包括Queue管理接口对应的授权项，如创建Queue、清空Queue消息等接口。
- [Binding管理]，包括Binding管理接口对应的授权项，如添加绑定、删除绑定等接口。
- [用户管理]，包括用户管理接口对应的授权项，如创建用户、查询用户列表等接口。
- [后台任务管理]，包括实例的后台任务管理接口对应的授权项，如查询实例的后台任务列表、查询后台任务管理中的指定记录等接口。
- [标签管理]，包括实例的标签管理接口对应的授权项，如查询实例标签、查询项目标签等接口。
- [其他接口]，包括查询维护时间窗时间段、查询可用区信息等接口。
 
 #### 生命周期管理
表1生命周期管理 
| 权限       | 对应API接口                                         | 授权项                 | IAM项目 (Project) | 企业项目 (Enterprise Project) |
|:---|:---|:---|:---|:---|
| 创建实例（按需） | POST /v2/{engine}/{project_id}/instances        | dms:instance:create | √                                                 | √                                                              |
| 查询所有实例列表 | GET /v2/{project_id}/instances                  | dms:instance:list   | √                                                 | √                                                              |
| 查询指定实例   | GET /v2/{project_id}/instances/{instance_id}    | dms:instance:get    | √                                                 | √                                                              |
| 删除指定的实例  | DELETE /v2/{project_id}/instances/{instance_id} | dms:instance:delete | √                                                 | √                                                              |
| 修改实例信息   | PUT /v2/{project_id}/instances/{instance_id}    | dms:instance:modify | √                                                 | √                                                              |
| 批量删除实例   | POST /v2/{project_id}/instances/action          | dms:instance:delete | √                                                 | √                                                              |
   
 #### 实例管理
表2实例管理 
| 权限        | 对应API接口                                                       | 授权项                        | IAM项目 (Project) | 企业项目 (Enterprise Project) |
|:---|:---|:---|:---|:---|
| 重置密码      | POST /v2/{project_id}/instances/{instance_id}/password        | dms:instance:resetAuthInfo | √                                                   | √                                                             |
| 查询插件列表    | GET /v2/{project_id}/instances/{instance_id}/rabbitmq/plugins | dms:instance:list          | √                                                   | √                                                             |
| 开启或关闭插件   | PUT /v2/{project_id}/instances/{instance_id}/rabbitmq/plugins | dms:instance:modify        | √                                                   | √                                                             |
| 恢复回收站实例   | POST /v2/{project_id}/recycle                                 | dms:instance:modify        | √                                                   | √                                                             |
| 查询回收站实例列表 | GET /v2/{project_id}/recycle                                  | dms:instance:list          | √                                                   | √                                                             |
| 更新回收站策略   | PUT /v2/{project_id}/recycle                                  | dms:instance:modify        | √                                                   | √                                                             |
   
 #### 规格变更管理
表3规格变更管理 
| 权限           | 对应API接口                                                         | 授权项                | IAM项目 (Project) | 企业项目 (Enterprise Project) |
|:---|:---|:---|:---|:---|
| 查询新规格可扩容规格列表 | GET /v2/{engine}/{project_id}/instances/{instance_id}/extend    | dms:instance:get   | √                                                 | √                                                             |
| 新规格实例的规格变更   | POST /v2/{engine}/{project_id}/instances/{instance_id}/extend   | dms:instance:scale | √                                                 | √                                                             |
| 查询磁盘自动扩容配置   | GET /v2/{project_id}/instances/{instance_id}/auto-volume-expand | dms:instance:get   | √                                                 | √                                                             |
| 修改磁盘自动扩容配置   | PUT /v2/{project_id}/instances/{instance_id}/auto-volume-expand | dms:instance:scale | √                                                 | √                                                             |
   
 #### Vhost管理
表4Vhost管理 
| 权限          | 对应API接口                                                       | 授权项                 | IAM项目 (Project) | 企业项目 (Enterprise Project) |
|:---|:---|:---|:---|:---|
| 创建Vhost     | PUT /v2/rabbitmq/{project_id}/instances/{instance_id}/vhosts  | dms:instance:modify | √                                                   | √                                                            |
| 查询Vhost列表   | GET /v2/rabbitmq/{project_id}/instances/{instance_id}/vhosts  | dms:instance:get    | √                                                   | √                                                            |
| 批量删除指定Vhost | POST /v2/rabbitmq/{project_id}/instances/{instance_id}/vhosts | dms:instance:modify | √                                                   | √                                                            |
   
 #### Exchange管理
表5Exchange管理 
| 权限             | 对应API接口                                                                         | 授权项                 | IAM项目 (Project) | 企业项目 (Enterprise Project) |
|:---|:---|:---|:---|:---|
| 创建Exchange     | PUT /v2/rabbitmq/{project_id}/instances/{instance_id}/vhosts/{vhost}/exchanges  | dms:instance:modify | √                                                  | √                                                            |
| 查询Exchange列表   | GET /v2/rabbitmq/{project_id}/instances/{instance_id}/vhosts/{vhost}/exchanges  | dms:instance:get    | √                                                  | √                                                            |
| 批量删除指定Exchange | POST /v2/rabbitmq/{project_id}/instances/{instance_id}/vhosts/{vhost}/exchanges | dms:instance:modify | √                                                  | √                                                            |
   
 #### Queue管理
表6Queue管理 
| 权限                 | 对应API接口                                                                                         | 授权项                 | IAM项目 (Project) | 企业项目 (Enterprise Project) |
|:---|:---|:---|:---|:---|
| 创建Queue            | PUT /v2/rabbitmq/{project_id}/instances/{instance_id}/vhosts/{vhost}/queues                     | dms:instance:modify | √                                                 | √                                                            |
| 查询所属Vhost下Queue的列表 | GET /v2/rabbitmq/{project_id}/instances/{instance_id}/vhosts/{vhost}/queues                     | dms:instance:get    | √                                                 | √                                                            |
| 批量删除指定Queue        | POST /v2/rabbitmq/{project_id}/instances/{instance_id}/vhosts/{vhost}/queues                    | dms:instance:modify | √                                                 | √                                                            |
| 清空Queue消息          | DELETE /v2/rabbitmq/{project_id}/instances/{instance_id}/vhosts/{vhost}/queues/{queue}/contents | dms:instance:modify | √                                                 | √                                                            |
| 查询指定Queue详情        | GET /v2/rabbitmq/{project_id}/instances/{instance_id}/vhosts/{vhost}/queues/{queue}             | dms:instance:get    | √                                                 | √                                                            |
   
 #### Binding管理
表7Binding管理 
| 权限               | 对应API接口                                                                                            | 授权项                 | IAM项目 (Project) | 企业项目 (Enterprise Project) |
|:---|:---|:---|:---|:---|
| 添加绑定             | POST /v2/rabbitmq/{project_id}/instances/{instance_id}/vhosts/{vhost}/exchanges/{exchange}/binding | dms:instance:modify | √                                                  | √                                                               |
| 查询Exchange绑定信息列表 | GET /v2/rabbitmq/{project_id}/instances/{instance_id}/vhosts/{vhost}/exchanges/{exchange}/binding  | dms:instance:get    | √                                                  | √                                                               |
| 删除绑定             | GET /v2/{project_id}/instances/{instance_id}/tasks/{task_id}                                       | dms:instance:modify | √                                                  | √                                                               |
   
 #### 用户管理
表8用户管理 
| 权限     | 对应API接口                                                           | 授权项                 | IAM项目 (Project) | 企业项目 (Enterprise Project) |
|:---|:---|:---|:---|:---|
| 创建用户   | POST /v2/{project_id}/instances/{instance_id}/users               | dms:instance:modify | √                                                  | √                                                              |
| 查询用户列表 | GET /v2/{project_id}/instances/{instance_id}/users                | dms:instance:get    | √                                                  | √                                                              |
| 修改用户参数 | PUT /v2/{project_id}/instances/{instance_id}/users/{user_name}    | dms:instance:modify | √                                                  | √                                                              |
| 删除用户   | DELETE /v2/{project_id}/instances/{instance_id}/users/{user_name} | dms:instance:modify | √                                                  | √                                                              |
   
#### 后台任务管理
表9后台任务管理 
| 权限             | 对应API接口                                                                   | 授权项                               | IAM项目 (Project) | 企业项目 (Enterprise Project) |
|:---|:---|:---|:---|:---|
| 查询实例的后台任务列表    | GET /v2/{project_id}/instances/{instance_id}/tasks                        | dms:instance:getBackgroundTask    | √                                                   | √                                                              |
| 查询后台任务管理中的指定记录 | GET /v2/{project_id}/instances/{instance_id}/tasks/{task_id}              | dms:instance:getBackgroundTask    | √                                                   | √                                                              |
| 删除后台任务管理中的指定记录 | GET /v2/{project_id}/instances/{instance_id}/tasks/{task_id}              | dms:instance:deleteBackgroundTask | √                                                   | √                                                              |
| 查询实例的定时任务列表    | GET /v2/{project_id}/instances/{instance_id}/scheduled-tasks              | dms:instance:get                  | √                                                   | √                                                              |
| 删除定时任务管理中的指定记录 | DELETE /v2/{project_id}/instances/{instance_id}/scheduled-tasks/{task_id} | dms:instance:modify               | √                                                   | √                                                              |
| 修改定时任务管理中的指定记录 | PUT /v2/{project_id}/instances/{instance_id}/scheduled-tasks/{task_id}    | dms:instance:modify               | √                                                   | √                                                              |
   
 #### 标签管理
表10标签管理 
| 权限          | 对应API接口                                                  | 授权项                 | IAM项目 (Project) | 企业项目 (Enterprise Project) |
|:---|:---|:---|:---|:---|
| 批量添加或删除实例标签 | POST /v2/{project_id}/rabbitmq/{instance_id}/tags/action | dms:instance:modify | √                                                   | √                                                             |
| 查询实例标签      | GET /v2/{project_id}/rabbitmq/{instance_id}/tags         | dms:instance:get    | √                                                   | √                                                             |
| 查询项目标签      | GET /v2/{project_id}/rabbitmq/tags                       | dms:instance:get    | √                                                   | √                                                             |
   
 #### 其他接口
表11其他接口 
| 权限               | 对应API接口                                                    | 授权项              | IAM项目(Project) | 企业项目(Enterprise Project) |
|:---|:---|:---|:---|:---|
| 查询维护时间窗时间段       | GET /v2/instances/maintain-windows                         | dms:instance:get | √              | √                        |
| 查询可用区信息          | GET /v2/available-zones                                    | dms:instance:get | √              | √                        |
| 查询产品规格列表         | GET /v2/{engine}/products                                  | dms:instance:get | √              | √                        |
| 查询实例在CES的监控层级关系  | GET /v2/{project_id}/instances/{instance_id}/ces-hierarchy | dms:instance:get | √              | √                        |
| 查询RabbitMQ产品规格核数 | GET /v2/rabbitmq/products/cores                            | dms:instance:get | √              | √                        |
| 查询特性开关列表         | GET /v2/config/features                                    | dms:instance:get | √              | √                        |
   
[表12]展示了DMS for RabbitMQ细粒度权限的相关依赖。
 表12DMS for RabbitMQ细粒度权限依赖说明 
| 权限名称                              | 权限描述       | 权限依赖                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
|:---|:---|:---|
| dms:instance:get                  | 查看实例详情信息   | 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| dms:instance:getBackgroundTask    | 查看实例后台任务详情 | 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| dms:instance:resetAuthInfo        | 重置实例访问密码   | 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| dms:instance:scale                | 实例开启扩容功能   | - vpc:vpcs:get  - vpc:ports:create  - vpc:securityGroups:get  - vpc:ports:get  - vpc:subnets:get  - vpc:vpcs:list  - vpc:publicIps:get  - vpc:publicIps:list  - vpc:ports:update  - vpc:publicIps:update                                |
| dms:instance:modify               | 修改实例       | - vpc:vpcs:get  - vpc:ports:create  - vpc:securityGroups:get  - vpc:ports:get  - vpc:subnets:get  - vpc:vpcs:list  - vpc:publicIps:get  - vpc:publicIps:list  - vpc:ports:update  - vpc:publicIps:update               |
| dms:instance:deleteBackgroundTask | 删除实例后台任务   | 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| dms:instance:modifyStatus         | 重启实例       | 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| dms:instance:delete               | 删除实例       | 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| dms:instance:create               | 创建实例       | - vpc:vpcs:get  - vpc:ports:create  - vpc:securityGroups:get  - vpc:ports:get  - vpc:subnets:get  - vpc:vpcs:list  - vpc:publicIps:get  - vpc:publicIps:list  - vpc:ports:update  - vpc:publicIps:update   |
| dms:instance:list                 | 查看实例列表     | 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
   
