Suporte à API de Compatibilidade com Amazon S3 do Object Storage
Saiba como o Object Storage suporta a API de Compatibilidade com Amazon S3.
O suporte à API de Compatibilidade com Amazon S3 é fornecido no nível do bucket e no nível do objeto. A API de compatibilidade com Amazon S3 suporta IDs de versão.
APIs do Bucket
Existe suporte para as seguintes APIs de bucket:
- DeleteBucket
- GetLocation
- HeadBucket
- GetService (listar todos os meus buckets)
- ListObjects
- PutBucket
APIs de Objeto
Existe suporte para as seguintes APIs de objeto:
APIs de Upload Multiparte
Existe suporte para as seguintes APIs de upload multiparte:
APIs de Tag
Existe suporte para as seguintes APIs de aplicação de tag:
Suporte a SSE-C
Usando cabeçalhos opcionais de API, você pode fornecer sua própria chave de criptografia AES de 256 bits que é usada para criptografar e descriptografar objetos de upload e download feitos no Object Storage.
Para usar suas próprias chaves para criptografia do servidor, especifique os três seguintes três cabeçalhos de solicitação com as informações da chave de criptografia:
| Cabeçalhos | Descrição | APIs Suportadas |
|---|---|---|
x-amz-server-side-encryption-customer-algorithm
|
Especifica "AES256" como algoritmo de criptografia. | |
x-amz-server-side-encryption-customer-key
|
Especifica a chave de criptografia de 256 bits codificada por base64 a ser usada para criptografar ou decriptografar os dados. | |
x-amz-server-side-encryption-customer-key-md5
|
Especifica a compilação MD5 de 128 bits codificada por base64 da chave de criptografia. Esse valor é usado para verificar a integridade da chave de criptografia. |
O Object Storage tem APIs distintas para copiar objetos e copiar partes. O Amazon S3 usa a presença dos seguintes cabeçalhos em PutObject e UploadPart para localizar as operações da cópia. Para copiar um objeto de origem criptografado com uma chave SSE-C, você deve especificar esses três cabeçalhos para que a decodificação do objeto pelo Object Storage seja possível.
| Cabeçalhos | Descrição | APIs Suportadas |
|---|---|---|
x-amz-copy-source-server-side-encryption-customer-algorithm
|
Especifica "AES256" como algoritmo de criptografia a ser usado para decriptografar o objeto de origem. | |
x-amz-copy-source-server-side-encryption-customer-key
|
Especifica a chave de criptografia de 256 bits codificada por base64 a ser usada para decriptografar o objeto de origem. | |
x-amz-copy-source-server-side-encryption-customer-key-md5
|
Especifica a compilação MD5 de 128 bits codificada por base64 da chave de criptografia usada para decriptografar o objeto de origem. |
Trabalhando S3 SDKs
Observe o seguinte em relação aos recursos de API que não são suportados ao usar os SDKs e ferramentas anteriores:
- O AWS Signature Versão 2 (SigV2) não é suportado. Em vez disso, use o mecanismo de assinatura AWS Signature Versão 4.
Suporte para Criptografia Usando Suas Próprias Chaves no Serviço Vault
Usando cabeçalhos opcionais de API, você pode fornecer sua própria chave de criptografia no serviço Vault para criptografar objetos transferidos por upload para o serviço Object Storage.
Para usar suas próprias chaves no serviço Vault para criptografia do servidor, especifique o seguinte cabeçalho de solicitação com o OCID da chave no serviço Vault:
| Cabeçalhos | Descrição | APIs Suportadas |
|---|---|---|
x-amz-server-side-encryption-aws-kms-key-id
|
OCID de uma chave existente no serviço Vault a ser usada para criptografar o objeto. |
Content-Encoding Suporte de Cabeçalho para aws-chunked
Os clientes compatíveis com S3 podem fazer upload de objetos usando aws-chunked no cabeçalho Content-Encoding. Há suporte para uploads de parte única e solicitações UploadPart multiparte. Há suporte para payloads de streaming do AWS SigV4, incluindo:
STREAMING-AWS4-HMAC-SHA256-PAYLOADSTREAMING-AWS4-HMAC-SHA256-PAYLOAD-TRAILERSTREAMING-UNSIGNED-PAYLOAD-TRAILER
Os clientes podem enviar uploads do aws-chunked com cabeçalhos HTTP Content-Length ou Transfer-Encoding: chunked. Os clientes devem fornecer x-amz-decoded-content-length, que a API de Compatibilidade com Amazon S3 trata como o objeto ou tamanho de peça real. As assinaturas de bloco são validadas, portanto, os uploads com dados de bloco adulterados ou assinaturas de bloco inválidas são rejeitados. As assinaturas de trailer são validadas para uploads assinados no modo de trailer, portanto, blocos de trailer adulterados também são rejeitados. A validação da soma de verificação do rodapé é suportada para:
- CRC32
- CRC32C
- SHA256
- CRC64NVME
Incompatibilidade de soma de verificação faz com que o upload falhe durante o processamento da solicitação. As somas de verificação do trailer SHA256 se integram ao comportamento additional-checksum existente, para que possam ser persistidas de forma consistente com a semântica de soma de verificação da API de Compatibilidade com Amazon S3 existente. As somas de verificação do trailer CRC32, CRC32C e CRC64NVME são somente para verificação; portanto, elas são validadas, mas não persistidas, como metadados de objeto. O comportamento de upload da API de Compatibilidade com Amazon S3 existente para uploads não descompactados permanece inalterado.
Suporte de Soma de Verificação para S3 DeleteObjects / BulkDelete
As versões mais recentes do AWS SDK não adicionam automaticamente o cabeçalho Content-MD5 e, em vez disso, mudaram para novos cabeçalhos (como x-amz-checksum-crc32) como a soma de verificação padrão. O fluxo DeleteObjects / BulkDelete na API de Compatibilidade com Amazon S3 suporta x-amz-checksum-sha256 e x-amz-checksum-crc32c como alternativas ao Content-MD5 para validar o corpo da solicitação.
Se a compatibilidade retroativa for necessária com as somas de verificação MD5, use o LegacyMd5Plugin para que o SDK adicione o cabeçalho Content-MD5 como antes.
Por Exemplo:
S3Client s3Client = S3Client.builder()
.addPlugin(LegacyMd5Plugin.create())
.endpointOverride(URI.create(endpoint))
.credentialsProvider(StaticCredentialsProvider.create(
AwsBasicCredentials.create(accessKey, secretKey)))
.forcePathStyle(true)
.build();Se você especificar checksumAlgorithm na solicitação, LegacyMd5Plugin omitirá o cabeçalho Content-MD5.
Clientes Amazon S3 Suportados
Você pode configurar vários aplicativos clientes para se comunicar com os pontos finais compatíveis com Amazon S3 do Object Storage. Este tópico fornece alguns exemplos de configuração para Clientes do Amazon S3 compatíveis.
AWS SDK for Java
O repositório do AWS SDK for Java, o download de arquivos e links da documentação estão disponíveis no GitHub: https://github.com/aws/aws-sdk-java.
Veja aqui um exemplo de configuração do AWS SDK for Java para usar o serviço 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();AWS SDK for Javascript
O repositório do AWS SDK for Javascript, os links da documentação e as instruções de instalação estão disponíveis no GitHub: https://github.com/aws/aws-sdk-js.
Veja aqui um exemplo de configuração do AWS SDK for Javascript para usar o serviço 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',
});AWS SDK for Python (Boto3)
O repositório do AWS SDK for Python (Boto3), os links da documentação e as instruções de instalação estão disponíveis no GitHub: https://github.com/boto/boto3.
Veja aqui um exemplo de configuração do AWS SDK for Python para usar o serviço 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.nameMontando Buckets do Serviço Object Storage com o Uso de s3fs
O s3fs permite que o Linux e o macOS montem o Object Storage como um sistema de arquivos. O repositório do s3fs, os links da documentação, as instruções de instalação e exemplos estão disponíveis no GitHub: https://github.com/s3fs-fuse/s3fs-fuse.
O s3fs não é adequado para todos os aplicativos. Entenda as seguintes limitações:
- Os serviços de armazenamento de objetos têm alta latência em comparação com os sistemas de arquivos locais quanto ao tempo até o primeiro byte e falta de acesso de gravação aleatório. O s3fs obtém o melhor throughput nas cargas de trabalho que leem somente arquivos grandes.
- Não é possível atualizar parcialmente um arquivo; portanto, alterar um único byte requer fazer upload do arquivo inteiro.
- Gravações aleatórias ou anexos em arquivos requerem a regravação de todo o arquivo.
- s3fs não oferece suporte a downloads parciais; portanto, mesmo que você só queira ler um byte de um arquivo, precisará fazer download de todo o arquivo.
- s3fs não suporta cópias de arquivos do servidor. Primeiro, é necessário fazer download dos arquivos copiados para o cliente e, em seguida, fazer upload para o novo local.
- As operações de metadados, como listar diretórios, têm um desempenho insatisfatório por causa da latência da rede.
- s3fs não suporta links físicos nem renomeações atômicas de arquivos ou diretórios.
- O s3fs não fornece coordenação entre vários clientes que montam o mesmo bucket.
Para montar um bucket do serviço Object Storage como um sistema de arquivos
Para solucionar problemas de montagem de um bucket do serviço Object Storage
- Se você receber erros de autorização, revise suas políticas de IAM e certifique-se de ter uma política que permita montar um bucket como um sistema de arquivos. Por exemplo:
Allow group s3fsAdmins to manage object-family in compartment MyCompartment - Verifique se você está usando o nome de namespace correto no URL do comando s3fs. Para verificar o nome de seu namespace, consulte Namespaces do Serviço Object Storage.
- Certifique-se de que o bucket nomeado que você está tentando montar exista e esteja em um compartimento ao qual você tenha acesso. Use uma das seguintes maneiras de verificar o nome do bucket:
- Faça logon na Console e localize o bucket nomeado no compartimento ao qual você tem acesso.
- Use o comando da CLI
oci os bucket list --namespace <object_storage_namespace> --compartment-id <target_compartment_id>.
- Para montar um bucket que foi criado em uma região diferente da sua região home, você precisa especificar essa outra região nos parâmetros
urleendpoint. - Se você montar um bucket como o usuário raiz, outros usuários não poderão listar ou acessar objetos no bucket, a menos que você adicione
-o allow_otherao comando s3fs ouallow_otheràs opções de montagem/etc/fstab. Você também pode fornecer parâmetros específicos de UID e GID para especificar detalhes de acesso do usuário. -
Se você revisou e verificou os diagnósticos e as soluções para problemas e precisa entrar em contato com o Suporte, execute o comando de montagem novamente no modo DEBUG para obter mais detalhes sobre a falha. Adicione o seguinte ao final do comando e salve a saída:
-o dbglevel=info -f -o curldbg
Para desmontar um bucket do Object Storage de um sistema de arquivos
umount /path/to/<local_directory_name>