Google Cloud API:禁止使用服务帐号密钥访问已启用的 API



我在使用服务帐户 P12 密钥并获取 HttpError 403 时遇到问题。

但是,如果我使用客户端 ID 和密钥的 Web OAuth,则不会出现此问题。但是,我正在创建为服务到服务应用程序。

Google Cloud API JSON 已启用。

import os
from httplib2 import Http
from pprintpp import pprint
from oauth2client.client import SignedJwtAssertionCredentials
from apiclient.discovery import build
from googleapiclient.errors import HttpError
SITE_ROOT = 
    os.path.dirname(os.path.realpath(__file__))
P12_FILE = 
    "REDACTED-0123456789.p12"
P12_PATH = os.path.join(SITE_ROOT, P12_FILE)
pprint(P12_PATH)
SCOPE = 
    'https://www.googleapis.com/auth/devstorage.read_only'
PROJECT_NAME = 
    'mobileapptracking-insights'
BUCKET_NAME = 
    'pubsite_prod_rev_0123456789'
CLIENT_EMAIL = 
    'REDACTED-service@foo-bar-0123456789.iam.gserviceaccount.com'
private_key = None
with open(P12_PATH, "rb") as p12_fp:
  private_key = p12_fp.read()
credentials = SignedJwtAssertionCredentials(
    CLIENT_EMAIL,
    private_key,
    SCOPE)
http_auth = credentials.authorize(Http())
storage = build('storage', version='v1', http=http_auth)
request = storage.objects().list(bucket=BUCKET_NAME)
try:
    response = request.execute()
except HttpError as error:
    print("HttpError: %s" % str(error))
    raise
except Exception as error:
    print("%s: %s" % (error.__class__.__name__, str(error)))
    raise
print(response)

错误信息:

HttpError: <HttpError 403 when requesting https://www.googleapis.com/storage/v1/b/pubsite_prod_rev_0123456789/o?alt=json returned "Forbidden">

我需要做什么来解决此问题?

你的代码看起来不错(我只是粘贴了它,更改了适当的常量,并成功运行了它)。

我会仔细检查:

  • 您的客户电子邮件是 p12 密钥的正确电子邮件
  • 该服务账户可以访问您列出的存储桶

您可以做一些其他事情来帮助您找出问题所在:

  • 验证您是否可以列出公有uspto-pair存储桶
  • import httplib2并设置httplib2.debuglevel = 1,并验证正在发出的请求是否为预期的请求。

问题是我没有通过Google Play开发者控制台为服务的"客户电子邮件"分配访问权限 > 设置> 用户帐户和权限

最新更新