AWS Node SDK:如何生成不包含 AccessKeyId 的签名 S3 getObject URL

AWS Node SDK: How to generate a signed S3 getObject URL that doesn't include AccessKeyId

如果我在 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=...

我在 getSignedUrl API 文档中没有看到任何输出不同类型 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 S3 presignedURL 示例 here 生成您正在查找的格式。例如

[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=[]

注意:这些示例使用 AWS SDK 的 V3 for JavaScript。