Google 云 API:禁止使用服务帐户密钥访问已启用 API

Google Cloud API: Forbidden to access Enabled API using Service Account key

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

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

Google 云 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 密钥的正确电子邮件
  • 该服务帐户可以访问您列出的存储桶

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

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

问题是我没有通过 Google Play Developers Console > Settings > USER ACCOUNTS & RIGHTS 分配对服务 'client email' 的访问权限