Markieren von Amazon-S3-Objekten - Amazon Simple Storage Service

Markieren von Amazon-S3-Objekten

Der Objektschlüssel (oder Schlüsselname) identifiziert das Objekt in einem Amazon-S3-Bucket eindeutig. Wenn Sie ein Objekt erstellen, geben Sie den Schlüsselnamen an. Wenn Sie in der Amazon-S3-Konsole einen Bucket auswählen, wird beispielsweise eine Liste der Objekte in Ihrem Bucket angezeigt. Diese Namen sind die Objektschlüssel.

Der Name des Objektschlüssels besteht aus einer Folge von Unicode-Zeichen, die in UTF-8 kodiert sind, mit einer maximalen Länge von 1.024 Bytes oder etwa 1.024 lateinischen Zeichen. In einigen Ländern kann ein einzelnes Zeichen 2 Bytes für die Kodierung erfordern. Achten Sie bei der Benennung Ihrer Objekte auf Folgendes:

  • Bei den Objektschlüsselnamen muss die Groß- und Kleinschreibung beachtet werden.

  • Die Namen der Objektschlüssel enthalten alle Präfixe (in der Konsole als Ordner bezeichnet). Development/Projects.xls ist beispielsweise der vollständige Objektschlüsselname des Objekts, das Projects.xls sich innerhalb des Development Präfixes (oder Ordners) befindet. Das Präfix, das Trennzeichen (/) und der Name des Objekts sind in der 1.024-Byte-Begrenzung für den Objektschlüsselnamen enthalten. Weitere Informationen zu Präfixen und Ordnern finden Sie unter Auswählen von Objektschlüsselnamen.

  • Bestimmte Zeichen erfordern möglicherweise eine besondere Behandlung, wenn sie in Objektschlüsselnamen verwendet werden. Weitere Informationen finden Sie unter Richtlinien für Objektschlüsselnamen.

Anmerkung

Objekt-Schlüsselnamen mit dem Wert "soap" werden für Anfragen im Virtual-Hosting-Stil nicht unterstützt. Für Werte von Objektschlüsselnamen, bei denen „"soap"“ verwendet wird, muss stattdessen eine URL im Pfadformat verwendet werden.

Auswählen von Objektschlüsselnamen

Das Amazon-S3-Datenmodell ist eine flache Struktur: Sie erstellen einen Bucket und der Bucket speichert Objekte. Es gibt keine Hierarchie von Unter-Buckets oder Unterordnern. Sie können jedoch mit den Schlüsselnamenpräfixen und Trennzeichen eine logische Hierarchie erschließen, wie in der Amazon-S3-Konsole. Die Amazon-S3-Konsole unterstützt ein Ordnerkonzept. Weitere Informationen zum Bearbeiten von Metadaten über die Amazon-S3-Konsole finden Sie unter Bearbeiten von Objektmetadaten in der Amazon-S3-Konsole.

Angenommen, Ihr Bucket (admin-created) enthält vier Objekte mit den folgenden Objektschlüsseln:

Development/Projects.xls

Finance/statement1.pdf

Private/taxdocument.pdf

s3-dg.pdf

Die Konsole verwendet die Schlüsselnamenpräfixe (Development/, Finance/ und Private/) und das Trennzeichen (/), um eine Ordnerstruktur wie dargestellt anzuzeigen. Der Schlüssel s3-dg.pdf enthält kein durch Schrägstrich begrenztes Präfix, so dass sein Objekt direkt auf der Stammebene des Buckets erscheint. Wenn Sie den Ordner Development/ öffnen, werden Sie darin das Objekt Projects.xlsx sehen.

  • Amazon S3 unterstützt Buckets und Objekt. Es gibt keine Hierarchie in Amazon S3. Die Präfixe und Trennzeichen in einem Objektschlüssel-Namen ermöglichen der Amazon-S3-Konsole und den AWS-SDKs jedoch, eine Hierarchie abzuleiten und das Ordnerkonzept einzuführen.

  • Die Amazon-S3-Konsole implementiert die Ordnerobjekterstellung, indem sie ein Null-Byte-Objekt mit dem Wert des Ordners für Präfix und Trennzeichen als Schlüssel erstellt. Diese Ordnerobjekte werden nicht in der Konsole angezeigt. Ansonsten verhalten sie sich wie alle anderen Objekte und können über die REST-API, AWS-CLI und AWS-SDKs angezeigt und manipuliert werden.

Richtlinien für Objektschlüsselnamen

Sie können in einem Objektschlüsselnamen jedes beliebige UTF-8-Zeichen verwenden. Die Verwendung bestimmter Zeichen in Schlüsselnamen kann jedoch bei manchen Anwendungen und Protokollen zu Problemen führen. Die folgenden Richtlinien helfen Ihnen, die Compliance mit DNS, web-sicheren Zeichen, XML-Parsern und anderen APIs zu maximieren.

Sichere Zeichen

Die folgenden Zeichensätze sind allgemein sicher für die Verwendung in Schlüsselnamen:

Alphanumeric characters
  • 0-9

  • a-z

  • A-Z

Special characters
  • Ausrufezeichen (!)

  • Bindestrich (-)

  • Unterstrich (_)

  • Punkt (.)

  • Sternchen (*)

  • Einfache Anführungszeichen (')

  • Öffnende Klammer (()

  • Schließende Klammer ())

Nachfolgend finden Sie Beispiele für gültige Objektschlüsselnamen:

  • 4my-organization

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

  • videos/2014/birthday/video1.wmv

Anmerkung

Wenn Sie die Amazon-S3-Konsole zum Herunterladen von Objekten verwenden, deren Schlüsselnamen mit einem Punkt enden (.), werden die Punkte aus den Enden der Schlüsselnamen der heruntergeladenen Objekte entfernt. Zur Beibehaltung von Punkten am Ende von Schlüsselnamen in heruntergeladenen Objekten müssen Sie die SDKs AWS Command Line Interface (AWS CLI), AWS oder die Amazon S3 REST-API verwenden.

Darüber hinaus sollten Sie folgende Präfixbeschränkungen beachten:

  • Objekte mit einem Präfix ./ müssen mit den SDKs AWS CLI, AWS oder der REST-API hoch- oder heruntergeladen werden. Sie können die Amazon-S3-Konsole nicht zum Hochladen dieser Objekte verwenden.

  • Objektschlüssel, die relative Pfadelemente enthalten (z. B. ../), sind gültig, wenn bei dem Parsen von links nach rechts die kumulative Anzahl relativer Pfadsegmente niemals die Anzahl der gefundenen nicht-relativen Pfadelemente übersteigt. Diese Regel gilt für alle Anfragen, die über die Amazon-S3-Konsole, die Amazon-S3-REST-API AWS CLI, und die AWS SDKs gestellt werden.

    Zum Beispiel:

    • videos/2014/../../video1.wmv ist gültig.

    • videos/../../video1.wmv ist ungültig.

    • videos/../../2014/video1.wmv ist ungültig.

Nur-Perioden-Pfadsegmente

Objektschlüssel, die Pfadsegmente (. oder ..) enthalten, können zu unerwartetem Verhalten führen, wenn sie von Anwendungen, SDKs oder Tools verarbeitet werden, die diese als relative Pfadverweise interpretieren.

Die folgenden Muster können Probleme verursachen:

  • folder/./file.txt – Enthält den aktuellen Verzeichnisverweis

  • folder/../file.txt – Enthält den Verweis auf das übergeordnete Verzeichnis

  • ./file.txt – Beginnt mit der aktuellen Verzeichnisreferenz

  • ../file.txt – Beginnt mit der Referenz auf das übergeordnete Verzeichnis

Die folgenden Muster funktionieren normalerweise:

  • folder/.hidden/file.txt – Der Punkt ist Teil des Dateinamens und nicht eigenständig

  • folder/..backup/file.txt – Punkte sind Teil des Dateinamens, nicht eigenständig

Wenn Anwendungen Objektschlüssel mit Nur-Perioden-Segmenten verarbeiten, kann es zu den folgenden Verhaltensauswirkungen kommen:

  • Normalisierung von Pfaden – Viele Systeme lösen .- und ..-Referenzen automatisch auf, wodurch sich der effektive Pfad möglicherweise ändert (beispielsweise wird folder/./file.txt zu folder/file.txt).

  • Zugriffsprobleme – Anwendungen können Objekte aufgrund unterschiedlicher Pfadauflösungen möglicherweise nicht finden

  • Inkonsistentes Verhalten – Verschiedene Tools und SDKs können diese Muster unterschiedlich handhaben

Wichtig

Um diese Probleme zu vermeiden, empfehlen wir, Pfadsegmente, die nur aus Punkten bestehen, in Objektschlüsselnamen zu vermeiden. Verwenden Sie alternative Namenskonventionen für organisatorische Zwecke.

Zeichen, die möglicherweise eine Sonderverarbeitung benötigen

Die folgenden Zeichen in einem Schlüsselnamen erfordern möglicherweise eine zusätzliche Codebehandlung und müssen höchstwahrscheinlich URL-kodiert oder als HEX referenziert werden. Bei einigen dieser Zeichen handelt es sich um nicht druckbare Zeichen, die Ihr Browser möglicherweise nicht verarbeiten kann und die ebenfalls eine besondere Behandlung erfordern:

  • Ampersand (&)

  • Dollarzeichen ($)

  • ASCII-Zeichenbereiche 00–1F hex (0–31 dezimal) und 7F (127 dezimal)

  • At-Symbol (@)

  • Gleichheitszeichen (=)

  • Semikolon (;)

  • Schrägstrich (/)

  • Doppelpunkt (:)

  • Pluszeichen (+)

  • Leerzeichen - In einigen Fällen können erhebliche Folgen von Leerzeichen verloren gehen (insbesondere mehrere Leerzeichen)

  • Komma (,)

  • Fragezeichen (?)

Zeichen, die Sie vermeiden sollten

Es wird empfohlen, die folgenden Zeichen nicht in einem Schlüsselnamen zu verwenden, da die Behandlung von Sonderzeichen sehr komplex ist und nicht in allen Anwendungen einheitlich ist:

  • Umgekehrter Schrägstrich (\)

  • Linke Klammer ({)

  • Nicht darstellbare ASCII-Zeichen (128-255 Dezimalzeichen)

  • Caret-Zeichen oder Zirkumflex (^)

  • Rechte Klammer (})

  • Prozentzeichen (%)

  • Grauer Akzent oder Backtick (`)

  • Rechte Klammer (])

  • Anführungszeichen (")

  • Größer-als-Zeichen (>)

  • Linke Klammer ([)

  • Tilde (~)

  • Kleiner-als-Zeichen (<)

  • Pfund-Zeichen (#)

  • Vertikale Stange oder Rohr (|)

Wie im XML-Standard zur Behandlung von Zeilenenden spezifiziert, wird der gesamte XML-Text so normalisiert, dass einzelne Wagenrückläufe (ASCII-Code 13) und Wagenrückläufe, die unmittelbar von einem Zeilenvorschub (ASCII-Code 10) gefolgt werden, auch als Zeilenvorschubzeichen bekannt, durch ein einzelnes Zeilenvorschubzeichen ersetzt werden. Um das korrekte Parsen von Objektschlüsseln in XML-Anfragen zu gewährleisten, müssen Zeilenumbrüche und andere Sonderzeichen durch ihren entsprechenden XML-Entity-Code ersetzt werden, wenn sie in XML-Tags eingefügt werden.

Im Folgenden finden Sie eine Liste solcher Sonderzeichen und ihrer entsprechenden XML-Entity-Codes:

  • Apostroph (') muss durch &apos; ersetzt werden

  • Das Anführungszeichen (") muss durch &quot; ersetzt werden.

  • Das Ampersand (&) muss durch &amp;ersetzt werden.

  • Das Zeichen "kleiner als" (<) muss durch &lt; ersetzt werden.

  • Das Größer-als-Zeichen (>) muss durch &gt; ersetzt werden.

  • Carriage Return (\r) muss durch &#13; oder &#x0D; ersetzt werden

  • Der Zeilenumbruch (\n) muss durch &#10; oder &#x0A; ersetzt werden.

Das folgende Beispiel veranschaulicht die Verwendung eines XML-Entitätscodes als Ersatz für eine Zeilenumschaltung. Diese DeleteObjects-Anforderung löscht ein Objekt mit dem key-Parameter /some/prefix/objectwith\rcarriagereturn (wobei \r die Zeilenumschaltung ist).

<Delete xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Object> <Key>/some/prefix/objectwith&#13;carriagereturn</Key> </Object> </Delete>

Sortierschlüssel des Objekts

Amazon S3 sortiert Objektschlüssel, einschließlich Präfixe, lexikografisch nach ihren UTF-8-kodierten Byte-Werten.

ASCII-Zeichen werden in der folgenden Reihenfolge sortiert:

  • Sonderzeichen (z. B. !, /)

  • Großbuchstaben (A–Z)

  • Kleinbuchstaben (a–z)

Nicht-ASCII-Zeichen (z. B. é, 中 文) werden als Multibyte-UTF-8-Sequenzen codiert und werden aufgrund ihrer höheren Bytewerte in der Regel nach ASCII-Zeichen sortiert (z. B. 0xC3 für é, 0xE4 für 中).

Präfixe wie apple/, Apple/, éclair/, 中 文/ würden beispielsweise wie folgt sortiert:

1. Apple/ (beginnt mit 0x41)

2. apple/ (beginnt mit 0x61)

3. éclair/ (beginnt mit 0xC3 0xA9)

4. 中 文/ (beginnt mit 0xE4 0xB8 0xAD 0xE6 0x96 0x87)