【问题标题】:AWS IoT: Resource in policy cause AWS IoT PublishIn Status: AUTHORIZATION_ERRORAWS IoT:策略中的资源导致 AWS IoT PublishIn 状态:AUTHORIZATION_ERROR
【发布时间】:2020-03-16 11:13:39
【问题描述】:

我正在使用 AWSIoTPythonSDK 将消息从温度传感器发布到 AWS IoT Core。当我在证书策略中将主题明确指定为资源时,我在 Cloudwatch 中收到 AUTHORIZATION_ERROR

注意:为安全起见,更改了 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

这是导致 AUTHORIZATION_ERROR 的证书策略(仅显示 iot:Publish)

"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

谢谢

【问题讨论】:

  • 您能否分享整个政策以帮助排除其他问题?
  • 感谢您的关注,我能够解决这个问题。看我的回答。

标签: python amazon-web-services iot policy aws-iot


【解决方案1】:

我能够解决问题。证书策略没有问题。问题是我传递给 AWS Device SDK 的论点。我正在传递 topic/tSensor01/tempmon 而当我将 tSensor01/tempmon 传递给 SDK 时,它解决了问题。 topic 可以被认为是一种服务,不应该传递给 SDK

【讨论】:

    猜你喜欢
    • 2020-06-30
    • 1970-01-01
    • 1970-01-01
    • 2018-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-16
    相关资源
    最近更新 更多