
# 策略授权参考
本章节介绍DMS for RocketMQ策略授权场景下支持的策略授权项。
#### 支持的授权项
策略包含系统策略和自定义策略，如果系统策略不满足授权要求，管理员可以创建自定义策略，并通过给用户组授予自定义策略来进行精细的访问控制。策略支持的操作与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 RocketMQ的支持自定义策略授权项如下所示：
- [生命周期管理]，包含RocketMQ实例所有生命周期接口对应的授权项，如创建实例、查询实例列表、修改实例信息等接口。
- [消费组管理]，包括消费组管理接口对应的授权项，如批量修改消费组、创建消费组或批量删除消费组等接口。
- [Topic管理]，包括Topic管理接口对应的授权项，如创建主题或批量删除主题、修改主题等接口。
- [消息管理]，包括消息管理接口对应的授权项，如查询消息、查询消息轨迹等接口。
- [用户管理]，包括用户管理接口对应的授权项，如创建用户、查询用户列表、删除用户等接口。
- [标签管理]，包括实例的标签管理接口对应的授权项，如查询实例标签、查询项目标签等接口。
 
 #### 生命周期管理
表1生命周期管理 
| 权限       | 对应API接口                                              | 授权项                 | IAM项目 (Project) | 企业项目 (Enterprise Project) |
|:---|:---|:---|:---|:---|
| 查询所有实例列表 | GET /v2/{project_id}/instances                       | dms:instance:list   | √                                               | √                                                       |
| 创建实例     | POST /v2/{engine}/{project_id}/instances             | dms:instance:create | √                                               | √                                                       |
| 查询指定实例   | 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 | √                                               | √                                                       |
| 查询代理列表   | GET /v2/{project_id}/instances/{instance_id}/brokers | dms:instance:get    | √                                               | √                                                       |
   
 #### 消费组管理
表2消费组管理 
| 权限            | 对应API接口                                                                                       | 授权项                 | IAM项目(Project) | 企业项目(Enterprise Project) |
|:---|:---|:---|:---|:---|
| 创建消费组或批量删除消费组 | POST /v2/{project_id}/instances/{instance_id}/groups                                          | dms:instance:modify | √              | √                        |
| 批量修改消费组       | PUT /v2/{project_id}/instances/{instance_id}/groups                                           | dms:instance:modify | √              | √                        |
| 删除指定消费组       | DELETE /v2/{project_id}/instances/{instance_id}/groups/{group}                                | dms:instance:modify | √              | √                        |
| 查询指定消费组       | GET /v2/{project_id}/instances/{instance_id}/groups/{group}                                   | dms:instance:get    | √              | √                        |
| 修改消费组         | PUT /v2/{project_id}/instances/{instance_id}/groups/{group}                                   | dms:instance:modify | √              | √                        |
| 查询消费列表或详情     | GET /v2/{project_id}/instances/{instance_id}/groups/{group}/topics                            | dms:instance:get    | √              | √                        |
| 重置消费进度        | POST /v2/{engine}/{project_id}/instances/{instance_id}/groups/{group_id}/reset-message-offset | dms:instance:modify | √              | √                        |
   
 #### Topic管理
表3Topic管理 
| 权限          | 对应API接口                                                            | 授权项                 | IAM项目(Project) | 企业项目(Enterprise Project) |
|:---|:---|:---|:---|:---|
| 创建主题或批量删除主题 | POST /v2/{project_id}/instances/{instance_id}/topics               | dms:instance:modify | √              | √                        |
| 查询主题列表      | GET /v2/{project_id}/instances/{instance_id}/topics                | dms:instance:get    | √              | √                        |
| 删除指定主题      | DELETE /v2/{project_id}/instances/{instance_id}/topics/{topic}     | dms:instance:modify | √              | √                        |
| 查询单个主题      | GET /v2/{project_id}/instances/{instance_id}/topics/{topic}        | dms:instance:get    | √              | √                        |
| 修改主题        | PUT /v2/{project_id}/instances/{instance_id}/topics/{topic}        | dms:instance:modify | √              | √                        |
| 查询主题消费组列表   | GET /v2/{project_id}/instances/{instance_id}/topics/{topic}/groups | dms:instance:get    | √              | √                        |
| 查询主题的消息数    | GET /v2/{project_id}/instances/{instance_id}/topics/{topic}/status | dms:instance:get    | √              | √                        |
   
 #### 消息管理
表4消息管理 
| 权限     | 对应API接口                                                        | 授权项                 | IAM项目(Project) | 企业项目(Enterprise Project) |
|:---|:---|:---|:---|:---|
| 查询消息   | GET /v2/{engine}/{project_id}/instances/{instance_id}/messages | dms:instance:get    | √              | √                        |
| 查询消息轨迹 | GET /v2/{engine}/{project_id}/instances/{instance_id}/trace    | dms:instance:get    | √              | √                        |
| 导出死信消息 | POST /v2/{project_id}/instances/{instance_id}/messages/export  | dms:instance:modify | √              | √                        |
   
 #### 用户管理
表5用户管理 
| 权限           | 对应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 | √              | √                        |
| 查询用户详情       | GET /v2/{project_id}/instances/{instance_id}/users/{user_name}                       | dms:instance:get    | √              | √                        |
| 删除用户         | DELETE /v2/{project_id}/instances/{instance_id}/users/{user_name}                    | dms:instance:modify | √              | √                        |
| 查询主题的授权用户列表  | GET /v2/{project_id}/instances/{instance_id}/topics/{topic}/accesspolicy             | dms:instance:get    | √              | √                        |
| 查询消费组的授权用户列表 | GET /v2/{engine}/{project_id}/instances/{instance_id}/groups/{group_id}/accesspolicy | dms:instance:get    | √              | √                        |
   
 #### 标签管理
表6标签管理 
| 权限          | 对应API接口                                                  | 授权项                 | IAM项目(Project) | 企业项目(Enterprise Project) |
|:---|:---|:---|:---|:---|
| 批量添加或删除实例标签 | POST /v2/{project_id}/rocketmq/{instance_id}/tags/action | dms:instance:modify | √              | √                        |
| 查询实例标签      | GET /v2/{project_id}/rocketmq/{instance_id}/tags         | dms:instance:get    | √              | √                        |
| 查询项目标签      | GET /v2/{project_id}/rocketmq/tags                       | dms:instance:get    | √              | √                        |
   
[表7]展示了DMS for RocketMQ细粒度权限的相关依赖。
 表7DMS for RocketMQ细粒度权限依赖说明 
| 权限名称                      | 权限描述     | 权限依赖                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
|:---|:---|:---|
| dms:instance:get          | 查看实例详情信息 | 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| 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: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         | 查看实例列表   | 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
   
