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:
-
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 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 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 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. |
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.
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.name
Montando 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
-
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 de IAM adequada 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 nome exclusivo 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 o 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, 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
- 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>