google.cloud.bigquery.Client() 忽略提供的范围,导致在获取驱动器凭据时权限被拒绝

google.cloud.bigquery.Client() ignoring provided scopes, resulting in Permission denied while getting Drive credentials

我正在尝试通过 google.cloud.bigquery Python 库查询存储在云端硬盘中的数据。

我已按照 Google 的 Querying Drive Data 指南进行操作。 因此,我的代码如下所示:

import google.auth
from google.cloud import bigquery

credentials, project = google.auth.default(
    scopes=[
        "https://www.googleapis.com/auth/drive",
        "https://www.googleapis.com/auth/bigquery",
    ]
)
client = bigquery.Client(project, credentials)

query = client.query("""MY SQL HERE""")
query_results = query.result()

问题是:凭据对象和 bigquery 客户端忽略提供的范围,导致 google.api_core.exceptions.Forbidden: 403 Access Denied: BigQuery BigQuery: Permission denied while getting Drive credentials.澄清一下,凭据和客户端都不包含提供的驱动器范围。

如何正确地将驱动器范围传递给我的 bigquery 客户端?

我的本地环境的应用程序默认凭据是我的授权用户,它是项目的所有者。

一旦您将应用程序默认凭据设置为授权用户,您就无法请求其他范围。

要请求其他范围,请在授权用户激活期间执行此操作。

更明确地说,当您 运行 gcloud auth application-default login 时,提供 --scopes 选项,然后是您想要的范围。对我来说,那是 gcloud auth application-default login --scopes=openid,https://www.googleapis.com/auth/userinfo.email,https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/drive,https://www.googleapis.com/auth/bigquery

您应该将电子表格共享到您尝试联系的服务帐户电子邮件。