我正在尝试使用来自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访问权限。
答案 0 :(得分:1)
您应该能够通过GoogleCredentials.get_application_default
:
/root/.config/gcloud/application_default_credentials.json
中(如果进程在另一个用户下运行,则在用户主目录中搜索密钥) )。GOOGLE_APPLICATION_CREDENTIALS
指向正确的json密钥文件(您需要service_account
密钥,而不是authorized_user
)。 service_account
密钥必须能够访问https://www.googleapis.com/auth/taskqueue
或https://www.googleapis.com/auth/taskqueue.consumer
的适当范围。 (要生成OAuth2凭据,请转到网络Google GAE控制台 API管理器 - 凭据)。
您必须在queue.yaml
:
queue:
- name: myqueue
mode: pull
acl:
- user_email: myemail@myemailserver.com
- writer_email: myemail@myemailserver.com
您可以从任何计算机访问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访问。