【问题标题】:AWS iot policy still allow other topics to access via mqttAWS iot 策略仍然允许其他主题通过 mqtt 访问
【发布时间】:2020-07-29 20:32:39
【问题描述】:

我试图只允许在通过 aws 物联网核心中的 mqtt 订阅和发布期间使用在 aws 内联物联网策略中指定的那些主题。但它似乎也允许其他主题。

例如,这不应该工作 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"
      ]
    }
  ]
}

【问题讨论】:

  • 您如何测试发布?有没有可能你的保单没有被使用?也许尝试将iot:Publish 上的Effect 显式更改为Deny 以确认。
  • @BenT 我正在使用 mosquitto mqtt 发布。通过替换拒绝它正在工作。但不是允许
  • @BenT 通过替换 Deny 现在它拒绝所有主题,似乎 * 正在工作而不是资源中的应用主题
  • 您的证书的 Subject.CommonName 中是否有 *?

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


【解决方案1】:

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

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

【讨论】:

  • 谢谢。但我没有在订阅和发布中使用任何通配符。这只是一个假设,如果我定义拒绝它会在所有主题中显示一个错误,即使我已经指定了主题,通过指定允许也是如此
  • 像"arn:aws:iot:eu-central-1:123456789:topic/mytopic/test/+/+/+/publish2" 这样的主题条目有+ 通配符。这些不支持发布。
  • 您还可以启用 IoT 核心日志记录并从 cloudwatch 转储相关日志条目吗?对 Allow 和 Deny 情况都执行此操作。这将有助于诊断问题。
  • 该策略现在运行良好。使用 qos:1 进一步检查,yes + 不支持。谢谢
  • 您可以在同一策略中针对不同主题同时拥有 Allow 和 Deny。但最终您可能需要限制您的主题和/或更改主题层次结构以解决如何实施您的政策。
猜你喜欢
  • 2020-11-23
  • 1970-01-01
  • 1970-01-01
  • 2015-03-21
  • 1970-01-01
  • 1970-01-01
  • 2018-08-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多