1

コンピューティング エンジン インスタンスのプル キューからアプリ エンジン タスクをリースしようとしていますが、次のエラーが発生し続けます。

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "forbidden",
    "message": "you are not allowed to make this api call"
   }
  ],
  "code": 403,
  "message": "you are not allowed to make this api call"
 }
}

これは私が使用しているコードです:

import httplib2, json, urllib
from oauth2client.client import AccessTokenCredentials
from apiclient.discovery import build

def FetchToken():
    METADATA_SERVER = ('http://metadata/computeMetadata/v1/instance/service-accounts')
    SERVICE_ACCOUNT = 'default'

    http = httplib2.Http()

    token_uri = '%s/%s/token' % (METADATA_SERVER, SERVICE_ACCOUNT)
    resp, content = http.request(token_uri, method='GET',
                         body=None,
                         headers={'Metadata-Flavor': 'Google'})
    print token_uri
    print content
    if resp.status == 200:
        d = json.loads(content)
        access_token = d['access_token']  # Save the access token
        credentials = AccessTokenCredentials(d['access_token'],
                                        'my-user-agent/1.0')
        autho = credentials.authorize(http)
        print autho
        return autho
    else:
        print resp.status

task_api = build('taskqueue', 'v1beta2')

lease_req = task_api.tasks().lease(project='project-name',
                                    taskqueue='pull-queue',
                                    leaseSecs=30,
                                    numTasks=1)


result = lease_req.execute(http=FetchToken()) ####ERRORS HERE
item = result.items[0]
print item['payload']

認証の問題のようですが、でたらめに作られたプロジェクト名を使用して同じリース要求を行うと、まったく同じエラーが発生するため、確信が持てません。
また、タスクキューを有効にしてインスタンスを起動しました。
どんな助けでも大歓迎です

4

1 に答える 1

0

他の誰かがこのような問題で立ち往生している場合に備えて、現在どのように機能しているかを説明します. まず、別の (より短い) 認証方法を使用しています。

from oauth2client import gce

credentials = gce.AppAssertionCredentials('')
http = httplib2.Http()
http=credentials.authorize(http)
credentials.refresh(http)
service = build('taskqueue', 'v1beta2', http=http)

次に、リース リクエストが拒否された理由は、queue.yamlでサービス アカウントのメールがライターのメールとして設定されていたためです。ドキュメントでは、 @gmail.comで終わる電子メールは、ライターの電子メールとして設定されている場合、ユーザーの電子メールの権利を持たないことが言及されています。それが@developer.gserviceaccount.comで終わるメールに及ぶことは言及されていません。

于 2014-10-15T09:56:28.470 に答える