Google cloud platform 如何在GCP上管理/设计API访问?

Google cloud platform 如何在GCP上管理/设计API访问?,google-cloud-platform,google-bigquery,google-cloud-endpoints,api-key,Google Cloud Platform,Google Bigquery,Google Cloud Endpoints,Api Key,假设我在大查询中有3个数据集——数据集A、数据集B和数据集C 另外,我有3个客户机——客户机A、客户机B和客户机C 而且,我有一个简单的web应用程序部署在应用程序引擎中,带有一个API,比如,“/weather”。 API只需从客户机的输入写入查询,并使用大查询API在数据集上读写,然后返回结果 客户端A、B和C都有自己的API密钥,因此可以使用天气API 但是我想限制API访问,这样客户端A只能访问数据集A,客户端B只能访问数据集B,客户端C只能访问数据集C 但是,如果客户端A也想访问数据集

假设我在大查询中有3个数据集——数据集A、数据集B和数据集C

另外,我有3个客户机——客户机A、客户机B和客户机C

而且,我有一个简单的web应用程序部署在应用程序引擎中,带有一个API,比如,“/weather”。 API只需从客户机的输入写入查询,并使用大查询API在数据集上读写,然后返回结果

客户端A、B和C都有自己的API密钥,因此可以使用天气API

但是我想限制API访问,这样客户端A只能访问数据集A,客户端B只能访问数据集B,客户端C只能访问数据集C

但是,如果客户端A也想访问数据集B,我也希望能够轻松地授予客户端A访问数据集B的权限,而无需重新部署我的应用程序

我读了很多关于云端点、应用引擎和大查询的书,但我真的找不到任何解决方案

实现这一目标的最佳方法是什么?可能是在云端点级别、应用程序引擎级别或大查询级别?如果不是,则在后端Python级别(我使用的是Flask)

我能想到的最后一种方法是,我必须在DB中创建一个简单的字典,其中键是API键,值是它可以访问的数据集列表。因此,当客户机使用自己的API密钥访问端点时,我必须检查客户机是否有权访问数据集

但这将是一个相当昂贵的操作,我希望在GCP级别或后端python级别处理这个问题


请让我知道GCP上是否有任何功能可以帮助我实现这一点

执行访问控制时,有两个部分:身份验证和授权

如果您想用弱身份验证密钥(API密钥)保护API,那么CloudEndpoint是一个很好的解决方案。我

在这里,对于您的3个客户端,您将只验证3个项目。在查询参数中也有APIkey值。但它只是身份验证

如果您想要一个授权层,比如说谁有权访问什么,在这里,客户端A只能访问数据集A,您必须自己编写代码。


在我的公司,我们将这些数据保存在Firestore中:无服务器、快速、免费(每天最多读取50k)

当您执行访问控制时,您有两个部分:身份验证和授权

如果您想用弱身份验证密钥(API密钥)保护API,那么CloudEndpoint是一个很好的解决方案。我

在这里,对于您的3个客户端,您将只验证3个项目。在查询参数中也有APIkey值。但它只是身份验证

如果您想要一个授权层,比如说谁有权访问什么,在这里,客户端A只能访问数据集A,您必须自己编写代码。


在我的公司,我们将这些数据保存在Firestore中:无服务器、快速、免费(每天最多读取5万次)

如果他们有不同的服务帐户,您可以在GCP IAM中管理权限。@SabriKaragönen很抱歉,我是GCP的新手。你能详细说明一下吗?我可以在数据集级别管理权限吗?如果一个服务帐户有读写大查询的权限,这不意味着该服务帐户可以读写大查询中的每个数据集吗?您可以在项目级别限制服务帐户权限,然后在数据集级别授予权限。甚至可以使用列级权限。只需单击BigQuery中的数据集,您将看到“共享数据集”按钮。使用该菜单,您可以授予权限。@SabriKaragönen谢谢,我已经看过了,非常感谢您的建议。但客户不一定有服务账户。大查询API将在后端使用,而不是直接由客户端使用。客户机只需点击端点,比如从浏览器或使用有效API键的curl,现在允许他们访问大查询中的每个数据集。如果我理解错了你的建议,请告诉我啊,我明白了。那我就照你说的那样保留一本字典。您可以选择将其存储在Flask应用程序或BigQuery表中。为什么您认为在BigQuery中保存APIkey-access数据是一项昂贵的操作?另外,API密钥存储在哪里?如果它们有不同的服务帐户,您可以在GCP IAM中管理权限。@SabriKaragönen很抱歉,我是GCP的新手。你能详细说明一下吗?我可以在数据集级别管理权限吗?如果一个服务帐户有读写大查询的权限,这不意味着该服务帐户可以读写大查询中的每个数据集吗?您可以在项目级别限制服务帐户权限,然后在数据集级别授予权限。甚至可以使用列级权限。只需单击BigQuery中的数据集,您将看到“共享数据集”按钮。使用该菜单,您可以授予权限。@SabriKaragönen谢谢,我已经看过了,非常感谢您的建议。但客户不一定有服务账户。大查询API将在后端使用,而不是直接由客户端使用。客户机只需点击端点,比如从浏览器或使用有效API键的curl,现在允许他们访问大查询中的每个数据集。如果我理解错了你的建议,请告诉我啊,我明白了。那我就照你说的那样保留一本字典。您可以选择将其存储在Flask应用程序或BigQuery表中。为什么您认为在BigQuery中保存APIkey-access数据是一项昂贵的操作?另外,您在哪里存储API密钥?