Prise en charge de l'API de compatibilité Amazon S3 Object Storage

Découvrez comment Object Storage prend en charge l'API de compatibilité Amazon S3.

La prise en charge de l'API de compatibilité Amazon S3 est fournie au niveau des buckets et au niveau des objets. L'API de compatibilité Amazon S3 prend en charge les ID de version.

API de bucket

Les API de bucket suivantes sont prises en charge :

API d'objet

Les API d'objet suivantes sont prises en charge :

API de téléchargement multipart

Les API de téléchargement multipart suivantes sont prises en charge :

API de balisage

Les API de balisage suivantes sont prises en charge :

Prise en charge SSE-C

A l'aide des en-têtes d'API facultatifs, vous pouvez fournir votre propre clé de cryptage AES 256 bits utilisée pour crypter et décrypter les objets téléchargés vers et depuis Object Storage.

Pour utiliser vos propres clés pour le cryptage côté serveur, indiquez les trois en-têtes de demande suivants avec les informations de clé de cryptage :

En-têtes Description API prises en charge
x-amz-server-side-encryption-customer-algorithm Indique "AES256" en tant qu'algorithme de cryptage.

GetObject

HeadObject

PutObject

InitiateMultipartUpload

UploadPart

x-amz-server-side-encryption-customer-key Indique la clé de cryptage 256 bits encodée en base64 à utiliser pour crypter ou décrypter les données.
x-amz-server-side-encryption-customer-key-md5 Indique le condensé MD5 128 bits encodé en base64 de la clé de cryptage. Cette valeur sert à vérifier l'intégrité de la clé de cryptage.

Object Storage dispose d'API distinctes pour copier des objets et copier des parties. Amazon S3 utilise la présence des en-têtes suivants dans PutObject et UploadPart pour déterminer les opérations de copie. Pour copier un objet source crypté avec une clé SSE-C, vous devez indiquer ces trois en-têtes afin qu'Object Storage puisse décrypter l'objet.

En-têtes Description API prises en charge
x-amz-copy-source-server-side-encryption-customer-algorithm Indique "AES256" comme algorithme de cryptage à utiliser pour décrypter l'objet source.

PutObject

UploadPart

x-amz-copy-source-server-side-encryption-customer-key Indique la clé de cryptage 256 bits encodée en base64 à utiliser pour décrypter l'objet source.
x-amz-copy-source-server-side-encryption-customer-key-md5 Indique le condensé MD5 128 bits encodé en base64 de la clé de cryptage utilisée pour décrypter l'objet source.

Prise en charge du cryptage à l'aide de vos propres clés dans Vault

A l'aide des en-têtes d'API facultatifs, vous pouvez fournir votre propre clé de cryptage dans Vault pour crypter les objets téléchargés vers Object Storage.

Afin d'utiliser vos propres clés dans Vault pour le cryptage côté serveur, indiquez l'en-tête de demande suivant avec l'OCID de la clé dans Vault :

En-têtes Description API prises en charge
x-amz-server-side-encryption-aws-kms-key-id OCID de la clé existante dans Vault à utiliser pour crypter l'objet.

PutObject

InitiateMultipartUpload

UploadPart

Clients Amazon S3 pris en charge

Vous pouvez configurer différentes applications client pour qu'elles communiquent avec les adresses compatibles Amazon S3 d'Object Storage. Cette rubrique fournit des exemples de configuration pour les clients Amazon S3 pris en charge. Passez en revue les prérequis dans Prérequis pour l'API de compatibilité Amazon S3.

Kit SDK AWS pour Java

Le référentiel du kit SDK AWS pour Java, le téléchargement de fichiers et les liens vers la documentation sont disponibles sur GitHub : https://github.com/aws/aws-sdk-java.

Exemple de configuration du kit SDK AWS pour Java afin qu'il utilise 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();

Kit SDK AWS pour JavaScript

Le référentiel du kit SDK AWS pour JavaScript, les liens vers la documentation et les instructions d'installation sont disponibles sur GitHub : https://github.com/aws/aws-sdk-js.

Voici un exemple de configuration du kit SDK AWS pour Javascript afin d'utiliser 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',
});

Kit SDK AWS pour Python (Boto3)

Le référentiel du kit SDK AWS pour Python (Boto3), les liens vers la documentation et les instructions d'installation sont disponibles sur GitHub : https://github.com/boto/boto3.

Exemple de configuration du kit SDK AWS pour que Python utilise 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

Montage de buckets Object Storage à l'aide de s3fs

s3fs permet à Linux et à macOS de monter Object Storage en tant que système de fichiers. Le référentiel s3fs, les liens vers la documentation, les instructions d'installation et des exemples sont disponibles sur GitHub : https://github.com/s3fs-fuse/s3fs-fuse.

s3fs n'est pas adapté à toutes les applications. Tenez compte des restrictions suivantes :

  • Les services de stockage d'objet présentent une latence élevée par rapport aux systèmes de fichiers locaux pour le délai de réception du premier octet et ne disposent pas d'accès en écriture aléatoire. s3fs offre le meilleur débit sur les charges globales qui lisent uniquement les fichiers volumineux.

  • Vous ne pouvez pas mettre à jour partiellement un fichier. Par conséquent, la modification d'un seul octet nécessite le téléchargement de l'intégralité du fichier.

  • Les écritures aléatoires dans un fichier ou les ajouts à un fichier nécessitent la réécriture de l'intégralité du fichier.

  • s3fs ne prend pas en charge les téléchargements partiels. Par conséquent, même si vous ne voulez lire qu'un octet d'un fichier, vous devez télécharger l'intégralité du fichier.

  • s3fs ne prend pas en charge les copies de fichiers côté serveur. Les fichiers copiés doivent d'abord être téléchargés vers le client, puis téléchargés vers le nouvel emplacement.

  • Les opérations de métadonnées, telles que l'énumération des répertoires, présentent des performances médiocres en raison de la latence du réseau.

  • s3fs ne prend pas en charge les hard links ni les changements de nom atomiques de fichiers ou de répertoires.

  • s3fs ne fournit aucune coordination entre plusieurs clients montant le même bucket.

Procédure de montage d'un bucket Object Storage en tant que système de fichiers

  1. Suivez les instructions d'installation fournies sur GitHub : https://github.com/s3fs-fuse/s3fs-fuse.

    Si vous ne pouvez pas effectuer l'installation à l'aide d'un package prédéfini, consultez les instructions de compilation sur la page suivante : https://github.com/s3fs-fuse/s3fs-fuse/blob/master/COMPILATION.md.

  2. Passez en revue les prérequis dans Prérequis pour l'API de compatibilité Amazon S3 et suivez-les. Vous avez besoin d'une paire clé d'accès/clé secrète et d'une stratégie IAM appropriée qui vous permet de monter un bucket en tant que système de fichiers. Par exemple :
    Allow group s3fsAdmins to manage object-family in compartment MyCompartment
  3. Saisissez les informations d'identification de paire clé d'accès/clé secrète dans un fichier d'informations d'identification ${HOME}/.passwd-s3fs :
    cat ${HOME}/.passwd-s3fs
    access_key:secret_key

    Par exemple :

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

    Définissez ensuite pour le fichier d'informations d'identification des droits d'accès de propriétaire uniquement :

    chmod 600 ${HOME}/.passwd-s3fs
  4. Créez un point de montage pour monter un bucket Object Storage :
    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>]

    Où :

    • bucket_name est le nom du bucket à monter.
    • local_directory_name est le nom du répertoire local dans lequel monter le bucket.
    • namespace_name est le nom d'espace de noms affecté à votre location au moment de la création du compte. Vous pouvez utiliser l'interface de ligne de commande ou la console pour obtenir votre nom d'espace de noms. Pour plus d'informations, reportez-vous à Espaces de noms Object Storage.
    • region_ID est l'identificateur de la région dans laquelle réside le bucket. Pour obtenir des détails, reportez-vous à Régions et domaines de disponibilité.
    • endpoint : si vous voulez monter un bucket créé dans votre région d'origine, vous n'avez pas besoin d'indiquer le paramètre endpoint. Si vous voulez monter un bucket créé dans une autre région, vous devez indiquer le paramètre endpoint.
  5. Pour monter automatiquement le bucket en tant que système de fichiers au démarrage du système à l'aide de s3fs, ajoutez ce qui suit au fichier /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. Pour vérifier le montage du bucket s3fs, exécutez la commande df -h. La sortie indique le nouveau point de montage du bucket. Accédez au nouveau point de montage et exécutez la commande ls pour répertorier tous les objets du bucket.

Procédure de dépannage du montage d'un bucket Object Storage

  • Si vous obtenez des erreurs d'autorisation, vérifiez vos stratégies IAM et assurez-vous que vous en avez une qui vous permet de monter un bucket en tant que système de fichiers. Par exemple :
    Allow group s3fsAdmins to manage object-family in compartment MyCompartment
  • Assurez-vous que vous utilisez le nom d'espace de noms correct dans l'URL de la commande s3fs. Pour vérifier le nom d'espace de noms, reportez-vous à Espaces de noms Object Storage.
  • Assurez-vous que le bucket nommé que vous essayez de monter existe et qu'il se trouve dans un compartiment auquel vous avez accès. Utilisez l'une des méthodes suivantes pour vérifier le nom du bucket :
    • Connectez-vous à la console et recherchez le bucket nommé dans le compartiment auquel vous avez accès.
    • Utilisez la commande d'interface de ligne de commande oci os bucket list --namespace <object_storage_namespace> --compartment-id <target_compartment_id>.
  • Pour monter un bucket qui a été créé dans une région autre que votre région d'origine, vous devez indiquer cette autre région dans les paramètres url et endpoint.
  • Si vous montez un bucket en tant qu'utilisateur root, les autres utilisateurs ne peuvent pas répertorier les objets du bucket ni y accéder, sauf si vous ajoutez -o allow_other à la commande s3fs ou allow_other aux options de montage /etc/fstab. Vous pouvez également fournir des paramètres UID et GID spécifiques pour indiquer les détails d'accès utilisateur.
  • Si vous avez passé en revue et appliqué les solutions de dépannage et que vous devez contacter le support technique, réexécutez la commande de montage en mode DEBUG pour obtenir plus de détails sur l'échec. Ajoutez ce qui suit à la fin de la commande et enregistrez la sortie :

    -o dbglevel=info -f -o curldbg

Procédure de démontage d'un bucket Object Storage à partir d'un système de fichiers

Exécutez la commande suivante, en indiquant le point de montage :
umount /path/to/<local_directory_name>