AWS IOT策略文档

时间:2019-06-01 08:31:05

标签: amazon-web-services iot aws-iot

我有一个应用程序,其中每个客户端都有自己的东西,对于每件事,我正在创建证书并将其附加到事物上,同时还将以下策略附加到证书上。

{
  "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": "*"
    }
  ]
}

我在做什么错了?

2 个答案:

答案 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}/*"

这也将有助于您订阅