S3 -Authentifizierung

Anforderungen an das Ceph Object Gateway können authentifiziert oder nicht authentifiziert werden. Ceph Object Gateway geht davon aus, dass nicht authentifizierte Anforderungen von einem anonymen Benutzer gesendet werden. Ceph Object Gateway unterstützt vordefinierte ACLs.

Für die meisten Anwendungsfälle verwenden Clients vorhandene Open-Source-Bibliotheken wie das Amazon SDK AmazonS3Client für Java und Python Boto. Bei Open-Source-Bibliotheken übergeben Sie den Zugriffsschlüssel und den geheimen Schlüssel und die Bibliothek erstellt den Anforderungsheader und die Authentifizierungssignatur für Sie. Sie können jedoch auch Anforderungen erstellen und signieren.

Die Authentifizierung einer Anforderung erfordert einen Zugriffsschlüssel und einen Base64-codierten HMAC (Hash-based Message Authentication Code) in der Anforderung, bevor sie an den Ceph Object Gateway -Server gesendet wird. Ceph Object Gateway verwendet eine S3-compatible Authentifizierungsmethode.

Beispiel

HTTP/1.1
PUT /buckets/bucket/object.mpeg
Host: cname.domain.com
Date: Mon, 2 Jan 2012 00:01:01 +0000
Content-Encoding: mpeg
Content-Length: 9999999

Authorization: AWS _ACCESS_KEY_:_HASH_OF_HEADER_AND_SECRET_

Ersetzen Sie im Beispiel ACCESS_KEY durch den Wert für die Zugriffsschlüssel-ID gefolgt von einem Doppelpunkt (:). Ersetzen Sie HASH_OF_HEADER_AND_SECRET durch einen Hashwert einer kanonisierten Headerzeichenfolge und den geheimen Schlüssel, der der Zugriffsschlüssel-ID entspricht.

Hashwert aus Headerzeichenfolge und geheimem Schlüssel generieren.

Gehen Sie wie folgt vor, um den Hashwert der Headerzeichenfolge und des geheimen Schlüssels zu generieren:

  1. Rufen Sie den Wert der Headerzeichenfolge ab.

  2. Normalisieren Sie die Zeichenfolge des Anforderungsheaders in kanonisches Format.

  3. Generieren Sie einen HMAC mit einem SHA-1 -Hashalgorithmus.

  4. Codieren Sie das Ergebnis hmac als base-64.

Header normalisieren

Normalisieren Sie den Header in kanonisches Format.

  1. Alle content- -Header abrufen.

  2. Entfernen Sie alle content- -Header mit Ausnahme von content-type und content-md5.

  3. Stellen Sie sicher, dass die content- -Headernamen in Kleinbuchstaben geschrieben sind.

  4. Sortieren Sie die content- -Header lexikografisch.

  5. Stellen Sie sicher, dass Sie über einen Date -Header verfügen UND dass das angegebene Datum GMT und keinen Offset verwendet.

  6. Alle Header abrufen, die mit x-amz-beginnen.

  7. Stellen Sie sicher, dass die x-amz- -Header alle Kleinbuchstaben enthalten.

  8. Sortieren Sie die x-amz- -Header lexikografisch.

  9. Kombinieren Sie mehrere Instanzen desselben Feldnamens zu einem einzelnen Feld und trennen Sie die Feldwerte durch ein Komma.

  10. Ersetzen Sie Leerzeichen und Zeilenumbrüche in Headerwerten durch ein einzelnes Leerzeichen.

  11. Entfernen Sie Leerzeichen vor und nach Doppelpunkten.

  12. Nach jedem Header eine neue Zeile anhängen.

  13. Fügen Sie die Header wieder in den Anforderungsheader ein.

Ersetzen Sie HASH_OF_HEADER_AND_SECRET durch die base-64 -codierte HMAC-Zeichenfolge.