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 :
- DeleteBucket
- GetLocation
- HeadBucket
- GetService (répertorier tous mes buckets)
- ListObjects
- PutBucket
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. | |
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 d'impression. 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. | |
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. |
Utilisation de kits SDK S3
Notez les points suivants concernant les fonctionnalités d'API qui ne sont pas prises en charge lors de l'utilisation des kits SDK et outils précédents :
- AWS Signature Version 2 (SigV2) n'est pas pris en charge. Utilisez plutôt le mécanisme de signature AWS Signature Version 4.
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. |
Content-Encoding Prise en charge des en-têtes pour aws-chunked
Les clients compatibles S3 peuvent télécharger des objets à l'aide de aws-chunked dans l'en-tête Content-Encoding. Les téléchargements en une seule partie et les demandes UploadPart multipart sont pris en charge. Les charges utiles de transmission en continu AWS SigV4 sont prises en charge, notamment :
STREAMING-AWS4-HMAC-SHA256-PAYLOADSTREAMING-AWS4-HMAC-SHA256-PAYLOAD-TRAILERSTREAMING-UNSIGNED-PAYLOAD-TRAILER
Les clients peuvent envoyer des téléchargements aws-chunked avec des en-têtes HTTP Content-Length ou Transfer-Encoding: chunked. Les clients doivent fournir x-amz-decoded-content-length, que l'API de compatibilité Amazon S3 traite comme la taille réelle de l'objet ou de la pièce. Les signatures de bloc sont validées, de sorte que les chargements avec des données de bloc altérées ou des signatures de bloc non valides sont rejetés. Les signatures de bloc de fin sont validées pour les téléchargements en mode de fin signés. Les blocs de fin altérés sont donc également rejetés. La validation de somme de contrôle de fin est prise en charge pour :
- CRC32
- CRC32C
- SHA256
- CRC64NVME
Les non-concordances de checksum entraînent l'échec du téléchargement lors du traitement de la demande. Les checksums de fin SHA256 s'intègrent au comportement additional-checksum existant. Ils peuvent donc être conservés de manière cohérente avec la sémantique de checksum existante de l'API de compatibilité Amazon S3. Les checksums de fin CRC32, CRC32C et CRC64NVME sont de type vérification uniquement. Ils sont donc validés mais ne sont pas conservés en tant que métadonnées d'objet. Le comportement de téléchargement de l'API de compatibilité Amazon S3 existant pour les téléchargements non regroupés reste inchangé.
Prise en charge du total de contrôle pour S3 DeleteObjects / BulkDelete
Les versions plus récentes du kit SDK AWS n'ajoutent pas automatiquement l'en-tête Content-MD5 et sont passées à de nouveaux en-têtes (tels que x-amz-checksum-crc32) en tant que checksum par défaut. Le flux DeleteObjects / BulkDelete dans l'API de compatibilité Amazon S3 prend en charge x-amz-checksum-sha256 et x-amz-checksum-crc32c en tant qu'alternatives à Content-MD5 pour valider le corps de la demande.
Si la compatibilité amont est nécessaire avec les sommes de contrôle MD5, utilisez LegacyMd5Plugin afin que le kit SDK ajoute l'en-tête Content-MD5 comme précédemment.
Par exemple :
S3Client s3Client = S3Client.builder()
.addPlugin(LegacyMd5Plugin.create())
.endpointOverride(URI.create(endpoint))
.credentialsProvider(StaticCredentialsProvider.create(
AwsBasicCredentials.create(accessKey, secretKey)))
.forcePathStyle(true)
.build();Si vous indiquez checksumAlgorithm dans la demande, LegacyMd5Plugin omet l'en-tête Content-MD5.
Clients Amazon S3 pris en charge
Vous pouvez configurer différentes applications client pour qu'elles communiquent avec les points de terminaison compatibles Amazon S3 d'Object Stockage. Cette rubrique fournit des exemples de configuration pour les clients Amazon S3 pris en charge.
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.nameMontage 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
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 l'URL de la commande s3fs contient le nom d'espace d'espace de noms correct. Pour vérifier votre nom d'espace de nom, 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
urletendpoint. - 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 ouallow_otheraux 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
umount /path/to/<local_directory_name>