我正在寻找一种方法来验证认知用户对AWS IoT服务的身份,这样用户就可以订阅MQTT主题名作为唯一的用户id (身份池的名称)。我知道使用2 step process是可以实现的。
我不知道的是一个特定的策略,我们需要将它附加到认知标识(也就是用户),该策略必须限制用户订阅他/她的用户id作为MQTT主题。这意味着应用程序不能订阅任何其他意想不到的主题。
此外,该策略需要是动态的(可能使用${cognito Idty.amazonaws.com:sub}和条件)来简化开发。
值得注意的是,用户可以同时登录多个移动应用程序实例(Android和iOS),如果用户同时登录到Android和iOS,则两个app实例都应该能够订阅相同的主题(因为相同用户的用户id将保持不变)。
发布于 2020-07-01 14:07:42
终于,我解决了。分享解决方案,如果它可以帮助别人。这些步骤如下:
{“版本”:"2012-10-17“、”声明“:[{ "Sid":"Stmt1232909773123”、“行动”:“物联网:连接”、“物联网:接收”、“物联网:订阅”、“效果”:“允许”、“资源”:“*}] }
{“版本”:"2012-10-17“、”声明“:[{”效果“:”允许“、”行动“:”物联网“、”资源“:”arn:aws:物联网:us 1::client/*“}、{”效果“:”允许“、”行动“:”物联网:接收“,“资源”:"arn:aws:iot:us-east-1::topic/${cognito-identity.amazonaws.com:sub}“},{”效果“:”允许“,”操作“:”物联网:订阅“,”资源“:"arn:aws:iot:us-east-1::topicfilter/${cognito-identity.amazonaws.com:sub}”} }
注意:对于#2,您需要将您的AWS帐号放在策略中。
发布于 2021-03-04 06:34:58
在这个问题上花了很多时间。MQTT IoT策略中有关变量替换的文档和错误处理不是很好。下面这句话对我也很管用。如果您使用的是认知联邦身份,请确保将IoT策略添加到经过身份验证的用户角色中。最后注意:${cognito-identity.amazonaws.com:sub}从认知开发人员身份解析到identityId,而不是用户池或JWT。无论如何,希望这能帮到别人。
认知认证角色策略备注:这是过于宽松的-根据需要进行细化。
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"iot:*"
],
"Effect": "Allow",
"Resource": "*"
}
]
}MQTT IoT策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "iot:Connect",
"Resource": "arn:aws:iot:us-east-1:<account-id>:client/*"
},
{
"Effect": "Allow",
"Action": [
"iot:Publish",
"iot:Receive"
],
"Resource": [
"arn:aws:iot:us-east-1:<account-id>:topic/${cognito-identity.amazonaws.com:sub}/*"
]
},
{
"Effect": "Allow",
"Action": [
"iot:Subscribe"
],
"Resource": [
"arn:aws:iot:us-east-1:<account-id>:topicfilter/${cognito-identity.amazonaws.com:sub}/*"
]
}
]
}https://stackoverflow.com/questions/62454182
复制相似问题