Cloud Endpoints,将角色授予 API 键以限制某些 methods/paths(例如:read/write 角色)
Cloud Endpoints, grant roles to API keys to restrict some methods/paths (e:g read/write roles)
背景
我用云函数和云创建了多个微服务运行。现在,使用 Cloud Endpoints,我可以使用 API 密钥安全地触发我的所有服务。但是,我希望能够控制允许每个 API 键访问哪个微服务。我只想由用户 使用一个 API 键。
例子
假设我正在建立交易 API,出于安全考虑,当客户创建 API 密钥时,他可以选择 API 密钥是否只允许读取数据(例如:观察市场价格)或同时读取和写入数据(例如:观察市场价格然后下订单)。用户可以轻松更改他的 API 密钥权限。
我没有构建任何像交易一样敏感的东西 API 但这是我正在尝试做的一个很好的例子。
研究
我看过 。接受的答案提出了两种解决方案:
使用 Auth0 并以编程方式检查用户授权 我需要监控每个 API 密钥的 API 端点的使用情况.此外,API 密钥安全性足以满足我的用例。
API keys 我设法限制我的 API 密钥访问我的 Cloud Endpoints API,但是,我没有看到任何允许我的密钥仅访问 Cloud Endpoints API.
的某些路径的选项
我也相信像 Apigee 这样的服务可以满足我的需要,但我的预算 (POC) 很低,所以我认为它不适合我,我更愿意使用仅限 GCP 产品。
问题
Cloud Endpoints 是否为我的用例提出了开箱即用的解决方案?如果是这样,我该怎么办?
如果没有,是否可以:
使用 Cloud Functions 创建另一个代理来检查 Firestore 数据库是否允许 API 密钥访问请求的方法?逻辑是这样的:使用 Google 提供的 API 键的用户请求 -> Cloud Endpoints 批准 -> 自定义代理功能批准 -> 微服务执行
自定义 ESP 以满足我的用例
自己管理所有 API 身份验证(似乎工作量很大)
TL;DR:使用 Cloud Endpoint 是不可能的
关于 Cloud Endpoint 需要知道的事情和限制很少:
- Cloud Endpoint 执行身份验证,而不是授权。简而言之,检查您的用户凭据(auth0、OAuth2、Firebase auth、API Key)是否有效。
- 仅适用于 API 密钥,您可以将密钥限制为一项或多项服务 URL。然后,如果需要,您可以在此处将 API 密钥限制为仅一个 Cloud Endpoint。
- API 键 "authenticates" 一个 GCP projet, not a user, not an account。
- 如果您在同一个项目中创建 2 个密钥,您将无法区分请求者 -> 您必须为每个客户创建 1 个项目并为每个项目生成一个 API 密钥
- (与上一点相关)API 无法通过脚本自动创建密钥。您必须在控制台上手动执行此操作(如果您有很多客户要注册,或者如果您想要自动注册,这将很难)
- 为什么?? Google doesn't recommend to use API Key for authentication 并阻止使用这个储物柜之王
有了这些输入,您就可以设计解决方案了:您可以自己执行授权检查(您提到的代理),而不是 API 键字符串值,而是 project_id。我向您推荐此解决方案,因为您可以 add quotas and rate limit on API Keys(I wrote an article on this)
你也可以实现你自己的授权过程(甚至你自己的API密钥生成,它只是最后一个字符串!),更复杂...
背景
我用云函数和云创建了多个微服务运行。现在,使用 Cloud Endpoints,我可以使用 API 密钥安全地触发我的所有服务。但是,我希望能够控制允许每个 API 键访问哪个微服务。我只想由用户 使用一个 API 键。
例子
假设我正在建立交易 API,出于安全考虑,当客户创建 API 密钥时,他可以选择 API 密钥是否只允许读取数据(例如:观察市场价格)或同时读取和写入数据(例如:观察市场价格然后下订单)。用户可以轻松更改他的 API 密钥权限。
我没有构建任何像交易一样敏感的东西 API 但这是我正在尝试做的一个很好的例子。
研究
我看过
使用 Auth0 并以编程方式检查用户授权 我需要监控每个 API 密钥的 API 端点的使用情况.此外,API 密钥安全性足以满足我的用例。
API keys 我设法限制我的 API 密钥访问我的 Cloud Endpoints API,但是,我没有看到任何允许我的密钥仅访问 Cloud Endpoints API.
的某些路径的选项
我也相信像 Apigee 这样的服务可以满足我的需要,但我的预算 (POC) 很低,所以我认为它不适合我,我更愿意使用仅限 GCP 产品。
问题
Cloud Endpoints 是否为我的用例提出了开箱即用的解决方案?如果是这样,我该怎么办?
如果没有,是否可以:
使用 Cloud Functions 创建另一个代理来检查 Firestore 数据库是否允许 API 密钥访问请求的方法?逻辑是这样的:使用 Google 提供的 API 键的用户请求 -> Cloud Endpoints 批准 -> 自定义代理功能批准 -> 微服务执行
自定义 ESP 以满足我的用例
自己管理所有 API 身份验证(似乎工作量很大)
TL;DR:使用 Cloud Endpoint 是不可能的
关于 Cloud Endpoint 需要知道的事情和限制很少:
- Cloud Endpoint 执行身份验证,而不是授权。简而言之,检查您的用户凭据(auth0、OAuth2、Firebase auth、API Key)是否有效。
- 仅适用于 API 密钥,您可以将密钥限制为一项或多项服务 URL。然后,如果需要,您可以在此处将 API 密钥限制为仅一个 Cloud Endpoint。
- API 键 "authenticates" 一个 GCP projet, not a user, not an account。
- 如果您在同一个项目中创建 2 个密钥,您将无法区分请求者 -> 您必须为每个客户创建 1 个项目并为每个项目生成一个 API 密钥
- (与上一点相关)API 无法通过脚本自动创建密钥。您必须在控制台上手动执行此操作(如果您有很多客户要注册,或者如果您想要自动注册,这将很难)
- 为什么?? Google doesn't recommend to use API Key for authentication 并阻止使用这个储物柜之王
有了这些输入,您就可以设计解决方案了:您可以自己执行授权检查(您提到的代理),而不是 API 键字符串值,而是 project_id。我向您推荐此解决方案,因为您可以 add quotas and rate limit on API Keys(I wrote an article on this)
你也可以实现你自己的授权过程(甚至你自己的API密钥生成,它只是最后一个字符串!),更复杂...