我不想为要与之共享bigquery数据集的外部用户生成服务帐户,这有什么影响?

问题描述

我向用户的Google帐户授予了对我的一个数据集的访问权限。他们正在使用以下Python脚本:

def query_stackoverflow():
    client = bigquery.Client()
    query_job = client.query(
        """
        SELECT *
        FROM `myproject.mydata.mytable`
        ORDER BY someColumn DESC
        LIMIT 10"""
    )

    results = query_job.result()

它有效,但是他们看到此警告:

UserWarning:您的应用程序已使用最终用户进行身份验证 没有配额项目的Google Cloud SDK提供的凭据。你可能会 收到“超出配额”或“未启用API”错误。我们推荐 您重新运行gcloud auth application-default login并确保 已添加配额项目。或者,您也可以使用服务帐户。对于 有关服务帐户的更多信息,请参阅 https://cloud.google.com/docs/authentication/
warnings.warn(_CLOUD_SDK_CREDENTIALS_WARNING)

我阅读了一些文档,但我不明白这意味着什么。这是否意味着 I 应该为我的项目分配配额?我认识这个人并信任他们,但这是否意味着他们可以用完所有 my bq配额及其查询?似乎也可以通过使用服务帐户来“解决”,因此此配额是否对我无法更改的非服务帐户访问有硬性限制?

与创建服务帐户并为其生成密钥相比,授予用户的Google帐户访问权限更加方便和安全。

解决方法

quota project由客户端库等用于计费。您可以使用CLI设置配额项目:

示例命令:

cloud auth application-default set-quota-project my-quota-project

gcloud auth application-default set-quota-project

查看BigQuery配额和限制并实施它们。这样可以提高安全性并最大程度地降低财务风险。

BigQuery Quotas and Limits

Google Cloud中有三种主要的授权方法。通过Google帐户(Gmail,G Suite等),服务帐户和API密钥创建的用户凭据。

您收到的警告是由于Google希望应用程序使用服务帐户而非用户凭据进行授权。您可以在代码中禁用此警告,但我不建议这样做。而是创建一个配额项目,创建一个服务帐户,然后锁定该服务帐户以仅提供用户所需的角色。

在您的问题中,您没有描述如何使用用户凭据来获取授予API访问权限所需的OAuth访问令牌。如果您传递令牌,那不是很安全。可以删除服务帐户,可以旋转服务帐户密钥等,以提供更高级别的安全性。如果您了解Google Cloud,我写了一篇有关如何使用模拟的文章。您可以使用此方法继续使用用户凭据来模拟服务帐户,而无需分发密钥。

Google Cloud – Improving Security with Impersonation

PowerShell – Impersonate Google Service Account

与服务帐户相比,用户帐户凭据的API调用配额要低得多。这可能会导致使用用户帐户生成的访问令牌的软件失败。