我正在尝试使用python
使用计算OAuth令牌从google compute访问拉取队列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()
我一直得到HttpError 403“你不能进行这个api调用”
请帮忙,我错过了哪些配置?
感谢, 吉文
答案 0 :(得分:11)
更新:感谢@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...
忘记将计算服务帐户添加到queue.yaml
中的task queue 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
应替换为计算引擎实例的服务帐户。