[英]Cannot authenticate using libcloud GCE Driver
我正在尝试使用libcloud(1.3.0)通过以下代码连接到我的GCE项目:
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而失败(我正在运行v2.6.1):
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文件等的所有说明进行操作,因此我认为我在执行正确的步骤,但无法克服此问题。
我刚刚在带有PyCrypto 2.6.1的Python 2.7.12上进行了测试,并且在libcloud 1.3.0上没有看到任何问题。 看一下哈希器,我怀疑这与您的服务帐户配置有关。
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管理器中,我转到凭据,然后选择“创建凭据”->“服务帐户密钥”。 对于服务帐户,我选择了“ Compute Engine默认服务帐户”和JSON格式。
Compute Engine默认服务帐户
在凭证管理器中,服务帐户如下所示
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.