如何 manage/design API 访问 GCP?
how to manage/design API access on GCP?
假设我在 Big Query 上有 3 个数据集——数据集 A、数据集 B 和数据集 C。
此外,我有 3 个客户 -- 客户 A、客户 B 和客户 C。
而且,我在 App Engine 中部署了一个简单的 Web 应用程序,其中包含一个 API,比如“/weather”。
API 使用 Big Query API 简单地根据客户端的输入编写查询并在数据集上读写,然后 returns 结果。
客户端 A、B 和 C 有自己的 API 密钥,以便他们可以使用天气 API。
但我想限制 API 访问,使客户端 A 只能访问数据集 A,客户端 B 只能访问数据集 B,客户端 C 只能访问数据集 C。
但是,如果客户端 A 也想访问数据集 B,我还希望能够轻松地授予客户端 A 访问数据集 B 的权限,而无需重新部署我的应用程序。
我已经阅读了大量有关 Cloud Endpoints、App Engine 和 Big Query 的资料,但我真的找不到任何解决方案。
希望在 Cloud Endpoints 级别或 App Engine 级别或 Big Query 级别实现此目标的最佳方法是什么?如果不是,在后端 Python 级别(我正在使用 Flask)
我能想到的最后一招是,我必须在数据库中创建一个简单的字典,其中键是 API 键,值是它可以访问的数据集列表。因此,当客户端使用自己的 API 密钥访问端点时,我必须检查客户端是否有权访问数据集。
但这将是一项非常昂贵的操作,我想在 GCP 级别或后端 python 级别处理此问题。
如果 GCP 上有任何功能可以帮助我实现这一点,请告诉我。
当您执行访问控制时,您有两个部分:身份验证和授权。
如果您想使用弱身份验证密钥(API 密钥)保护您的 API,Cloud Endpoint 是一个很好的解决方案。我wrote an article on this.
在这里,对于您的 3 个客户,您将只验证 3 个项目 (no USERS, only PROJECTS)。您在查询参数中也有 API 键值。但它只是身份验证。
如果你想要一个授权层,比如谁有权访问什么,在这里,客户端A只能访问数据集A,你有自己编码。
在我的公司,我们将这些数据保存在 Firestore 中:无服务器、快速、免费(每天最多读取 50k)
假设我在 Big Query 上有 3 个数据集——数据集 A、数据集 B 和数据集 C。
此外,我有 3 个客户 -- 客户 A、客户 B 和客户 C。
而且,我在 App Engine 中部署了一个简单的 Web 应用程序,其中包含一个 API,比如“/weather”。 API 使用 Big Query API 简单地根据客户端的输入编写查询并在数据集上读写,然后 returns 结果。
客户端 A、B 和 C 有自己的 API 密钥,以便他们可以使用天气 API。
但我想限制 API 访问,使客户端 A 只能访问数据集 A,客户端 B 只能访问数据集 B,客户端 C 只能访问数据集 C。
但是,如果客户端 A 也想访问数据集 B,我还希望能够轻松地授予客户端 A 访问数据集 B 的权限,而无需重新部署我的应用程序。
我已经阅读了大量有关 Cloud Endpoints、App Engine 和 Big Query 的资料,但我真的找不到任何解决方案。
希望在 Cloud Endpoints 级别或 App Engine 级别或 Big Query 级别实现此目标的最佳方法是什么?如果不是,在后端 Python 级别(我正在使用 Flask)
我能想到的最后一招是,我必须在数据库中创建一个简单的字典,其中键是 API 键,值是它可以访问的数据集列表。因此,当客户端使用自己的 API 密钥访问端点时,我必须检查客户端是否有权访问数据集。
但这将是一项非常昂贵的操作,我想在 GCP 级别或后端 python 级别处理此问题。
如果 GCP 上有任何功能可以帮助我实现这一点,请告诉我。
当您执行访问控制时,您有两个部分:身份验证和授权。
如果您想使用弱身份验证密钥(API 密钥)保护您的 API,Cloud Endpoint 是一个很好的解决方案。我wrote an article on this.
在这里,对于您的 3 个客户,您将只验证 3 个项目 (no USERS, only PROJECTS)。您在查询参数中也有 API 键值。但它只是身份验证。
如果你想要一个授权层,比如谁有权访问什么,在这里,客户端A只能访问数据集A,你有自己编码。
在我的公司,我们将这些数据保存在 Firestore 中:无服务器、快速、免费(每天最多读取 50k)