Как запретить вещи AWS-IoT публиковать / подписываться на некоторые разделы в AWS IoT-Core?

#aws-iot

#aws-iot

Вопрос:

Я динамически создаю AWS-IoT, который может публиковать любую тему и может прослушивать любую тему в AWS-IoT-core broker.

Политика, которую я использую, очень широкая, и эта вещь может выполнять все операции на сервере:

 {
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "iot:*",
      "Resource": "*"
    }
  ]
}
  

Теперь я хочу сузить эти параметры. Я хочу разрешить этой вещи просто публиковать в темах TOPICS-TEST/# и подписываться ТОЛЬКО на темы TOPICS-TEST/# . Несмотря на то, что у нас много разных разделов в брокере, я хочу, чтобы у этой вещи был доступ только к темам, с которых начинается TOPICS-TEST/ .

Для этого я проверил эту документацию и создал эту политику:

 {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:xxxx:client/${iot:Connection.Thing.ThingName}"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Subscribe"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:xxxx:topicfilter/TOPICS-TEST/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Receive"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:xxxx:topicfilter/TOPICS-TEST/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:xxxx:topicfilter/TOPICS-TEST/*"
            ]
    }
    ]
}
  

Предыдущая политика не работает.
Я ничего не вижу, я ничего не могу опубликовать.
Чего мне не хватает?

Ответ №1:

Я придумал, как это сделать

 {
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iot:Connect"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "iot:Subscribe"
      ],
      "Resource": [
        "arn:aws:iot:us-east-1:xxxxxxxx:topicfilter/TOPICS-TEST*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "iot:Receive"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "iot:Publish"
      ],
      "Resource": [
        "arn:aws:iot:us-east-1:xxxxxxxx:topic/TOPICS-TEST/*"
      ]
    }
  ]
}
  

Предыдущая политика позволит объекту получать уведомления от AWS-IoT core, подключаться, переходить ТОЛЬКО к подтемам TOPICS-TEST/ ... и подписываться на TOPICS-TEST/... . Это крыло не сможет просматривать другие разделы в этом брокере.

Я использовал ...:topicfilter/... для публикации. Должно быть ...:topic/... .

Ответ №2:

Я согласен с решением, но что, если у вас есть миллионы вещей и разные темы для разных теней. Должны ли мы присоединять все устройства к этой политике.

На мой взгляд, я считаю, что должна быть какая-то политика IAM, которая должна быть применима в этом случае. Я нахожу этот обучающий проект очень полезным.

https://youtu.be/1Pk05kpBX2A