我想知道是否有人有关于处理策略的亚马逊网络服务IoT的最佳实践的想法,例如,我们可能有两种不同的情况:
案例1:调用一个动态创建策略的lambda( identity -id as param),然后将该策略附加到标识id。策略将包含硬编码的事物名称,例如:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "iot:Connect",
"Resource": "arn:aws:iot:us-west-2:XXXX:client/hardcodedClient1"
},
{
"Effect": "Allow",
"Action": [
"iot:Publish",
"iot:Subscribe",
"iot:Receive"
],
"Resource": [
"arn:aws:iot:us-west-2:XXXX:topic/$aws/things/THINGNAME1/*",
"arn:aws:iot:us-west-2:XXXX:topicfilter/$aws/things/THINGNAME1/*"
]
}
]
}案例2:通过使用诸如${iot:ClientId}、${iot:ThingName}等策略变量,我们可以将单个策略附加到所有congito-identity-users;
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "iot:Connect",
"Resource": "arn:aws:iot:us-west-2:XXXX:client/${iot:ClientId}"
},
{
"Effect": "Allow",
"Action": [
"iot:Publish",
"iot:Subscribe",
"iot:Receive"
],
"Resource": [
"arn:aws:iot:us-west-2:XXXX:topic/$aws/things/${iot:Connection.Thing.ThingName}/*",
"arn:aws:iot:us-west-2:XXXX:topicfilter/$aws/things/${iot:Connection.Thing.ThingName}/*"
]
}
]
}所以,问题是。那么,哪一种是最佳实践,而且它们都是安全的,因为Cognito用户只能与他自己的设备交互?
发布于 2017-09-22 11:29:23
案例2使用策略变量是推荐的方法。
它减少了要处理的策略的数量,并保持了它们的意义和可重用性。好的一面是,通过不使用lambda并每次都创建策略,它将节省一些额外的金钱和时间!
就安全性而言,它与策略中的策略变量无关,它最终是操作策略允许或拒绝的内容,因为策略变量会根据谁正在尝试执行操作而动态解析,然后它与您的硬编码策略相同。
发布于 2018-12-07 20:27:43
第二种情况更好。您还可以使用带有适当IAM策略的Cognito Federated Pool实现身份验证机制,并以适当的权限在IoT策略中使用${cognito-identity.amazonaws.com:sub}变量(只需记住将此策略附加到您的Cognito identityId)。
如果您客户端从浏览器连接,最好不要使用iot:ClientId,因为clientId必须是唯一的,这样用户将无法打开多个浏览器选项卡。
https://stackoverflow.com/questions/46287046
复制相似问题