Как использовать шаблон политики AWS IoT с ресурсом заданий для iot: Опубликовать

#aws-iot

#aws-iot

Вопрос:

Как я могу разрешить все задания, а не конкретное название задания, для «iot: Публикация» со своего устройства?

Я понятия не имею, разрешать ли подстановочный знак или * темы обновления заданий для «iot: публикация».

Но я могу использовать его для «iot: подписка» и «iot: получение».

Политика AWS IoT:

для «iot: Публикация»

 {
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "iot:Publish",
      "Resource": [
        "arn:aws:iot:xxx:xxx:topic/$aws/things/${iot:ClientId}/jobs/start-next",
        "arn:aws:iot:xxx:xxx:topic/$aws/things/${iot:ClientId}/jobs/ota-20190401/update"  <- (A)allow publishing
        "arn:aws:iot:xxx:xxx:topic/$aws/things/${iot:ClientId}/jobs/ /update"  <- (B)not allow publishing
      ]
    }
  ]
}
  

для «iot: подписка»

 {
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "iot:Subscribe",
      "Resource": [
        "arn:aws:iot:xxx:xxx:topicfilter/$aws/things/${iot:ClientId}/jobs/notify-next",
        "arn:aws:iot:xxx:xxx:topicfilter/$aws/things/${iot:ClientId}/jobs/start-next/accepted",
        "arn:aws:iot:xxx:xxx:topicfilter/$aws/things/${iot:ClientId}/jobs/start-next/rejected",
        "arn:aws:iot:xxx:xxx:topicfilter/$aws/things/${iot:ClientId}/jobs/ /update/accepted",  <- allow subscribing
        "arn:aws:iot:xxx:xxx:topicfilter/$aws/things/${iot:ClientId}/jobs/ /update/rejected"  <- allow subscribing
      ]
    }
  ]
}
  

Я получил AWSIoTPythonSDK.исключение.AWSIoTExceptions.Исключение publishTimeoutException на моем устройстве в случае (B) политики.

Ответ №1:

Согласно https://docs.aws.amazon.com/iot/latest/developerguide/pub-sub-policy.html ‘ ‘ или ‘#’ обрабатываются как буквенный символ. Вы можете использовать ‘*’ в качестве подстановочного знака, но имейте в виду, что ‘*’ будет соответствовать любым символам в теме (буквам, цифрам, косой черте и т.д.)

Комментарии:

1. Спасибо! Я нашел MQTT wildcard characters " " and "#" are treated as literal characters. Their use might result in unexpected behavior. и You can use * as a wildcard in the resource attribute of the policy. For example, if each device in your account must publish on a unique topic reserved for it alone, use the following policy в приведенном выше URL.