更新时间:2024-10-23 GMT+08:00

创建设备策略

功能介绍

应用服务器可调用此接口在物联网平台创建一个策略,该策略需要绑定到设备和产品下才能生效。

  • 一个实例最多能创建50个设备策略。

  • 标准版实例、企业版实例支持该接口调用,基础版不支持。

调试

您可以在API Explorer中调试该接口,支持自动认证鉴权。API Explorer可以自动生成SDK代码示例,并提供SDK代码示例调试功能。

URI

POST /v5/iot/{project_id}/device-policies

表1 路径参数

参数

是否必选

参数类型

描述

project_id

String

参数说明:项目ID。获取方法请参见 获取项目ID

请求参数

表2 请求Header参数

参数

是否必选

参数类型

描述

X-Auth-Token

String

参数说明:用户Token。通过调用IAM服务 获取IAM用户Token接口获取,接口返回的响应消息头中“X-Subject-Token”就是需要获取的用户Token。简要的获取方法样例请参见 Token认证

Instance-Id

String

参数说明:实例ID。物理多租下各实例的唯一标识,建议携带该参数,在使用专业版时必须携带该参数。您可以在IoTDA管理控制台界面,选择左侧导航栏“总览”页签查看当前实例的ID,具体获取方式请参考 查看实例详情

表3 请求Body参数

参数

是否必选

参数类型

描述

policy_name

String

参数说明:策略名称。

取值范围:长度不超过128,只允许字母、数字、下划线(_)、连接符(-)的组合。

app_id

String

参数说明:资源空间ID。此参数为非必选参数,存在多资源空间的用户需要使用该接口时,建议携带该参数指定创建的设备归属到哪个资源空间下,否则创建的设备将会归属到默认资源空间下。

取值范围:长度不超过36,只允许字母、数字、下划线(_)、连接符(-)的组合。

statement

Array of Statement objects

参数说明:策略文档。

表4 Statement

参数

是否必选

参数类型

描述

effect

String

指定是允许还是拒绝该操作。既有允许(ALLOW)又有拒绝(DENY)的授权语句时,遵循拒绝(DENY)优先的原则。

  • ALLOW:允许。

  • DENY:拒绝。

actions

Array of strings

用于指定策略允许或拒绝的操作。格式为:服务名:资源:操作。当前支持的操作类型如下:

  • iotda:devices:publish:设备使用MQTT协议发布消息。

  • iotda:devices:subscribe:设备使用MQTT协议订阅消息。

resources

Array of strings

用于指定允许或拒绝对其执行操作的资源。格式为:资源类型:资源名称。如设备订阅的资源为:topic:/v1/${devices.deviceId}/test/hello。

取值范围:资源列表长度最小为1,最大为10,列表中的资源取值范围:仅支持字母,数字,以及/{}$=+#?*:._-组合。

响应参数

状态码: 201

表5 响应Body参数

参数

参数类型

描述

app_id

String

参数说明:资源空间ID。

policy_id

String

策略ID。

policy_name

String

策略名称。

statement

Array of Statement objects

策略文档。

create_time

String

在物联网平台创建策略的时间。格式:yyyyMMdd'T'HHmmss'Z',如20151212T121212Z。

update_time

String

在物联网平台更新策略的时间。格式:yyyyMMdd'T'HHmmss'Z',如20151212T121212Z。

表6 Statement

参数

参数类型

描述

effect

String

指定是允许还是拒绝该操作。既有允许(ALLOW)又有拒绝(DENY)的授权语句时,遵循拒绝(DENY)优先的原则。

  • ALLOW:允许。

  • DENY:拒绝。

actions

Array of strings

用于指定策略允许或拒绝的操作。格式为:服务名:资源:操作。当前支持的操作类型如下:

  • iotda:devices:publish:设备使用MQTT协议发布消息。

  • iotda:devices:subscribe:设备使用MQTT协议订阅消息。

resources

Array of strings

用于指定允许或拒绝对其执行操作的资源。格式为:资源类型:资源名称。如设备订阅的资源为:topic:/v1/${devices.deviceId}/test/hello。

取值范围:资源列表长度最小为1,最大为10,列表中的资源取值范围:仅支持字母,数字,以及/{}$=+#?*:._-组合。

请求示例

  • 创建设备策略-允许设备订阅与发布指定topic

    POST https://{endpoint}/v5/iot/{project_id}/device-policies
    
    {
      "policy_name" : "myPolicyAllow",
      "app_id" : "jeQDJQZltU8iKgFFoW060F5SGZka",
      "statement" : [ {
        "effect" : "ALLOW",
        "actions" : [ "iotda:devices:publish\niotda:devices:subscribe" ],
        "resources" : [ "topic:/v1/${devices.deviceId}/test/allow" ]
      } ]
    }
  • 创建设备策略-不允许设备订阅与发布指定topic

    POST https://{endpoint}/v5/iot/{project_id}/device-policies
    
    {
      "policy_name" : "myPolicyDeny",
      "app_id" : "jeQDJQZltU8iKgFFoW060F5SGZka",
      "statement" : [ {
        "effect" : "DENY",
        "actions" : [ "iotda:devices:publish\niotda:devices:subscribe" ],
        "resources" : [ "topic:/v1/${devices.deviceId}/test/deny" ]
      } ]
    }

响应示例

状态码: 201

Created

{
  "app_id" : "jeQDJQZltU8iKgFFoW060F5SGZka",
  "policy_id" : "5c90fa7d3c4e4405e8525079",
  "policy_name" : "testPolicy",
  "statement" : [ {
    "effect" : "ALLOW",
    "actions" : [ "iotda:devices:publish", "iotda:devices:subscribe" ],
    "resources" : [ "topic:/v1/${devices.deviceId}/test/hello", "topic:/v1/${devices.productId}/test/hello" ]
  } ],
  "create_time" : "20230810T070547Z",
  "update_time" : "20230810T070547Z"
}

状态码

状态码

描述

201

Created

400

Bad Request

401

Unauthorized

403

Forbidden

500

Internal Server Error

错误码

请参见错误码