尝试运行 bigquery 时 gcloud auth 登录问题 403 访问被拒绝

Posted

技术标签:

【中文标题】尝试运行 bigquery 时 gcloud auth 登录问题 403 访问被拒绝【英文标题】:gcloud auth login issue 403 access denied when trying to run bigquery 【发布时间】:2022-01-23 03:19:04 【问题描述】:

编辑:似乎这只是基于谷歌驱动文件的表的问题。我正在使用身份验证登录,作业在 bigquery UI 中显示为由我作为所有者运行,但返回此错误,尽管我应该对此数据及其所基于的文件拥有完整权限。

我在让 gcloud 运行 bigquery 时遇到问题,它正在返回错误:

google.api_core.exceptions.Forbidden: 403 Access Denied: BigQuery BigQuery: Permission denied while getting Drive credentials.

我已经尝试了所有各种登录命令:

gcloud auth 应用程序-默认登录

gcloud 认证登录

然后我被带到浏览器并授予访问权限,一切似乎都很好,但我仍然遇到同样的错误。

运行以下命令时,我的帐户显示正常,我可以看到我的登录凭据为 JSON 文件,但我就是不明白为什么它说我没有访问权限。

gloud auth list

我可以进入 bigquery 并查看自己作为所有者请求的查询,然后我可以在 bigquery 控制台中运行相同的查询,但它在通过脚本请求时不起作用。

这是我正在运行的代码。多人运行了这段代码,确认它有效,他们没有做任何与我不同的事情。

我认为我在 gcloud 登录时做错了,但很难理解是什么。

import streamlit as st
import pandas as pd
from datetime import datetime as dt
from google.cloud import bigquery



def load_data(query_file):
    with open(query_file, "r+") as query_file:
        query = query_file.read()

    
    client = bigquery.Client(project = "my-data")

    df = client.query(query).result().to_dataframe()

    return df

def load_current_es(ttl=60 * 60 * 540):
    """Get current ES names and pod
    Args:
        None
    Returns:
        pd.Dataframe
    """
    columns = "full_name": "str"
    df = load_data("data/current_es.sql")
    assert len(df) > 0, "Dataframe for current ES is empty"

    # correct data types
    df = df.astype(dtype=columns)

    return df

df = load_current_es()

print(df.head())

【问题讨论】:

您查询的表/视图是基于谷歌驱动文件的外部表吗?如果是这样,就像您需要授权您正在使用的 SA 嗨丹尼尔,非常精明。在四处挖掘之后,似乎只有基于谷歌驱动器文件的文件会导致问题。抱歉,我在这方面很垃圾,是否有关于如何去做的文档? 【参考方案1】:

所以最后证明这是一个 gcloud 身份验证问题。

我运行了 gcloud auth logingcloud auth application-default login --scopes https://www.googleapis.com/auth/drive,https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/bigquery 并认为这已授予驱动器访问权限,但仍然收到错误 403 驱动器访问被拒绝在链接到驱动器文件的表上。奇怪的是,它在 BQ ui 中显示以我为所有者的工作被调用,但似乎没有按预期应用烫发。

解决方案是同时运行 gcloud auth login --enable-gdrive-access,然后它现在可以访问所有表。

【讨论】:

以上是关于尝试运行 bigquery 时 gcloud auth 登录问题 403 访问被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

将 gcloud 虚拟机实例监控数据提取到 BigQuery

Python gcloud BigQuery 中的 run_async_query 使用标准 SQL 而不是旧版 SQL

更新 bigquery 架构时出现异常

如何使用 Python gcloud.bigquery 客户端跳过标题行?

Google Cloud DataCatalog

gcloud 组件更新权限被拒绝