Unterstützung für die Amazon S3-Kompatibilitäts-API für Object Storage

Erfahren Sie, wie Object Storage die Amazon S3-Kompatibilitäts-API unterstützt.

Unterstützung für die Amazon S3-Kompatibilitäts-API wird auf Bucket- und Objektebene bereitgestellt. Die Amazon S3-Kompatibilitäts-API unterstützt Versions-IDs.

Bucket-APIs

Folgende Bucket-APIs werden unterstützt:

Objekt-APIs

Folgende Objekt-APIs werden unterstützt:

APIs für Multipart-Uploads

Folgende APIs für Multipart-Uploads werden unterstützt:

Tagging-APIs

Folgende Tagging-APIs werden unterstützt:

SSE-C-Unterstützung

Über optionale API-Header können Sie einen eigenen 256-Bit-AES-Verschlüsselungsschlüssel angeben, mit dem Objekte verschlüsselt und entschlüsselt werden, die in Object Storage hochgeladen und daraus heruntergeladen werden.

Um Ihre eigenen Schlüssel für serverseitige Verschlüsselung zu verwenden, geben Sie die folgenden drei Anforderungsheader mit den Verschlüsselungsschlüsselinformationen an:

Header Beschreibung Unterstützte APIs
x-amz-server-side-encryption-customer-algorithm Gibt "AES256" als Verschlüsselungsalgorithmus an.

GetObject

HeadObject

PutObject

InitiateMultipartUpload

UploadPart

x-amz-server-side-encryption-customer-key Gibt den base64-codierten 256-Bit-Verschlüsselungsschlüssel an, mit dem die Daten verschlüsselt oder entschlüsselt werden sollen.
x-amz-server-side-encryption-customer-key-md5 Gibt den base64-codierten 128-Bit-MD5-Digest des Verschlüsselungsschlüssels an. Mit diesem Wert wird die Integrität des Verschlüsselungsschlüssels überprüft.

Object Storage verfügt über eindeutige APIs zum Kopieren von Objekten und Teilen. Amazon S3 verwendet die folgenden Header in PutObject und UploadPart, um Kopiervorgänge zu bestimmen. Um ein Quellobjekt zu kopieren, das mit einem SSE-C-Schlüssel verschlüsselt ist, müssen Sie diese drei Header angeben, damit Object Storage das Objekt entschlüsseln kann.

Header Beschreibung Unterstützte APIs
x-amz-copy-source-server-side-encryption-customer-algorithm Gibt "AES256" als Verschlüsselungsalgorithmus an, mit dem das Quellobjekt entschlüsselt werden soll.

PutObject

UploadPart

x-amz-copy-source-server-side-encryption-customer-key Gibt den von base64-codierten 256-Bit-Verschlüsselungsschlüssel an, mit dem das Quellobjekt entschlüsselt werden soll.
x-amz-copy-source-server-side-encryption-customer-key-md5 Gibt den base64-codierten 128-Bit-MD5-Digest des Verschlüsselungsschlüssels an, mit dem das Quellobjekt entschlüsselt wird.

Unterstützung für Verschlüsselung mit eigenen Schlüsseln in Vault

Über optionale API-Header können Sie einen eigenen Verschlüsselungsschlüssel in Vault angeben, um Objekte zu verschlüsseln, die in Object Storage hochgeladen werden.

Um Ihre eigenen Schlüssel in Vault für serverseitige Verschlüsselung zu verwenden, geben Sie den folgenden Anforderungsheader mit der OCID des Schlüssels in Vault an:

Header Beschreibung Unterstützte APIs
x-amz-server-side-encryption-aws-kms-key-id OCID eines vorhandenen Schlüssels in Vault zur Verschlüsselung des Objekts.

PutObject

InitiateMultipartUpload

UploadPart

Unterstützte Amazon S3-Clients

Sie können verschiedene Clientanwendungen für die Kommunikation mit den Amazon S3-fähigen Endpunkten von Object Storage konfigurieren. Dieses Thema enthält einige Konfigurationsbeispiele für unterstützte Amazon S3-Clients. Prüfen Sie die Voraussetzungen unter Voraussetzungen für die Amazon S3-Kompatibilitäts-API.

AWS-SDK für Java

Das Repository des AWS-SDK für Java, der Dateidownload und Dokumentationslinks sind auf GitHub verfügbar: https://github.com/AWS/AWS-SDK-java.

Im Folgenden finden Sie ein Beispiel für die Konfiguration des AWS-SDK für Java für die Verwendung von Object Storage:


                // Put the Access Key and Secret Key here
                
AWSCredentialsProvider credentials = new AWSStaticCredentialsProvider(new BasicAWSCredentials(
 "gQ4+YC530sBa8qZI6WcbUbtH8oar0exampleuniqueID",
 "7fa22331ebe62bf4605dc9a42aaeexampleuniqueID"))));

// Your namespace
String namespace = "namespace";

// The region to connect to
String region = "us-ashburn-1";

// Create an S3 client pointing at the region
String endpoint = String.format("%s.compat.objectstorage.%s.oraclecloud.com",namespace,region);
AwsClientBuilder.EndpointConfiguration endpointConfiguration = new AwsClientBuilder.EndpointConfiguration(endpoint, region);
AmazonS3 client = AmazonS3Client.builder()
 .standard()
 .withCredentials(credentials)
 .withEndpointConfiguration(endpointConfiguration)
 .disableChunkedEncoding()
 .enablePathStyleAccess()
 .build();

AWS-SDK für JavaScript

Das Repository des AWS-SDK für JavaScript, Dokumentationslinks und Installationsanweisungen sind auf GitHub verfügbar: https://github.com/AWS/AWS-SDK-js.

Im Folgenden finden Sie ein Beispiel für die Konfiguration des AWS-SDK für Javascript für die Verwendung von Object Storage

s3 = new AWS.S3({
  region: 'us-ashburn-1',
  endpoint: 'https://' + mynamespace + '.compat.objectstorage.us-ashburn-1.oraclecloud.com',
  accessKeyId: 'gQ4+YC530sBa8qZI6WcbUbtH8oar0exampleuniqueID',
  secretAccessKey: '7fa22331ebe62bf4605dc9a42aaeexampleuniqueID',
  s3ForcePathStyle: true,
  signatureVersion: 'v4',
});

AWS-SDK für Python (Boto3)

Das Repository des AWS SDK für Python (Boto3), Dokumentationslinks und Installationsanweisungen sind auf GitHub verfügbar: https://github.com/boto/boto3.

Im Folgenden finden Sie ein Beispiel für die Konfiguration des AWS-SDK für Python zur Verwendung von Object Storage:

import boto3
  
s3 = boto3.resource(
    's3',
    aws_access_key_id="gQ4+YC530sBa8qZI6WcbUbtH8oar0exampleuniqueID",
    aws_secret_access_key="7fa22331ebe62bf4605dc9a42aaeexampleuniqueID",
    region_name="us-phoenix-1", # Region name here that matches the endpoint
    endpoint_url="https://mynamespace.compat.objectstorage.us-phoenix-1.oraclecloud.com" # Include your namespace in the URL
)
  
# Print out the bucket names
for bucket in s3.buckets.all():
    print bucket.name

Object Storage-Buckets mit s3fs mounten

Mit s3fs können Linux und macOS Object Storage als Dateisystem mounten. Das s3fs-Repository, Dokumentationslinks, Installationsanweisungen und Beispiele sind auf GitHub verfügbar: https://github.com/s3fs-fuse/s3fs-fuse.

s3fs ist nicht für alle Anwendungen geeignet. Es gelten die folgenden Einschränkungen:

  • Object Storage-Services weisen im Vergleich zu lokalen Dateisystemen eine hohe Latenz für Time To First Byte auf, und es ist kein zufälliger Schreibzugriff vorhanden. s3fs erreicht den besten Durchsatz für Workloads, die nur große Dateien lesen.

  • Sie können eine Datei nicht teilweise aktualisieren. Wenn Sie also ein Byte ändern, muss die gesamte Datei hochgeladen werden.

  • Bei zufälligen Schreibvorgängen oder Anhängen an Dateien muss die gesamte Datei neu geschrieben werden.

  • s3fs unterstützt keine Teildownloads. Wenn Sie nur ein Byte einer Datei lesen möchten, müssen Sie die gesamte Datei herunterladen.

  • s3fs unterstützt keine serverseitigen Dateikopien. Kopierte Dateien müssen zuerst auf den Client heruntergeladen und dann in den neuen Speicherort hochgeladen werden.

  • Metadatenvorgänge wie das Auflisten von Verzeichnissen weisen aufgrund der Netzwerklatenz eine schlechte Performance auf.

  • s3fs unterstützt keine Hardlinks oder die atomaren Namen von Dateien oder Verzeichnissen.

  • s3fs bietet keine Koordination zwischen mehreren Clients, die denselben Bucket mounten.

So mounten Sie einen Object Storage-Bucket als Dateisystem

  1. Befolgen Sie die auf GitHub bereitgestellten Installationsanweisungen: https://github.com/s3fs-fuse/s3fs-fuse.

    Wenn Sie die Installation mit einem vordefinierten Package nicht durchführen können, befolgen Sie die Kompilierungsanweisungen hier: https://github.com/s3fs-fuse/s3fs-fuse/blob/master/COMPILATION.md.

  2. Prüfen und führen Sie die Voraussetzungen unter Voraussetzungen für die Amazon S3-Kompatibilitäts-API aus. Sie benötigen ein Zugriffsschlüssel-/Secret Key-Paar und eine korrekte IAM-Policy, mit der Sie einen Bucket als Dateisystem mounten können. Beispiel:
    Allow group s3fsAdmins to manage object-family in compartment MyCompartment
  3. Geben Sie Ihre Zugangsdaten für das Zugriffsschlüssel-/Secret-Key-Paar in eine ${HOME}/.passwd-s3fs-Zugangsdatendatei ein:
    cat ${HOME}/.passwd-s3fs
    access_key:secret_key

    Beispiel:

    cat ${HOME}/.passwd-s3fs
    gQ4+YC530sBa8qZI6WcbUbtH8oar0exampleuniqueID:7fa22331ebe62bf4605dc9a42aaeexampleuniqueID

    Legen Sie dann die Nur-Eigentümer-Berechtigungen für die Zugangsdatendatei fest:

    chmod 600 ${HOME}/.passwd-s3fs
  4. Erstellen Sie einen Mount Point, um einen Object Storage-Bucket zu mounten:
    mkdir /path/to/<local_directory_name>
    s3fs bucket_name local_directory_name -o passwd_file=${HOME}/.passwd-s3fs -o url=https://<namespace_name>.compat.objectstorage.<region_ID>.oraclecloud.com -o use_path_request_style -o kernel_cache -o multipart_size=128 -o parallel_count=50 -o multireq_max=100 -o max_background=1000 [-o endpoint=<region_ID>]

    Wobei:

    • bucket_name ist der Name des Bucket, den Sie einhängen möchten.
    • local_directory_name ist der Name des lokalen Verzeichnisses, in dem Sie den Bucket mounten möchten.
    • namespace_name ist der eindeutige, vom System generierte Mandant, der Ihrem Mandanten beim Erstellen des Accounts zugewiesen wird. Sie können den Namespace-Namen über die Befehlszeilenschnittstelle (CLI) oder über die Konsole abrufen. Weitere Informationen finden Sie unter Object Storage-Namespaces.
    • region_ID ist die ID der Region, in der sich der Bucket befindet. Weitere Informationen finden Sie unter Regionen und Availability-Domains.
    • endpoint: Wenn Sie einen Bucket mounten möchten, der in Ihrer Hauptregion erstellt wurde, müssen Sie den Parameter endpoint nicht angeben. Wenn Sie einen Bucket mounten möchten, der in einer anderen Region erstellt wurde, müssen Sie den Parameter endpoint angeben.
  5. Um den Bucket beim Systemstart mit s3fs automatisch als Dateisystem zu mounten, fügen Sie Folgendes zur Datei /etc/fstab hinzu:

    bucket_name /path/to/local_directory_name fuse.s3fs use_path_request_style,passwd_file=/root/.s3fs-password,url=https://namespace_name.compat.objectstorage.region_ID.oraclecloud.com,endpoint=region_ID kernel_cache,multipart_size=128,parallel_count=50,multireq_max=100,max_background=1000,_netdev
  6. Um den s3fs-Bucket zu prüfen, führen Sie den Befehl df -h aus. Die Ausgabe zeigt den neuen Mount Point für den Bucket an. Navigieren Sie zum neuen Mount Point, und führen Sie den Befehl ls aus, um alle Objekte im Bucket aufzulisten.

So beheben Sie Fehler beim Mounten eines Object Storage-Buckets

  • Wenn Autorisierungsfehler auftreten, prüfen Sie Ihre IAM-Policys, und stellen Sie sicher, dass Sie einen Bucket als Dateisystem mounten können. Beispiel:
    Allow group s3fsAdmins to manage object-family in compartment MyCompartment
  • Stellen Sie sicher, dass Sie den richtigen Namespace-Namen in der URL im s3fs-Befehl verwenden. Informationen zur Prüfung des Namespaces finden Sie unter Object Storage-Namespaces.
  • Stellen Sie sicher, dass der benannte Bucket, den Sie mounten möchten, vorhanden ist und sich in einem Compartment befindet, auf das Sie Zugriff haben. Mit einer der folgenden Methoden können Sie den Bucket-Namen prüfen:
    • Melden Sie sich bei der Konsole an, und suchen Sie nach dem benannten Bucket in dem Compartment, auf das Sie Zugriff haben.
    • Verwenden Sie den CLI-Befehl oci os bucket list --namespace <object_storage_namespace> --compartment-id <target_compartment_id>.
  • Um einen Bucket zu mounten, der in einer anderen Region als Ihrer Hauptregion erstellt wurde, müssen Sie diese andere Region sowohl im url als auch im endpoint angeben.
  • Wenn Sie einen Bucket als Root-Benutzer mounten, können andere Benutzer Objekte im Bucket nicht auflisten oder darauf zugreifen, es sei denn, Sie fügen -o allow_other dem s3fs-Befehl hinzu oder allow_other den /etc/fstab-Mountoptionen. Sie können auch bestimmte UID- und GID-Parameter angeben, um Benutzerzugriffsdetails festzulegen.
  • Wenn Sie die Lösungen zur Fehlerbehebung geprüft haben und sich an den Support wenden müssen, führen Sie den Mountbefehl erneut im DEBUG-Modus aus, um weitere Fehlerdetails zu erhalten. Fügen Sie Folgendes am Ende des Befehls hinzu, und speichern Sie die Ausgabe:

    -o dbglevel=info -f -o curldbg

So unmounten Sie einen Object Storage-Bucket von einem Dateisystem

Führen Sie den folgenden Befehl aus, und geben Sie den Mount Point an:
umount /path/to/<local_directory_name>