为 GCP IOT Core 和 PUB/SUB 运行 cloudiot_pubsub_example_server.py 代码时出现 403 错误

Posted

技术标签:

【中文标题】为 GCP IOT Core 和 PUB/SUB 运行 cloudiot_pubsub_example_server.py 代码时出现 403 错误【英文标题】:403 Error while running cloudiot_pubsub_example_server.py code for GCP IOT Core and PUB/SUB 【发布时间】:2021-05-04 06:20:15 【问题描述】:

我正在尝试 GCP Python SDK 的 cloudiot_pubsub_example_server.py 示例代码。为了概述,有两个代码客户端和服务器。客户端发布到 GCP PUB/SUB 中的主题并更新或发布随机温度。服务器订阅此主题并接收温度。服务器还会发布到客户端的配置主题,并在特定温度升高或降低时打开或关闭风扇。

当我使用提供的所有凭据运行这两个代码时,客户端正在发布温度,服务器已订阅并获取临时数据。但是当服务器发布到配置主题并将 FAN 发送到 ON 或 OFF 时,我得到:

执行 ModifyCloudToDeviceConfig 时出错:https://cloudiot.googleapis.com/v1/projects/project-aura-249003/locations/asia-east1/registries/Linux_PC/devices/linux_pc:modifyCloudToDeviceConfig?alt=json 返回“调用者没有权限”。详情:“调用者没有权限”>

为了执行服务器代码,我使用了以下命令:

python3 cloudiot_pubsub_example_server.py --project_id=project-aura-249003 --pubsub_subscription=temp

为了执行客户端代码,我使用了以下命令:

python3 cloudiot_pubsub_example_mqtt_device.py --project_id=project-aura-249003 --registry_id=Linux_PC --device_id=linux_pc --private_key_file=rsa_private.pem --algorithm=RS256 --ca_certs=roots.pem --cloud_region=asia-east1

你可以在这里找到所有执行代码的文件:https://github.com/GoogleCloudPlatform/python-docs-samples/tree/master/iot/api-client/mqtt_example

我也提供了roots.pem文件 请帮我解决这个问题,403 错误与一些身份验证问题有关。

我在这里错过了什么?

【问题讨论】:

【参考方案1】:

确保您已经定义了您的环境变量GOOGLE_APPLICATION_CREDENTIALS='your_service_account_credentials.json',或者在运行cloudiot_pubsub_example_server.py 时包含选项--service_account_json="your_service_account_credentials.json"

您的 python 命令应如下所示:

python3 cloudiot_pubsub_example_server.py --project_id=project-aura-249003 --pubsub_subscription=temp --service_account_json="your_service_account_credentials.json"

同时根据end to end IoT tutorial 仔细检查您的关联服务帐户是否具有EDITOR 角色。

我确实关注了end to end IoT tutorial,没有遇到任何问题。一切都在云壳中完成。在学习本教程之前,我创建了以下内容:

发布/订阅主题 Pub/sub 订阅 设备注册表

运行 cloudiot_pubsub_example_mqtt_device.py

python3 cloudiot_pubsub_example_mqtt_device.py --project_id=my-project-id --registry_id=my-registry --device_id=device-****** --private_key_file=rsa_private.pem --algorithm=RS256 --ca_certs=roots.pem

cloudiot_pubsub_example_mqtt_device.py的输出:

运行 cloudiot_pubsub_example_server.py

python3 cloudiot_pubsub_example_server.py --project_id=my-project-id --pubsub_subscription=my-sub-****** --service_account_json="my_credentials.json"

cloudiot_pubsub_example_server.py 的输出:

【讨论】:

以上是关于为 GCP IOT Core 和 PUB/SUB 运行 cloudiot_pubsub_example_server.py 代码时出现 403 错误的主要内容,如果未能解决你的问题,请参考以下文章

为啥我会收到 50% 的 GCP Pub/Sub 消息重复?

gcp 云函数 pub/sub 主题死信

Spring 数据流和 GCP Pub Sub

GCP Pub/Sub 无法确认消息

如何在 GCP Pub Sub 中配置非持久消息?

为啥 GCP Pub/Sub 订阅无法确认消息?