Не удается пройти аутентификацию с помощью драйвера libcloud GCE

Я пытаюсь использовать libcloud (1.3.0) для подключения к моему проекту GCE, используя следующий код:

from libcloud.compute.types import Provider
from libcloud.compute.providers import get_driver

USER_ID = "[email protected]"
KEYFILE = "./xxxxxxx.json"
PROJECT = "project1"

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

Это просто терпит неудачу с AttributeError внутри PyCrypto (я использую 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 и т. д., поэтому я думаю, что делаю правильные шаги, но не могу решить эту проблему.


person Adam Kerrison    schedule 17.11.2016    source источник


Ответы (1)


Я только что проверил это на Python 2.7.12 с PyCrypto 2.6.1 и не вижу никаких проблем с libcloud 1.3.0. Глядя на хэшер, я подозреваю, что это проблема с конфигурацией вашей учетной записи службы.

from libcloud.compute.types import Provider
from libcloud.compute.providers import get_driver

USER_ID = "[email protected]"
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 по умолчанию

введите здесь описание изображения

В диспетчере учетных данных учетная запись службы выглядит так

введите здесь описание изображения

person anthony shaw    schedule 11.01.2017