首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用libcloud GCE驱动程序进行身份验证

无法使用libcloud GCE驱动程序进行身份验证
EN

Stack Overflow用户
提问于 2016-11-17 20:59:46
回答 1查看 265关注 0票数 0

我正在尝试使用libcloud (1.3.0)通过以下代码连接到我的GCE项目:

代码语言:javascript
复制
from libcloud.compute.types import Provider
from libcloud.compute.providers import get_driver

USER_ID = "nnnnnnnn@cloudservices.gserviceaccount.com"
KEYFILE = "./xxxxxxx.json"
PROJECT = "project1"

cls = get_driver(Provider.GCE)
driver = cls(USER_ID, KEYFILE, project = PROJECT)

在PyCrypto中使用AttributeError (我运行的是2.6.1版)就会失败:

代码语言:javascript
复制
Traceback (most recent call last):
  File "g.py", line 9, in <module>
    driver = cls(USER_ID, KEYFILE, project = PROJECT)
  File "/usr/lib/python2.7/site-packages/libcloud/compute/drivers/gce.py", line 1348, in __init__
    super(GCENodeDriver, self).__init__(user_id, key, **kwargs)
  File "/usr/lib/python2.7/site-packages/libcloud/common/base.py", line 1179, in __init__
    self.connection = self.connectionCls(*args, **conn_kwargs)
  File "/usr/lib/python2.7/site-packages/libcloud/compute/drivers/gce.py", line 98, in __init__
    credential_file=credential_file, **kwargs)
  File "/usr/lib/python2.7/site-packages/libcloud/common/google.py", line 765, in __init__
    user_id, key, auth_type, credential_file, scopes, **kwargs)
  File "/usr/lib/python2.7/site-packages/libcloud/common/google.py", line 660, in __init__
    self.token = self.oauth2_conn.get_new_token()
  File "/usr/lib/python2.7/site-packages/libcloud/common/google.py", line 530, in get_new_token
    signature = base64.urlsafe_b64encode(signer.sign(hash_func))
  File "/usr/lib/python2.7/site-packages/Crypto/Signature/PKCS1_v1_5.py", line 110, in sign
    em = EMSA_PKCS1_V1_5_ENCODE(mhash, k)
  File "/usr/lib/python2.7/site-packages/Crypto/Signature/PKCS1_v1_5.py", line 211, in EMSA_PKCS1_V1_5_ENCODE
    digestAlgo  = DerSequence([hash.oid, DerNull().encode()])
AttributeError: oid

我已经按照libcloud GCE驱动程序页面上关于设置服务帐户、下载JSON文件等的所有说明进行了操作,所以我认为我正在执行正确的步骤,但是我无法解决这个问题。

EN

回答 1

Stack Overflow用户

发布于 2017-01-11 12:05:08

我刚刚在Python2.7.12和PyCrypto 2.6.1上进行了测试,在libcloud 1.3.0上没有看到任何问题。查看hasher,我怀疑这是您的服务帐户配置的问题。

代码语言:javascript
复制
from libcloud.compute.types import Provider
from libcloud.compute.providers import get_driver

USER_ID = "559xxxxxx-compute@developer.gserviceaccount.com"
KEYFILE = "./libcloud-test-xxx.json"
PROJECT = "libcloud-test"

cls = get_driver(Provider.GCE)
driver = cls(USER_ID, KEYFILE, project = PROJECT)
print(driver.auth_type)  # should be SA
print(driver.list_nodes())

在API管理器中,我进入Credentials,然后选择"Create Credentials“-> "Service Account Key”。对于Service Account,我选择了"Compute Engine default service account“和JSON格式。

计算引擎默认服务帐户

在凭据管理器中,服务帐户如下所示

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40655609

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档