从计算中提取队列授权

Sha*_*hay 9 google-app-engine oauth-2.0 google-api-client pull-queue google-compute-engine

我正在尝试使用python从计算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()
Run Code Online (Sandbox Code Playgroud)

我一直得到HttpError 403"你不能进行这个api调用"

请帮忙,我错过了哪些配置?

谢谢,谢伊

bos*_*ter 11

更新:感谢@Shay提出这个问题,他遇到的问题不再是问题,因为我们已经允许别名在任务队列API中工作(相关时).

对于后代,这里的原始答案如下:


我见过的两个最常见的错误是:

  1. 忘记包含s~在您的App Engine项目中.例如,如果您的应用程序ID是my-awesome-app,那么您正在呼叫

    tq.get(project='my-awesome-app', taskqueue=PULL_QUEUE_NAME...
    
    Run Code Online (Sandbox Code Playgroud)

    什么时候你应该打电话

    tq.get(project='s~my-awesome-app', taskqueue=PULL_QUEUE_NAME...
    
    Run Code Online (Sandbox Code Playgroud)
  2. 忘记将Compute服务帐户添加到任务队列ACLqueue.yaml.为此,您需要获取与项目关联的服务帐户并将其添加到acl:

    queue:
    - name: pull-queue
      mode: pull
      acl:
      - writer_email: 123845678986@project.gserviceaccount.com    # can do all
    
    Run Code Online (Sandbox Code Playgroud)

    当然这意味着PULL_QUEUE_NAME = 'pull-queue'在这里.另请注意,123845678986@project.gserviceaccount.com应替换为Compute Engine实例的服务帐户.