Soporte de la API de compatibilidad de Amazon S3 con Object Storage

Obtenga información sobre cómo Object Storage admite la API de compatibilidad de Amazon S3.

El soporte de la API de compatibilidad de Amazon S3 se proporciona en el nivel de cubo y en el nivel de objeto. La API de compatibilidad de Amazon S3 admite ID de versión.

API de cubo

Se admiten las siguientes API de cubo:

API de objeto

Se admiten las siguientes API de objeto:

API de carga de varias partes

Se admiten las siguientes API de carga de varias partes:

Etiquetado de API

Se admiten las siguientes API de etiquetado:

Soporte de SSE-C

Con las cabeceras de API opcionales, puede proporcionar su propia clave de cifrado AES de 256 bits que se utiliza para cifrar y descifrar objetos cargados y descargados en Object Storage.

Para utilizar sus propias claves para el cifrado de servidor, especifique las tres cabeceras de solicitud siguientes con la información de clave de cifrado:

Cabeceras Descripción API soportadas
x-amz-server-side-encryption-customer-algorithm Especifica "AES256" como algoritmo de cifrado.

GetObject

HeadObject

PutObject

InitiateMultipartUpload

UploadPart

x-amz-server-side-encryption-customer-key Especifica la clave de cifrado de 256 bits codificada en base64 que se utilizará para cifrar o descifrar los datos.
x-amz-server-side-encryption-customer-key-md5 Especifica el resumen MD5 de 128 bits codificado en base64 de la clave de cifrado. Este valor se utiliza para comprobar la integridad de la clave de cifrado.

Object Storage tiene API distintas para copiar objetos y copiar partes. Amazon S3 utiliza la presencia de las siguientes cabeceras en PutObject y UploadPart para determinar las operaciones de copia. Para copiar un objeto de origen cifrado con una clave SSE-C, debe especificar estas tres cabeceras para que Object Storage pueda cifrar el objeto.

Cabeceras Descripción API soportadas
x-amz-copy-source-server-side-encryption-customer-algorithm Especifica "AES256" como algoritmo de cifrado que se utilizará para descifrar el objeto de origen.

PutObject

UploadPart

x-amz-copy-source-server-side-encryption-customer-key Especifica la clave de cifrado de 256 bits codificada en base64 que se utilizará para descifrar el objeto de origen.
x-amz-copy-source-server-side-encryption-customer-key-md5 Especifica el resumen MD5 de 128 bits codificado en base64 de la clave de cifrado utilizada para descifrar el objeto de origen.

Soporte para el cifrado utilizando sus propias claves en Vault

Con las cabecera de API opcionales, puede proporcionar su propia clave de cifrado en Vault para cifrar los objetos cargados en Object Storage.

Para utilizar sus propias claves en Vault para el cifrado de servidor, especifique la siguiente cabecera de solicitud con el OCID de la clave de Vault:

Cabeceras Descripción API soportadas
x-amz-server-side-encryption-aws-kms-key-id OCID de una clave existente en Vault que se utilizará para cifrar el objeto.

PutObject

InitiateMultipartUpload

UploadPart

Clientes de Amazon S3 soportados

Puede configurar varias aplicaciones cliente para comunicarse con los puntos finales compatibles con Amazon S3 de Object Storage. En este tema se proporcionan algunos ejemplos de configuración para clientes de Amazon S3 soportados. Revise los requisitos en Requisitos de la API de compatibilidad de Amazon S3.

SDK de AWS para Java

El SDK de AWS para el repositorio de Java, la descarga de archivos y los enlaces de documentación están disponibles en GitHub: https://github.com/aws/aws-sdk-java.

A continuación se muestra un ejemplo de configuración del SDK de AWS para Java para utilizar 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();

SDK de AWS para Javascript

El SDK de AWS para el repositorio de Javascript, los enlaces de documentación y las instrucciones de instalación están disponibles en GitHub: https://github.com/aws/aws-sdk-js.

A continuación se muestra un ejemplo de configuración del SDK de AWS para Javascript para utilizar 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',
});

SDK de AWS para Python (Boto3)

El SDK de AWS para el repositorio de Python (Boto3), los enlaces de documentación y las instrucciones de instalación están disponibles en GitHub: https://github.com/boto/boto3.

A continuación se muestra un ejemplo de configuración del SDK de AWS para Python para utilizar 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

Montaje de cubos de Object Storage mediante s3fs

s3fs permite a Linux y macOS montar Object Storage como un sistema de archivos. El repositorio de s3fs, los enlaces de documentación, las instrucciones de instalación y los ejemplos están disponibles en GitHub: https://github.com/s3fs-fuse/s3fs-fuse.

s3fs no es adecuado para todas las aplicaciones. Tenga en cuenta las siguientes limitaciones:

  • Los servicios de almacenamiento de objetos tienen una alta latencia en comparación con los sistemas de archivos locales por el tiempo hasta el primer byte y la falta de acceso de escritura aleatoria. s3fs obtiene el mejor rendimiento en cargas de trabajo que solo leen archivos grandes.

  • No es posible actualizar parcialmente un archivo, por lo que cambiar un único byte requiere cargar el archivo completo.

  • Las escrituras aleatorias o los anexos a archivos requieren que se vuelva a escribir todo el archivo.

  • s3fs no soporta las descargas parciales, por lo que incluso si solo desea leer un byte de un archivo, debe descargar el archivo completo.

  • s3fs no soporta las copias de archivos en el servidor. Los archivos copiados deben descargarse primero en el cliente y, a continuación, cargarse en la nueva ubicación.

  • Las operaciones de metadatos, como el listado de directorios, tienen un rendimiento bajo debido a la latencia de red.

  • s3fs no soporta los enlaces físicos ni los cambios de nombre atómicos de archivos o directorios.

  • s3fs no proporciona coordinación entre varios clientes que monten el mismo cubo.

Para montar un cubo de Object Storage como un sistema de archivos

  1. Siga las instrucciones de instalación que se proporcionan en GitHub: https://github.com/s3fs-fuse/s3fs-fuse.

    Si no puede realizar la instalación con un paquete creado previamente, siga las instrucciones de compilación aquí: https://github.com/s3fs-fuse/s3fs-fuse/blob/master/COMPILATION.md.

  2. Revise y cumpla los requisitos de Requisitos de la API de compatibilidad de Amazon S3. Necesita un par clave de acceso/clave secreta y una política de IAM adecuada que le permita montar un cubo como un sistema de archivos. Por ejemplo:
    Allow group s3fsAdmins to manage object-family in compartment MyCompartment
  3. Introduzca las credenciales del par clave de acceso/clave secreta en un archivo de credenciales ${HOME}/.passwd-s3fs:
    cat ${HOME}/.passwd-s3fs
    access_key:secret_key

    Por ejemplo:

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

    A continuación, defina permisos de solo propietario para el archivo de credenciales:

    chmod 600 ${HOME}/.passwd-s3fs
  4. Cree un punto de montaje para montar un cubo de 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>]

    Donde:

    • bucket_name es el nombre del cubo que desea montar.
    • local_directory_name es el nombre del directorio local en el que desea montar el cubo.
    • namespace_name es el único generado por el sistema asignado a su arrendamiento en el momento de creación de la cuenta. Puede utilizar la CLI o la consola para obtener el nombre del espacio de nombres. Consulte Espacios de nombres de Object Storage para obtener más información.
    • region_ID es el identificador de región donde reside el cubo. Consulte Regiones y dominios de disponibilidad para obtener más información.
    • endpoint: si desea montar un cubo creado en su región principal, no necesita especificar el parámetro endpoint. Si desea montar un cubo creado en una región diferente, debe especificar el parámetro endpoint.
  5. Para montar automáticamente el cubo como un sistema de archivos al iniciar el sistema mediante s3fs, agregue lo siguiente al archivo /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. Para verificar el montaje del cubo s3fs, ejecute el comando df -h. La salida muestra el nuevo punto de montaje del cubo. Vaya hasta el nuevo punto de montaje y ejecute el comando ls para mostrar todos los objetos del cubo.

Para solucionar problemas de montaje de un cubo de Object Storage

  • Si recibe errores de autorización, revise las políticas de IAM y asegúrese de tener una que le permita montar un cubo como un sistema de archivos. Por ejemplo:
    Allow group s3fsAdmins to manage object-family in compartment MyCompartment
  • Asegúrese de utilizar el nombre de espacio de nombres correcto en la URL del comando s3fs. Para verificar el nombre del espacio de nombres, consulte Espacios de nombres de Object Storage.
  • Asegúrese de que el cubo con nombre que intenta montar existe y que está en un compartimento al que tiene acceso. Utilice una de las siguientes formas para verificar el nombre del cubo:
    • Conéctese a la consola y busque el cubo con nombre en el compartimento al que tiene acceso.
    • Utilice el comando de la CLI oci os bucket list --namespace <object_storage_namespace> --compartment-id <target_compartment_id>.
  • Para montar un cubo creado en una región distinta de su región principal, debe especificar esa otra región en los parámetros url y endpoint.
  • Si monta un cubo como usuario root, otros usuarios no pueden mostrar objetos o acceder a ellos en el cubo a menos que agregue -o allow_other al comando s3fs o allow_other en las opciones de montaje /etc/fstab. También puede proporcionar parámetros de UID y GID específicos para especificar detalles de acceso de usuario.
  • Si ha revisado y verificado las soluciones de solución de problemas y necesita ponerse en contacto con el servicio de soporte, vuelva a ejecutar el comando de montaje en modo DEBUG para obtener más detalles sobre los fallos. Agregue lo siguiente al final del comando y guarde la salida:

    -o dbglevel=info -f -o curldbg

Para desmontar un cubo de Object Storage de un sistema de archivos

Ejecute el siguiente comando especificando el punto de montaje:
umount /path/to/<local_directory_name>