首页 > 解决方案 > AWS S3 的保留参数名称列表

问题描述

似乎 GET 参数location是 AWS S3 上的保留参数。假设我在 S3 存储桶上有一个资源,可通过 Web 访问:

http://my-bucket.s3.amazonaws.com/index.html

...我只是将 GET 参数附加location到它,我得到一个 HTTP 403:

http://my-bucket.s3.amazonaws.com/index.html?location=US

只要我将参数名称更改为其他名称,它就可以工作。例如:

http://my-bucket.s3.amazonaws.com/index.html?loc=US

所以很明显location是 AWS S3 中的保留字。我的问题是:是否有一个我不应该尝试将其用作 S3 的 GET 参数的所有保留字的列表?

我搜索了文档,但找不到任何此类列表。

标签: amazon-s3

解决方案


location在查询中告诉 S3 您正在询问存储桶的位置。它是 S3 中通过查询字符串参数访问的几个“子资源”(不是对象的东西)之一。

您可能可以通过查看整个 API 参考文档来编译一个几乎完整的列表,但这里是一些旧文档(签名版本 2)中的部分列表:

构建 CanonicalizedResource 元素时必须包含的子资源是 acl、生命周期、位置、日志记录、通知、partNumber、策略、requestPayment、torrent、uploadId、uploads、versionId、versioning、versions 和 website。

https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html

他们会定期添加新的,例如selectanddeletetagging,因此详尽的列表不是面向未来的。

您最安全的选择是使用以开头的参数x-(但不以开头,x-amz因为这些可能被保留或带有其他含义)。日志记录文档中提到了这一点:

您可以通过将自定义查询字符串参数添加到请求的 URL 来包含要存储在请求的访问日志记录中的自定义信息。Amazon S3 忽略以“x-”开头的查询字符串参数,但将这些参数包含在请求的访问日志记录中,作为日志记录的 Request-URI 字段的一部分。

https://docs.aws.amazon.com/AmazonS3/latest/dev/LogFormat.html


推荐阅读