无法在 python 中使用 gcs 进行身份验证

Posted

技术标签:

【中文标题】无法在 python 中使用 gcs 进行身份验证【英文标题】:can not authenticate with gcs in python 【发布时间】:2014-08-20 00:56:40 【问题描述】:

我正在关注https://developers.google.com/storage/docs/gspythonlibrary#credentials中的示例

我通过在开发中选择创建了客户端/秘密对。控制台“创建新的客户端 ID”、“已安装的应用程序”、“其他”。

我的 python 脚本中有以下代码:

import boto
from gcs_oauth2_boto_plugin.oauth2_helper import SetFallbackClientIdAndSecret
CLIENT_ID = 'my_client_id'
CLIENT_SECRET = 'xxxfoo'
SetFallbackClientIdAndSecret(CLIENT_ID, CLIENT_SECRET)

uri = boto.storage_uri('foobartest2014', 'gs')
header_values = "x-goog-project-id": proj_id
uri.create_bucket(headers=header_values)

它失败并出现以下错误:

   File "/usr/local/lib/python2.7/dist-packages/boto/storage_uri.py", line 555, in create_bucket
      conn = self.connect()
    File "/usr/local/lib/python2.7/dist-packages/boto/storage_uri.py", line 140, in connect
      **connection_args)
    File "/usr/local/lib/python2.7/dist-packages/boto/gs/connection.py", line 47, in __init__
      suppress_consec_slashes=suppress_consec_slashes)
    File "/usr/local/lib/python2.7/dist-packages/boto/s3/connection.py", line 190, in __init__
      validate_certs=validate_certs, profile_name=profile_name)
    File "/usr/local/lib/python2.7/dist-packages/boto/connection.py", line 572, in __init__
      host, config, self.provider, self._required_auth_capability())
    File "/usr/local/lib/python2.7/dist-packages/boto/auth.py", line 883, in get_auth_handler
      'Check your credentials' % (len(names), str(names)))
  boto.exception.NoAuthHandlerFound: No handler was ready to authenticate. 3 handlers were checked. ['OAuth2Auth', 'OAuth2ServiceAccountAuth', 'HmacAuthV1Handler'] Check your credentials

【问题讨论】:

你有没有想过尝试 gcloud-python (github.com/GoogleCloudPlatform/gcloud-python) ?可能比使用 boto 更容易 【参考方案1】:

过去几天我一直在为此苦苦挣扎,结果发现是 boto 的东西,而 gspythonlibrary 已经完全过时了。

展示如何使用/验证 Google Cloud Storage 的最新示例代码如下: https://github.com/GoogleCloudPlatform/python-docs-samples/tree/master/storage/api

【讨论】:

为什么你认为它已经过时了?它仍然出现在这里:cloud.google.com/storage/docs/xml-api/gspythonlibrary 是的,那个文档已经过时了。如果您尝试使用最新版本的 gcloud 按照这些说明进行操作,它将完全失败。那里描述的整个 boto 系统得到了更长时间的支持(或至少强烈反对) 感谢@griffin2000,我浪费了数小时查看他们的文档并打开支持票,直到找到您的评论。 2 分钟后我启动并运行......我不敢相信他们仍在托管 BAD/WRONG 文档。没有文档比错误的文档更好。【参考方案2】:

您需要在.boto 文件中提供客户端/密码对,然后运行gsutil config

它将创建一个刷新令牌,然后应该可以工作!

欲了解更多信息,请参阅https://developers.google.com/storage/docs/gspythonlibrary#credentials

【讨论】:

为什么我们需要在boto文件和源代码中同时指定client_id和client_secret? 查看@griffin2000 的回答,boto 已过时,Google 将无处可去。【参考方案3】:

U还可以为gsutil命令认证和gsutil cp, rm, gsutil config -a通过控制台应用程序传递到云SDK然后执行的控制台应用程序

【讨论】:

以上是关于无法在 python 中使用 gcs 进行身份验证的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有?authuser = 1的情况下获得经过身份验证的GCS URL

无法使用 python minds api 进行身份验证

由于身份验证,gsutil 无法复制到 s3

无法在 python 中对 Google Cloud Storage 客户端进行身份验证

如何通过命令行使用 hmac 密钥对存储桶进行身份验证

如何使用Python 2.7对YoBit API进行身份验证?