10 月,开发者不可错过的开源大数据大会-2021 WeDataSphere 社区大会深圳站 了解详情
写点什么

在零售场景中使用 AWS IoT Device Management 处理订单请求

2019 年 9 月 25 日

在零售场景中使用 AWS IoT Device Management 处理订单请求

在此博文中,我们将模拟常见的商业场景,以向您展示如何在 AWS IoT Device Management 中使用组策略功能。具体来说,我们将描述:


  • 如何创建分层组结构及如何将您的 IoT 设备分配到不同的组。

  • 如何基于组策略将消息发布到不同的 IoT 设备。


场景


我们将使用西雅图一家零售店作为示例,该零售店向 IoT 设备网关发布订单请求。网关将订单消息发送给 AWS IoT Core 进行处理,而 AWS IoT Core 则将订单消息发布给旧金山的工厂。


在此情况中,我们将使用 AWS IoT Device Management 管理西雅图的 IoT 网关队列和旧金山的制造设备队列。


将给每个组分配不同的策略。


  • 对于西雅图组,设备只能通过特定主题发布其消息。他们不能发布有关其他任何商店的信息。西雅图零售店将不会从 AWS IoT Core 接收消息。

  • 对于旧金山组,设备只能订阅为旧金山工厂指定的消息。这表示,这些设备不能从其他工厂接收消息。


注释

  • 开始前,请注意组是分层的。您必须仔细定义父级组和子级组。父级组创建后不能更改。您不能将某个组移动到另一个父级组中。

  • 根据组策略继承,子级组中的设备会继承父级组的策略,因此,您必须仔细设计您的组分层结构和策略继承。通常情况下,最好的做法是父级组应具有最严格的组策略。为子级组添加更具体的权限。由于策略继承原因,如果父级组与子级组之间发生冲突(例如,如果同一个资源上同时具有 Allow 语句和 Deny 语句),则该操作将被显式拒绝。在创建组策略树时,请记住这一点。


组配置示例

  1. 登录 AWS 管理控制台并打开 AWS IoT 控制台。您将在“管理”下找到新的“组”选项。您可以使用控制台或下列 CLI 命令创建新组。在我们的场景中,我们将先创建一个父级组 – 美国,然后再创建两个子级组 – 西雅图和旧金山。您需要添加两个子级组到其父级组美国中,并验证您的组分层结构。


#创建父级组#
aws iot create-thing-group --thing-group-name 'US'
#创建子级组并分配到父级组
aws iot create-thing-group --thing-group-name 'Seattle' --parent-group-name 'US'aws iot create-thing-group --thing-group-name 'San_Francisco' --parent-group-name 'US'
复制代码


  1. 对于我们的场景,我们将创建两个事物:SeattleThing1 and SanFranciscoThing1.然后将每个事物添加到事物注册表中并分配到其命名组中。您需要将证书附加到新创建的事物中,以便该事物可以通过 MQTT TLS 1.2 与设备网关连接。您可以使用自己的证书或使用 AWS IoT Core CA。在此示例中,我们将使用 AWS IoT Core CA 为每个事物分配一个新证书。


#创建新的 IoT 事物#
aws iot create-thing --thing-name SeattleThing1aws iot create-thing --thing-name SanFranciscoThing1
#创建证书并将其设置为活动状态
#为 SeattleThing1 创建证书
aws iot create-keys-and-certificate --set-as-active
#为 SanFranciscoThing1 创建证书
aws iot create-keys-and-certificate --set-as-active
#将证书附加到 IoT 事物
aws iot attach-thing-principal --thing-name SeattleThing1 --principal <Certificate ARN>aws iot attach-thing-principal --thing-name SanFranciscoThing1 --principal <Certificate ARN>
#将 IoT 事物添加到组中#
aws iot add-thing-to-thing-group --thing-name SeattleThing1 --thing-group-name Seattleaws iot add-thing-to-thing-group --thing-name SanFranciscoThing1 --thing-group-name San_Francisco
复制代码


  1. 在发布 AWS IoT Device Management 之前,您需要将策略附加到单个证书并单独管理策略。现在,您可以将策略附加到组中而不是各个证书中。您可以根据不同的组分配来创建策略。西雅图组只允许发布到西雅图订单状态主题,旧金山组只允许订阅到 AWS IoT Core 中的订单处理主题。您可以使用控制台或下列命令创建策略。


aws iot create-policy --policy-name <Policy Name>--policy-document <Policy Value>
复制代码


a. 对于美国组,我们将使用最严格的策略,该策略只允许设备连接到 AWS IoT Core,而不需要任何发布/订阅过程。


{    "Version": "2012-10-17",    "Statement": [     {       "Effect": "Allow",       "Action": "iot:Connect",       "Resource": "arn:aws:iot:ap-northeast-1:XXXXXXXXXXXX:client/${iot:ClientId}"     }   ]}
复制代码


b. 对于西雅图组,我们将使用下列策略:


{    "Version": "2012-10-17",    "Statement": [     {      "Effect": "Allow",      "Action": "iot:Publish",      "Resource": "arn:aws:iot:ap-northeast-1:XXXXXXXXXXXX:topic/Seattle/${iot:Connection.Thing.ThingName}/*"     }   ]}
复制代码


c. 对于旧金山组,我们将使用下列策略:


{    "Version": "2012-10-17",    "Statement": [     {       "Effect": "Allow",       "Action": "iot:Subscribe",       "Resource": "arn:aws:iot:ap-northeast-1:XXXXXXXXXXXX:topicfilter/San_Francisco/*"     },     {       "Effect": "Allow",       "Action": "iot:Receive",       "Resource": "arn:aws:iot:ap-northeast-1:XXXXXXXXXXXX:topic/San_Francisco/${iot:Connection.Thing.ThingName}/*"     }   ]}
复制代码



    aws iot attach-policy --target <Thing Group Arn> --policy-name <Policy Name>
    复制代码



      aws iot create-topic-rule –rule-name <Rule Name> --topic-rule-payload <Rule Value>
      复制代码






          附录

          当您将策略附加到某个组时,该策略将应用至该组中的所有设备。我们建议您使用 TestAuthorization API 在本地测试您的策略,这样便不会影响生产环境中的真实设备。您可以使用下列命令模拟预期结果。



            #使用下面的命令在您的事物上验证当前有效的策略,该事物只附加了一个组策略#
            aws iot test-authorization --auth-infos "[{\"actionType\": \"CONNECT\", \"resources\":[<Thing ARN>]}, {\"actionType\": \"PUBLISH\", \"resources\": [<Topic ARN>\"]}]" --client-id <Thing Name> --principal <certificate-ARN>
            复制代码


            下面显示命令输出。如您所见,“CONNECT”操作被允许,“PUBLISH”被拒绝。


            {    "authResults": [     {       "authDecision": "ALLOWED",       "authInfo": {       "actionType": "CONNECT",       "resources": [          "arn:aws:iot:ap-northeast-1:XXXXXXXXXXX:client/SeattleThing1"        ]      },     "denied": {       "implicitDeny": {          "policies": []        },     "explicitDeny": {       "policies": []        }      },      "missingContextValues": [],       "allowed": {         "policies": [          {            "policyName": "GroupManagement-US",            "policyArn": "arn:aws:iot:ap-northeast-1:XXXXXXXXXXX:policy/GroupManagement-US"          }        ]        }      },      {       "authDecision": "IMPLICIT_DENY",       "authInfo": {         "actionType": "PUBLISH",         "resources": [            "arn:aws:iot:ap-northeast-1:XXXXXXXXXXX:topic/Seattle/SeattleThing1"           ]       },       "denied": {         "implicitDeny": {            "policies": [             {                "policyName": "GroupManagement-US",                "policyArn": "arn:aws:iot:ap-northeast-1:XXXXXXXXXXX:policy/GroupManagement-US"             }           ]         },       "explicitDeny": {         "policies": []         }       },       "missingContextValues": [],           "allowed": {               "policies": []              }          }     ]}
            复制代码



              #在附加完成新的组策略后使用以下命令验证结果d#
              aws iot test-authorization --auth-infos "[{\"actionType\": \"CONNECT\", \"resources\": [<Thing ARN>]}, {\"actionType\": \"PUBLISH\", \"resources\": [<Topic ARN>]}]" --client-id <Thing Name> --principal <certificate-ARN> --policy-names-to-add "[<New Group Policy Name>]"
              复制代码


              下面显示命令输出。如您所见,“CONNECT”和“PUBLISH”都是允许的操作。


              {    "authResults": [      {        "authDecision": "ALLOWED",        "authInfo": {            "actionType": "CONNECT",            "resources": [                "arn:aws:iot:ap-northeast-1: XXXXXXXXXXX:client/SeattleThing1"             ]         },     "denied": {        "implicitDeny": {            "policies": [              {                "policyName": "GroupManagement-Seattle",                "policyArn": "arn:aws:iot:ap-northeast-1:XXXXXXXXXXX:policy/GroupManagement-Seattle"              }             ]        },     "explicitDeny": {        "policies": []        }      },     "missingContextValues": [],        "allowed": {            "policies": [              {                "policyName": "GroupManagement-US",                "policyArn": "arn:aws:iot:ap-northeast-1:XXXXXXXXXXX:policy/GroupManagement-US"              }            ]         }      },      {     "authDecision": "ALLOWED",        "authInfo": {            "actionType": "PUBLISH",            "resources": [                "arn:aws:iot:ap-northeast-1:XXXXXXXXXXXX:topic/Seattle/SeattleThing1"            ]        },     "denied": {        "implicitDeny": {            "policies": [             {                "policyName": "GroupManagement-US",                "policyArn": "arn:aws:iot:ap-northeast-1:XXXXXXXXXXX:policy/GroupManagement-US"             }             ]        },     "explicitDeny": {        "policies": []      }      },      "missingContextValues": [],        "allowed": {            "policies": [             {                "policyName": "GroupManagement-Seattle",                "policyArn": "arn:aws:iot:ap-northeast-1:XXXXXXXXXXX:policy/GroupManagement-Seattle"             }             ]        }      }   ]}
              复制代码


              相关文章:



              本文转载自 AWS 技术博客。


              原文链接:


              https://amazonaws-china.com/cn/blogs/china/iot-device-management-group-policy/


              2019 年 9 月 25 日 15:51260
              用户头像

              发布了 1299 篇内容, 共 41.7 次阅读, 收获喜欢 43 次。

              关注

              欲了解 AWS 的更多信息,请访问【AWS 技术专区】

              评论

              发布
              暂无评论
              发现更多内容

              卧槽,接到一个阎王的需求

              码农神说

              程序员

              神经网络中为什么不能将权重初始值设置为一样的值

              王坤祥

              神经网络 学习

              奈学干货分享:分布式CAP实践分析

              奈学教育

              分布式

              游戏夜读 | 改写图形API的意义

              game1night

              kudmp介绍和安装

              唯爱

              基于 Markdown 的中文文档排版规范

              Murphy

              markdown 排版规范 GitHub GFM 物联网学前班

              用户故事为什么要关联开发数据?

              Worktile

              敏捷开发 开发数据

              架构师训练营0期开营

              刁架构

              架构师

              「首度揭秘」大规模HPC生产环境 IO 特征

              焱融科技

              sds io 高性能 存储 焱融科技

              10分钟了解Flink

              代码诗人

              Mysql常用删除方式比较

              云也退

              MySQL

              Android 通过opencv实现人脸识别,追踪

              sar

              android OpenCV 人脸识别

              “Plus Token”传销主犯被公诉!警惕,区块链不是“取款链”!

              CECBC区块链专委会

              1024讲话 CECBC 区块链技术 人才发展 培训

              你有信息焦虑症吗?

              Neco.W

              学习 创业 知识体系

              我们可能都误解了什么是情商

              董一凡

              情绪

              ARTS_20200529

              凌轩

              Java ARTS 打卡计划

              一个在游戏行业摸爬滚打了十几年的人,为何我对这本书情有独钟

              图灵社区

              游戏开发 游戏制作 世嘉培训教材

              GrowingIO 大数据多维分析自动化测试实践

              GrowingIO技术专栏

              大数据 自动化测试 parewise

              2020智源-京东多模态对话挑战赛开战 产学研联合推动AI技术发展

              DT极客

              Nginx 入门及命令行操作

              子杨

              nginx 运维

              从位图到布隆过滤器

              王坤祥

              位图 布隆过滤器

              Weex开发:页面跳转以及Android端多应用选择窗口的处理

              brave heart

              android Vue 前端 跨平台 Weex

              幂等问题及解决方案

              Joker

              幂等 解决方案

              工厂模式(三)泛型工厂的概念以及示例代码

              LSJ

              Nginx 基础原理和命令行的真相

              子杨

              nginx 运维

              备案问题汇总

              云也退

              网站 备案

              阿里巴巴为什么让初始化集合时必须指定大小?

              王磊

              Java 性能

              Cassandra可调一致性的使用及原理

              老任物联网杂谈

              大数据 分布式 Cassandra 可调一致性

              终于找到了一篇文章!通俗地讲解计算机工作原理

              图灵社区

              cpu 存储器 编译器 计算机工作原理

              为什么你要学习 Go?

              司徒公子

              Go 编程语言 谷歌Google

              图片与标题的Ken Burns动效

              寇云

              CSS css3

              在零售场景中使用 AWS IoT Device Management 处理订单请求-InfoQ