我正试图使用python访问来自google compute的compute OAuth令牌的拉队列
from oauth2client import gce
from apiclient.discovery import build
import httplib2
credentials = gce.AppAssertionCredentials('')
http = httplib2.Http()
http=credentials.authorize(http)
credentials.refresh(http)
service = build('taskqueue', 'v1beta2', http=http)
tq=service.taskqueues()
tq.get(project=MY_APPENGINE_PROJECT, taskqueue=PULL_QUEUE_NAME, getStats=True).execute()
我一直得到httpererror 403 "您不允许进行此api调用"
请帮忙,我缺少什么配置?
谢谢,谢
UPDATE:感谢@Shay问这个问题,他遇到的问题不再是一个问题,因为我们已经允许别名在任务队列API中工作(当相关时)。
为了子孙后代,下面是原始答案:
我看到的两个最常见的错误是:
-
忘记在App Engine项目中包含
s~
。例如,如果您的应用程序ID是my-awesome-app
,那么您正在调用
当你应该打电话时tq.get(project='my-awesome-app', taskqueue=PULL_QUEUE_NAME...
tq.get(project='s~my-awesome-app', taskqueue=PULL_QUEUE_NAME...
-
忘记将Compute业务帐号加入
queue.yaml
的任务队列ACL。为此,您需要获得与项目关联的服务帐户,并将其添加到acl
:queue: - name: pull-queue mode: pull acl: - writer_email: 123845678986@project.gserviceaccount.com # can do all
当然这里指的是
PULL_QUEUE_NAME = 'pull-queue'
。还要注意,123845678986@project.gserviceaccount.com
应该替换为计算引擎实例的服务帐户。