Supporto dell'API di compatibilità Amazon S3 dello storage degli oggetti

Scopri come lo storage degli oggetti supporta l'API di compatibilità Amazon S3.

Il supporto dell'API di compatibilità Amazon S3 viene fornito a livello di bucket e di oggetto. L'API di compatibilità Amazon S3 supporta gli ID di versione.

API bucket

Sono supportate le seguenti API bucket:

API oggetto

Sono supportate le seguenti API oggetto:

API di caricamento multiparte

Sono supportate le seguenti API di caricamento multiparte:

Applicazione di tag alle API

Sono supportate le seguenti API di applicazione tag:

Supporto SSE-C

Utilizzando intestazioni API facoltative, puoi fornire la tua chiave di cifratura AES a 256 bit utilizzata per cifrare e decifrare gli oggetti caricati e scaricati dallo storage degli oggetti.

Per utilizzare le proprie chiavi per la cifratura lato server, specificare le tre intestazioni di richiesta riportate di seguito con le informazioni sulle chiavi di cifratura.

Intestazioni descrizione; API supportate
x-amz-server-side-encryption-customer-algorithm Specifica "AES256" come algoritmo di cifratura.

GetObject

HeadObject

PutObject

InitiateMultipartUpload

UploadPart

x-amz-server-side-encryption-customer-key Specifica la chiave di cifratura a 256 bit con codifica base64 da utilizzare per cifrare o decifrare i dati.
x-amz-server-side-encryption-customer-key-md5 Specifica il digest MD5 a 128 bit con codifica base64 della chiave di cifratura. Questo valore viene utilizzato per controllare l'integrità della chiave di cifratura.

Lo storage degli oggetti dispone di API distinte per copiare gli oggetti e copiare le parti. Amazon S3 utilizza la presenza delle seguenti intestazioni in PutObject e UploadPart per determinare le operazioni di copia. Per copiare un oggetto di origine cifrato con una chiave SSE-C, è necessario specificare queste tre intestazioni in modo che lo storage degli oggetti possa decifrare l'oggetto.

Intestazioni descrizione; API supportate
x-amz-copy-source-server-side-encryption-customer-algorithm Specifica "AES256" come algoritmo di cifratura da utilizzare per decifrare l'oggetto di origine.

PutObject

UploadPart

x-amz-copy-source-server-side-encryption-customer-key Specifica la chiave di cifratura a 256 bit con codifica base64 da utilizzare per decifrare l'oggetto di origine.
x-amz-copy-source-server-side-encryption-customer-key-md5 Specifica il digest MD5 a 128 bit con codifica base64 della chiave di cifratura utilizzata per decifrare l'oggetto di origine.

Supporto per la cifratura mediante le chiavi personali nel vault

Utilizzando intestazioni API facoltative, puoi fornire la tua chiave di cifratura nel vault per cifrare gli oggetti caricati nello storage degli oggetti.

Per utilizzare le proprie chiavi nel vault per la cifratura lato server, specificare l'intestazione di richiesta seguente con l'OCID della chiave nel vault:

Intestazioni descrizione; API supportate
x-amz-server-side-encryption-aws-kms-key-id OCID di una chiave esistente nel vault da utilizzare per cifrare l'oggetto.

PutObject

InitiateMultipartUpload

UploadPart

Client Amazon S3 supportati

Puoi configurare varie applicazioni client per comunicare con gli endpoint compatibili con Amazon S3 dello storage degli oggetti. In questo argomento vengono forniti alcuni esempi di configurazione per i client Amazon S3 supportati. Rivedi i prerequisiti in Prerequisiti dell'API di compatibilità Amazon S3.

SDK AWS per Java

L'SDK AWS per il repository Java, il download di file e i collegamenti alla documentazione sono disponibili sul sito GitHub: https://github.com/aws/aws-sdk-java.

Ecco un esempio di configurazione dell'SDK AWS per Java per l'uso dello storage degli oggetti


                // 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();

SDK AWS per Javascript

L'SDK AWS per il repository Javascript, i collegamenti alla documentazione e le istruzioni di installazione sono disponibili su GitHub: https://github.com/aws/aws-sdk-js.

Ecco un esempio di configurazione dell'SDK AWS per Javascript per l'utilizzo dello storage degli oggetti

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',
});

SDK AWS per Python (Boto3)

Il repository SDK AWS per Python (Boto3), i collegamenti alla documentazione e le istruzioni di installazione sono disponibili sul sito GitHub: https://github.com/boto/boto3.

Ecco un esempio di configurazione dell'SDK AWS per Python per utilizzare lo storage degli oggetti

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

Esecuzione del MOUNT dei bucket di storage degli oggetti mediante s3fs

s3fs consente a Linux e macOS di eseguire il MOUNT dello storage degli oggetti come file system. Il repository s3fs, i collegamenti alla documentazione, le istruzioni di installazione ed esempi sono disponibili sul sito GitHub: https://github.com/s3fs-fuse/s3fs-fuse.

s3fs non è adatto a tutte le applicazioni. Comprendere le seguenti limitazioni:

  • I servizi di storage degli oggetti hanno un'alta latenza rispetto ai file system locali per il tempo necessario al primo byte e non dispongono di accesso in scrittura casuale. s3fs ottiene il throughput migliore sui carichi di lavoro che leggono solo file di grandi dimensioni.

  • Impossibile aggiornare parzialmente un file. La modifica di un singolo byte richiede il caricamento dell'intero file.

  • Le scritture casuali o le aggiunte ai file richiedono la riscrittura dell'intero file.

  • s3fs non supporta i download parziali, quindi anche se si desidera leggere solo un byte di un file, è necessario scaricare l'intero file.

  • s3fs non supporta le copie dei file lato server. I file copiati devono essere prima scaricati nel client e poi caricati nella nuova posizione.

  • Le operazioni dei metadati, come la lista delle directory, hanno prestazioni scadenti a causa della latenza di rete.

  • s3fs non supporta i collegamenti hardware o le ridenominazioni atomiche di file o directory.

  • s3fs non fornisce alcun coordinamento tra più client che montano lo stesso bucket.

Per eseguire il MOUNT di un bucket di storage degli oggetti come file system

  1. Seguire le istruzioni di installazione disponibili sul sito GitHub: https://github.com/s3fs-fuse/s3fs-fuse.

    Se non è possibile eseguire l'installazione utilizzando un pacchetto predefinito, seguire le istruzioni di compilazione disponibili al seguente indirizzo: https://github.com/s3fs-fuse/s3fs-fuse/blob/master/COMPILATION.md.

  2. Rivedere ed eseguire i prerequisiti in Prerequisiti dell'API di compatibilità Amazon S3. Sono necessarie una coppia chiave di accesso/chiave segreta e un criterio IAM appropriato che ti consente di eseguire il MOUNT di un bucket come file system. Ad esempio:
    Allow group s3fsAdmins to manage object-family in compartment MyCompartment
  3. Immettere le credenziali della coppia chiave di accesso/chiave segreta in un file delle credenziali ${HOME}/.passwd-s3fs:
    cat ${HOME}/.passwd-s3fs
    access_key:secret_key

    Ad esempio:

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

    Quindi, impostare le autorizzazioni di solo proprietario per il file delle credenziali:

    chmod 600 ${HOME}/.passwd-s3fs
  4. Creare un punto di accesso per eseguire il MOUNT di un bucket di storage degli oggetti:
    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>]

    Dove:

    • bucket_name è il nome del bucket di cui si desidera eseguire il MOUNT.
    • local_directory_name è il nome della directory locale in cui si desidera eseguire il MOUNT del bucket.
    • namespace_name è l'elemento univoco generato dal sistema assegnato alla tenancy al momento della creazione dell'account. È possibile utilizzare l'interfaccia CLI o la console per ottenere il nome dello spazio di nomi. Per i dettagli, vedere Spazi di nomi dello storage degli oggetti.
    • region_ID è l'identificativo dell'area in cui risiede il bucket. Per i dettagli, vedere Aree e domini di disponibilità.
    • endpoint: se si desidera eseguire il MOUNT di un bucket creato nella propria area di origine, non è necessario specificare il parametro endpoint. Se si desidera eseguire il MOUNT di un bucket creato in un'area diversa, è necessario specificare il parametro endpoint.
  5. Per eseguire automaticamente il MOUNT del bucket come file system all'avvio del sistema utilizzando s3fs, aggiungere quanto segue al file /etc/fstab:

    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. Per verificare l'accesso del bucket s3fs, eseguire il comando df -h. L'output mostra il nuovo punto di accesso per il bucket. Andare al nuovo punto di accesso ed eseguire il comando ls per elencare tutti gli oggetti nel bucket.

Per risolvere i problemi relativi all'esecuzione del MOUNT di un bucket di storage degli oggetti

  • Se ricevi errori di autorizzazione, rivedi i criteri IAM e assicurati di averne uno che ti consenta di eseguire il MOUNT di un bucket come file system. Ad esempio:
    Allow group s3fsAdmins to manage object-family in compartment MyCompartment
  • Assicurarsi di utilizzare il nome dello spazio di nomi corretto nell'URL nel comando s3fs. Per verificare il nome dello spazio di nomi, vedere Spazi di nomi dello storage degli oggetti.
  • Assicurarsi che il bucket denominato che si sta tentando di installare esista e si trovi in un compartimento a cui si ha accesso. Utilizzare uno dei modi seguenti per verificare il nome del bucket:
    • Eseguire il login alla console e trovare il bucket denominato nel compartimento a cui si ha accesso.
    • Utilizzare il comando CLI oci os bucket list --namespace <object_storage_namespace> --compartment-id <target_compartment_id>.
  • Per eseguire il MOUNT di un bucket creato in un'area diversa dall'area di origine, è necessario specificare l'altra area nei parametri url e endpoint.
  • Se si monta un bucket come utente root, gli altri utenti non possono elencare o accedere agli oggetti nel bucket a meno che non si aggiunga -o allow_other al comando s3fs o allow_other alle opzioni di MOUNT /etc/fstab. È inoltre possibile fornire parametri UID e GID specifici per specificare i dettagli di accesso utente.
  • Se le soluzioni di risoluzione dei problemi sono state esaminate e verificate ed è necessario contattare il supporto clienti, eseguire nuovamente il comando mount in modalità DEBUG per ottenere ulteriori dettagli sull'errore. Aggiungere quanto segue alla fine del comando e salvare l'output:

    -o dbglevel=info -f -o curldbg

Per eseguire il NO MOUNT di un bucket di storage degli oggetti da un file system

Eseguire il comando seguente, specificando il punto di attivazione:
umount /path/to/<local_directory_name>