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:
-
GetService (muestra todos los cubos)
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. | |
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. | |
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. |
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
-
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.
-
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
- 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
-
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ámetroendpoint
. Si desea montar un cubo creado en una región diferente, debe especificar el parámetroendpoint
.
-
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
-
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 comandols
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
yendpoint
. - 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 oallow_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
umount /path/to/<local_directory_name>