物联网平台服务端订阅功能支持通过RAM角色授权跨账号操作,即使用企业A的阿里云主账号创建RAM角色并为该角色授权,将该角色赋予企业B阿里云主账号,即可实现使用企业B的主账号或其RAM用户访问企业A的服务端订阅消息。
背景信息
STS(Security Token Service)是阿里云提供的一种临时访问权限管理服务。RAM提供RAM用户和RAM角色两种身份。
RAM角色是一种虚拟用户,可以被授予一组权限策略。与RAM用户不同,RAM角色没有确定的登录密码或访问密钥,它需要被一个可信的实体用户(RAM用户、阿里云服务或身份提供商)扮演。扮演成功后实体用户将获得RAM角色的临时身份凭证,即安全令牌(STS Token),使用安全令牌就能以RAM角色身份访问被授权的资源。
了解STS的功能特性和优势,请参见什么是STS。
应用场景
企业A阿里云账号开通了阿里云物联网平台来开展业务,希望将服务端订阅的设备上报消息授权给企业B阿里云账号服务端消费,做进一步的业务处理。
解决方案
企业A需要授予企业B的员工对物联网平台服务端订阅资源进行操作。假设企业A和企业B分别有一个阿里云主账号A和阿里云主账号B,需要完成以下操作完成企业A和企业B的跨云账号授权及资源访问。
阿里云主账号A创建一个RAM角色,并为RAM角色授予对应的服务端订阅权限,然后允许阿里云主账号B下的RAM用户扮演该角色。
RAM角色授权完成后,阿里云主账号B下的RAM用户通过扮演阿里云主账号A的RAM角色可获取该角色对应的权限。
步骤一:创建RAM角色并授权
创建可信实体为阿里云账号的RAM角色:企业A使用阿里云主账号A登录RAM控制台,为企业B的阿里云主账号B创建RAM角色。
角色可信实体的阿里云账号选择其他云账号,设置为企业B的阿里云主账号ID。
通过脚本编辑模式创建自定义权限策略:企业A使用阿里云主账号A创建自定义权限策略。
服务端订阅授权操作Action为
iot:sub
,权限策略内容如下:{ "Statement": [ { "Action": "iot:sub", "Effect": "Allow", "Resource": "*" } ], "Version": "1" }
为RAM角色授权:企业A使用阿里云主账号A为刚创建的RAM角色添加上一步创建的自定义权限策略。
为RAM用户授权:企业B使用阿里云主账号B为上一步创建的RAM用户,添加AliyunSTSAssumeRoleAccess权限,使阿里云主账号B的RAM用户可以扮演企业A阿里云主账号A的RAM角色。
步骤二:跨账号接收AMQP服务端订阅消息
配置AMQP服务端订阅:企业A使用阿里云账号登录物联网平台控制台,配置AMQP服务端订阅设备上报数据。
开发AMQP客户端接收服务端订阅消息:企业B开发AMQP客户端接入企业A阿里云账号的物联网平台,接收企业A物联网平台下服务端订阅的设备消息。