【发布时间】:2021-10-03 01:22:51
【问题描述】:
尝试访问 Google Cloud IoT API - POST 方法 -
- 使用此作为参考,因为我是谷歌云的新手 - https://github.com/GoogleCloudPlatform/java-docs-samples/tree/master/iot/api-client/manager
- 我已经创建了一个 Spring Boot 应用程序和一个 google 帐户。
- 通过 CLI 验证的 google 凭据和项目 ID 已与我的项目相关联。
- 我已检查分配给我的帐户的权限,它是所有者/管理员。
- 我检查了分配的配额 - 没有超过数量。
我正在尝试通过我的 Spring Boot 应用程序的命令行创建注册表,但它抛出以下错误:
线程“main”com.goog中的异常le.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden 发布https://cloudiot.googleapis.com/v1/projects/null/locations/us-central1/registries { “代码”:403, “错误”:[ { “域”:“使用限制”, "message": "Cloud IoT API 之前没有在项目 xxxxxxxxxx90 中使用过或被禁用。通过访问 https://console.developers.google.com/apis/api/cloudiot.googleapis.com/overview?project 启用它=xxxxxxxxxx90 然后重试。如果您最近启用了此 API,请等待几分钟让该操作传播到我们的系统并重试。", "原因": "accessNotConfigured", "extendedHelp": "https://console.developers.google.com" } ], "message": "Cloud IoT API 之前没有在项目 xxxxxxxxxx90 中使用过或被禁用。通过访问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 激活了它。这没有帮助。
高度赞赏任何建议,新鲜的观点。如果需要添加任何其他信息,请告诉我。 提前致谢。
【问题讨论】:
-
在您的 Spring Boot 应用程序中,您如何验证客户端并发送请求?您是否在创建时将服务帐户密钥文件传递给客户端对象?在您创建客户端对象并在代码中发送请求的位置发布一些代码将有助于调试正在发生的事情。我的猜测是没有看到它,您依赖于默认应用程序凭据并且没有明确地将您的服务帐户密钥传递给应用程序。当您说“我也创建了一个服务帐户并通过 CLI 激活它”时。这是否意味着您运行了 gcloud init?
-
@GabeWeiss 抱歉延迟回复。谢谢您的答复。您的一系列问题帮助我弄清楚了我在初始配置期间错过的步骤。我已经运行了这个命令 - “gcloud auth activate-service-account test-service-account@google.com --key-file=/path/key.json --project=testproject”。我希望这已经足够了,而不是运行“gcloud init”命令。我已经纠正了我的错误,现在不再出现上述错误。
-
@SakshiGatyan 对延迟回复表示歉意。谢谢您的答复。我试图传递生成的 json 密钥,但如上所述,我错过了 gcloud init 步骤。另外,我试图通过代码创建注册表。
-
是的!请注意这个顺便说一句,通过 gcloud init 使用默认应用程序凭据意味着您使用的是用户凭据,而不是服务帐户。这意味着该进程正在以您的用户身份运行。这并不可怕,但最佳做法是使用服务帐户而不是用户凭据,因此如果您需要将应用程序移植到其他可能无法运行
gcloud init的地方,则可以将其移植。
标签: spring-boot github google-cloud-platform spring-boot-maven-plugin google-cloud-iot