适用于100%公共,未经身份验证的API的AppSync安全最佳做法

时间:2019-10-31 15:04:40

标签: graphql aws-appsync

我们当前正在使用无服务器应用同步插件和无服务器框架(自然)部署到AppSync。

我们的API是100%公开且未经身份验证的。所有查询和变异基本上都是公开的,因为此时我们不需要用户(例如,通过Cognito池)。

我们使用api密钥添加了第一层安全性,但这无疑不多,因为api密钥按原样包含在前端源中。我们希望添加更多的障碍,以使恶意用户更难以滥用该前端API。

我想到了一些事情:

  1. 速率限制(AppSync当前不支持该速率,但我已经阅读了它显然正在开发中)。例如,我不想在Lambda中使用定制解决方案来执行此操作。
  2. 确保除了我们自己的开发人员之外,仅允许来自网站的流量使用我们的API ...我可能可以使用管道解析器来执行此操作,但是我不太愿意用那种晦涩难懂的VTL语言来执行此操作。
  3. cors,...

我正在考虑切换到Apollo Server,因为此解决方案似乎更加开放和可配置...

1 个答案:

答案 0 :(得分:0)

我建议使用AppSync的IAM身份验证选项,然后使用Amazon Cognito Identity Pools向您的客户端应用程序出售临时AWS凭证。身份池(与用户池相对)出售临时的AWS凭证,这些凭证假定已访问您选择的角色。配置身份池时,您可以定义对AppSync API具有完全访问权限的角色,也可以有选择地提供访问权限。在客户端应用程序中,您可以使用临时凭据使用SigV4对AppSync的请求进行签名,并且AppSync仅允许执行具有有效签名的请求。临时证书还提供了额外的安全性,即使它们被破坏了,每个证书也只能提供最长允许的访问时间。

我还要补充一点,您可以通过AppSync API一次使用多种身份验证模式。这样,您就可以如上所述保护所有字段,然后有选择地标记特定的其他字段,以便通过用户池或OIDC等其他机制对它们进行授权。