Suporte à API de Compatibilidade com Amazon S3 do serviço Object Storage
Saiba como o serviç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:
-
GetService (listar todos os meus buckets)
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 decriptografar objetos de upload e download realizados no serviço Object Storage.
Para usar suas próprias chaves para criptografia do servidor, especifique os três seguintes 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 serviço Object Storage tem APIs distintas para copiar objetos e copiar partes. O Amazon S3 usa a presença dos cabeçalhos a seguir em PutObject e UploadPart para determinar as operações de cópia. Para copiar um objeto de origem criptografado com uma chave SSE-C, especifique esses três cabeçalhos para que o serviço Object Storage possa decriptografar o objeto.
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. |
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 submetidos a 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. |
Clientes Amazon S3 Suportados
Você pode configurar vários aplicativos cliente para comunicação com pontos finais compatíveis com o Amazon S3 do serviço Object Storage. Este tópico fornece alguns exemplos de configuração para Clientes do Amazon S3 compatíveis. Verifique os pré-requisitos em Pré-requisitos da API de Compatibilidade com o Amazon S3.
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.
Este é 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.
Este é 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.
Este é 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.name
Montando Buckets do Serviço Object Storage com o 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.
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ê queira apenas ler um byte de um arquivo, precisará fazer download de todo o arquivo.
-
O s3fs não é compatível com 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 oferece suporte a 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
-
Siga as instruções de instalação fornecidas no GitHub: https://github.com/s3fs-fuse/s3fs-fuse.
Se não for possível instalar usando um pacote predefinido, siga as instruções de compilação encontradas aqui: https://github.com/s3fs-fuse/s3fs-fuse/blob/master/COMPILATION.md.
-
Revise e execute os pré-requisitos em Pré-requisitos da API de Compatibilidade com o Amazon S3. Você precisa de um par de Chave de Acesso/chave secreta e de uma política adequada do serviço IAM que permita montar um bucket como um sistema de arquivos. Por exemplo:
Allow group s3fsAdmins to manage object-family in compartment MyCompartment
- Informe as credenciais do par de Chave de Acesso/Chave Secreta em um arquivo de credenciais ${HOME}/.passwd-s3fs:
cat ${HOME}/.passwd-s3fs access_key:secret_key
Por exemplo:
cat ${HOME}/.passwd-s3fs gQ4+YC530sBa8qZI6WcbUbtH8oar0exampleuniqueID:7fa22331ebe62bf4605dc9a42aaeexampleuniqueID
Em seguida, defina permissões somente de proprietário para o arquivo de credenciais:
chmod 600 ${HOME}/.passwd-s3fs
-
Crie um ponto de montagem para montar um bucket do serviço 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>]
Onde:
bucket_name
corresponde ao nome do bucket que você deseja montar.local_directory_name
corresponde ao nome do diretório local no qual você deseja montar o bucket.namespace_name
corresponde ao exclusivo gerado pelo sistema designado à sua tenancy no momento da criação da conta. Você pode usar a CLI ou a Console para obter o nome do seu namespace. Consulte Namespaces do serviço Object Storage para obter detalhes.region_ID
é o identificador da região em que o bucket reside. Consulte Regiões e Domínios de Disponibilidade para obter detalhes.endpoint
: Se você quiser montar um bucket que foi criado em sua região home, não será necessário especificar o parâmetroendpoint
. Se desejar montar um bucket que foi criado em outra região, especifique o parâmetroendpoint
.
-
Para montar automaticamente o bucket como um sistema de arquivos na inicialização do sistema usando s3fs, adicione o seguinte ao arquivo
/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 a montagem do bucket s3fs, execute o comando
df -h
. A saída mostra o novo ponto de montagem para o bucket. Navegue até o novo ponto de montagem e execute o comandols
para listar todos os objetos no bucket.
Para solucionar problemas de montagem de um bucket do serviço Object Storage
- Se você receber erros de autorização, verifique 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
- Certifique-se de que você esteja usando o nome do namespace correto no URL no comando s3fs. Para verificar o nome do 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
url
eendpoint
. - 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_other
ao 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>