Prise en charge de l'API de compatibilité Amazon S3 avec le service de stockage d'objets

Découvrez comment le service de stockage d'objets prend en charge l'API de compatibilité Amazon S3.

La prise en charge de l'API de compatibilité Amazon S3 est fournie au niveau du seau et au niveau de l'objet. L'API de compatibilité Amazon S3 prend en charge les ID version.

API de seau

Les API de seau suivantes sont prises en charge :

API d'objet

Les API d'objet suivantes sont prises en charge :

API de chargement en plusieurs parties

Les API de chargement en plusieurs parties suivantes sont prises en charge :

API de marquage

Les API de marquage suivantes sont prises en charge :

Prise en charge de clé SSE-C

À l'aide des en-têtes d'API facultatifs, vous pouvez fournir votre propre clé de chiffrement AES 256 bits qui est utilisée pour chiffrer et déchiffrer les objets chargés et téléchargés à partir du stockage d'objets.

Pour utiliser vos propres clés pour le chiffrement côté serveur, spécifiez les trois en-têtes de demande suivants avec les informations sur la clé :

En-têtes Description API prises en charge
x-amz-server-side-encryption-customer-algorithm Indique "AES256" comme algorithme de chiffrement.

GetObject

HeadObject

PutObject

InitiateMultipartUpload

UploadPart

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

Le service Stockage d'objets offre des API distinctes permettant de copier des objets et de 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 chiffré avec une clé SSE-C, vous devez spécifier ces trois en-têtes afin que le stockage d'objets puisse déchiffrer l'objet.

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

PutObject

UploadPart

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

Prise en charge du chiffrement à l'aide de vos propres clés dans le service de chambre forte

À l'aide des en-têtes d'API facultatifs, vous pouvez fournir votre propre clé de chiffrement dans le service de chambre forte pour les objets chargés dans le service de stockage d'objets.

Pour utiliser vos propres clés dans la chambre forte pour le chiffrement côté serveur, spécifiez l'en-tête de demande suivant avec l'OCID de la clé dans la chambre forte :

En-têtes Description API prises en charge
x-amz-server-side-encryption-aws-kms-key-id OCID d'une clé existante dans le service de chambre forte à utiliser pour chiffrer l'objet.

PutObject

InitiateMultipartUpload

UploadPart

Clients Amazon S3 pris en charge

Vous pouvez configurer diverses applications clients pour qu'elles communiquent avec les points d'extrémité compatibles avec Amazon S3 du service de stockage d'objets. Cette rubrique fournit des exemples de configuration pour les clients Amazon S3 pris en charge. Vérifiez les conditions requises dans Préalables pour l'API de compatibilité Amazon S3.

Trousse SDK AWS pour Java

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

Voici un exemple de configuration de la trousse SDK AWS pour Java pour utiliser le stockage d'objets


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

Trousse SDK AWS pour Javascript

Le référentiel AWS SDK 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 de la trousse SDK AWS pour Javascript pour utiliser le stockage d'objets

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

Trousse SDK AWS pour Python (Boto3)

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

Voici un exemple de configuration de la trousse SDK AWS pour Python pour utiliser le stockage d'objets

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 seaux de stockage d'objets à l'aide de s3fs

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

s3fs ne convient pas à toutes les applications. Tenez compte des limites suivantes :

  • Les services de stockage d'objets présentent une latence élevée par rapport aux systèmes de fichiers locaux en ce qui concerne le temps d'accès au premier octet et l'absence d'accès aléatoire en écriture. s3fs offre le meilleur débit sur les charges de travail qui ne lisent que des fichiers volumineux.

  • Vous ne pouvez pas mettre à jour partiellement un fichier, la modification d'un seul octet nécessite le chargement de tout le fichier.

  • Les écritures ou les ajouts aléatoires aux fichiers nécessitent la réécriture complète du fichier.

  • s3fs ne prend pas en charge les téléchargements partiels. Ainsi, même si vous ne voulez lire qu'un octet d'un fichier, vous devez télécharger tout le fichier.

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

  • Les opérations de métadonnées, telles que le listage des répertoires de liste, sont peu performantes en raison de la latence du réseau.

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

  • s3fs ne fournit aucune coordination entre plusieurs clients qui montage le même seau.

Pour monter un seau de stockage d'objets 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 ensemble prédéfini, suivez les instructions de compilation ici : https://github.com/s3fs-fuse/s3fs-fuse/blob/master/COMPILATION.md.

  2. Vérifiez et exécutez les conditions requises dans Préalables pour l'API de compatibilité Amazon S3. Vous avez besoin d'une paire clé d'accès/clé secrète et d'une politique GIA appropriée qui vous permet de monter un seau en tant que système de fichiers. Par exemple :
    Allow group s3fsAdmins to manage object-family in compartment MyCompartment
  3. Entrez vos données d'identification de paire clé d'accès/clé secrète dans un fichier de données 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 les autorisations de responsable uniquement pour le fichier de données d'identification :

    chmod 600 ${HOME}/.passwd-s3fs
  4. Créez un point de montage pour monter un seau de stockage d'objets :
    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 seau que vous voulez monter.
    • local_directory_name est le nom du répertoire local où vous voulez monter le seau.
    • namespace_name est la valeur unique générée par le système affectée à votre location lors de la création du compte. Vous pouvez utiliser l'interface de ligne de commande ou la console pour obtenir le nom de votre espace de noms. Voir Espaces de noms de stockage d'objets pour plus de détails.
    • region_ID est l'identificateur de région où réside le seau. Pour plus de détails, voir Régions et domaines de disponibilité.
    • endpoint : Si vous voulez monter un seau qui a été créé dans votre région principale, vous n'avez pas besoin de spécifier le paramètre endpoint. Si vous voulez monter un seau qui a été créé dans une autre région, vous devez spécifier le paramètre endpoint.
  5. Pour monter automatiquement le seau 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 seau s3fs, exécutez la commande df -h. La sortie présente le nouveau point de montage pour le seau. Naviguez jusqu'au nouveau point de montage et exécutez la commande ls pour lister tous les objets du seau.

Pour dépanner le montage d'un seau de stockage d'objets

  • Si vous obtenez des erreurs d'autorisation, vérifiez vos politiques GIA et assurez-vous d'en avoir une qui vous permet de monter un seau en tant que système de fichiers. Par exemple :
    Allow group s3fsAdmins to manage object-family in compartment MyCompartment
  • Assurez-vous d'utiliser le nom d'espace de noms approprié dans l'URL de la commande s3fs. Pour vérifier le nom de votre espace de noms, voir Espaces de noms du stockage d'objets.
  • Assurez-vous que le seau nommé que vous tentez 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 seau :
    • Connectez-vous à la console et recherchez le seau 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 seau qui a été créé dans une région autre que votre région principale, vous devez spécifier cette autre région dans les paramètres url et endpoint.
  • Si vous montagez un seau en tant qu'utilisateur racine, les autres utilisateurs ne peuvent pas lister les objets du seau 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 d'UID et d'IDG spécifiques pour spécifier les détails d'accès de l'utilisateur.
  • Si vous avez examiné et vérifié les solutions de dépannage et que vous devez communiquer avec le soutien, exécutez de nouveau la commande de montage en mode DEBUG pour obtenir plus de détails sur les défaillances. Ajoutez les éléments suivants à la fin de la commande et enregistrez la sortie :

    -o dbglevel=info -f -o curldbg

Pour démonter un seau de stockage d'objets d'un système de fichiers

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