Google Windows 10 上的云数据存储区身份验证

Google Cloud Datastore Authentication on Windows 10

我正在设置一个可以访问互联网的 windows 10 虚拟机(我在虚拟机内的 chrome 上浏览互联网就很好)。我下载并安装了 google 云 SDK。我 运行 gcloud init,并设置我的帐户和其他选项。它说它成功完成了。我键入 gcloud info,它显示了正确的信息。问题是,当我 运行 我编写的 python 脚本包含 from google.cloud import datastore 时。帐户身份验证存在问题。只有当我尝试这样实例化数据存储客户端时才会发生此错误:client = datastore.Client()。这当然是有道理的。但是,因为我已经执行了gcloud init并通过gcloud info验证了它,所以这里没有设置的是什么?

此外,google auth 库似乎无法正确地向特定服务器发出请求。这是日志输出:

2020-09-27 20:26:30 [google.auth._default] DEBUG: Checking None for explicit credentials as part of auth process...
2020-09-27 20:26:30 [google.auth._default] DEBUG: Checking Cloud SDK credentials as part of auth process...
2020-09-27 20:26:30 [google.auth._default] DEBUG: Cloud SDK credentials not found on disk; not using them
2020-09-27 20:26:30 [google.auth._default] DEBUG: Checking for App Engine runtime as part of auth process...
2020-09-27 20:26:30 [google.auth._default] DEBUG: No App Engine library was found so cannot authentication via App Engine Identity Credentials.
2020-09-27 20:26:30 [google.auth.transport._http_client] DEBUG: Making request: GET http://169.254.169.254
2020-09-27 20:26:33 [google.auth.compute_engine._metadata] WARNING: Compute Engine Metadata server unavailable onattempt 1 of 3. Reason: timed out
2020-09-27 20:26:33 [google.auth.transport._http_client] DEBUG: Making request: GET http://169.254.169.254
2020-09-27 20:26:36 [google.auth.compute_engine._metadata] WARNING: Compute Engine Metadata server unavailable onattempt 2 of 3. Reason: timed out
2020-09-27 20:26:36 [google.auth.transport._http_client] DEBUG: Making request: GET http://169.254.169.254
2020-09-27 20:26:39 [google.auth.compute_engine._metadata] WARNING: Compute Engine Metadata server unavailable onattempt 3 of 3. Reason: timed out
2020-09-27 20:26:39 [google.auth._default] WARNING: Authentication failed using Compute Engine authentication due to unavailable metadata server.

调用堆栈末尾的实际错误是:

  File "C:\Users\<user>\anaconda3\lib\site-packages\google\auth\_default.py", line 354, in default
    raise exceptions.DefaultCredentialsError(_HELP_MESSAGE)
google.auth.exceptions.DefaultCredentialsError: Could not automatically determine credentials. Please set GOOGLE_APPLICATION_CREDENTIALS or explicitly create credentials and re-run the application. For more information, please see https://cloud.google.com/docs/authentication/getting-started

编辑:请注意,此处提到了日志中列出的 IP 地址: https://serverfault.com/questions/427018/what-is-this-ip-address-169-254-169-254/427022 它看起来像是一个本地唯一的 ip 地址。但这是 st运行ge,因为此 VM 具有 DHCP 分配的 IP 地址,甚至与主机 IP 不同。我正在使用虚拟机。我尝试了两种网络类型设置:桥接适配器和 NAT。两者都不在这里工作。这是 VM 网络的故障还是我没有意识到的其他原因?

我认为在这种情况下,您应该按照错误消息添加 GOOGLE_APPLICATION_CREDENTIALS 以及您的私钥路径。如何获取密钥在错误的link中。

您可能会在 Datastore 文档中找到相同的方法 Accessing your database from another platform

以及 How-to 指南 Getting started with the Firestore in Datastore mode API,其中包含与您的相似的示例,您会发现:

For this example, you'll fetch Application Default Credentials from the environment, and pass it as an argument to create the service object.

您登录到 gcloud 的事实并不意味着您总是在特定机器上通过身份验证。当你是 运行 python 脚本时,你是 运行 与 gcloud 不同的应用程序。这意味着您必须进行身份验证。

对我来说(因为这是一台新机器,我已经在以前的机器上使用了所有 python 代码和 gcp 帐户设置)。问题是在 gcloud init 之后我还需要 运行 gcloud auth application-default login 以及在我的东西开始工作之前。