首页 > 解决方案 > AWS 节点开发工具包:如何​​生成不包含 AccessKeyId 的签名 S3 getObject URL

问题描述

如果我在 CircleCI 中运行的 Selenium 测试之一失败,我会将浏览器屏幕截图上传到 S3 并将签名的 getObject URL 打印到控制台,以便我可以快速查找该屏幕截图。

问题是,S3.getSignedUrl将我的 AWS AccessKeyId 添加到 URL 中,并且 CircleCI 正在审查它,********************因为该值在我的环境变量中,所以 URL 不起作用:

https://s3.us-west-2.amazonaws.com/<bucket>/ERROR_3_reset_password_workflow_works.png
  ?AWSAccessKeyId=********************
  &Expires=1612389785
  &Signature=...

我在getSignedUrlAPI 文档中看不到任何输出不同类型 URL 的选项。但是,我注意到当我直接从 S3 控制台打开图像时,URL 的形式完全不同:

https://s3.us-west-2.amazonaws.com/<bucket>/ERROR_3_reset_password_workflow_works.png
  ?response-content-disposition=inline
  &X-Amz-Security-Token=...
  &X-Amz-Algorithm=AWS4-HMAC-SHA256
  &X-Amz-Date=20210128T222508Z
  &X-Amz-SignedHeaders=host
  &X-Amz-Expires=300
  &X-Amz-Credential=...
  &X-Amz-Signature=...

有没有办法可以使用 S3 Node SDK 生成这种类型的 URL?它不使用 CircleCI 会审查的任何值,因此它适用于我正在尝试做的事情。

我也在考虑使用 CircleCI 工件来获取错误截图,但我仍然想了解 S3 控制台是如何构建后一个 URL 的。

标签: amazon-s3aws-sdk-nodejs

解决方案


此处的 Amazon S3 presignedURL 示例产生您正在寻找的格式。例如

[BUCKET]/[OBJECT]?X-Amz-Algorithm=[]&X-Amz-Content-Sha256=[]&X-Amz-Credential=[]&X-Amz-Date=[]&X-Amz-Expires=[] &X-Amz-Signature=[]&X-Amz-SignedHeaders=[]&x-amz-user-agent=[]

注意:这些示例使用适用于 JavaScript 的 AWS 开发工具包 V3。


推荐阅读