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:
Rufen Sie den Wert der Headerzeichenfolge ab.
Normalisieren Sie die Zeichenfolge des Anforderungsheaders in kanonisches Format.
Generieren Sie einen HMAC mit einem SHA-1 -Hashalgorithmus.
Codieren Sie das Ergebnis
hmacals base-64.
Header normalisieren
Normalisieren Sie den Header in kanonisches Format.
Alle
content--Header abrufen.Entfernen Sie alle
content--Header mit Ausnahme voncontent-typeundcontent-md5.Stellen Sie sicher, dass die
content--Headernamen in Kleinbuchstaben geschrieben sind.Sortieren Sie die
content--Header lexikografisch.Stellen Sie sicher, dass Sie über einen
Date-Header verfügen UND dass das angegebene Datum GMT und keinen Offset verwendet.Alle Header abrufen, die mit
x-amz-beginnen.Stellen Sie sicher, dass die
x-amz--Header alle Kleinbuchstaben enthalten.Sortieren Sie die
x-amz--Header lexikografisch.Kombinieren Sie mehrere Instanzen desselben Feldnamens zu einem einzelnen Feld und trennen Sie die Feldwerte durch ein Komma.
Ersetzen Sie Leerzeichen und Zeilenumbrüche in Headerwerten durch ein einzelnes Leerzeichen.
Entfernen Sie Leerzeichen vor und nach Doppelpunkten.
Nach jedem Header eine neue Zeile anhängen.
Fügen Sie die Header wieder in den Anforderungsheader ein.
Ersetzen Sie HASH_OF_HEADER_AND_SECRET durch die base-64 -codierte HMAC-Zeichenfolge.