Saltar al contenido

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

0

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

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

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

EXPERTO

preguntada hace 3 años174 visualizaciones

1 Respuesta
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
  }
}

EXPERTO

respondido hace 3 años

No has iniciado sesión. Iniciar sesión para publicar una respuesta.

Una buena respuesta responde claramente a la pregunta, proporciona comentarios constructivos y fomenta el crecimiento profesional en la persona que hace la pregunta.