73 Stimmen

Was sind gültige S3-Schlüsselnamen, auf die über die S3-Rest-API zugegriffen werden kann?

Aus den AWS-Dokumenten entnehme ich das:

  • S3-Schlüsselnamen können beliebige UNICODE-Namen < 1024 Zeichen sein
  • Wenn ich GET OBJ verwende, muss ich den Schlüsselnamen mit einer URL kodieren, um darauf zuzugreifen.

Diese Regeln scheinen jedoch zu freizügig zu sein.

Wenn ich zum Beispiel einen Schlüssel mit dem Namen '../../d' erstelle, tritt ein 400 ERROR auf, wenn ich versuche, mit der GET OBJECT API darauf zuzugreifen. Interessanterweise habe ich kein Problem, auf '../d' zuzugreifen.

Gibt es ein Dokument, in dem festgelegt ist, was legal ist und was nicht?

103voto

Manube Punkte 5050

Nach Angaben von AWS S3-Dokumentation :

Obwohl Sie beliebige UTF-8-Zeichen in einem Objektschlüsselnamen verwenden können, tragen die folgenden Best Practices für die Benennung von Schlüsseln dazu bei, maximale Kompatibilität mit anderen Anwendungen zu gewährleisten. Jede Anwendung kann Sonderzeichen anders interpretieren. Die folgenden Richtlinien helfen Ihnen, die Konformität mit DNS, websicheren Zeichen, XML-Parsern und anderen APIs zu maximieren.

Nachstehend finden Sie die

Objektschlüssel-Benennungsrichtlinien aus dem Offizielle AWS S3-Dokumentation


Sichere Zeichen

Die folgenden Zeichensätze sind im Allgemeinen sicher zur Verwendung in Schlüsselnamen:

  • Alphanumerische Zeichen: 0-9 a-z A-Z
  • Besondere Zeichen: ! - _ . * ' ( )

HINWEIS ZUM BEGRENZUNGSZEICHEN (" / ")

Im Folgenden finden Sie Beispiele für gültige Objektschlüsselnamen:

  • 4meine-Organisation

  • my.great_photos-2014/jan/mein-urlaub.jpg

  • videos/2014/geburtstag/video1.wmv

Beachten Sie, dass das Amazon S3-Datenmodell eine flache Struktur hat: Sie erstellen einen Bucket, und der Bucket speichert Objekte. Es gibt keine Hierarchie von Unter-Buckets oder Unter-Ordnern; Sie können jedoch eine logische Hierarchie mithilfe von Keyname-Präfixen und Begrenzern ableiten, wie es die Amazon S3-Konsole tut.

z.B. wenn Sie verwenden Privat/Steuerdokument.pdf als Schlüssel, wird die Datei Privat Ordner, mit Steuerbeleg.pdf darin.

Amazon S3 unterstützt Buckets und Objekte, es gibt keine Hierarchie in Amazon S3. Die Präfixe und Trennzeichen in einem Objektschlüsselnamen ermöglichen es der Amazon S3-Konsole und den AWS SDKs jedoch, eine Hierarchie abzuleiten und das Konzept von Ordnern einzuführen.


Zeichen, die eine besondere Behandlung erfordern könnten

Die folgenden Zeichen in einem Schlüsselnamen erfordern möglicherweise eine zusätzliche Codebehandlung und müssen wahrscheinlich URL-kodiert oder als HEX referenziert werden. Einige dieser Zeichen sind nicht druckbare Zeichen und Ihr Browser kann sie möglicherweise nicht verarbeiten, was ebenfalls eine besondere Behandlung erfordert:

  • Ampersand ("&")
  • At"-Symbol ("@")
  • Doppelpunkt (":")
  • Komma (",")
  • Dollar ("$")
  • Ist gleich ("=")
  • Plus ("+")
  • Fragezeichen ("?")
  • ASCII-Zeichenbereiche 00-1F hex (0-31 dezimal) und 7F (127 dezimal).
  • Semikolon (";")
  • Platz - Bei einigen Verwendungen können bedeutende Abfolgen von Räumen verloren gehen (insbesondere Mehrfachräume)

Zu vermeidende Zeichen

Sie sollten die folgenden Zeichen in einem Schlüsselnamen vermeiden, da sie aus Gründen der Konsistenz in allen Anwendungen eine wichtige Sonderbehandlung erfahren.

  • Backslash ("")
  • Caret ("^")
  • Grauer Akzent / Rückwärtshaken ("`")
  • Symbol "Größer als" (">")
  • Symbol "Kleiner als" ("<")
  • Linke geschweifte Klammer ("{")
  • Rechte geschweifte Klammer ("}")
  • Rechte eckige Klammer ("]")
  • Linke eckige Klammer ("[")
  • Pfund"-Zeichen ("#")
  • Nicht druckbare ASCII-Zeichen (128-255 dezimale Zeichen)
  • Prozentzeichen ("%")
  • Anführungszeichen
  • Tilde ("~")
  • Vertikaler Balken / Rohr ("|")

12voto

Viccari Punkte 8669

Die einzige von Amazon angegebene Einschränkung ist (wie auf der Website zu finden) Technische FAQ ):

Welche Zeichen sind in einem Bucket- oder Objektnamen erlaubt?
Ein Schlüssel ist eine Folge von Unicode-Zeichen, deren UTF-8-Kodierung höchstens 1024 Bytes lang ist.

Für Buckets gelten zusätzliche Einschränkungen (wie auf der Seite Regeln für die Benennung von Eimern Abschnitt ihres Einschränkungen und Begrenzungen von Eimern FAQ):

In allen Regionen mit Ausnahme der US-Standard-Region muss ein Eimername die folgenden Bedingungen erfüllen folgenden Regeln entsprechen. Daraus ergibt sich ein DNS-kompatibler Bucket-Name.

  • Bucket-Namen müssen mindestens 3 und dürfen höchstens 63 Zeichen lang sein
  • Der Name des Eimers muss eine Reihe von einer oder mehreren Bezeichnungen sein, die durch einen Punkt (.) getrennt sind, wobei jede Bezeichnung:
    • Muss mit einem Kleinbuchstaben oder einer Zahl beginnen
    • Muss mit einem Kleinbuchstaben oder einer Zahl enden
    • Kann Kleinbuchstaben, Zahlen und Bindestriche enthalten
  • Bucket-Namen dürfen nicht als IP-Adresse formatiert werden (z. B. 192.168.5.4).

Für die US-Standardregion gelten weniger freizügige Einschränkungen. Weitere Informationen finden Sie in den FAQs Informationen und einige Beispiele. Ich hoffe, es hilft Ihnen!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X