假设我在Big Query上有3个数据集-数据集A,数据集B和数据集C。
此外,我有3个客户端-客户端A,客户端B和客户端C。
[而且,我在App Engine中部署了一个简单的Web应用,带有API,例如'/ weather'。API只需使用Big Query API从客户端的输入中编写查询,然后在数据集上进行读写操作,然后返回结果。
客户端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)。您还可以在查询参数中使用APIkey值。但这是仅身份验证。
如果您想要授权层,比如说[[谁有权访问WHAT,在这里,客户端A只能访问数据集A,您必须自己进行编码。
在我公司中,我们将这些数据保存在Firestore中:无服务器,快速,免费(每天最多读取5万次)