Usar pontos de acesso multirregionais com operações de API compatíveis - Amazon Simple Storage Service

Usar pontos de acesso multirregionais com operações de API compatíveis

O Amazon S3 fornece um conjunto de operações para o gerenciamento de pontos de acesso multirregionais. O Amazon S3 processa algumas dessas operações de forma síncrona e algumas de forma assíncrona. Quando você invoca uma operação assíncrona, o Amazon S3 primeiro autoriza de forma síncrona a operação solicitada. Se a autorização for bem-sucedida, o Amazon S3 retornará um token que você pode usar para rastrear o progresso e os resultados da operação solicitada.

nota

Solicitações feitas por meio do Amazon S3 são sempre síncronas. O console aguarda até que a solicitação seja concluída antes de permitir que você envie outra solicitação.

É possível visualizar o status atual e os resultados das operações assíncronas usando o console ou usar DescribeMultiRegionAccessPointOperation na AWS CLI, AWS SDKs ou a API REST. O Amazon S3 fornece um token de rastreamento na resposta a uma operação assíncrona. Você inclui esse token de rastreamento como um argumento para a DescribeMultiRegionAccessPointOperation. Quando você inclui o token de rastreamento, o Amazon S3 retorna o status atual e os resultados da operação especificada, incluindo erros ou informações relevantes de recursos. O Amazon S3 executa operações de DescribeMultiRegionAccessPointOperation de forma síncrona.

Todas as solicitações do ambiente de gerenciamento para criar ou manter pontos de acesso multirregionais devem ser encaminhadas para a região US West (Oregon). Com relação a solicitações de plano de dados de pontos de acesso multirregionais, as regiões não precisam ser especificadas. Para o ambiente de gerenciamento de failover do ponto de acesso multirregional, a solicitação deve ser encaminhada a uma das cinco regiões compatíveis. Consulte mais informações sobre as regiões compatíveis com o ponto de acesso multirregional em Restrições e limitações de pontos de acesso multirregionais.

Além disso, é preciso conceder a permissão s3:ListAllMyBuckets para o usuário, perfil ou outra entidade do AWS Identity and Access Management (IAM) que faz uma solicitação para gerenciar um ponto de acesso multirregional.

Os exemplos a seguir demonstram como usar pontos de acesso multirregionais com operações compatíveis no Amazon S3.

Compatibilidade de pontos de acesso multirregionais com Serviços da AWS e AWS SDKs

Para usar um ponto de acesso multirregional com aplicações que exigem um nome de bucket do Amazon S3, use o nome do recurso da Amazon (ARN) do ponto de acesso multirregional ao fazer solicitações usando um AWS SDK. Para conferir quais AWS SDKs são compatíveis com pontos de acesso multirregionais, consulte Compatibilidade com AWS SDKs.

Compatibilidade de pontos de acesso multirregionais com operações do S3

É possível usar as operações de API a seguir do plano de dados do Amazon S3 para executar ações em objetos em buckets associados ao ponto de acesso multirregional. As seguintes operações do S3 podem aceitar ARNs de pontos de acesso multirregionais:

nota

Os pontos de acesso multirregionais permitem operações de cópia que os utilizem somente como destino ao usar o ARN do ponto de acesso multirregional.

É possível usar as seguintes operações do ambiente de gerenciamento do Amazon S3 para criar e gerenciar pontos de acesso multirregionais:

Visualizar a configuração de roteamento de pontos de acesso multirregionais

AWS CLI

O exemplo de comando a seguir recupera a configuração de roteamento de pontos de acesso multirregionais para que você possa ver os status de roteamento atuais de seus buckets. Para usar esse exemplo de comando, substitua os user input placeholders por suas próprias informações.

aws s3control get-multi-region-access-point-routes --region eu-west-1 --account-id 111122223333 --mrap arn:aws:s3::111122223333:accesspoint/abcdef0123456.mrap
SDK for Java

O código de SDK para Java a seguir recupera a configuração de roteamento de pontos de acesso multirregionais para que você possa ver os status de roteamento atuais de seus buckets. Para usar esse exemplo de sintaxe, substitua os user input placeholders por suas próprias informações.

S3ControlClient s3ControlClient = S3ControlClient.builder() .region(Region.US_EAST_1) .credentialsProvider(credentialsProvider) .build(); GetMultiRegionAccessPointRoutesRequest request = GetMultiRegionAccessPointRoutesRequest.builder() .accountId("111122223333") .mrap("arn:aws:s3::111122223333:accesspoint/abcdef0123456.mrap") .build(); GetMultiRegionAccessPointRoutesResponse response = s3ControlClient.getMultiRegionAccessPointRoutes(request);
SDK for JavaScript

O código de SDK para JavaScript a seguir recupera a configuração de roteamento de pontos de acesso multirregionais para que você possa ver os status de roteamento atuais de seus buckets. Para usar esse exemplo de sintaxe, substitua os user input placeholders por suas próprias informações.

const REGION = 'us-east-1' const s3ControlClient = new S3ControlClient({ region: REGION }) export const run = async () => { try { const data = await s3ControlClient.send( new GetMultiRegionAccessPointRoutesCommand({ AccountId: '111122223333', Mrap: 'arn:aws:s3::111122223333:accesspoint/abcdef0123456.mrap', }) ) console.log('Success', data) return data } catch (err) { console.log('Error', err) } } run()
SDK for Python

O código de SDK para Python a seguir recupera a configuração de roteamento de pontos de acesso multirregionais para que você possa ver os status de roteamento atuais de seus buckets. Para usar esse exemplo de sintaxe, substitua os user input placeholders por suas próprias informações.

s3.get_multi_region_access_point_routes( AccountId=111122223333, Mrap=arn:aws:s3::111122223333:accesspoint/abcdef0123456.mrap)['Routes']

Atualizar a política subjacente de buckets do Amazon S3

Para conceder acesso adequado, você também deve atualizar a política subjacente de buckets do Amazon S3. Os exemplos a seguir delegam o controle de acesso à política de pontos de acesso multirregionais. Depois de delegar o controle de acesso à política de ponto de acesso multirregional, a política de bucket não é mais usada para controle de acesso quando as solicitações são feitas por meio desse ponto de acesso multirregional.

Veja a seguir um exemplo de política de bucket que delega o controle de acesso à política de pontos de acesso multirregionais. Para usar esse exemplo de política de bucket, substitua os user input placeholders por suas próprias informações. Para aplicar essa política por meio do comando put-bucket-policy da AWS CLI, conforme mostrado no próximo exemplo, salve a política em um arquivo, como policy.json.

{ "Version": "2012-10-17", "Statement": { "Principal": { "AWS": "*" }, "Effect": "Allow", "Action": ["s3:*"], "Resource": ["arn:aws:s3:::111122223333/*", "arn:aws:s3:::amzn-s3-demo-bucket"], "Condition": { "StringEquals": { "s3:DataAccessPointAccount": "444455556666" } } } }

O seguinte exemplo de comando put-bucket-policy associa a política atualizada ao bucket do S3:

aws s3api put-bucket-policy --bucket amzn-s3-demo-bucket --policy file:///tmp/policy.json

Atualizar a configuração de roteamento de um ponto de acesso multirregional

O exemplo de comando a seguir atualiza a configuração de roteamento do ponto de acesso multirregional. Os comandos de roteamento de pontos de acesso multirregionais podem ser executados nestas cinco regiões:

  • ap-southeast-2

  • ap-northeast-1

  • us-east-1

  • us-west-2

  • eu-west-1

Em uma configuração de roteamento de ponto de acesso multirregional, você pode definir buckets com status de roteamento ativo ou passivo. Os buckets ativos recebem tráfego, enquanto os passivos não recebem. Você pode definir o status de roteamento de um bucket definindo o valor de TrafficDialPercentage do bucket como 100 para ativo ou como 0 para passivo.

AWS CLI

O exemplo de comando a seguir atualiza a configuração de roteamento do seu ponto de acesso multirregional. Neste exemplo, amzn-s3-demo-bucket1 é definido como ativo e amzn-s3-demo-bucket2 é definido como passivo. Para usar esse exemplo de comando, substitua os user input placeholders por suas próprias informações.

aws s3control submit-multi-region-access-point-routes --region ap-southeast-2 --account-id 111122223333 --mrap arn:aws:s3::111122223333:accesspoint/abcdef0123456.mrap --route-updates Bucket=amzn-s3-demo-bucket1,TrafficDialPercentage=100 Bucket=amzn-s3-demo-bucket2,TrafficDialPercentage=0
SDK for Java

O código de SDK para Java a seguir atualiza a configuração de roteamento do seu ponto de acesso multirregional. Para usar esse exemplo de sintaxe, substitua os user input placeholders por suas próprias informações.

S3ControlClient s3ControlClient = S3ControlClient.builder() .region(Region.ap-southeast-2) .credentialsProvider(credentialsProvider) .build(); SubmitMultiRegionAccessPointRoutesRequest request = SubmitMultiRegionAccessPointRoutesRequest.builder() .accountId("111122223333") .mrap("arn:aws:s3::111122223333:accesspoint/abcdef0123456.mrap") .routeUpdates( MultiRegionAccessPointRoute.builder() .region("eu-west-1") .trafficDialPercentage(100) .build(), MultiRegionAccessPointRoute.builder() .region("ca-central-1") .bucket("111122223333") .trafficDialPercentage(0) .build() ) .build(); SubmitMultiRegionAccessPointRoutesResponse response = s3ControlClient.submitMultiRegionAccessPointRoutes(request);
SDK for JavaScript

O código de SDK para JavaScript a seguir atualiza a configuração de roteamento do seu ponto de acesso multirregional. Para usar esse exemplo de sintaxe, substitua os user input placeholders por suas próprias informações.

const REGION = 'ap-southeast-2' const s3ControlClient = new S3ControlClient({ region: REGION }) export const run = async () => { try { const data = await s3ControlClient.send( new SubmitMultiRegionAccessPointRoutesCommand({ AccountId: '111122223333', Mrap: 'arn:aws:s3::111122223333:accesspoint/abcdef0123456.mrap', RouteUpdates: [ { Region: 'eu-west-1', TrafficDialPercentage: 100, }, { Region: 'ca-central-1', Bucket: 'amzn-s3-demo-bucket1', TrafficDialPercentage: 0, }, ], }) ) console.log('Success', data) return data } catch (err) { console.log('Error', err) } } run()
SDK for Python

O código de SDK para Python a seguir atualiza a configuração de roteamento do seu ponto de acesso multirregional. Para usar esse exemplo de sintaxe, substitua os user input placeholders por suas próprias informações.

s3.submit_multi_region_access_point_routes( AccountId=111122223333, Mrap=arn:aws:s3::111122223333:accesspoint/abcdef0123456.mrap, RouteUpdates= [{ 'Bucket': amzn-s3-demo-bucket, 'Region': ap-southeast-2, 'TrafficDialPercentage': 10 }])

Adicionar um objeto a um bucket no ponto de acesso multirregional

Para adicionar um objeto ao bucket associado ao ponto de acesso multirregional, é possível usar a operação PutObject. Para manter todos os buckets no ponto de acesso multirregional sincronizados, habilite a Replicação entre regiões.

nota

Para usar essa operação, é necessário ter a permissão s3:PutObject do ponto de acesso multirregional. Para obter mais informações sobre os requisitos de permissão do ponto de acesso multirregional, consulte Permissões.

AWS CLI

O exemplo de plano de dados a seguir carrega example.txt para o ponto de acesso multirregional especificado. Para usar esse exemplo, substitua os user input placeholders por suas próprias informações.

aws s3api put-object --bucket arn:aws:s3::123456789012:accesspoint/abcdef0123456.mrap --key example.txt --body example.txt
SDK for Java
S3Client s3Client = S3Client.builder() .build(); PutObjectRequest objectRequest = PutObjectRequest.builder() .bucket("arn:aws:s3::123456789012:accesspoint/abcdef0123456.mrap") .key("example.txt") .build(); s3Client.putObject(objectRequest, RequestBody.fromString("Hello S3!"));
SDK for JavaScript
const client = new S3Client({}); async function putObjectExample() { const command = new PutObjectCommand({ Bucket: "arn:aws:s3::123456789012:accesspoint/abcdef0123456.mrap", Key: "example.txt", Body: "Hello S3!", }); try { const response = await client.send(command); console.log(response); } catch (err) { console.error(err); } }
SDK for Python
import boto3 client = boto3.client('s3') client.put_object( Bucket='arn:aws:s3::123456789012:accesspoint/abcdef0123456.mrap', Key='example.txt', Body='Hello S3!' )

Recuperar objetos do ponto de acesso multirregional

Para recuperar objetos do ponto de acesso multirregional, é possível usar a operação GetObject.

nota

Para usar essa operação de API, é necessário ter a permissão s3:GetObject do ponto de acesso multirregional. Para obter mais informações sobre os requisitos de permissões do ponto de acesso multirregional, consulte Permissões.

AWS CLI

O exemplo de solicitação de plano de dados a seguir recupera example.txt do ponto de acesso multirregional especificado e o baixa como downloaded_example.txt. Para usar esse exemplo, substitua os user input placeholders por suas próprias informações.

aws s3api get-object --bucket arn:aws:s3::123456789012:accesspoint/abcdef0123456.mrap --key example.txt downloaded_example.txt
SDK for Java
S3Client s3 = S3Client .builder() .build(); GetObjectRequest getObjectRequest = GetObjectRequest.builder() .bucket("arn:aws:s3::123456789012:accesspoint/abcdef0123456.mrap") .key("example.txt") .build(); s3Client.getObject(getObjectRequest);
SDK for JavaScript
const client = new S3Client({}) async function getObjectExample() { const command = new GetObjectCommand({ Bucket: "arn:aws:s3::123456789012:accesspoint/abcdef0123456.mrap", Key: "example.txt" }); try { const response = await client.send(command); console.log(response); } catch (err) { console.error(err); } }
SDK for Python
import boto3 client = boto3.client('s3') client.get_object( Bucket='arn:aws:s3::123456789012:accesspoint/abcdef0123456.mrap', Key='example.txt' )

Listar objetos que estão armazenados em um bucket subjacente ao ponto de acesso multirregional

Para retornar uma lista de objetos que estão armazenados em um bucket subjacente ao ponto de acesso multirregional, use a operação ListObjectsV2. No exemplo de comando a seguir, todos os objetos do ponto de acesso multirregional especificado são listados usando o ARN do ponto de acesso multirregional. Nesse caso, o ARN do ponto de acesso multirregional é:

arn:aws:s3::123456789012:accesspoint/abcdef0123456.mrap

nota

Para usar essa operação de API, é necessário ter a permissão s3:ListBucket para o ponto de acesso multirregional e o bucket subjacente. Para obter mais informações sobre os requisitos de permissões do ponto de acesso multirregional, consulte Permissões.

AWS CLI

O exemplo de solicitação de plano de dados a seguir lista os objetos no bucket subjacente ao ponto de acesso multirregional especificado pelo ARN. Para usar esse exemplo, substitua os user input placeholders por suas próprias informações.

aws s3api list-objects-v2 --bucket arn:aws:s3::123456789012:accesspoint/abcdef0123456.mrap
SDK for Java
S3Client s3Client = S3Client.builder() .build(); String bucketName = "arn:aws:s3::123456789012:accesspoint/abcdef0123456.mrap"; ListObjectsV2Request listObjectsRequest = ListObjectsV2Request .builder() .bucket(bucketName) .build(); s3Client.listObjectsV2(listObjectsRequest);
SDK for JavaScript
const client = new S3Client({}); async function listObjectsExample() { const command = new ListObjectsV2Command({ Bucket: "arn:aws:s3::123456789012:accesspoint/abcdef0123456.mrap", }); try { const response = await client.send(command); console.log(response); } catch (err) { console.error(err); } }
SDK for Python
import boto3 client = boto3.client('s3') client.list_objects_v2( Bucket='arn:aws:s3::123456789012:accesspoint/abcdef0123456.mrap' )

Usar um URL pré-assinado com pontos de acesso multirregionais

É possível usar um URL pré-assinado para gerar um URL que permite acessar os buckets do Amazon S3 por meio de um ponto de acesso multirregional do Amazon S3. Ao criar um URL pré-assinado, você o associa a uma ação de objeto específica, como um upload no S3 (PutObject) ou um download do S3 (GetObject). É possível compartilhar o URL pré-assinado, e qualquer pessoa com acesso a ele pode executar a ação incorporada no URL como se fosse o usuário de assinatura original.

Os URLs pré-assinados têm uma data de validade. Quando o prazo de validade for atingido, o URL não funcionará mais.

Antes de usar os pontos de acesso multirregionais do S3 com URLs pré-assinados, confira a compatibilidade de AWS SDKs com o algoritmo SigV4A. Verifique se sua versão de SDK oferece suporte ao SigV4A como a implementação de assinatura usada para assinar as solicitações globais da Região da AWS. Para obter mais informações sobre como usar URLs pré-assinados com o Amazon S3, consulte Compartilhar objetos usando URLs pré-assinados.

Os exemplos a seguir mostram como você pode usar pontos de acesso multirregionais com URLs pré-assinados. Para usar esses exemplos, substitua os user input placeholders por suas próprias informações.

AWS CLI
aws s3 presign arn:aws:s3::123456789012:accesspoint/MultiRegionAccessPoint_alias/example-file.txt
SDK for Python
import logging import boto3 from botocore.exceptions import ClientError s3_client = boto3.client('s3',aws_access_key_id='xxx',aws_secret_access_key='xxx') s3_client.generate_presigned_url(HttpMethod='PUT',ClientMethod="put_object", Params={'Bucket':'arn:aws:s3::123456789012:accesspoint/abcdef0123456.mrap','Key':'example-file'})
SDK for Java
S3Presigner s3Presigner = S3Presigner.builder() .credentialsProvider(StsAssumeRoleCredentialsProvider.builder() .refreshRequest(assumeRole) .stsClient(stsClient) .build()) .build(); GetObjectRequest getObjectRequest = GetObjectRequest.builder() .bucket("arn:aws:s3::123456789012:accesspoint/abcdef0123456.mrap") .key("example-file") .build(); GetObjectPresignRequest preSignedReq = GetObjectPresignRequest.builder() .getObjectRequest(getObjectRequest) .signatureDuration(Duration.ofMinutes(10)) .build(); PresignedGetObjectRequest presignedGetObjectRequest = s3Presigner.presignGetObject(preSignedReq);
nota

Para usar o SigV4A com credenciais de segurança temporárias, por exemplo, ao usar perfis do IAM, solicite as credenciais temporárias de um endpoint regional no AWS Security Token Service (AWS STS), em vez de um endpoint global. Se você usar o endpoint global para o AWS STS (sts.amazonaws.com), o AWS STS vai gerar credenciais temporárias de um endpoint global, o que não é compatível com o Sig4A. Como resultado, você receberá um erro. Para resolver esse problema, use qualquer um dos Endpoints regionais para AWS STS listados.

Usar um bucket que é configurado com pagamentos do solicitante com pontos de acesso multirregionais

Se o bucket do S3 associado aos pontos de acesso multirregionais estiver configurado para usar pagamentos do solicitante, o solicitante pagará pela solicitação do bucket, pelo download e por todos os custos relacionados aos pontos de acesso multirregionais. Para obter mais informações, consulte Definição de preço do Amazon S3.

Veja um exemplo de uma solicitação de plano de dados para um ponto de acesso multirregional conectado a um bucket de pagamentos do solicitante.

AWS CLI

Para baixar objetos de um ponto de acesso multirregional que está conectado a um bucket de pagamentos do solicitante, é necessário especificar --request-payer requester como parte da solicitação get-object. Também é necessário especificar o nome do arquivo no bucket e o local onde o arquivo baixado deve ser armazenado.

aws s3api get-object --bucket MultiRegionAccessPoint_ARN --request-payer requester --key example-file-in-bucket.txt example-location-of-downloaded-file.txt
SDK for Java

Para baixar objetos de um ponto de acesso multirregional que está conectado a um bucket de pagamentos do solicitante, você deve especificar RequestPayer.REQUESTER como parte da solicitação GetObject. Você também deve especificar o nome do arquivo no bucket, bem como o local onde ele deve ser armazenado.

GetObjectResponse getObjectResponse = s3Client.getObject(GetObjectRequest.builder() .key("example-file.txt") .bucket("arn:aws:s3:: 123456789012:accesspoint/abcdef0123456.mrap") .requestPayer(RequestPayer.REQUESTER) .build() ).response();