简体   繁体   English

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

[英]Cannot authenticate using libcloud GCE Driver

I'm trying to use libcloud (1.3.0) to connect to my GCE project using the following code: 我正在尝试使用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)

This just fails with an AttributeError inside PyCrypto (I'm running v2.6.1): 这只是在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

I've followed all the instructions on the libcloud GCE driver page about setting up the service account, downloading the JSON file etc so I think I am doing the right steps but I can't get past this problem. 我已经按照libcloud GCE驱动程序页面上有关设置服务帐户,下载JSON文件等的所有说明进行操作,因此我认为我在执行正确的步骤,但无法克服此问题。

I've just tested that on Python 2.7.12 with PyCrypto 2.6.1 and don't see any issues on libcloud 1.3.0. 我刚刚在带有PyCrypto 2.6.1的Python 2.7.12上进行了测试,并且在libcloud 1.3.0上没有看到任何问题。 Looking at the hasher, I suspect it's an issue with your service account configuration. 看一下哈希器,我怀疑这与您的服务帐户配置有关。

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())

From API Manager, I went to Credentials, then selected "Create Credentials" - > "Service Account Key". 从API管理器中,我转到凭据,然后选择“创建凭据”->“服务帐户密钥”。 For Service Account I selected "Compute Engine default service account" and the JSON format. 对于服务帐户,我选择了“ Compute Engine默认服务帐户”和JSON格式。

Compute Engine default service account Compute Engine默认服务帐户

在此处输入图片说明

Within the credential manager the service account looks like this 在凭证管理器中,服务帐户如下所示

在此处输入图片说明

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM