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

标签 amazon-web-services server-side-rendering aws-amplify aws-amplify-cli

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

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

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

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

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

我不想使用 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 key 没有任何好处。如果需要身份验证,则必须通过硬编码 secret 以外的其他方式提供,硬编码 secret 始终可从公共(public)应用程序(例如 Web 前端)中提取。
文档中描述了更多的身份验证模型。 [1]
如果您计划开发具有私有(private)端点和公共(public)前端/客户端的应用程序,则绝对应该使用另一个身份验证模型 - 很可能是 OPENID_CONNECT 或 AMAZON_COGNITO_USER_POOLS。
我认为您应该首先阅读标题为 GraphQL API Security with AWS AppSync 和 Amplify [2] 的 AWS 博客文章,然后更准确地说明您的问题是否仍然存在任何不清楚的地方。
引用
[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/

关于amazon-web-services - 如何将使用 AWS Amplify 作为后端的前端部署到生产环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61545245/

相关文章:

c# - 找不到文件 'bin\DotNetOpenAuth.AspNet.xml'。 - 发布到 Elastic Beanstalk 时

aws-amplify - AWS Amplify 创建多个具有重复信息的 DynamoDB 表?

angular - list : Line: 1, 列 : 1, 语法错误。 AWS 错误

amazon-web-services - AWS 放大 : AmplifyException 'You are not authorized to make this call.'

amazon-web-services - 由日志事件触发的 AWS CloudWatch 规则

mysql - AWS RDS 复制如何处理 curdate() 和其他日期敏感命令?

amazon-web-services - 为什么我使用预先签名的 AWS S3 url 上传的 pdf 没有正确的内容类型?

Next.js - 如何使用 ISR 和国际化

javascript - Angular 7 SSR,应用程序组件 ngOnInit() 被多次调用

python - 如何通过 holoviz 和 NetworkX 呈现 GraphViz Dot 文件?