使用适用于 S3 on Outposts 的预签名 URL - Amazon S3 on Outposts

使用适用于 S3 on Outposts 的预签名 URL

要授予对 Outpost 本地存储对象的限时访问权限而不更新存储桶策略,您可以使用预签名 URL。借助预签名 URL,作为存储桶的所有者,您可以与您虚拟私有云(VPC)中的个人共享对象,或者向其授予上传或删除对象的权限。

使用 AWS SDK 或 AWS Command Line Interface(AWS CLI)创建预签名 URL 时,您会将该 URL 与某个特定的操作关联。您还可以通过选择自定义到期时间来授予对预签名 URL 的限时访问权限,自定义到期时间最短可为 1 秒,最长可为 7 天。共享预签名 URL 时,VPC 中的个人可以执行嵌入在 URL 中的操作,如同他们就是原始签名用户。URL 在到达其到期时间时将会过期,不再有效。

限制预签名 URL 功能

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

AWS 签名版本 4(SigV4)

使用 AWS 签名版本 4(SigV4)对预签名 URL 请求进行身份认证时要强制执行特定的行为,您可以在存储桶策略和访问点策略中使用条件键。例如,您可以创建一个使用 s3-outposts:signatureAge 条件的存储桶策略,以在相关签名的存在时间超过 10 分钟时,拒绝对 example-outpost-bucket 存储桶中对象的任何 Amazon S3 on Outposts 预签名 URL 请求。要使用此示例,请将 user input placeholders 替换为您自己的信息。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Deny a presigned URL request if the signature is more than 10 minutes old", "Effect": "Deny", "Principal": {"AWS":"444455556666"}, "Action": "s3-outposts:*", "Resource": "arn:aws:s3-outposts:us-east-1:111122223333:outpost/op-01ac5d28a6a232904/bucket/example-outpost-bucket/object/*", "Condition": { "NumericGreaterThan": {"s3-outposts:signatureAge": 600000}, "StringEquals": {"s3-outposts:authType": "REST-QUERY-STRING"} } } ] }

有关在使用签名版本 4 对预签名 URL 请求进行身份认证时,可用于强制执行特定行为的条件键和其他示例策略的列表,请参阅 AWS 签名版本 4(SigV4)身份认证特定的策略键

网络路径限制

如果要将预签名 URL 的使用和所有 S3 on Outposts 访问限定为特定的网络路径,您可以编写要求使用特定网络路径的策略。要对发起调用的 IAM 主体设置限制,您可以使用基于身份的 AWS Identity and Access Management(IAM)策略(例如用户、组或角色策略)。要对 S3 on Outposts 资源设置限制,您可以使用基于资源的策略(例如,存储桶和访问点策略)。

对 IAM 主体实施网络路径限制后,要求拥有这些凭证的用户从指定的网络发出请求。对存储桶或接入点实施限制后,要求对该资源的所有请求都必须来自指定的网络。这些限制也适用于预签名 URL 以外的场景。

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

以下 IAM policy 语句要求主体仅从指定的网络范围访问。AWS使用此策略语句时,所有访问都必须来自该范围。这包括有人使用适用于 S3 on Outposts 的预签名 URL 的情况。要使用此示例,请将 user input placeholders 替换为您自己的信息。

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

有关使用 aws:SourceIP AWS 全局条件键将对 S3 on Outposts 存储桶的访问限定为特定网络范围的示例存储桶策略,请参阅使用 S3 on Outposts 设置 IAM

谁可以创建预签名 URL

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

您可以使用下面的凭证创建预签名 URL:

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

  • AWS Security Token Service – 使用永久凭证(例如,AWS 账户 根用户或 IAM 用户的凭证)签名时,有效期最长 36 小时。

  • IAM 用户 – 使用 AWS 签名版本 4 时,有效期最长 7 天。

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

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

  • 由于预签名 URL 将向持有该 URL 的任何人授予访问 S3 on Outposts 存储桶的权限,我们建议您妥善保护它们。有关保护预签名 URL 的更多信息,请参阅 限制预签名 URL 功能

S3 on Outposts 何时检查预签名 URL 的到期日期和时间?

在发出 HTTP 请求时,S3 on Outposts 会检查签名 URL 的到期日期和时间。例如,如果客户端刚好在到期时间之前开始下载某个大型文件,即使在下载过程中超过到期时间,下载也会继续进行。但如果连接断开,在客户端试图在超过到期时间后重新开始下载,则下载将会失败。

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