我有一个应用程序,其中每个客户端都有自己的东西,对于每件事,我正在创建证书并将其附加到事物上,同时还将以下策略附加到证书上。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "iot:*",
"Resource": ["arn:aws:iot:us-east-1:*********:topic/${iot:Connection.Thing.ThingName}"]
}
]
}
我想做的是限制一个客户访问其他客户的事物,并且每个客户都可以完全访问其事物主题。
以上政策无效,客户端根本无法连接。 但是,以下功能(就功能而言)是可行的,但是客户端可以发布到所有主题。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "iot:*",
"Resource": "*"
}
]
}
我在做什么错了?
答案 0 :(得分:1)
该策略需要一个明确的iot:Connect
语句,以允许连接到client
资源。
相关的client
资源在https://docs.aws.amazon.com/iot/latest/developerguide/action-resources.html上的记录为
客户端ID ARN-arn:aws:iot:us-east1:123456789012:client / myClientId
对于在AWS IoT注册表中注册的事物,您可以使用:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "iot:Connect",
"Resource": ["arn:aws:iot:us-east-1:*********:client/${iot:Connection.Thing.ThingName}"]
},
{
"Effect": "Allow",
"Action": "iot:*",
"Resource": ["arn:aws:iot:us-east-1:*********:topic/${iot:Connection.Thing.ThingName}"]
}
]
}
例如此示例将允许客户端ID为ThingId123
的事物发布到名为ThingId123
的主题。
另请参阅https://docs.aws.amazon.com/iot/latest/developerguide/pub-sub-policy.html,以获取与您的需求紧密相关的示例。
答案 1 :(得分:0)
我自己在尝试细粒度的政策后, 可接受的答案应该是您只是在主题末尾忘记了 / * ,因为AWS对主题资源使用了更多的嵌套
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:Connect"
],
"Resource": [
"arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}",
]
}
{
"Effect": "Allow",
"Action": [
"iot:Publish"
],
"Resource": [
"arn:aws:iot:us-east-1:123456789012:topic/${iot:Connection.Thing.ThingName}/*"
]
}
]
}
您可以读到的是here:
也代替
"Resource": [ "arn:aws:iot:us-east-1:123456789012:topic/${iot:Connection.Thing.ThingName}/*"
你可以做
"Resource": [ "arn:aws:iot:us-east-1:123456789012:*/${iot:Connection.Thing.ThingName}/*"
这也将有助于您订阅