【问题标题】:How to deploy to production a frontend that uses AWS Amplify as backend如何将使用 AWS Amplify 作为后端的前端部署到生产环境
【发布时间】:2020-08-16 02:32:37
【问题描述】:

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

我有一个前端,它使用 Github Actions 进行 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 中的后端)。

【问题讨论】:

  • 我不太了解这个场景,无法回答这个问题。我了解您想在前端隐藏凭据。但是您的前端应该如何针对 GraphQL 端点进行身份验证?通过身份验证模型 API_KEY?
  • 我想从存储库中隐藏 API 密钥。例如,在部署到 Zeit Now 的情况下,我使用 Github 机密,因此它们作为占位符提交到存储库,但敏感信息是隐藏的,并且可以使用 Github Actions 进行部署。所以我想知道是否有类似的方法可以在前端和 AWS Graphql 后端之间进行通信。或者可能无关紧要,因为在任何情况下,在执行来自客户端的请求时都会暴露 API 密钥?我希望这有助于澄清我的问题,我显然错过了一些难题。

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


【解决方案1】:

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

未经身份验证的 API 比经过身份验证的 API 需要更严格的限制。控制未经身份验证的 GraphQL 端点限制的一种方法是使用 API 密钥。

API 密钥是您的应用程序中的硬编码值,由 AWS AppSync 服务在您创建未经身份验证的 GraphQL 终端节点时生成。

我认为尝试隐藏 API 密钥没有任何好处。如果需要身份验证,则必须通过其他方式提供,而不是硬编码的秘密,硬编码的秘密总是可以从公共应用程序(例如网络前端)中提取。

文档中描述了更多的身份验证模型。 [1]
如果您计划开发具有私有端点和公共前端/客户端的应用程序,则绝对应该使用另一个身份验证模型 - 很可能是 OPENID_CONNECTAMAZON_COGNITO_USER_POOLS

我认为您应该首先阅读标题为 GraphQL API Security with AWS AppSync and 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/

【讨论】:

    猜你喜欢
    • 2016-10-05
    • 2015-08-29
    • 2020-10-28
    • 2022-11-04
    • 1970-01-01
    • 1970-01-01
    • 2018-11-26
    • 2017-02-01
    • 1970-01-01
    相关资源
    最近更新 更多