在 IoT Policy 的资源區块中使用字符串连接策略变量时出现问题。

0

【以下的问题经过翻译处理】 我正在尝试为我们的设备创建一个IoT策略,并且我遇到了授权两个客户端连接的问题。我们的每个设备将建立两个不同的连接,一个“主”连接用于发布数据到主题,另一个连接用于处理设备的阴影。以下是我的策略中的相关块:

{
    "Effect": "Allow",
    "Action": [
        "iot:Connect"
    ],
    "Resource": [
        "arn:aws:iot:us-east-2:<account_id>:client/${iot:Connection.Thing.ThingName}",
        "arn:aws:iot:us-east-2:<account_id>:client/${iot:Connection.Thing.ThingName}_shadow_client"
    ]
}

“主”连接使用设备的ThingName作为MQTT连接clientId,我连接客户端时没有任何问题。问题出现在我的第二个“shadow”客户端上,我正在使用ThingName +“_shadow_client”作为MQTT连接clientId。出于某种原因,上述策略不适用于该客户端,因为当它尝试连接时,在CloudWatch中会得到以下日志:

{
    "timestamp": "2022-02-07 19:08:58.979",
    "logLevel": "ERROR",
    "traceId": "<trace>",
    "accountId": "<account_id>",
    "status": "Failure",
    "eventType": "Connect",
    "protocol": "MQTT",
    "clientId": "test_shadow_client",
    "principalId": "<principle_id>",
    "sourceIp": "<source_ip>",
    "sourcePort": <source_port>,
    "reason": "AUTHORIZATION_FAILURE",
    "details": "Authorization Failure"
}

我的设备的ThingName为test,我的代码正确将MQTT clientId设置为test_shadow_client(顺便说一下,我正在使用C++ V2 SDK)。我还测试了将策略中的“阴影”客户端资源手动设置为`“arn:aws:iot:us-east-2:<account_id

profile picture
专家
已提问 5 个月前19 查看次数
1 回答
0

【以下的回答经过翻译处理】 设备名称是从MQTT连接訊息的客户端ID获取的,当设备连接到AWS IoT Core时发送该訊息。

当你使用设备策略变量替换设备名称时,MQTT连接消息中的clientId或TLS连接的值必须与设备名称完全匹配。
profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则