403 禁止错误 POST - Google Cloud IoT

问题描述

尝试访问 Google Cloud IoT API - POST 方法 -

  1. 使用此作为参考,因为我是谷歌云的新手 - https://github.com/GoogleCloudPlatform/java-docs-samples/tree/master/iot/api-client/manager
  2. 我已经创建了一个 Spring Boot 应用程序和一个谷歌帐户。
  3. 通过 CLI 验证了 Google 凭据,并且项目 ID 已与我的项目相关联。
  4. 我已检查分配给我的帐户所有者/管理员的权限。
  5. 我已检查分配的配额 - 没有超过数量

我正在尝试通过 Spring Boot 应用程序的命令行创建注册表,但它抛出以下错误


线程“main”com.goog 中的异常le.api.client.googleapis.json.GoogleJsonResponseException: 403 禁止 发布https://cloudiot.googleapis.com/v1/projects/null/locations/us-central1/registries { “代码”:403, “错误”:[ { "domain": "usageLimits","message": "Cloud IoT API 之前没有在项目 xxxxxxxxxx90 中使用过或者它被禁用了。通过访问 https://console.developers.google.com/apis/api/cloudiot.googleapis.com/overview?project 启用它=xxxxxxxxxx90 然后重试。如果您最近启用了此 API,请等待几分钟,让操作传播到我们的系统并重试。","reason": "accessNotConfigured","extendedHelp": "https://console.developers.google.com" } ],"message": "之前未在项目 xxxxxxxxxx90 中使用过 Cloud IoT API 或它已被禁用。通过访问 https://console.developers.google.com/apis/api/cloudiot.googleapis.com/overview?project=xxxxxxxxxx90 启用它,然后重试。如果您最近启用了此 API,请等待几分钟以使操作传播到我们的系统并重试。",“状态”:“PERMISSION_DENIED” }

我已启用 Cloud IoT API,但仍抛出错误

此外,在控制台日志上,我可以看到以下建议:

您的应用程序已使用来自 Google Cloud SDK 的最终用户凭据进行身份验证。我们建议大多数服务器应用程序改用服务帐户。如果您的应用程序继续使用来自 Cloud SDK 的最终用户凭据,您可能会收到“超出配额”或“API 未启用”错误。有关服务帐户的详细信息,请参阅 https://cloud.google.com/docs/authentication/.

  • 我已经创建了一个服务帐户并通过 CLI 激活了它。它没有帮助。

任何建议,新鲜的观点都受到高度赞赏。如果需要添加任何其他信息,请告诉我。 提前致谢。

解决方法

参考云 IoT 的故障排除 documentation,当用户或应用程序无权发出请求时,我们会收到 PERMISSION_DENIED。

您提供的信息和错误消息表明您的应用程序在使用 Cloud IoT API 进行身份验证时存在问题。您需要 authenticate using a service account 并在您的应用程序中提供正确的凭据。 (即提供正确的 GOOGLE_APPLICATION_CREDENTIALS 变量)

因此,要使用 Cloud IoT,您需要

  • 首先启用 Google Cloud IoT API。
  • 创建凭据 - 服务帐户以将 API 用于您的 应用程序,您还可以为此服务帐号授予角色
  • 为此服务帐户生成一个 json 密钥并将此密钥用于 身份验证。

有关详细信息,请参阅此 link

此外,您还可以直接从 gcloud 命令创建设备注册表。 link