【以下的问题经过翻译处理】 我正在尝试为我们的设备创建一个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