如何将使用 AWS Amplify 作为后端的前端部署到生产环境

How to deploy to production a frontend that uses AWS Amplify as backend

我的用例相当简单:我想将前端部署到使用 Amplify 后端的生产环境,而不暴露像 API 密钥这样的敏感配置。

我有一个前端使用 Github Actions for CI 和 CD 并部署到 Zeit Now(因为它是一个 Next.js 项目并且需要 SSR 支持,而 Amplify 目前没有提供)。目前它没有连接后端,因此可以毫无问题地部署到生产环境中。

在同一个项目中,我为后端设置了 AWS Amplify 并将其连接到前端。这一切都按照本地环境的预期成功运行。

现在我想将前端部署到生产环境,但是用于将它连接到后端的 AWS 配置保存在一个名为 aws-exports.js 的自动生成的文件中,其中包含 GraphQL 端点及其 API键。此文件已由 Amplify CLI 添加到 .gitignore

如果我从 .gitignore 中删除 aws-exports.js 文件并将其提交到存储库,我认为它在部署到生产环境后可能会起作用,但是我认为这不是一个好主意,因为我会暴露敏感的配置数据。

我不想使用 AWS 来部署我的前端,这是我读过的相关文档中建议的解决方案。有没有推荐的方法来保持前端和后端环境分离? (意味着前端仍在部署到 Zeit Now,它将使用部署在 AWS 中的后端)。

据我了解,AWS AppSync 安全概念将身份验证模型 API_KEY 指定为在 public 应用程序或开发环境.

Unauthenticated APIs require more strict throttling than authenticated APIs. One way to control throttling for unauthenticated GraphQL endpoints is through the use of API keys.

An API key is a hard-coded value in your application that is generated by the AWS AppSync service when you create an unauthenticated GraphQL endpoint.

我认为尝试隐藏 API 密钥没有任何好处。如果需要身份验证,则必须通过 hard-coded 秘密之外的其他方式提供,秘密总是可从 public 应用程序(例如 Web 前端)中提取。

文档中描述了更多的身份验证模型。 [1]
如果您计划开发一个带有私有端点和 public frontend/client 的应用程序,您绝对应该使用其他身份验证模型 - 很可能是 OPENID_CONNECTAMAZON_COGNITO_USER_POOLS.

我认为您应该首先阅读标题为 GraphQL API Security with AWS AppSync and Amplify [2] 的 AWS 博客 post,然后说明您的问题更准确地说,如果仍然存在任何不明确的地方。

参考资料

[1] https://docs.aws.amazon.com/appsync/latest/devguide/security.html#api-key-authorization
[2] https://aws.amazon.com/de/blogs/mobile/graphql-security-appsync-amplify/