使用预签名 URL - Amazon Simple Storage Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用预签名 URL

默认情况下,所有对象和存储桶都是私有的。但是,您可以使用预签名 URL 选择性地共享对象,或者允许客户/用户将对象上传到存储桶,而无需 Amazon 安全凭证或权限。

您可以使用预签名 URL 生成可用于访问 Amazon S3 存储桶的 URL。创建预签名 URL 时,将其与特定操作相关联。您可以共享 URL,任何有权访问该 URL 的人都可以像原始签名用户一样执行嵌入在 URL 中的操作。URL 在达到其过期时间后会过期且不再起作用。

重要

对于在 2019 年 3 月 20 日发布的所有区域,如果请求到达错误的 Amazon S3 位置,则 Amazon S3 返回 HTTP 400 错误请求错误。

限制预签名 URL 功能

预签名 URL 的功能受创建它的用户的权限所限制。实质上,预签名 URL 是一种持有者令牌,可向拥有这些 URL 的人授予访问权限。因此,我们建议您适当地保护它们。

如果您想限制使用预签名 URL 和 S3 对特定网络路径的所有访问,则可以编写需要特定网络路径的 Amazon Identity and Access Management (IAM) 策略。您可以在进行调用的 IAM 委托人、Amazon S3 存储桶或两者上设置这些策略。

对委托人的网络路径限制要求拥有这些凭证的用户从指定的网络发出请求。对存储桶的限制会将该存储桶的访问权限限定为仅供来自指定网络的请求访问。请注意,这些限制也适用于预签名 URL 场景之外。

您使用的 IAM 全局条件取决于端点的类型。如果您正在使用 Amazon S3 的公有端点,请使用 aws:SourceIp。如果您使用的是 Amazon S3 的 VPC 端点,请使用 aws:SourceVpcaws:SourceVpce

以下 IAM policy 语句要求主体仅从指定的网络范围访问。Amazon使用这个策略语句,所有访问都需要来自该范围。这包括有人使用 S3 的预签名 URL 的情况。

{ "Sid": "NetworkRestrictionForIAMPrincipal", "Effect": "Deny", "Action": "", "Resource": "", "Condition": { "NotIpAddressIfExists": { "aws:SourceIp": "IP-address" }, "BoolIfExists": { "aws:ViaAWSService": "false" } } }

谁可以创建预签名 URL

具有有效安全凭证的任何人都可以创建预签名 URL。但对于成功地访问对象的人来说,必须由拥有执行预签名 URL 所基于的操作权限的人创建预签名 URL。

下面的凭证可用于创建预签名 URL:

  • IAM 实例配置文件:有效期最多 6 小时。

  • Amazon Security Token Service:在使用永久凭证(例如,Amazon Web Services 账户 根用户或 IAM 用户的凭证)签名时,有效期长达 36 小时。

  • IAM 用户:在使用 Amazon 签名版本 4 时,有效期长达 7 天。

    要创建有效期长达 7 天的预签名 URL,请先为所使用的开发工具包指定 IAM 用户凭证(访问密钥和秘密密钥)。然后,使用 Amazon 签名版本 4 生成预签名 URL。

注意
  • 如果您已使用临时令牌创建预签名 URL,则此 URL 将在令牌过期时过期,即使创建的 URL 的过期时间更晚也是如此。

  • 由于预签名 URL 将访问 Amazon S3 存储桶的权限授予任何具有 URL 的人,我们建议您适当地保护它们。

Simple Storage Service (Amazon S3) 何时检查预签名 URL 的到期日期和时间?

在发出 HTTP 请求时,Simple Storage Service (Amazon S3) 会检查签名 URL 的到期日期和时间。例如,如果客户端刚好在过期时间之前开始下载大型文件,即使在下载过程中到了过期时间,该下载也应该会完成。如果连接断开,并且客户端试图在过期时间到期后重新开始下载,则下载将会失败。

有关使用预签名 URL 共享或上传对象的更多信息,请参阅以下主题。