【问题标题】:AWS securing accessKeyId and secretAccessKeyAWS 保护 accessKeyId 和 secretAccessKey
【发布时间】:2020-06-23 23:42:10
【问题描述】:

我正在尝试让 javascript 访问 Amazon S3 存储桶,并且一切都按预期工作。我需要保护 javascript,以便我不会将 accessKeyId 和 secretAccessKey 存储在代码或 TFS 中。下面是传递访问密钥和密钥的位。

      AWS.config.update({
        region: '--region-code-here--',
        accessKeyId: '--keyhere--',
        secretAccessKey: '--secretkey-here--'
     });

     const s3 = new AWS.S3();
     //... more code...

根据亚马逊https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/setting-credentials-browser.html,建议的方法是使用 Amazon Cognito 身份或使用网络联合身份而不是在脚本中硬编码。我发现在我的 S3 上下文中很难遵循亚马逊文档。

通过 javascript 访问 S3 是大型应用程序的一部分,我无法提示用户为 JS 访问 S3 存储桶提供单独的凭据。

非常感谢任何提示。 最终目标是保护硬编码的访问密钥。

【问题讨论】:

  • 这段代码是在网络浏览器中运行,还是在其他地方运行?
  • 是的,网络浏览器。

标签: amazon-web-services amazon-s3


【解决方案1】:

假设您的 JavaScript 代码在网页中运行,您的应用将无法访问您的 S3 存储桶,除非它具有凭据或您将存储桶公开。假设您不想公开存储桶,您需要找到一种方法来获取应用程序的凭据。

通常,您希望在分发凭据之前对用户进行身份验证(因为这些凭据将在应用程序中可见),并且您可以使用专用的服务器应用程序来完成这两项操作。或者您可以使用CognitoWIF 更轻松地做到这一点,这将对客户端进行身份验证并将其转换为给定IAM 角色的一组凭证。或者,当然,您可以要求用户提供 AWS 凭证,但我认为这在这种情况下不合适。

【讨论】:

  • 您好,感谢您的回复。我的主应用程序将在加载调用 S3 存储桶的 javascript 页面之前进行身份验证。我不能要求用户提供 AWS 凭证,也不能在 javascript 中对其进行硬编码(因为它会是可见的,并且还会检查到 TFS 中,这是我不希望发生的)。亚马逊文档看起来并不具体。您对如何实现我的方案有更多指示吗?提前致谢。
  • 您是说您的用户访问登录页面以向您的后端进行身份验证,然后被重定向到另一个本身访问 S3 的网页?
  • 然后您的服务器可以向网页提供临时 AWS 凭证以与 AWS 开发工具包一起使用,或者您的服务器可以简单地提供包含预签名 S3 URL 的页面,这样客户端就不必使用 AWS 开发工具包获取对象,或者您的服务器可以代理请求以从 S3 获取对象。如果您所做的只是从 S3 获取对象,那么我将使用预签名 URL 方法。如果您需要在客户端中进行更复杂的 S3 API 交互,请向客户端提供临时凭证。
  • 谢谢@jarmod。我的 JS 对 S3 存储桶上的文件进行 CRUD 操作。
  • 好的,所以要么 Web 客户端直接与 S3 API 交互(在这种情况下,您的服务器需要将 AWS 凭证发送到 Web 客户端),要么您的 Web 客户端要求您的服务器在其上与 S3 交互代表(在这种情况下,客户端不需要 AWS 凭证)\。此外,关于 CRUD 主题,您无法更新 S3 对象(您将删除和替换)。
猜你喜欢
  • 2017-06-14
  • 2020-05-09
  • 2022-01-06
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 2020-11-30
  • 2019-02-20
  • 2011-06-24
相关资源
最近更新 更多