来自计算引擎的任务队列认证 - “权限不足”

时间:2015-10-20 15:24:08

标签: python google-app-engine google-compute-engine

我正在尝试使用来自Compute引擎VM实例的拉取队列,使用Google的python REST API库并继续收到403错误 - “权限不足”

queue.yaml中:

queue:
- name: queuename
  mode: pull

构建api客户端:

from apiclient.discovery import build
credentials = GoogleCredentials.get_application_default()
task_api = build('taskqueue', 'v1beta2', credentials=credentials)

获取任务:

lease_req = task_api.tasks().lease(project=PROJECT_NAME,
                                           taskqueue=QUEUE_NAME,
                                           leaseSecs=60 * 30,
                                           numTasks=1)
result = lease_req.execute()

结果始终是HttpError 403 - Perufficient Permission

VM已启用完整的云平台api访问权限。

2 个答案:

答案 0 :(得分:1)

您应该能够通过GoogleCredentials.get_application_default

从GCE访问TaskQueue
  1. 您使用的服务器必须具有任务队列,启用了Cloud API访问范围。见this discussion
  2. 或者服务器必须以适当的权限连接到Google帐户,即正确的密钥必须在/root/.config/gcloud/application_default_credentials.json中(如果进程在另一个用户下运行,则在用户主目录中搜索密钥) )。
  3. 或者将环境变量GOOGLE_APPLICATION_CREDENTIALS指向正确的json密钥文件(您需要service_account密钥,而不是authorized_user)。
  4. service_account密钥必须能够访问https://www.googleapis.com/auth/taskqueuehttps://www.googleapis.com/auth/taskqueue.consumer的适当范围。 (要生成OAuth2凭据,请转到网络Google GAE控制台 API管理器 - 凭据)。

    您必须在queue.yaml

    中设置队列ACL
    queue:
    - name: myqueue
      mode: pull
      acl:
      - user_email: myemail@myemailserver.com
      - writer_email: myemail@myemailserver.com
    

    常规REST API访问

    您可以从任何计算机访问TaskQueue REST API。您也可以手动加载凭据:

    from oauth2client.service_account import ServiceAccountCredentials
    # use the right scopes by the queue ACL
    SCOPES = ['https://www.googleapis.com/auth/taskqueue']
    credentials = ServiceAccountCredentials.from_json_keyfile_name('myemail.json', scopes=SCOPES)
    # or
    credentials = ServiceAccountCredentials.from_p12_keyfile('myemail@myemailserver.com', '/path/to/myemail.p12', scopes=SCOPES)
    

答案 1 :(得分:-1)

问题是TaskQueue API只是App Engine的一项功能,因此无法从Google Compute Engine访问。