【问题标题】:libcloud and GCP. How to autheticate using service accountlibcloud 和 GCP。如何使用服务帐户进行身份验证
【发布时间】:2019-11-04 10:56:32
【问题描述】:

我正在尝试使用 Apache libcloud 来访问 GCP,并希望能够启动计算实例。因此,按照文档,我在 GCP 上创建了一个与我的电子邮件关联的服务帐户,并暂时授予它所有者访问权限。之后,我使用 libcloud 如下:

from libcloud.compute.types import Provider
from libcloud.compute.providers import get_driver
ComputeEngine = get_driver(Provider.GCE)

driver = ComputeEngine('luca@googlemail.com', 'gcp-key.json', project='first-gcp')

这实际上显示了一个 URL,并要求我输入其中的代码。当我单击 URL 时,我收到错误消息:

The OAuth client was not found.

这不是我预想的工作流程。我认为提供密钥只会让我进入,然后我就可以使用启动实例的方法等。所以,我不确定我是否通过在 GCP 上使用服务帐户来做正确的事情。

所以,我收到以下要求代码:

所以我明白了:

Please Go to the following URL and sign in:

https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=xxx&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcompute+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdevstorage.full_control+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fndev.clouddns.readwrite&state=Libcloud+Request
Enter Code: 

我应该如何处理这个问题?我们最终将是一些远程工作的人,所以理想情况下,每个人都有自己的密钥可以使用,如果不需要手动输入代码,这应该以一种有点自主的方式发生,那就太好了。

【问题讨论】:

    标签: google-cloud-platform google-api-python-client libcloud


    【解决方案1】:

    从控制台 (https://cloud.google.com/console) 中选择您的项目。打开项目后,选择“APIs & auth”,然后选择“Credentials”,如下所示:

    正在开发中:最好为每个制作一个,可以将一个用于测试目的。

    在生产中:为每个使用此服务的用户创建一个服务帐户。

    当您下载服务帐户时,您应该将其保存为 .pem 或 .json 文件。使用服务帐户中的电子邮件地址(如果您打开 json/pem,您将能够看到电子邮件)并为其提供正确的值 region/project/email 和 pem 文件的路径。

    您使用的代码是正确的,避免使用名称“ComputeEngine”,因为它可能是一个关键字(即使它可能不是,最佳实践)

    from libcloud.compute.types import Provider
    from libcloud.compute.providers import get_driver
    Driver = get_driver(Provider.GCE)
    gce = Driver('your_service_account_email', 'path_to_pem_file',
                 datacenter='us-central1-a',
                 project='your_project_id')
    

    看看here 如果您对任何步骤感到困惑。但这应该可以正常工作。

    【讨论】:

    • 感谢您的回答。因此,似乎我正在通过服务帐户路线,但我不确定如何获取它要求的此代码。不知何故,我的 google 控制台看起来与 libcloud docs 链接的控制台有点不同。
    • 在左上角点击三个栏,然后点击“API and Services”,然后点击“Credentials”并从这里获取您的服务帐户。
    • 是的,我有,并且凭证和 JSON 密钥文件都已设置。我对尝试登录时询问的代码感到更加困惑?每次我尝试连接时都需要这样做吗?有没有办法绕过它,只使用 PEM 文件登录?
    • 因此,在提供 pem 文件时,您需要提供一些附加信息,例如您的项目、pem 注册到的电子邮件、要连接的区域。此信息与您的 pem 文件一样重要。如果你只想使用你的 pem 文件,你可以创建一个包装器。保持一切硬编码,从 pem 文件中获取电子邮件,仅使用 pem 文件。
    • 好的。如果您发布另一个问题,请在此处留下链接,我可以尽力帮助您! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-20
    • 1970-01-01
    相关资源
    最近更新 更多