在具有对存储桶的阻止公开访问设置的S3使用预签名URL。

0

【以下的问题经过翻译处理】 客户试图阻止对存储桶的公共访问,但通过预签名的 url 提供间接访问

具有阻止公共访问权限的存储桶是否支持预签名 url,因为 url 预签名只能由 IAM 用户完成。这种情况下,他们还可以使用附加到节点的角色吗?过去,给予实例角色的临时凭证是短暂的,因此不适合与外部共享的东西?

他们可以在预签名的 url 上有一个自定义域吗?如果不支持,那么可以使用 Cloudfront、API GW、Lambda 的任何解决方法吗?

profile picture
专家
已提问 10 个月前1 查看次数
1 回答
0

【以下的回答经过翻译处理】 预签名 URL 可以在公共块访问 S3 桶 或 阻止公开访问设置的 S3 桶中使用。

  • 实现这个的最简单方法是创建一个具有 API 网关的前端,该前端调用一个 Lambda,调用 S3API 生成签名的 URL。这对上传和下载都有效。
  • 如果您不想使用 API 网关,您可以有一个前端 Web 服务器。

这是一篇解释整个过程的文章:使用 API 网关和 Lambda 生成带有预签名 URL 如果您需要下载文件,可以按照以下方式进行操作:

async function getDownloadUrl (file) {
  const { key, versionId } = file
  const params = {
    Bucket: my-test-bucket,,
    Key: 'myDoc/myfile.pdf', //在 S3 中的目录
    VersionId: versionId, //我们使用 S3 版本控制
    Expires: 60
  }

  try {
    const url = await new Promise((resolve, reject) => {
      s3.getSignedUrl('getObject', params, function (err, url) {
        if (err) {
          reject(err)
        }
        resolve(url)
      })
    })

    return url
  } catch (err) {
    logger.error('s3 getObject,  get signedUrl failed')
    throw err
  }
}

profile picture
专家
已回答 10 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则