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:
- DeleteBucket
- GetLocation
- HeadBucket
- GetService (alle eigenen Buckets auflisten)
- ListObjects
- PutBucket
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. | |
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 zum Kopieren von Teilen. Amazon S3 verwendet die folgenden Header in PutObject und UploadPart, um Kopiervorgänge zu ermitteln. Wenn Sie ein Quellobjekt kopieren möchten, das mit einem SSE-C-Schlüssel verschlüsselt wird, 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. | |
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. |
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.nameObject 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
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 bitte sicher, dass der richtige Namespace-Name in der URL im Befehl s3fs verwendet wird. Informationen zur Prüfung des Namespace-Namens 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
urlals auch imendpointangeben. - 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_otherdem s3fs-Befehl hinzu oderallow_otherden/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
umount /path/to/<local_directory_name>