AWS IoT Core 与 Google Cloud Function 的 HTTP 规则操作集成

0

【以下的问题经过翻译处理】 我已经使用 HTTP 触发器创建了一个简单的 Google Cloud Function,并授予了必要的权限来监听外部请求。

我正在使用 MQTT 测试客户端在特定主题名称下发布主题(截至目前我还没有在 IoT Core 中注册设备)。我在这里想要实现的是在规则引擎的帮助下重新发布此消息。

因此,我首先创建一个带有 HTTP 端点的规则作为 IoT 规则的操作,并附加所有策略并为此规则提供所需的权限。 HTTP 端点是上面提到的 Google Cloud Function 的 URL。我已经使用 AWS 发送到 GCFunction 的令牌确认并激活了端点。

我已经从 AWS 访问资源所需的 GCFunction 生成了一个身份验证令牌,并将其保存在标头下的 IoT 规则中,作为“授权:Bearer [$token]”。

预期结果:当我从测试客户端发布一条消息时,它应该在 GCFunction 的日志中显示该消息。

实际结果:我看到 403 和 401 错误。说明请求无权调用此服务。

我认为 GCFunction 端的一切都很好,因为我用 Postman 对其进行了测试并获得了预期的结果。但不适用于 AWS IoT 规则。是这种集成是不可能的,还是目前 AWS 没有提供。或者我错过了什么。

有人可以帮我理解这个吗? 谢谢!AWS IoT Core 与 Google Cloud Function 的 HTTP 规则操作集成

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

【以下的回答经过翻译处理】 基于您提供的Postman示例(如上所述-感谢!):

"https://xxxxx-test-function-invoked-b-xxxxx-xx.x.run.app"(x =模糊数据)-这是我需要触发的Google Cloud函数的URL。

除此之外,我还使用Bearer令牌进行授权;Body = {"Hello": "from postman"}; 自动生成的7个标头,包括Content-Type;Content-Length;Host;User-Agent;Accept;Acceept-Encoding;Connection。

最有可能是Bear令牌用于授权引起了问题。AWS IoT Core规则HTTP操作将需要将Bearer令牌包含在规则的一部分中。这是有问题的,因为访问令牌将有一个生命周期,并需要更新。 HTTP Action可以从消息有效载荷中提取值,但我认为设备不会拥有它。

下面的评论中的详细信息可以解决这个问题

static_header_keysubstitutable_header_key是占位符。例如,Authorization:Bearer token_contents在规则中会像这样显示:

        "actions": [
            { 
                "http": { 
                    "url": "https://www.example.com/subpath",
                    "headers": [
                        { 
                            "key": "Authorization", 
                            "value": "Bearer token_contents" 
                        }
                    ] 
                } 
            }
        ]
profile picture
专家
已回答 5 个月前

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

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

回答问题的准则