使用预签名 URL
您可以使用预签名 URL 授予对 Amazon S3 中对象的限时访问权限,而不更新存储桶策略。可以在浏览器中输入预签名 URL,或者程序使用预签名 URL 来下载对象。预签名 URL 使用的凭证是生成该 URL 的 Amazon 用户的凭证。
还可以使用预签名 URL 来允许他人将特定对象上传到您的 Amazon S3 存储桶。这允许在不要求另一方拥有 Amazon 安全凭证或权限的情况下进行上传。如果具有相同键的对象已存在于在预签名 URL 中指定的存储桶中,则 Amazon S3 将现有对象替换为上传的对象。
在到期日期和时间之前,可以多次使用预签名 URL。
创建预签名 URL 时,必须提供您的安全凭证,然后指定以下内容:
-
一个 Amazon S3 存储桶
-
对象键(如果将在您的 Amazon S3 存储桶中下载此对象,则一旦上传,这就是要上传的文件名)
-
HTTP 方法(
GET
用于下载对象,或PUT
用于上传) -
过期时间间隔
目前,Amazon S3 预签名 URL 不支持在上传对象时使用以下数据完整性校验和算法(CRC32、CRC32C、SHA-1、SHA-256)。要在上传后验证对象的完整性,您可以在使用预签名 URL 上传对象时提供对象的 MD5 摘要。有关对象完整性的更多信息,请参阅检查对象完整性。
谁可以创建预签名 URL
具有有效安全凭证的任何人都可以创建预签名 URL。但对于成功地访问对象的人来说,必须由拥有执行预签名 URL 所基于的操作权限的人创建预签名 URL。
以下各个类型的凭证可用于创建预签名 URL:
-
IAM 实例配置文件 – 有效期最长 6 小时。
-
Amazon Security Token Service – 有效期为最长 36 小时(使用长期安全凭证进行签名时),或为临时凭证的持续时间,以先到者为准。
-
IAM 用户 – 使用 Amazon 签名版本 4 时,有效期最长 7 天。
要创建有效期最长为 7 天的预签名 URL,请首先将 IAM 用户凭证(访问密钥和私有密钥)委托给用于创建预签名 URL 的方法。
注意
如果您使用临时凭证创建了预签名 URL,则此 URL 将在凭证过期时过期。即使创建的 URL 的过期时间更晚,也是如此。有关临时安全凭证生命周期,请参阅《IAM 用户指南》中的比较 Amazon STS API 操作。
预签名 URL 的到期时间
预签名 URL 在生成 URL 时指定的时间段内保持有效。如果使用 Amazon S3 控制台创建预签名 URL,过期时间可设置为 1 分钟到 12 小时之间。如果您使用 Amazon CLI 或 Amazon SDK,则过期时间可设置为多达 7 天。
如果您已使用临时令牌创建了预签名 URL,则此 URL 将在令牌过期时过期,即使您使用更晚的到期时间创建了该 URL。有关您使用的凭证如何影响到期时间的更多信息,请参阅谁可以创建预签名 URL。
在发出 HTTP 请求时,Simple Storage Service (Amazon S3) 会检查签名 URL 的到期日期和时间。例如,如果客户端刚好在到期时间之前开始下载某个大型文件,即使在下载过程中超过到期时间,下载也会继续进行。但如果连接断开,在客户端试图在超过到期时间后重新开始下载,则下载将会失败。
限制预签名 URL 功能
预签名 URL 的功能受创建它的用户的权限所限制。预签名 URL 实质上是一种不记名令牌,向持有相关 URL 的人授予了访问权限。因此,我们建议您适当地保护它们。以下是一些可用来限制使用预签名 URL 的方法。
Amazon 签名版本 4(SigV4)
使用 Amazon 签名版本 4(SigV4)对预签名 URL 请求进行身份认证时要强制执行特定的行为,您可以在存储桶策略和接入点策略中使用条件键。例如,以下存储桶策略使用 s3:signatureAge
条件,当相关签名的存在时间超过 10 分钟时,拒绝对于
存储桶中对象的任何 Amazon S3 预签名 URL 请求。要使用此示例,请将 DOC-EXAMPLE-BUCKET1
替换为您自己的信息。user input
placeholders
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Deny a presigned URL request if the signature is more than 10 min old", "Effect": "Deny", "Principal": {"AWS":"*"}, "Action": "s3:*", "Resource": "arn:aws:s3:::
DOC-EXAMPLE-BUCKET1
/*", "Condition": { "NumericGreaterThan": { "s3:signatureAge":600000
} } } ] }
有关策略键相关的 Amazon 签名版本 4 的更多信息,请参阅《Amazon Simple Storage Service API 参考》中的 Amazon 签名版本 4 身份认证。
网络路径限制
如果您想限制使用预签名 URL 和 Amazon S3 对特定网络路径的所有访问权限,则可以编写 Amazon Identity and Access Management(IAM)策略。您可以在进行调用的 IAM 主体、Amazon S3 存储桶或两者上设置这些策略。
对 IAM 主体实施网络路径限制后,要求拥有这些凭证的用户从指定的网络发出请求。对存储桶或接入点实施限制后,要求对该资源的所有请求都必须来自指定的网络。这些限制也适用于预签名 URL 以外的场景。
您使用的 IAM 全局条件键取决于端点的类型。如果您正在对 Amazon S3 使用公有端点,请使用 aws:SourceIp
。如果您正在使用虚拟私有云(VPC)端点访问 Amazon S3 存储桶,请使用 aws:SourceVpc
或 aws:SourceVpce
。
以下 IAM 策略语句要求主体仅从指定的网络范围访问。Amazon使用此策略语句时,所有访问都必须来自该范围。这包括有人对于 Amazon S3 使用预签名 URL 的情况。要使用此示例,请将
替换为您自己的信息。user input
placeholders
{ "Sid": "NetworkRestrictionForIAMPrincipal", "Effect": "Deny", "Action": "*", "Resource": "*", "Condition": { "NotIpAddressIfExists": {"aws:SourceIp": "
IP-address-range
"}, "BoolIfExists": {"aws:ViaAWSService": "false"} } }
有关使用 aws:SourceIp
Amazon 全局条件键将对 Amazon S3 存储桶的访问限定为特定网络范围的其他示例存储桶策略,请参阅根据特定 IP 地址管理访问权限。