我的用例相当简单。我想在生产中部署一个使用Amplify后端的前端,而不暴露敏感的配置,比如API密钥。
我有一个前台,使用Github Actions进行CI和CD,并部署到Zeit Now(因为它是一个Next.js项目,需要SSR支持,而Amplify目前不提供)。目前它还没有连接后台,所以部署到生产中没有任何问题。
在同一个项目中,我已经为后端设置了AWS Amplify,并将其连接到前端。所有的工作都很成功,就像在本地环境中预期的那样。
现在我想把前端部署到生产环境,但是连接到后端的AWS配置却保存在一个自动生成的文件中,文件名为 aws-exports.js
其中包含了GraphQL端点和它的API密钥。这个文件已经被添加到 .gitignore
被 Amplify CLI
.
如果我去掉 aws-exports.js
文件从 .gitignore
并将其提交到仓库,我认为一旦部署到生产中,它可能会工作,然而我认为这不是一个好主意,因为我将暴露敏感的配置数据。
我不想使用AWS来部署我的前端,这是我读过的文档中建议的解决方案。有没有什么推荐的方法可以在保持前端和后端环境分离的情况下做到这一点?(意思是前端仍然部署在Zeit Now上,而Zeit Now将使用部署在AWS上的后端)。
据我了解,AWS AppSync的安全概念指定了auth模型。API_KEY 的用途 公共应用程序或开发环境.
未认证的API比认证的API需要更严格的节流。控制未认证 GraphQL 端点的节流的一种方法是通过使用 API 密钥。
API密钥是您的应用程序中的一个硬编码值,当您创建一个未经认证的GraphQL端点时,该值由AWS AppSync服务生成。
我认为,试图隐藏API密钥没有任何好处。如果需要验证,必须通过其他方式提供,而不是硬编码的秘密,后者总是可以从公共应用程序(如Web前端)中提取。
在文档中描述了更多的认证模式。1]如果你打算开发一个带有私有端点和公共前端客户端的应用,你肯定应该使用另一个认证模型--很可能是 OPENID_CONNECT 或 AMAZON_COGNITO_USER_POOLS(用户池).
我想你应该先读一下AWS的博文,题目是 使用AWS AppSync和Amplify实现GraphQL API安全 2],之后如果还有不清楚的地方,就更准确地说明你的问题。
[1] https:/docs.aws.amazon.comappsynclatestdevguidesecurity.html#api-key-authorization。 [2] https:/aws.amazon.comdeblogsmobilegraph-security-appsync-amplify。