AWS IoT: ресурс в политике вызывает статус публикации AWS IoT: AUTHORIZATION_ERROR

Я публикую сообщения от датчика температуры в AWS IoT Core с помощью AWSIoTPythonSDK. Когда я явно указываю темы как ресурс в политике сертификатов, я получаю AUTHORIZATION_ERROR в Cloudwatch

Примечание. PrincipleID (имя сертификата) изменено в целях безопасности.

2020-02-22T20:03:48.371-07:00
2020-02-23 03:03:48.371 TRACEID:2a0de6c8-dd28-586e-671f-119de983b5d5 PRINCIPALID:9ec115f5665XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX0d7d6b7 /ERROR/ EVENT:PublishEvent TOPICNAME:topic/tSensor01/tempmon MESSAGE:PublishIn Status: AUTHORIZATION_ERROR Failure reason:AUTHORIZATION_FAILURE
@ingestionTime
1582427034767
@log
549210374177:AWSIotLogs
@logStream
a2d5c94d-f908-4e76-bd9e-3627976e8b72_549210374177_0
@message
2020-02-23 03:03:48.371 TRACEID:2a0de6c8-dd28-586e-671f-119de983b5d5 PRINCIPALID:9ec115f5665XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX0d7d6b7 /ERROR/ EVENT:PublishEvent TOPICNAME:topic/tSensor01/tempmon MESSAGE:PublishIn Status: AUTHORIZATION_ERROR Failure reason:AUTHORIZATION_FAILURE

Вот моя политика сертификатов (показывающая только iot: Publish), которая вызывает AUTHORIZATION_ERROR

"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:Publish",
"iot:Receive"
],
"Resource": [
"arn:aws:iot:<region>:<account id>:topic/${iot:Connection.Thing.ThingName}/*",
"arn:aws:iot:<region>:<account id>:topic/${iot:ClientId}/*",
"arn:aws:iot:<region>:<account id>:topic/tSensor01/*",
"arn:aws:iot:<region>:<account id>:topic/tSensor01/tempmon"
]
},

Однако, чтобы изолировать проблему, я использовал метод грубой силы (неприемлемо), добавив следующую строку arn: aws: iot ::: * в политику, и сообщения с устройства публикуются.

{
"Effect": "Allow",
"Action": [
"iot:Publish",
"iot:Receive"
],
"Resource": [
"arn:aws:iot:<region>:<account id>:topic/${iot:Connection.Thing.ThingName}/*",
"arn:aws:iot:<region>:<account id>:topic/${iot:ClientId}/*",
"arn:aws:iot:<region>:<account id>:topic/tSensor01/*",
"arn:aws:iot:<region>:<account id>:topic/tSensor01/tempmon",
"arn:aws:iot:<region>:<account id>:*"
]
},

Такой метод грубой силы неприемлем, и я хотел бы знать первопричину.

Подключение устройства работает нормально. Так что можно с уверенностью предположить, что мои учетные данные не являются проблемой

Ниже показана трассировка соединения в журнале Cloudwatch.

2020-02-22T20:03:48.314-07:00
2020-02-23 03:03:48.314 TRACEID:f801f2bb-147f-5c94-2e2e-7d63d7cacd26 PRINCIPALID:9ec115f5665XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX0d7d6b7 /INFO/ EVENT:MQTT Client Connect MESSAGE:Connect Status: SUCCESS
@ingestionTime
1582427034767
@log
549210374177:AWSIotLogs
@logStream
a2d5c94d-f908-4e76-bd9e-3627976e8b72_549210374177_0
@message
2020-02-23 03:03:48.314 TRACEID:f801f2bb-147f-5c94-2e2e-7d63d7cacd26 PRINCIPALID:9ec115f5665XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX0d7d6b7 /INFO/ EVENT:MQTT Client Connect MESSAGE:Connect Status: SUCCESS

Спасибо


person moron    schedule 29.02.2020    source источник
comment
Можете ли вы поделиться всей политикой, чтобы исключить что-то еще?   -  person Ben T    schedule 04.03.2020
comment
Спасибо за проявленный интерес. Мне удалось решить проблему. Смотрите мой ответ.   -  person moron    schedule 16.03.2020


Ответы (1)


Мне удалось решить проблему. В политике сертификатов проблем не было. Проблема заключалась в аргументе, который я передавал AWS Device SDK. Я передавал topic / tSensor01 / tempmon. Вместо этого, когда я передавал tSensor01 / tempmon в SDK, проблема была решена. topic можно рассматривать как услугу, и ее НЕ следует передавать в SDK.

person moron    schedule 16.03.2020