运行GCP IoT Core与Pub/Sub的cloudiot_pubsub_example_server.py代码时遭遇403权限错误求助
解决Cloud IoT Core修改设备配置的403权限错误
这个403错误明确说明运行服务端代码的身份没有权限执行modifyCloudToDeviceConfig操作,下面是具体的排查和解决步骤:
1. 确认服务端使用的身份
首先得搞清楚你的服务端代码是以哪个身份访问GCP API的:
- 如果是本地开发环境,默认会用你
gcloud登录的账号,运行以下命令查看:gcloud config get-value account - 如果是用服务账号运行,检查是否设置了
GOOGLE_APPLICATION_CREDENTIALS环境变量,指向服务账号的密钥文件:echo $GOOGLE_APPLICATION_CREDENTIALS
2. 为身份添加必要权限
你需要给这个身份授予修改Cloud IoT设备配置的权限,有两种常见方式:
方式一:通过GCP控制台操作
- 打开GCP控制台的IAM与管理员页面,找到你的项目
project-aura-249003 - 在成员列表中找到你要授权的账号(本地登录账号或服务账号)
- 点击该账号的编辑按钮,添加以下角色之一:
- Cloud IoT Device Admin:包含所有设备管理权限,适合调试阶段使用
- Cloud IoT Config Editor:仅包含修改设备配置的权限,遵循最小权限原则
方式二:通过gcloud命令行操作
如果是本地登录账号,运行:
gcloud projects add-iam-policy-binding project-aura-249003 \ --member="user:你的账号邮箱" \ --role="roles/cloudiot.deviceAdmin"
如果是服务账号,运行:
gcloud projects add-iam-policy-binding project-aura-249003 \ --member="serviceAccount:你的服务账号邮箱" \ --role="roles/cloudiot.deviceAdmin"
3. 验证权限并重启服务
- 运行以下命令确认权限已生效:
gcloud projects get-iam-policy project-aura-249003 --filter="bindings.members:你的账号标识" - 重启你的服务端代码,重新执行发送配置指令的操作
额外排查点
- 确认服务端代码中使用的
registry_id和device_id和客户端完全匹配(你这里是Linux_PC和linux_pc,注意大小写是否一致) - 如果使用服务账号,确认密钥文件路径正确,且文件本身没有权限问题
内容的提问来源于stack exchange,提问作者Harsha Kada
相关产品推荐
相关产品推荐

