Google Cloud API: запрещен доступ к включенному API с использованием ключа сервисной учетной записи

У меня возникают проблемы с использованием ключа P12 служебной учетной записи и получением HttpError 403.

Однако у меня нет этой проблемы, если я использую Web OAuth с идентификатором клиента и секретом. Однако я создаю приложение Service to Service.

JSON Google Cloud API включен.

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 = \
    '[email protected]'

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">

Что мне нужно сделать, чтобы решить эту проблему?


person jeff00seattle    schedule 28.01.2016    source источник


Ответы (2)


Ваш код выглядит нормально (я только что вставил его, изменил соответствующие константы и успешно запустил).

Я бы перепроверил:

  • Что ваш адрес электронной почты клиента является правильным для ключа p12
  • Указанный вами сегмент доступен для этого сервисного аккаунта.

Некоторые другие вещи, которые вы могли бы сделать, чтобы помочь вам понять, в чем проблема:

  • Убедитесь, что вы можете перечислить общедоступную корзину uspto-pair.
  • import httplib2 и установите httplib2.debuglevel = 1, а также убедитесь, что выполняемые запросы являются ожидаемыми.
person jerjou    schedule 29.01.2016

Проблема заключалась в том, что я не назначал разрешения на доступ к «клиентской электронной почте» службы через Консоль разработчиков Google Play > Настройки > АККАУНТЫ ПОЛЬЗОВАТЕЛЯ И ПРАВА.

person jeff00seattle    schedule 03.02.2016