web-dev-qa-db-ja.com

S3 REST APIを介してアクセスできる有効なS3キー名は何ですか?

AWSドキュメントから、私はそれを理解しています:

  • S3キー名には、1024文字未満のUNICODE名を使用できます
  • GET OBJを使用する場合、それにアクセスするにはキー名をURLエンコードする必要があります。

ただし、これらのルールは寛容すぎるようです。

たとえば、「../../ d」というキーを作成すると、GET OBJECT APIでアクセスしようとすると400エラーが発生します。興味深いことに、「../ d」にアクセスしても問題ありません。

何が合法で何が合法でないかを明記した文書はありますか?

43
UsAaR33

AWS S3ドキュメント によると:

オブジェクトキー名にはUTF-8文字を使用できますが、次のキー命名のベストプラクティスは、他のアプリケーションとの最大の互換性を確保するのに役立ちます。各アプリケーションは、特殊文字を異なる方法で解析する場合があります。次のガイドラインは、DNS、Webセーフキャラクター、XMLパーサー、およびその他のAPIのコンプライアンスを最大限に高めるのに役立ちます。

以下を見つけてください

AWS S3公式ドキュメント のオブジェクトキー命名ガイドライン


安全なキャラクター

以下の文字セットは、キー名で使用するために一般的に安全です

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

区切り記号についての注意( "/")

有効なオブジェクトキー名の例を次に示します。

  • 4私の組織

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

  • videos/2014/birthday/video1.wmv

Amazon S3データモデルはフラットな構造であることに注意してください。バケットを作成し、バケットにオブジェクトを保存します。サブバケットまたはサブフォルダーの階層はありません。ただし、Amazon S3コンソールと同様に、キー名のプレフィックスとデリミタを使用して論理階層を推測できます。

たとえば、Private/taxdocument.pdfをキーとして使用すると、Privateフォルダーが作成され、taxdocument.pdf.

Amazon S3はバケットとオブジェクトをサポートしています。AmazonS3には階層はありません。ただし、オブジェクトキー名のプレフィックスとデリミターにより、Amazon S3コンソールとAWS SDKが階層を推測し、フォルダーの概念を導入できるようになります。


特別な処理が必要な文字

キー名に含まれる次の文字は、追加のコード処理が必要になる場合があり、URLエンコードされるか、HEXとして参照される必要があります。これらのいくつかは印刷できない文字であり、ブラウザはそれらを処理しない可能性があり、特別な処理も必要になります。

  • アンパサンド( "&")
  • 「@」記号(「@」)
  • コロン( ":")
  • コンマ ("、")
  • ドル( "$")
  • 等しい( "=")
  • プラス(「+」)
  • 疑問符( "?")
  • ASCII文字の範囲は、16進数00〜1F(10進数0〜31)および7F(10進数127)です。
  • セミコロン( ";")
  • スペース–用途によっては、スペースの重要なシーケンスが失われる場合があります(特に複数のスペース)

避けるべき文字

すべてのアプリケーションで一貫性を保つために重要な特別な処理を行うため、キー名には次の文字を使用しないでください。

  • バックスラッシュ( "\")
  • キャレット( "^")
  • グレイブアクセント/バックティック( "` ")
  • 「より大きい」記号( ">")
  • 「より小さい」記号(「<」)
  • 左中括弧( "{")
  • 右中括弧( "}")
  • 右角かっこ( "]")
  • 左角かっこ( "[")
  • 「ポンド」文字(「#」)
  • 印刷不可ASCII文字(10進数で128〜255文字))
  • パーセント文字( "%")
  • 引用符
  • ティルド( "〜")
  • 縦棒/パイプ( "|")
59
Manube

Amazonが提供する唯一の制限は( Technical FAQ に記載されています):

バケットまたはオブジェクト名に使用できる文字は何ですか?
キーは、UTF-8エンコードが最大1024バイト長のUnicode文字のシーケンスです。

追加の制限がバケットに適用されます( バケットの制限と制限 FAQのRucket for Bucket Namingセクションにあります):

米国標準地域を除くすべての地域では、バケット名は次の規則に従う必要があります。これらは、DNS準拠のバケット名になります。

  • バケット名は3文字以上63文字以下である必要があります
  • バケット名は、ピリオド(。)で区切られた一連の1つ以上のラベルである必要があります。各ラベル:
    • 小文字または数字で始まる必要があります
    • 小文字または数字で終わる必要があります
    • 小文字、数字、ダッシュを含めることができます
  • バケット名はIPアドレスとしてフォーマットしないでください(例:192.168.5.4)

米国標準地域には、より緩やかな制限が適用されます。追加情報といくつかの例については、よくある質問をご覧ください。それが役に立てば幸い!

13
Viccari