无法在 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