AWS 物联网策略仍然允许其他主题通过 mqtt 访问

AWS iot policy still allow other topics to access via mqtt

我试图只允许在 aws iot 核心中通过 mqtt 订阅和发布期间使用那些在 aws inline iot 策略中指定的主题。但看起来它也允许其他主题。

例如,这应该行不通 mytopic/test/test-123/publish123(但它的工作原理)因为未指定 publish123

下面是一个内联策略

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iot:Connect"
      ],
      "Resource": "arn:aws:iot:eu-central-1:123456789:client/${iot:Certificate.Subject.CommonName}"
    },
    {
      "Effect": "Allow",
      "Action": [
        "iot:Subscribe"
      ],
      "Resource": [
        "arn:aws:iot:eu-central-1:123456789:topicfilter/mytopic/test/${iot:Certificate.Subject.CommonName}/subsricption",
        "arn:aws:iot:eu-central-1:123456789:topicfilter/mytopic/test/+/+/+/subsricption"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "iot:Receive"
      ],
      "Resource": "arn:aws:iot:eu-central-1:123456789:topic/io/ksb/m2c/${iot:Certificate.Subject.CommonName}/*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "iot:Publish"
      ],
      "Resource": [
        "arn:aws:iot:eu-central-1:123456789:topic/mytopic/test/${iot:Certificate.Subject.CommonName}/publish1",
        "arn:aws:iot:eu-central-1:123456789:topic/mytopic/test/${iot:Certificate.Subject.CommonName}/publish2",
        "arn:aws:iot:eu-central-1:123456789:topic/mytopic/test/+/+/+/publish2",
        "arn:aws:iot:eu-central-1:123456789:topic/mytopic/test/${iot:Certificate.Subject.CommonName}/subsricption",
        "arn:aws:iot:eu-central-1:123456789:topic/mytopic/test/+/+/+/subsricption"
      ]
    }
  ]
}

MQTT 通配符仅在主题过滤器中受支持(topicFilter 而不是 topic)。主题过滤器仅用于政策的 subscribe 部分。

这意味着政策的发布部分需要在列出主题时更加规范,不能使用 +#。主题资源允许您根据 IAM 用法使用 * 通配符。这在匹配时就像一个贪婪的 .* 正则表达式。