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

时间:2011-08-19 02:48:26

标签: amazon-s3

从AWS文档中,我理解:

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

然而,这些规则似乎过于宽松。

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

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

2 个答案:

答案 0 :(得分:52)

根据AWS S3 documentation

  

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

请在下面找到

AWS S3 official documentation

中的对象键命名指南

安全字符

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

  • 字母数字字符: 0-9 a-z A-Z
  • 特殊字符:! - _。 *'()

关于DELIMITER的注释(“ / ”)

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

  • 4my组织

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

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

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

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

  

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

可能需要特殊处理的字符

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

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

要避免的字符

由于对所有应用程序的一致性进行了重要的特殊处理,因此应避免键名中包含以下字符。

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

答案 1 :(得分:13)

亚马逊提供的唯一限制是(在Technical FAQ上找到):

  

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

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

  

在除美国标准区域以外的所有地区,水桶名称必须符合   遵守规则。这会产生符合DNS的存储桶名称。

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

不太宽松的限制适用于美国标准区域。请参阅常见问题解答 信息和一些例子。希望它有所帮助!