내용으로 건너뛰기

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

0

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

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

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

전문가

질문됨 3년 전174회 조회

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

전문가

답변함 3년 전

로그인하지 않았습니다. 로그인해야 답변을 게시할 수 있습니다.

좋은 답변은 질문에 명확하게 답하고 건설적인 피드백을 제공하며 질문자의 전문적인 성장을 장려합니다.