AWS PrivateLink for Amazon S3 - Amazon Simple Storage Service

AWS PrivateLink for Amazon S3

Com o AWS PrivateLink para o Amazon S3, você pode provisionar endpoints da VPC de interface (endpoints de interface) em sua Virtual Private Cloud (VPC). Esses endpoints são diretamente acessíveis a partir de aplicações que estão no local por meio de VPN e AWS Direct Connect, ou em uma Região da AWS diferente por emparelhamento de VPC.

Os endpoints de interface são representados por uma ou mais interfaces de rede elástica (ENIs) que recebem endereços IP privados de sub-redes em sua VPC. As solicitações feitas para endpoints de interface para o Amazon S3 são roteadas automaticamente para o Amazon S3 na rede da Amazon. Você também pode acessar endpoints de interface em sua VPC via aplicações on-premises por meio do AWS Direct Connect ou da AWS Virtual Private Network (AWS VPN). Para obter mais informações sobre como conectar sua VPC à rede on-premises, consulte o Guia do usuário do AWS Direct Connect e o Guia do usuário do AWS Site-to-Site VPN.

Para obter informações gerais sobre endpoints de interface, consulte Endpoints da VPC de interface (AWS PrivateLink) no Manual do AWS PrivateLink.

Tipos de VPC endpoints para o Amazon S3

Você pode usar dois tipos de endpoint da VPC para acessar o Amazon S3: endpoints de gateway e endpoints de interface (com o uso do AWS PrivateLink). Um endpoint de gateway é um gateway que você especifica em sua tabela de rotas para acessar o Amazon S3 da sua VPC pela rede da AWS. Os endpoints de interface estendem a funcionalidade dos endpoints de gateway usando endereços IP privados para rotear solicitações para o Amazon S3 de dentro da sua VPC on-premises ou de uma PVC em outra Região da AWS usando emparelhamento da VPC ou o AWS Transit Gateway. Para obter mais informações, consulte O que é emparelhamento da VPC? em Transit Gateway vs. emparelhamento da VPC.

Os endpoints de interface são compatíveis com os endpoints de gateway. Se você tiver um endpoint de gateway existente na VPC, poderá usar ambos os tipos de endpoints na mesma VPC.

Endpoints de gateway para o Amazon S3

Endpoints de interface para o Amazon S3

Em ambos os casos, o tráfego de rede permanece na rede AWS.

Usar endereços IP públicos do Amazon S3

Usar endereços IP privados da VPC para acessar o Amazon S3

Usar os mesmos nomes DNS do Amazon S3

Exigir nomes DNS do Amazon S3 específicos do endpoint

Não permite o acesso a partir do local

Permitir acesso desde on-premises

Não permitir o acesso usando outra Região da AWS

Permitir acesso de uma VPC em outra Região da AWS usando emparelhamento da VPC ou AWS Transit Gateway

Não faturado

Faturado

Para obter mais informações sobre endpoints de gateway, consulte Endpoints da VPC de gateway no Guia do usuário do AWS PrivateLink.

As limitações da VPC aplicam-se ao AWS PrivateLink do Amazon S3. Para obter mais informações, consulte Propriedades e limitações de endpoints de interface e Cotas do AWS PrivateLink no Guia do usuário do AWS PrivateLink. Além disso, aplicam-se as restrições a seguir.

O AWS PrivateLink do Amazon S3 não é compatível com:

Acessar endpoints da interface do Amazon S3

Importante

Para acessar o Amazon S3 usando o AWS PrivateLink, você deve atualizar suas aplicações para usar nomes de DNS específicos de endpoint.

Quando você cria um endpoint de interface, o Amazon S3 gera dois tipos de nome de DNS do S3 específicos do endpoint: regional e zonal.

  • Os nomes de DNS regionais incluem um ID de VPC endpoint exclusivo, um identificador de serviço, a Região da AWS e vpce.amazonaws.com em seu nome. Por exemplo, para o ID de VPC endpoint vpce-1a2b3c4d, o nome de DNS gerado pode ser semelhante a vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com.

  • Os nomes de DNS zonais incluem a zona de disponibilidade. Por exemplo, vpce-1a2b3c4d-5e6f-us-east-1a.s3.us-east-1.vpce.amazonaws.com. Você pode usar essa opção se sua arquitetura isola zonas de disponibilidade. Por exemplo, você pode usar para contenção de falhas ou para reduzir os custos regionais de transferência de dados.

Os nomes de DNS do S3 específicos do endpoint podem ser resolvidos a partir do domínio DNS público do S3.

nota

Os endpoints de interface do Amazon S3 não são compatíveis com o recurso DNS privado dos endpoints de interface. Para obter mais informações sobre DNS privado para endpoints de interface, consulte o Guia do usuário do AWS PrivateLink.

Acessar buckets e pontos de acesso do S3 a partir de endpoints de interface S3

Você pode usar a AWS CLI ou o AWS SDK para acessar buckets, pontos de acesso do S3 e APIs de controle do S3 por meio de endpoints de interface do S3.

A imagem a seguir mostra a guia Detalhes do console da VPC, onde você pode encontrar o nome de DNS de um VPC endpoint. Neste exemplo, o ID do VPC endpoint (vpce-id) é vpce-0e25b8cdd720f900e e o nome de DNS é *.vpce-0e25b8cdd720f900e-argc85vg.s3.us-east-1.vpce.amazonaws.com. Lembre-se de substituir * ao usar o Nome DNS. Por exemplo, para acessar um bucket, o DNS name (Nome DNS) seria bucket.vpce-0e25b8cdd720f900e-argc85vg.s3.us-east-1.vpce.amazonaws.com. Você também pode anexar o nome do bucket ao início do URL. Por exemplo, se você quisesse acessar my-bucket, o URL seria my-bucket.bucket.vpce-0e25b8cdd720f900e-argc85vg.s3.us-east-1.vpce.amazonaws.com.


        Captura de tela da guia Details (Detalhes) do console da VPC.

Para obter mais informações sobre como visualizar os nomes de DNS específicos do endpoint, consulte Visualizar a configuração de nome de DNS privado do serviço de endpoint no Guia do usuário da VPC.

Use os parâmetros --region e --endpoint-url para acessar buckets do S3, pontos de acesso do S3 ou APIs de controle do S3 por meio de endpoints de interface do S3.

Exemplo: usar o URL de endpoint para listar objetos no bucket

No exemplo a seguir, substitua a região us-east-1, ID do endpoint de VPC vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com e o nome do bucket my-bucket pelas informações apropriadas.

aws s3 --region us-east-1 --endpoint-url https://bucket.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com ls s3://my-bucket/

Exemplo: usar o URL do endpoint para listar objetos de um ponto de acesso

No exemplo a seguir, substitua o ARN us-east-1:123456789012:accesspoint/test, a região us-east-1 e o ID do endpoint de VPC vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com pelas informações apropriadas.

aws s3api list-objects-v2 --bucket arn:aws:s3:us-east-1:123456789012:accesspoint/test --region us-east-1 --endpoint-url https://accesspoint.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com

Exemplo: usar o URL do endpoint para listar trabalhos com controle do S3

No exemplo a seguir, substitua a região us-east-1, o ID do endpoint de VPCvpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com e o ID da conta 12345678 pelas informações apropriadas.

aws s3control --region us-east-1 --endpoint-url https://control.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com list-jobs --account-id 12345678

Atualize seus SDKs para a versão mais recente e configure seus clientes para usar um URL de endpoint para acessar um bucket, ponto de acesso ou API de controle do S3 por meio de endpoints de interface do S3.

SDK for Python (Boto3)

Exemplo: use um URL de endpoint para acessar um bucket do S3

No exemplo a seguir, substitua a região us-east-1 e o ID do endpoint de VPC vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com pelas informações apropriadas.

s3_client = session.client( service_name='s3', region_name='us-east-1', endpoint_url='https://bucket.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com' )

Exemplo: use um URL de endpoint para acessar um ponto de acesso do S3

No exemplo a seguir, substitua a região us-east-1 e o ID do endpoint de VPC vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com pelas informações apropriadas.

ap_client = session.client( service_name='s3', region_name='us-east-1', endpoint_url='https://accesspoint.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com' )

Exemplo: use um URL de endpoint para acessar a API de controle do S3

No exemplo a seguir, substitua a região us-east-1 e o ID do endpoint de VPC vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com pelas informações apropriadas.

control_client = session.client( service_name='s3control', region_name='us-east-1', endpoint_url='https://control.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com' )
SDK for Java 1.x

Exemplo: use um URL de endpoint para acessar um bucket do S3

No exemplo a seguir, substitua o ID do endpoint da VPC vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com por informações apropriadas.

// bucket client final AmazonS3 s3 = AmazonS3ClientBuilder.standard().withEndpointConfiguration( new AwsClientBuilder.EndpointConfiguration( "https://bucket.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com", Regions.DEFAULT_REGION.getName() ) ).build(); List<Bucket> buckets = s3.listBuckets();

Exemplo: use um URL de endpoint para acessar um ponto de acesso do S3

No exemplo a seguir, substitua o ID do endpoint da VPC vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com e o ARN us-east-1:123456789012:accesspoint/prod por informações apropriadas.

// accesspoint client final AmazonS3 s3accesspoint = AmazonS3ClientBuilder.standard().withEndpointConfiguration( new AwsClientBuilder.EndpointConfiguration( "https://accesspoint.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com", Regions.DEFAULT_REGION.getName() ) ).build(); ObjectListing objects = s3accesspoint.listObjects("arn:aws:s3:us-east-1:123456789012:accesspoint/prod");

Exemplo: use um URL de endpoint para acessar a API de controle do S3

No exemplo a seguir, substitua o ID do endpoint da VPC vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com por informações apropriadas.

// control client final AWSS3Control s3control = AWSS3ControlClient.builder().withEndpointConfiguration( new AwsClientBuilder.EndpointConfiguration( "https://control.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com", Regions.DEFAULT_REGION.getName() ) ).build(); final ListJobsResult jobs = s3control.listJobs(new ListJobsRequest());
SDK for Java 2.x

Exemplo: use um URL de endpoint para acessar um bucket do S3

No exemplo a seguir, substitua o ID do endpoint da VPC vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com e a região Region.US_EAST_1 por informações apropriadas.

// bucket client Region region = Region.US_EAST_1; s3Client = S3Client.builder().region(region) .endpointOverride(URI.create("https://bucket.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com")) .build()

Exemplo: use um URL de endpoint para acessar um ponto de acesso do S3

No exemplo a seguir, substitua o ID do endpoint da VPC vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com e a região Region.US_EAST_1 por informações apropriadas.

// accesspoint client Region region = Region.US_EAST_1; s3Client = S3Client.builder().region(region) .endpointOverride(URI.create("https://accesspoint.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com")) .build()

Exemplo: use um URL de endpoint para acessar a API de controle do S3

No exemplo a seguir, substitua o ID do endpoint da VPC vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com e a região Region.US_EAST_1 por informações apropriadas.

// control client Region region = Region.US_EAST_1; s3ControlClient = S3ControlClient.builder().region(region) .endpointOverride(URI.create("https://control.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com")) .build()

Atualizar uma configuração de DNS on-premises

Ao usar nomes de DNS específicos do endpoint para acessar os endpoints de interface do Amazon S3, você não precisa atualizar seu resolvedor de DNS on-premises. Você pode resolver o nome de DNS específico do endpoint com o endereço IP privado do endpoint de interface do domínio DNS público do Amazon S3.

Usar endpoints de interface para acessar o Amazon S3 sem um endpoint de gateway ou um gateway da Internet na VPC

Os endpoints de interface na VPC podem rotear aplicativos na VPC e on-premises para o Amazon S3 pela rede da Amazon, conforme ilustrado no diagrama a seguir.


          O diagrama de fluxo de dados mostra o acesso de aplicações on-premises e na VPC ao S3 usando um endpoint de interface e o AWS PrivateLink.

O diagrama ilustra o seguinte:

  • Sua rede on-premises usa AWS Direct Connect ou AWS VPN para se conectar à VPC A.

  • Seus aplicativos on-premises e na VPC A usam nomes de DNS específicos do endpoint para acessar o Amazon S3 por meio do endpoint de interface do S3.

  • As aplicações on-premises enviam dados ao endpoint de interface na VPC via AWS Direct Connect (ou AWS VPN). O AWS PrivateLink move os dados do endpoint de interface para o Amazon S3 por meio da rede da AWS.

  • As aplicações na VPC também enviam o tráfego ao endpoint de interface. O AWS PrivateLink move os dados do endpoint de interface para o Amazon S3 por meio da rede da AWS.

Usar endpoints de gateway e de interface juntos na mesma VPC para acessar o Amazon S3

Você pode criar endpoints de interface e reter o endpoint de gateway existente na mesma VPC, como mostra o diagrama a seguir. Ao fazer isso, você permite que as aplicações na VPC continuem acessando o Amazon S3 por meio do endpoint de gateway, que não é cobrado. Em seguida, apenas as aplicações on-premises usariam endpoints de interface para acessar o Amazon S3. Para acessar o S3 dessa maneira, você deve atualizar as aplicações on-premises para usar nomes de DNS específicos do endpoint para Amazon S3.


            O diagrama de fluxo de dados mostra o acesso ao S3 usando endpoints de gateway e de interface juntos.

O diagrama ilustra o seguinte:

  • As aplicações on-premises usam nomes de DNS específicos do endpoint para enviar dados ao endpoint de interface dentro da VPC via AWS Direct Connect (ou AWS VPN). O AWS PrivateLink move os dados do endpoint de interface para o Amazon S3 por meio da rede da AWS.

  • Usando nomes regionais padrão do Amazon S3, as aplicações na VPC enviam dados ao endpoint de gateway que se conecta ao Amazon S3 pela rede da AWS.

Para obter mais informações sobre endpoints de gateway, consulte Endpoints da VPC de gateway no Guia do usuário da VPC.

Criar uma política de VPC endpoint para o Amazon S3

É possível anexar uma política de endpoint ao VPC endpoint que controla o acesso ao Amazon S3. Essa política especifica as seguintes informações:

  • A entidade principal do AWS Identity and Access Management (IAM) que pode executar ações

  • As ações que podem ser executadas

  • Os recursos nos quais as ações podem ser executadas

Você também pode usar políticas de bucket do Amazon S3 para restringir o acesso a buckets específicos de um VPC endpoint específico usando a condição aws:sourceVpce na política de bucket. Os exemplos a seguir mostram políticas que restringem o acesso a um bucket ou a um endpoint.

Importante
  • Ao aplicar políticas de bucket do Amazon S3 para os VPC endpoints descritos nesta seção, talvez você bloqueie o acesso ao bucket inadvertidamente. As permissões de bucket destinadas especificamente a limitar o acesso do bucket às conexões originadas do seu VPC endpoint podem bloquear todas as conexões ao bucket. Para obter informações sobre como corrigir esse problema, consulte Minha política de bucket tem o ID da VPC ou do endpoint da VPC incorreto. Como corrigir a política para que eu possa acessar o bucket? na Central de conhecimento do AWS Support.

  • Antes de usar a política de exemplo a seguir, substitua o ID do VPC endpoint por um valor apropriado para o caso de uso. Caso contrário, não será possível acessar o bucket.

  • Essa política desabilita o acesso do console ao bucket especificado, pois as solicitações do console não se originam do VPC endpoint especificado.

Você pode criar uma política de endpoint que restringe o acesso apenas a buckets específicos do Amazon S3. Isso será útil se houver outros produtos da AWS em sua VPC que usam buckets do S3. A política de bucket a seguir restringe o acesso somente a DOC-EXAMPLE-BUCKET1. Substitua DOC-EXAMPLE-BUCKET1 pelo nome do seu bucket.

{ "Version": "2012-10-17", "Id": "Policy1415115909151", "Statement": [ { "Sid": "Access-to-specific-bucket-only", "Principal": "*", "Action": [ "s3:GetObject", "s3:PutObject" ], "Effect": "Allow", "Resource": ["arn:aws:s3:::DOC-EXAMPLE-BUCKET1", "arn:aws:s3:::DOC-EXAMPLE-BUCKET1/*"] } ] }

Você pode criar uma política que restrinja o acesso apenas aos buckets do S3 em uma Conta da AWS específica. Use isso para impedir que os clientes dentro de sua VPC acessem buckets que você não possui. O exemplo a seguir cria uma política que restringe o acesso a recursos pertencentes a um único ID de Conta da AWS, 111122223333.

{ "Statement": [ { "Sid": "Access-to-bucket-in-specific-account-only", "Principal": "*", "Action": [ "s3:GetObject", "s3:PutObject" ], "Effect": "Deny", "Resource": "arn:aws:s3:::*", "Condition": { "StringNotEquals": { "aws:ResourceAccount": "111122223333" } } } ] }
nota

Você pode usar a chave aws:ResourceAccount ou s3:ResourceAccount em sua política do IAM para especificar o ID da Conta da AWS do recurso que está sendo acessado.

Exemplo: restringir o acesso a um endpoint da VPC específico na política de bucket do S3

A política de bucket do Amazon S3 a seguir permite o acesso a um bucket específico, DOC-EXAMPLE-BUCKET2, apenas a partir do endpoint vpce-1a2b3c4d. Essa política negará todo acesso ao bucket se o endpoint especificado não estiver sendo usado. A condição aws:sourceVpce é usada para especificar o endpoint e não requer um nome de recurso da Amazon (ARN) para o recurso de VPC endpoint, apenas o ID do endpoint. Substitua DOC-EXAMPLE-BUCKET2 e vpce-1a2b3c4d por um nome de bucket real e endpoint.

{ "Version": "2012-10-17", "Id": "Policy1415115909152", "Statement": [ { "Sid": "Access-to-specific-VPCE-only", "Principal": "*", "Action": "s3:*", "Effect": "Deny", "Resource": ["arn:aws:s3:::DOC-EXAMPLE-BUCKET2", "arn:aws:s3:::DOC-EXAMPLE-BUCKET2/*"], "Condition": {"StringNotEquals": {"aws:sourceVpce": "vpce-1a2b3c4d"}} } ] }

Para obter mais exemplos de políticas, consulte Endpoints para o Amazon S3 no Guia do usuário da VPC.

Para obter mais informações sobre conectividade de VPC, consulte Network-to-VPC connectivity options (Opções de conectividade entre rede e VPC) no whitepaper da AWS Amazon Virtual Private Cloud Connectivity Options (Opções de conectividade do Amazon Virtual Private Cloud).