AWSドキュメントから、私はそれを理解しています:
ただし、これらのルールは寛容すぎるようです。
たとえば、「../../ d」というキーを作成すると、GET OBJECT APIでアクセスしようとすると400エラーが発生します。興味深いことに、「../ d」にアクセスしても問題ありません。
何が合法で何が合法でないかを明記した文書はありますか?
AWS S3ドキュメント によると:
オブジェクトキー名にはUTF-8文字を使用できますが、次のキー命名のベストプラクティスは、他のアプリケーションとの最大の互換性を確保するのに役立ちます。各アプリケーションは、特殊文字を異なる方法で解析する場合があります。次のガイドラインは、DNS、Webセーフキャラクター、XMLパーサー、およびその他のAPIのコンプライアンスを最大限に高めるのに役立ちます。
以下を見つけてください
以下の文字セットは、キー名で使用するために一般的に安全です:
区切り記号についての注意( "/")
有効なオブジェクトキー名の例を次に示します。
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として参照される必要があります。これらのいくつかは印刷できない文字であり、ブラウザはそれらを処理しない可能性があり、特別な処理も必要になります。
すべてのアプリケーションで一貫性を保つために重要な特別な処理を行うため、キー名には次の文字を使用しないでください。
Amazonが提供する唯一の制限は( Technical FAQ に記載されています):
バケットまたはオブジェクト名に使用できる文字は何ですか?
キーは、UTF-8エンコードが最大1024バイト長のUnicode文字のシーケンスです。
追加の制限がバケットに適用されます( バケットの制限と制限 FAQのRucket for Bucket Namingセクションにあります):
米国標準地域を除くすべての地域では、バケット名は次の規則に従う必要があります。これらは、DNS準拠のバケット名になります。
- バケット名は3文字以上63文字以下である必要があります
- バケット名は、ピリオド(。)で区切られた一連の1つ以上のラベルである必要があります。各ラベル:
- 小文字または数字で始まる必要があります
- 小文字または数字で終わる必要があります
- 小文字、数字、ダッシュを含めることができます
- バケット名はIPアドレスとしてフォーマットしないでください(例:192.168.5.4)
米国標準地域には、より緩やかな制限が適用されます。追加情報といくつかの例については、よくある質問をご覧ください。それが役に立てば幸い!