Graphql 针对100%公开、未经验证的API的AppSync安全最佳做法';s

Graphql 针对100%公开、未经验证的API的AppSync安全最佳做法';s,graphql,aws-appsync,Graphql,Aws Appsync,我们目前正在使用无服务器AppSync插件和无服务器框架(自然)部署到AppSync 我们的API是100%公开且未经验证的。所有查询和突变基本上都是公开的,因为此时我们不需要用户(例如通过Cognito池) 我们已经使用api密钥添加了第一层安全性,但这毫无疑问并不多,因为api密钥与前端源代码一样包含在其中。我们希望添加额外的障碍,使恶意用户更难滥用前端API 我想到了几件事: 速率限制(AppSync目前不支持,但我已经读到它正在进行中)。例如,我不想在Lambda中使用定制的解决方案来实

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

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

我们已经使用api密钥添加了第一层安全性,但这毫无疑问并不多,因为api密钥与前端源代码一样包含在其中。我们希望添加额外的障碍,使恶意用户更难滥用前端API

我想到了几件事:

  • 速率限制(AppSync目前不支持,但我已经读到它正在进行中)。例如,我不想在Lambda中使用定制的解决方案来实现这一点
  • 确保只有来自网站的流量被允许使用我们的API,除了我们自己的开发人员。。。我可能可以用管道解析器来实现这一点,但我不太喜欢用这种晦涩难懂的VTL语言来实现这一点
  • 科尔斯

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

    我建议使用AppSync的IAM auth选项,然后使用向您的客户端应用程序提供临时AWS凭据。标识池(与用户池相反)提供临时AWS凭据,这些凭据假定您选择的角色具有访问权限。配置标识池时,可以定义对AppSync API具有完全访问权限的角色,也可以选择性地提供访问权限。在客户端应用程序中,您可以使用临时凭据对到AppSync的请求进行签名,AppSync将只允许执行具有有效签名的请求。临时凭证还提供了一个额外的安全层,因为即使它们被破坏,每个凭证也只能在允许的最长时间内提供访问


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

    我建议使用AppSync的IAM auth选项,然后使用向您的客户端应用程序提供临时AWS凭据。标识池(与用户池相反)提供临时AWS凭据,这些凭据假定您选择的角色具有访问权限。配置标识池时,可以定义对AppSync API具有完全访问权限的角色,也可以选择性地提供访问权限。在客户端应用程序中,您可以使用临时凭据对到AppSync的请求进行签名,AppSync将只允许执行具有有效签名的请求。临时凭证还提供了一个额外的安全层,因为即使它们被破坏,每个凭证也只能在允许的最长时间内提供访问

    我还要补充一点,您可以在AppSync API中同时使用多个身份验证模式。这允许您保护上面提到的所有字段,然后有选择地标记特定的其他字段,以便通过一些其他机制(如用户池或OIDC)对其进行授权