4

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

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

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

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

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

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

4

1 回答 1

4

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

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

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

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

文档中描述了更多的身份验证模型。[1]
如果您计划开发具有私有端点和公共前端/客户端的应用程序,您绝对应该使用另一个身份验证模型 - 很可能是OPENID_CONNECTAMAZON_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 -安全应用同步放大/

于 2020-05-09T00:35:10.133 回答