

# 使用适用于 S3 on Outposts 的预签名 URL
<a name="S3OutpostsPresignedURL"></a>

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

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

## 限制预签名 URL 功能
<a name="S3OutpostsPresignedUrlUploadObjectLimitCapabilities"></a>

预签名 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`* 替换为您自己的信息。

------
#### [ JSON ]

****  

```
{
    "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）身份认证特定的策略键](s3-outposts-bucket-policy-s3-sigv4-conditions.md)。

**网络路径限制**  
如果要将预签名 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:SourceVpc` 或 `aws: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](S3OutpostsIAM.md)。

## 谁可以创建预签名 URL
<a name="S3Outpostswho-presigned-url"></a>

具有有效安全凭证的任何人都可以创建预签名 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 功能](#S3OutpostsPresignedUrlUploadObjectLimitCapabilities)。

## S3 on Outposts 何时检查预签名 URL 的到期日期和时间？
<a name="S3Outpostspresigned-url-when-checked"></a>

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

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

**Topics**
+ [限制预签名 URL 功能](#S3OutpostsPresignedUrlUploadObjectLimitCapabilities)
+ [谁可以创建预签名 URL](#S3Outpostswho-presigned-url)
+ [S3 on Outposts 何时检查预签名 URL 的到期日期和时间？](#S3Outpostspresigned-url-when-checked)
+ [使用预签名 URL 共享对象](S3OutpostsShareObjectPresignedURL.md)
+ [生成预签名 URL 以将对象上传到 S3 on Outposts 存储桶](S3OutpostsPresignedUrlUploadObject.md)