Google Cloud API 403-允许不足

发布于 2025-02-08 04:14:57 字数 3513 浏览 3 评论 0 原文

我想从Google Play游戏机中提取移动应用程序的报告数据。

根据此文档,我们必须使用 signedjwtassertioncredentials for Authenticate。经过一些错误和研究,文档中的代码段似乎已经过时了(因为 signedjwtassertioncredentions 不再可用)。取而代之的是,我们尝试以下内容自动下载报告:

from oauth2client.service_account import  ServiceAccountCredentials
from apiclient.discovery import build

scopes = ['https://www.googleapis.com/auth/analytics.readonly']
key_file_location = 'files/access_token/mykeyfile.json'

credentials = ServiceAccountCredentials.from_json_keyfile_name(key_file_location, scopes)

cloud_storage_bucket = 'pubsite_prod_rev_123456789'
report_to_download = 'installs/installs_com.someapp.etc.etc_2021*'

storage = build('storage', 'v1', credentials=credentials)

print( storage.objects().get(bucket = cloud_storage_bucket,object = report_to_download).execute())

现在问题是,我们收到以下错误消息:

Traceback (most recent call last):
  File "C:\Users\dev\dev\z_10_ext_google_play_store.py", line 30, in <module>
    print( storage.objects().get(bucket = cloud_storage_bucket,object = report_to_download).execute())
  File "D:\Software\Python\lib\site-packages\googleapiclient\_helpers.py", line 130, in positional_wrapper
    return wrapped(*args, **kwargs)
  File "D:\Software\Python\lib\site-packages\googleapiclient\http.py", line 938, in execute
    raise HttpError(resp, content, uri=self.uri)
googleapiclient.errors.HttpError: <HttpError 403 when requesting https://storage.googleapis.com/storage/v1/b/pubsite_prod_rev_123456789/o/installs%2Finstalls_com.someapp.etc.etc_2021%2A?alt=json returned "Insufficient Permission". Details: "[{'message': 'Insufficient Permission', 'domain': 'global', 'reason': 'insufficientPermissions'}]">

有人有想法吗?我们的服务帐户甚至在游戏机中具有管理员权利(通常

很多

scopes = ['https://www.googleapis.com/auth/analytics.readonly', 'https://www.googleapis.com/auth/devstorage.read_only'

是 'https://www.googleapis.com/auth/cloud-platform.read_only'],

但是我仍然会收到一些错误,现在因为缺少访问令牌,这很奇怪,因为.json文件包含所有必要的东西:

Traceback (most recent call last):
  File "C:\Users\andre\Desktop\DAWSE\z_10_ext_google_play_store.py", line 33, in <module>
    print( storage.objects().get(bucket = cloud_storage_bucket,object = report_to_download).execute())
  File "D:\Sonstige Programme\Python\lib\site-packages\googleapiclient\_helpers.py", line 130, in positional_wrapper
    return wrapped(*args, **kwargs)
  File "D:\Sonstige Programme\Python\lib\site-packages\googleapiclient\http.py", line 923, in execute
    resp, content = _retry_request(
  File "D:\Sonstige Programme\Python\lib\site-packages\googleapiclient\http.py", line 191, in _retry_request
    resp, content = http.request(uri, method, *args, **kwargs)
  File "D:\Sonstige Programme\Python\lib\site-packages\oauth2client\transport.py", line 159, in new_request
    credentials._refresh(orig_request_method)
  File "D:\Sonstige Programme\Python\lib\site-packages\oauth2client\client.py", line 749, in _refresh
    self._do_refresh_request(http)
  File "D:\Sonstige Programme\Python\lib\site-packages\oauth2client\client.py", line 785, in _do_refresh_request
    self.access_token = d['access_token']
KeyError: 'access_token'

I would like to extract the reporting data of our mobile apps from Google Play Console.

According to this documentation, we have to use SignedJwtAssertionCredentials to authenticate. After some errors and research it seems that the code snippet in the doc is kind of outdated (since SignedJWTAssertionCredentials is not available anymore). Instead we tried the following to automatically download the reports:

from oauth2client.service_account import  ServiceAccountCredentials
from apiclient.discovery import build

scopes = ['https://www.googleapis.com/auth/analytics.readonly']
key_file_location = 'files/access_token/mykeyfile.json'

credentials = ServiceAccountCredentials.from_json_keyfile_name(key_file_location, scopes)

cloud_storage_bucket = 'pubsite_prod_rev_123456789'
report_to_download = 'installs/installs_com.someapp.etc.etc_2021*'

storage = build('storage', 'v1', credentials=credentials)

print( storage.objects().get(bucket = cloud_storage_bucket,object = report_to_download).execute())

Now the problem is, that we receive the following error message:

Traceback (most recent call last):
  File "C:\Users\dev\dev\z_10_ext_google_play_store.py", line 30, in <module>
    print( storage.objects().get(bucket = cloud_storage_bucket,object = report_to_download).execute())
  File "D:\Software\Python\lib\site-packages\googleapiclient\_helpers.py", line 130, in positional_wrapper
    return wrapped(*args, **kwargs)
  File "D:\Software\Python\lib\site-packages\googleapiclient\http.py", line 938, in execute
    raise HttpError(resp, content, uri=self.uri)
googleapiclient.errors.HttpError: <HttpError 403 when requesting https://storage.googleapis.com/storage/v1/b/pubsite_prod_rev_123456789/o/installs%2Finstalls_com.someapp.etc.etc_2021%2A?alt=json returned "Insufficient Permission". Details: "[{'message': 'Insufficient Permission', 'domain': 'global', 'reason': 'insufficientPermissions'}]">

Does anyone have an idea? Our service account even has admin rights in play console (which normally would be to much..)

UPDATE

As DaImTo pointed out, I was missing some scopes which lead me to a different line of scope definition:

scopes = ['https://www.googleapis.com/auth/analytics.readonly', 'https://www.googleapis.com/auth/devstorage.read_only'

,'https://www.googleapis.com/auth/cloud-platform.read_only']

But I still receive some errors, now because of the missing access token which is weird because the .json file contains everything necessary:

Traceback (most recent call last):
  File "C:\Users\andre\Desktop\DAWSE\z_10_ext_google_play_store.py", line 33, in <module>
    print( storage.objects().get(bucket = cloud_storage_bucket,object = report_to_download).execute())
  File "D:\Sonstige Programme\Python\lib\site-packages\googleapiclient\_helpers.py", line 130, in positional_wrapper
    return wrapped(*args, **kwargs)
  File "D:\Sonstige Programme\Python\lib\site-packages\googleapiclient\http.py", line 923, in execute
    resp, content = _retry_request(
  File "D:\Sonstige Programme\Python\lib\site-packages\googleapiclient\http.py", line 191, in _retry_request
    resp, content = http.request(uri, method, *args, **kwargs)
  File "D:\Sonstige Programme\Python\lib\site-packages\oauth2client\transport.py", line 159, in new_request
    credentials._refresh(orig_request_method)
  File "D:\Sonstige Programme\Python\lib\site-packages\oauth2client\client.py", line 749, in _refresh
    self._do_refresh_request(http)
  File "D:\Sonstige Programme\Python\lib\site-packages\oauth2client\client.py", line 785, in _do_refresh_request
    self.access_token = d['access_token']
KeyError: 'access_token'

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

兔小萌 2025-02-15 04:14:57

您似乎正在使用 objects.get 方法

方法用户必须具有足够的许可使用此方法。首先,我将确保您的服务帐户可以访问。

之后,我将检查您的范围您目前仅加载Google Analytics(分析)API的范围。

scopes = ['https://www.googleapis.com/auth/analytics.readonly']

此范围不会使您访问Google Cloud Storage对象获取方法。为此,您需要使用Google云存储范围之一

”在此处输入图像描述”

You appear to be using the objects.get method

The authenticated user must have sufficient permission to use this method. To start with i would ensure your service account has access.

After that i would check your scopes you are currently only loading the scope for google analytics api.

scopes = ['https://www.googleapis.com/auth/analytics.readonly']

This scope will not grant you access to the google cloud storage objects get method. For that you need to use one of the google cloud storage scopes

enter image description here

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文