簡體   English   中英

無法使用libcloud GCE驅動程序進行身份驗證

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM