什么是可以通过S3 rest API访问的有效S3密钥名称?

UsA*_*R33 45 amazon-s3

从AWS文档中,我理解:

  • S3密钥名称可以是任何UNICODE名称<1024个字符
  • 使用GET OBJ时,我需要对密钥名称进行URL编码以访问它.

但是,这些规则似乎过于宽松.

例如,如果我创建一个名为"../../d"的密钥,当我尝试使用GET OBJECT API访问它时会发生400 ERROR.有趣的是,访问'../d'没问题.

是否有文件说明什么是合法的?

Man*_*ube 63

根据AWS S3文档:

虽然您可以在对象键名称中使用任何UTF-8字符,但以下键命名最佳实践有助于确保与其他应用程序的最大兼容性.每个应用程序可以不同地解析特殊字符.以下准则可帮助您最大限度地遵守DNS,Web安全字符,XML解析器和其他API.

请在下面找到

AWS S3官方文档中的对象键命名准则


安全的人物

以下字符集通常可以安全地用于密钥名称:

  • 字母数字字符:0-9 az AZ
  • 特殊字符:! - _.*'()

关于DELIMITER的注释(" / ")

以下是有效对象键名称的示例:

  • 4my组织

  • my.great_photos-2014/JAN/myvacation.jpg

  • 视频/ 2014 /生日/ video1.wmv

请注意,Amazon S3数据模型是扁平结构:您创建存储桶,存储桶存储对象.没有subbuckets或子文件夹的层次结构; 但是,您可以使用keyname前缀和分隔符来推断逻辑层次结构,如Amazon S3控制台所做的那样.

例如,如果您使用Private/taxdocument.pdf作为键,它将创建Private文件夹,其中包含taxdocument.pdf.

Amazon S3支持存储桶和对象,Amazon S3中没有层次结构.但是,对象键名称中的前缀和分隔符使Amazon S3控制台和AWS开发工具包能够推断层次结构并引入文件夹的概念.


可能需要特殊处理的字符

密钥名称中的以下字符可能需要额外的代码处理,并且可能需要进行URL编码或引用为HEX.其中一些是不可打印的字符,您的浏览器可能无法处理它们,这也需要特殊处理:

  • &符号("&")
  • 'at'符号("@")
  • 冒号(":")
  • 逗号(",")
  • 美元("$")
  • 等于("=")
  • 加("+")
  • 问号("?")
  • ASCII字符范围为00-1F十六进制(十进制0-31)和7F(十进制127).
  • 分号(";")
  • 空间 - 在某些用途(特别是多个空间)中可能会丢失重要的空间序列

要避免的字符

您应该避免键名中的以下字符,因为对所有应用程序的一致性进行了重要的特殊处理.

  • 反斜杠("\")
  • 插入符号("^")
  • 严重的重音/后退("")
  • '大于'符号(">")
  • '小于'符号("<")
  • 左大括号("{")
  • 右大括号("}")
  • 右方括号("]")
  • 左方括号("[")
  • '磅'字符("#")
  • 不可打印的ASCII字符(128-255十进制字符)
  • 百分比字符("%")
  • 引号
  • Tilde("〜")
  • 垂直杆/管("|")


Vic*_*ari 13

亚马逊提供的唯一限制是(在他们的技术常见问题解答中找到):

存储桶或对象名称中允许使用哪些字符?
密钥是一系列Unicode字符,其UTF-8编码长度最多为1024个字节.

其他限制适用于Buckets(如Bucket Restrictions and Limitations常见问题解答中的Bucket Naming规则部分所示):

在除美国标准区域以外的所有区域中,存储桶名称必须符合以下规则.这些导致符合DNS的存储桶名称.

  • 存储桶名称长度必须至少为3且不超过63个字符
  • 存储桶名称必须是一系列由句点(.)分隔的一个或多个标签,其中每个标签:
    • 必须以小写字母或数字开头
    • 必须以小写字母或数字结尾
    • 可以包含小写字母,数字和短划线
  • 存储桶名称不得格式化为IP地址(例如,192.168.5.4)

较不宽容的限制适用于美国标准区域.有关其他信息和一些示例,请参阅常见问题解答.希望能帮助到你!

  • 我担心对象(键)名称的无证限制.亚马逊声称任何unicode工作,但显然'../../ word'没有.我想知道还有什么不支持...... (6认同)