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:
-
GetService (alle eigenen Buckets auflisten)
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 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. | |
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.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
-
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.
-
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
- 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
-
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 Parameterendpoint
nicht angeben. Wenn Sie einen Bucket mounten möchten, der in einer anderen Region erstellt wurde, müssen Sie den Parameterendpoint
angeben.
-
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
-
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 Befehlls
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 imendpoint
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 oderallow_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
umount /path/to/<local_directory_name>