s3 Userguide
s3 Userguide
Guia do usuário
Versão da API 2006-03-01
Amazon Simple Storage Service Guia do usuário
As marcas comerciais e o visual comercial da Amazon não podem ser usados em conexão com nenhum produto
ou serviço que não seja da Amazon, nem de qualquer maneira que possa causar confusão entre os clientes ou que
deprecie ou desacredite a Amazon. Todas as outras marcas comerciais que não pertencem à Amazon pertencem a
seus respectivos proprietários, que podem ou não ser afiliados, conectados ou patrocinados pela Amazon.
Amazon Simple Storage Service Guia do usuário
Table of Contents
O que é o Amazon S3? ...................................................................................................................... 1
Como eu faço? .......................................................................................................................... 1
Vantagens de usar o Amazon S3 ................................................................................................. 2
Conceitos do Amazon S3 ............................................................................................................ 2
Buckets ............................................................................................................................. 2
Objetos ............................................................................................................................. 3
Chaves ............................................................................................................................. 3
Regiões ............................................................................................................................. 3
Modelo de consistência de dados do Amazon S3 .................................................................... 3
Recursos do Amazon S3 ............................................................................................................. 6
Classes de armazenamento ................................................................................................. 6
Políticas de buckets ............................................................................................................ 6
AWS Identity and Access Management .................................................................................. 7
Listas de controle de acesso ................................................................................................ 8
Versionamento ................................................................................................................... 8
Operações ......................................................................................................................... 8
Interfaces de programação de aplicações (API) do Amazon S3 ......................................................... 8
A interface REST ............................................................................................................... 8
A interface SOAP ............................................................................................................... 9
Pagar pelo Amazon S3 ............................................................................................................... 9
Serviços relacionados ................................................................................................................. 9
Conceitos básicos ............................................................................................................................. 11
Configuração ............................................................................................................................ 11
Cadastre-se na AWS ......................................................................................................... 12
Criar um usuário do IAM .................................................................................................... 12
Fazer login como usuário do IAM ........................................................................................ 13
Etapa 1: Criar um bucket ........................................................................................................... 14
Etapa 2: Fazer upload de um objeto ............................................................................................ 15
Etapa 3: fazer download de um objeto ......................................................................................... 15
Etapa 4: copiar um objeto .......................................................................................................... 16
Etapa 5: excluir os objetos e o bucket ......................................................................................... 16
Esvaziar o bucket ............................................................................................................. 17
Excluir um objeto .............................................................................................................. 17
Excluir bucket ................................................................................................................... 17
Para onde ir agora? .................................................................................................................. 18
Cenários de uso comuns ................................................................................................... 18
Considerações .................................................................................................................. 18
Recursos avançados ......................................................................................................... 19
Controle de acesso ........................................................................................................... 20
Recursos de desenvolvimento ............................................................................................ 24
Trabalhar com buckets ...................................................................................................................... 26
Visão geral dos buckets ............................................................................................................. 26
Sobre permissões ............................................................................................................. 27
Gerenciar o acesso público aos buckets .............................................................................. 27
Configuração do bucket ..................................................................................................... 28
Regras de nomeação ................................................................................................................ 30
Exemplo de nomes de bucket ............................................................................................. 30
Criação de um bucket ............................................................................................................... 31
Visualizar propriedades de buckets .............................................................................................. 35
Acessar um bucket ................................................................................................................... 36
Acesso no estilo de hospedagem virtual ............................................................................... 37
Acesso ao estilo de caminho .............................................................................................. 37
Acessar um bucket do S3 por IPv6 ..................................................................................... 37
Acessar um bucket por meio de pontos de acesso do S3 ....................................................... 38
O Amazon S3 tem uma interface de serviços da web simples que você pode usar para armazenar e
recuperar qualquer quantidade de dados, a qualquer momento, em qualquer lugar da web. Ela concede
acesso a todos os desenvolvedores para a mesma infraestrutura altamente dimensionável, confiável,
segura, rápida e econômica que a Amazon utiliza para rodar a sua própria rede global de sites da web. O
serviço visa maximizar os benefícios de escala e poder passar esses benefícios para os desenvolvedores.
Esta introdução ao Amazon Simple Storage Service (Amazon S3) fornece um resumo detalhado desse
serviço da Web. Depois de ler esta seção, você deverá ter uma boa ideia do que ele oferece e de como ele
pode ser ajustado em sua empresa.
Este guia descreve como você envia solicitações para criar buckets, armazenar e recuperar objetos e
gerenciar permissões em seus recursos. O guia também descreve o controle de acesso e o processo de
autenticação. O controle de acesso define quem pode acessar objetos e buckets no Amazon S3 e o tipo de
acesso (por exemplo, LEITURA e GRAVAÇÃO). O processo de autenticação verifica a identidade de um
usuário que está tentando acessar o Amazon Web Services (AWS).
Tópicos
• Como eu faço? (p. 1)
• Vantagens de usar o Amazon S3 (p. 2)
• Conceitos do Amazon S3 (p. 2)
• Recursos do Amazon S3 (p. 6)
• Interfaces de programação de aplicações (API) do Amazon S3 (p. 8)
• Pagar pelo Amazon S3 (p. 9)
• Serviços relacionados (p. 9)
Como eu faço?
Informações Seções relevantes
Como faço para trabalhar com buckets? Visão geral dos buckets (p. 26)
Como faço para trabalhar com pontos Gerenciamento de acesso a dados com pontos de acesso do
de acesso? Amazon S3 (p. 480)
Como faço para trabalhar com objetos? Visão geral de objetos Amazon S3 (p. 62)
Como faço para gerenciar o acesso aos Identity and Access Management no Amazon S3 (p. 252)
recursos?
• Criar buckets — crie e dê um nome a um bucket que armazena dados. Os buckets são contêineres
fundamentais no Amazon S3 para armazenamento de dados físico.
• Armazenar dados — armazene uma quantidade infinita de dados em um bucket. Carregue quantos
objetos desejar em um bucket do Amazon S3. Cada objeto pode conter até 5 TB de dados. Cada objeto
é armazenado e recuperado usando uma chave exclusiva atribuída pelo desenvolvedor.
• Fazer download de dados — faça download de seus dados ou permita que outras pessoas façam. Faça
download de seus dados a qualquer momento ou permita que outros façam o mesmo.
• Permissões – conceda ou negue permissões a outras pessoas que desejam carregar ou baixar dados no
bucket do Amazon S3. Conceda permissões para upload ou para download a três tipos de usuário. Os
mecanismos de autenticação podem ajudar a manter os dados protegidos contra acesso não autorizado.
• Interfaces padrão — use as interfaces REST e SOAP baseadas em padrões desenvolvidas para
funcionar com qualquer toolkit de desenvolvimento da Internet.
Note
O suporte de SOAP via HTTP está obsoleto, mas continua disponível via HTTPS. Novos
recursos do Amazon S3 não serão compatíveis com o SOAP. Recomendamos que você use a
API REST ou os AWS SDKs.
Conceitos do Amazon S3
Esta seção descreve os conceitos básicos e a terminologia que você precisa entender para usar o Amazon
S3 de maneira efetiva. Eles são apresentados na ordem em que você muito provavelmente os encontrará.
Tópicos
• Buckets (p. 2)
• Objetos (p. 3)
• Chaves (p. 3)
• Regiões (p. 3)
• Modelo de consistência de dados do Amazon S3 (p. 3)
Buckets
Um bucket é um contêiner para objetos armazenados no Amazon S3. Cada objeto está contido em
um bucket. Por exemplo, se o objeto chamado photos/puppy.jpg estiver armazenado no bucket
awsexamplebucket1 da região Oeste dos EUA (Oregon), ele poderá ser endereçado usando o URL
https://awsexamplebucket1.s3.us-west-2.amazonaws.com/photos/puppy.jpg.
É possível configurar os buckets para que sejam criados em uma região específica da AWS. Para obter
mais informações, consulte Acessar um bucket (p. 36). Você também pode configurar um bucket para
que, sempre que um objeto for adicionado, o Amazon S3 gere um ID exclusivo de versão e o atribua ao
objeto. Para obter mais informações, consulte Usar versionamento (p. 516).
Para obter mais informações sobre buckets, consulte Visão geral dos buckets (p. 26).
Objetos
Os objetos são as entidades fundamentais armazenadas no Amazon S3. Os objetos consistem em
metadados e dados de objeto. A porção de dados é opaca para o Amazon S3. Os metadados são um
conjunto de pares de nome e valor que descrevem o objeto. Eles incluem alguns metadados padrão, como
a data da última modificação, e metadados HTTP padrão, como Content-Type. Você também pode
especificar metadados personalizados no momento em que o objeto é armazenado.
Um objeto é identificado exclusivamente em um bucket por uma chave (nome) e um ID de versão. Para
obter mais informações, consulte Chaves (p. 3) e Usar versionamento (p. 516).
Chaves
Uma chave é um identificador exclusivo de um objeto em um bucket. Cada objeto em um bucket
tem exatamente uma chave. A combinação de um bucket, uma chave e um ID de versão identificam
exclusivamente cada objeto. Portanto, é possível pensar no Amazon S3 como um mapa de
dados básico entre "bucket + chave + versão" e o objeto em si. Cada objeto no Amazon S3 pode
ser endereçado exclusivamente por meio da combinação do endpoint de serviço da web, do
nome de bucket, da chave e, opcionalmente, de uma versão. Por exemplo, no URL https://
doc.s3.amazonaws.com/2006-03-01/AmazonS3.wsdl, "doc" é o nome do bucket e "2006-03-01/
AmazonS3.wsdl" é a chave.
Para obter mais informações sobre chaves de objeto, consulte Criar nomes de chave de objeto (p. 64).
Regiões
Você pode escolher a região geográfica da AWS onde o Amazon S3 armazenará os buckets criados.
É possível escolher uma região para otimizar a latência, minimizar os custos ou atender a requisitos
regulatórios. Os objetos armazenados em uma região nunca saem dela, a não ser que você os transfira
explicitamente para outra região. Por exemplo, os objetos armazenados na região da UE (Irlanda) nunca
saem dela.
Note
Só é possível acessar o Amazon S3 e seus recursos em regiões da AWS que estão habilitadas
para sua conta.
Para obter uma lista de regiões do Amazon S3 e endpoints, consulte Regiões e endpoints na Referência
geral da AWS.
As atualizações em uma única chave são atômicas. Por exemplo, se você executar PUT em uma
chave existente de um thread e executar um GET na mesma chave a partir de um segundo thread
simultaneamente, você obterá os dados antigos ou os novos dados, mas nunca dados parciais ou
corrompidos.
O Amazon S3 atinge alta disponibilidade replicando dados entre vários servidores nos datacenters da
AWS. Se uma solicitação PUT for bem-sucedida, os dados serão armazenados com segurança. Qualquer
leitura (GET ou LIST) iniciada após o recebimento de uma resposta PUT bem-sucedida retornará os dados
escritos pelo PUT. Veja alguns exemplos desse comportamento:
• Um processo grava um novo objeto no Amazon S3 e imediatamente lista as chaves em seu bucket. O
novo objeto aparecerá na lista.
• Um processo substitui um objeto existente e imediatamente tenta lê-lo. O Amazon S3 retornará os novos
dados.
• Um processo exclui um objeto existente e imediatamente tenta lê-lo. O Amazon S3 não retornará dados
conforme o objeto foi excluído.
• Um processo exclui um objeto existente e imediatamente lista as chaves em seu bucket. O objeto não
aparecerá na listagem.
Note
• Por exemplo, se você excluir um bucket e listar imediatamente todos os buckets, o bucket excluído ainda
poderá ser exibido na lista.
• Se você ativar o controle de versão em um bucket pela primeira vez, pode levar um curto período de
tempo para que a alteração seja totalmente propagada. Recomendamos que você aguarde 15 minutos
após ativar o controle de versão antes de emitir operações de gravação (PUT ou DELETE) em objetos
no bucket.
Aplicativos simultâneos
Esta seção fornece exemplos de comportamento a serem esperados do Amazon S3 quando vários clientes
estão gravando nos mesmos itens.
No próximo exemplo, a W2 não é encerrada antes do início da R1. Portanto, R1 pode retornar color =
ruby ou color = garnet. No entanto, desde que W1 e W2 terminam antes do início do R2, R2 retorna
color = garnet.
No último exemplo, o W2 começa antes que o W1 tenha recebido um reconhecimento. Portanto, essas
gravações são consideradas simultâneas. O Amazon S3 usa internamente a semântica do último escritor
para determinar qual gravação tem precedência. No entanto, a ordem em que o Amazon S3 recebe as
solicitações e a ordem em que os aplicativos recebem confirmações não podem ser previstos devido a
fatores como latência de rede. Por exemplo, o W2 pode ser iniciado por uma instância do Amazon EC2 na
mesma região, enquanto o W1 pode ser iniciado por um host que está mais longe. A melhor maneira de
determinar o valor final é realizar uma leitura após ambas as gravações terem sido confirmadas.
Recursos do Amazon S3
Esta seção descreve recursos importantes do Amazon S3.
Tópicos
• Classes de armazenamento (p. 6)
• Políticas de buckets (p. 6)
• AWS Identity and Access Management (p. 7)
• Listas de controle de acesso (p. 8)
• Versionamento (p. 8)
• Operações (p. 8)
Classes de armazenamento
O Amazon S3 oferece uma ampla variedade de classes de armazenamento para diferentes casos de uso.
Elas incluem o Amazon S3 STANDARD para armazenamento de finalidades gerais para dados acessados
frequentemente, Amazon S3 STANDARD_IA para dados de longa duração, mas acessados com menos
frequência, e S3 GLACIER para arquivamento a longo prazo.
Para obter mais informações, consulte Uso de classes de armazenamento do Amazon S3 (p. 563).
Políticas de buckets
As políticas de bucket fornecem controle de acesso centralizado aos buckets e objetos com base em
várias condições, incluindo operações do Amazon S3, solicitantes, recursos e aspectos da solicitação
(por exemplo, endereço IP). As políticas são expressas na linguagem de políticas de acesso e permitem
gerenciamento centralizado de permissões. As permissões anexadas a um bucket se aplicam a todos os
objetos do bucket que pertencem à conta de proprietário do bucket.
Usuários individuais e empresas podem usar políticas de bucket. Quando as empresas se registram no
Amazon S3, elas criam uma conta. Depois disso, a empresa se torna um sinônimo da conta. As contas são
financeiramente responsáveis pelos recursos da AWS que elas (e seus funcionários) criam. As contas têm
a capacidade de conceder permissões às políticas de buckets e de atribuir permissões aos funcionários
com base em uma variedade de condições. Por exemplo, uma conta pode criar uma política que dá a um
usuário acesso de gravação:
Uma conta pode conceder a um usuário acesso limitado de leitura e gravação, mas permitir que outro
crie e exclua buckets também. Uma conta pode permitir que vários escritórios locais armazenem seus
relatórios diários em um único bucket. Ela pode permitir que cada escritório grave apenas um determinado
conjunto de nomes (por exemplo, "Nevada/*" ou "Utah/*") e apenas do intervalo de endereços IP do
escritório.
Ao contrário das listas de controle de acesso (descritas posteriormente), que podem adicionar (conceder)
permissões somente em objetos individuais, as políticas podem adicionar ou negar permissões em
todos os objetos (ou em um subconjunto) em um bucket. Com uma solicitação, uma conta pode definir
as permissões de qualquer número de objetos em um bucket. Uma conta pode usar caracteres curinga
(semelhantes a operadores de expressão regulares) nos nomes de recursos da Amazon (ARNs) e outros
valores. Depois disso, a conta pode controlar o acesso a grupos de objetos que começam com um prefixo
comum ou terminam com uma extensão específica, como .html.
Só o proprietário do bucket tem permissão para associar uma política a um bucket. As políticas (escritas na
linguagem de políticas de acesso) permitem ou negam solicitações com base em:
• Operações em buckets do Amazon S3 (como PUT ?acl) e operações em objetos (como PUT Object
ou GET Object)
• Solicitante
• Condições especificadas na política
Uma conta pode controlar o acesso com base em operações específicas do Amazon S3, como
GetObject, GetObjectVersion, DeleteObject ou DeleteBucket.
As condições podem ser aspectos, como endereços IP, intervalos de endereços IP em notação CIDR,
datas, agentes de usuário, referenciador HTTP e transportes (HTTP e HTTPS).
Para obter mais informações, consulte Políticas de bucket e políticas de usuário (p. 268).
Por exemplo, você pode usar o IAM com o Amazon S3 para controlar o tipo de acesso de um usuário ou
grupo de usuários a partes específicas do bucket do Amazon S3 que sua conta da AWS possui.
Versionamento
É possível usar o versionamento para manter diversas versões de um objeto no mesmo bucket. Para obter
mais informações, consulte Usando o controle de versão em buckets do S3 (p. 516).
Operações
Veja a seguir as operações mais comuns que você executará por meio da API.
Operações comuns
• Criar um bucket — crie e dê um nome ao seu próprio bucket para armazenar seus objetos.
• Gravar um objeto — armazene dados criando ou substituindo um objeto. Ao gravar um objeto, você
especifica uma chave exclusiva no namespace de seu bucket. Essa também é uma boa hora para
especificar qualquer controle de acesso desejado no objeto.
• Ler um objeto — leia os dados de volta. Você pode baixar os dados via HTTP ou BitTorrent.
• Excluir um objeto — exclua alguns de seus dados.
• Listar chaves — liste as chaves contidas em um de seus buckets. Você pode filtrar a lista de chaves com
base em um prefixo.
Essas operações e todas as outras funcionalidades são descritas em detalhes durante todo este guia.
O Amazon S3 fornece uma interface REST e uma interface SOAP. Elas são semelhantes, mas há algumas
diferenças. Por exemplo, na interface REST, os metadados são retornados em cabeçalhos HTTP. Como
só oferecemos suporte a solicitações HTTP de até 4 KB (sem incluir o corpo), a quantidade de metadados
que você pode fornecer é restrita.
Note
O suporte de SOAP via HTTP está obsoleto, mas continua disponível via HTTPS. Novos recursos
do Amazon S3 não serão compatíveis com o SOAP. Recomendamos que você use a API REST
ou os AWS SDKs.
A interface REST
A API REST é uma interface HTTP para o Amazon S3. Usando REST, você usa solicitações HTTP padrão
criar, buscar e excluir bucket e objetos.
Você pode usar qualquer toolkit compatível com HTTP para usar a API REST. Você pode até usar um
navegador para buscar objetos, desde que eles possam ser lidos anonimamente.
A API REST usa os cabeçalhos padrão e os códigos de status HTTP, para que os navegadores e os
toolkits padrão funcionem como esperado. Em algumas áreas, adicionamos funcionalidade ao HTTP (por
exemplo, adicionamos cabeçalhos para oferecer suporte ao controle de acesso). Nesses casos, fizemos o
melhor para adicionar nova funcionalidade de uma forma que correspondesse ao estilo de uso padrão do
HTTP.
A interface SOAP
Note
O suporte de SOAP via HTTP está obsoleto, mas continua disponível via HTTPS. Novos recursos
do Amazon S3 não serão compatíveis com o SOAP. Recomendamos que você use a API REST
ou os AWS SDKs.
A API SOAP fornece uma interface SOAP 1.1 usando a codificação literal de documentos. A maneira
mais comum de usar o SOAP é fazer download do WSDL (consulte https://doc.s3.amazonaws.com/
2006-03-01/AmazonS3.wsdl), usar um toolkit do SOAP, como o Apache Axis ou o Microsoft .NET, para
criar associações e, depois, escrever código que use as associações para chamar o Amazon S3.
O Amazon S3 cobra apenas pelo que você realmente usa, sem taxas ocultas e nenhuma taxa excedente.
Isso fornece aos desenvolvedores um serviço de custo variável que pode aumentar com seus negócios e
ao mesmo tempo usufruir das vantagens de custos de infraestrutura da AWS.
Antes de armazenar qualquer coisa no Amazon S3, é necessário se registrar no serviço e fornecer um
modo de pagamento que será cobrado no final de cada mês. Não há tarifas de configuração para começar
a usar o serviço. No final do mês, seu modo de pagamento é automaticamente cobrado pelo uso daquele
mês.
Para obter informações sobre como pagar pelo armazenamento do Amazon S3, consulte Definição de
preço do Amazon S3.
Serviços relacionados
Depois de carregar os dados no Amazon S3, você pode usá-los com outros serviços da AWS. Veja a
seguir os serviços que podem ser usados com mais frequência:
• Amazon Elastic Compute Cloud (Amazon EC2) — este serviço fornece recursos de computação virtual
na nuvem. Para obter mais informações, consulte a página de detalhes do produto do Amazon EC2.
• Amazon EMR — este serviço permite que empresas, pesquisadores, analistas de dados e
desenvolvedores processem de maneira fácil e econômica grandes quantidades de dados. Ele usa
uma estrutura de trabalho Hadoop hospedada que é executada na infraestrutura de escala da Web do
Amazon EC2 e do Amazon S3. Para obter mais informações, consulte a página de detalhes do produto
do Amazon EMR.
• AWS Snowball — este é um serviço que acelera a transferência de grandes volumes de dados para
e da AWS usando dispositivos de armazenamento físico, sem a necessidade de passar pela Internet.
Cada tipo de dispositivo do AWS Snowball pode transportar dados a velocidades mais rápidas do que
a da Internet. Esse transporte é feito enviando os dados nos dispositivos por meio de uma operadora
regional. Para obter mais informações, consulte a página de detalhes do produto do AWS Snowball.
Para armazenar um objeto no Amazon S3, crie um bucket e faça upload do objeto para o bucket. Quando
o objeto estiver no bucket, você poderá abri-lo, fazer download dele e movê-lo. Quando você não precisar
mais de um objeto ou um bucket, poderá limpar seus recursos.
Com o Amazon S3, você paga somente pelo que for usado. Para obter mais informações sobre os
recursos e a definição de preço do Amazon S3, consulte Amazon S3. Se você for um novo cliente do
Amazon S3, você pode começar a usar o Amazon S3 gratuitamente. Para obter mais informações,
consulte AWS Free Tier (Nível gratuito da AWS).
Pré-requisitos
Tópicos
• Pré-requisito: Configuração do Amazon S3 (p. 11)
• Etapa 1: criar seu primeiro bucket do S3 (p. 14)
• Etapa 2: fazer upload de um objeto para o seu bucket (p. 15)
• Etapa 3: fazer download de um objeto (p. 15)
• Etapa 4: copiar seu objeto para uma pasta (p. 16)
• Etapa 5: excluir seus objetos e bucket (p. 16)
• Para onde ir agora? (p. 18)
Com o Amazon S3, você paga somente pelo que for usado. Para obter mais informações sobre os
recursos e a definição de preço do Amazon S3, consulte Amazon S3. Se você for um novo cliente do
Amazon S3, você pode começar a usar o Amazon S3 gratuitamente. Para obter mais informações,
consulte AWS Free Tier (Nível gratuito da AWS).
Quando você se inscreve na AWS e configura o Amazon S3, você pode, se quiser, alterar o idioma de
exibição no Console de Gerenciamento da AWS. Para obter mais informações, consulte Alterar o idioma
do Console de Gerenciamento da AWS no Guia de conceitos básicos do Console de Gerenciamento da
AWS.
Tópicos
• Cadastre-se na AWS (p. 12)
• Criar um usuário do IAM (p. 12)
Cadastre-se na AWS
Se você ainda não tiver uma conta da AWS, siga estas etapas para criar uma.
1. Abra https://portal.aws.amazon.com/billing/signup.
2. Siga as instruções online.
A AWS envia um e-mail de confirmação depois que o processo de inscrição é concluído. A qualquer
momento, é possível visualizar as atividades da conta atual e gerenciar sua conta acessando https://
aws.amazon.com/ e selecionando My Account (Minha conta).
É altamente recomendável que você não use o usuário raiz nas tarefas diárias, nem mesmo nas
administrativas. Em vez disso, siga as práticas recomendadas para o uso do usuário raiz somente
a fim de criar seu primeiro usuário do IAM. Depois, armazene as credenciais do usuário raiz
com segurança e use-as para executar somente algumas tarefas de gerenciamento de contas e
de serviços. Para exibir as tarefas que exigem que você faça login como usuário raiz, consulte
Tarefas que exigem credenciais do usuário raiz.
Se você se cadastrou na AWS, mas não criou um usuário do IAM próprio, siga estas etapas.
Para criar um usuário administrador para você mesmo e adicionar o usuário a um grupo de
administradores (console)
1. Faça login no console do IAM como o proprietário da conta escolhendo Root user (Usuário raiz) e
inserindo seu endereço de e-mail da conta da AWS. Na próxima página, insira sua senha.
Note
sign-in (O usuário deve criar uma senha no próximo login) para permitir que o novo usuário redefina a
senha depois de fazer login.
6. Escolha Próximo: Permissões.
7. Em Set permissions (Conceder permissões), escolha Add user to group (Adicionar usuário ao grupo).
8. Escolha Create group (Criar grupo).
9. Na caixa de diálogo Create group (Criar grupo), em Group name (Nome do grupo), digite
Administrators.
10. Escolha Filter policies (Filtrar políticas) e selecione AWS managed-job function (Função de trabalho
gerenciada pela AWS) para filtrar o conteúdo de tabelas.
11. Na lista de políticas, marque a caixa de seleção AdministratorAccess. A seguir escolha Criar grupo.
Note
Ative acesso do usuário e da função do IAM ao Faturamento para poder usar as permissões
de AdministratorAccess para acessar o console de Gerenciamento de custos e
faturamento da AWS. Para fazer isso, siga as instruções na etapa 1 do tutorial sobre como
delegar acesso ao console de faturamento.
12. Suporte a lista de grupos, selecione a caixa de seleção para seu novo grupo. Escolha Refresh
(Atualizar) caso necessário, para ver o grupo na lista.
13. Escolha Next: Tags (Próximo: tags).
14. (Opcional) Adicione metadados ao usuário anexando tags como pares de chave-valor. Para obter
mais informações sobre como usar tags no IAM, consulte Marcar entidades do IAM no Guia do usuário
do IAM.
15. Escolha Next: Review (Próximo: Análise) para ver uma lista de associações de grupos a serem
adicionadas ao novo usuário. Quando você estiver pronto para continuar, selecione Criar usuário.
É possível usar esse mesmo processo para criar mais grupos e usuários e conceder aos usuários acesso
aos recursos da conta da AWS. Para saber como usar políticas para restringir as permissões de usuário a
recursos específicos da AWS, consulte Gerenciamento de acesso e Políticas de exemplo.
Antes de fazer login como usuário do IAM, você pode verificar o link de login para usuários do IAM no
console do IAM. No painel do IAM, no IAM users sign-in link (link de login de usuários do IAM), você pode
ver o link de login da sua conta da AWS. O URL do link de login contém o ID da sua conta da AWS sem
traços (-).
Se você não quiser que o URL do link de login contenha o ID da sua conta da AWS, é possível criar um
alias da conta. Para obter mais informações, consulte Criação, exclusão e listagem de um alias de conta
da AWS no Guia do usuário do IAM.
Seu link de login inclui seu ID de conta da AWS (sem traços) ou seu alias de conta da AWS:
https://aws_account_id_or_alias.signin.aws.amazon.com/console
Você não é cobrado pela criação de um bucket. Você é cobrado somente pelo armazenamento de
objetos no bucket e pela transferência de objetos para dentro e para fora do bucket. Você estará
sujeito a uma cobrança mínima (menos de 1 USD) ao seguir os exemplos contidos neste guia.
Para obter mais informações sobre os custos de armazenamento, consulte Definição de preço do
Amazon S3.
Para criar um bucket usando a interface de linha de comando da AWS, consulte create-bucket na
Referência de comando da AWS CLI.
Depois de criado o bucket, você não pode mudar seu nome. Para obter informações sobre nomeação
de buckets, consulte Regras de nomeação de bucket (p. 30).
Important
Evite incluir informações confidenciais, como números de conta, no nome do bucket. O nome
do bucket é visível nos URLs que apontam para os objetos no bucket.
4. Em Region (Região), escolha a Região da AWS onde deseja que o bucket resida.
Escolha uma região que esteja geograficamente próxima de você para minimizar a latência e os
custos e para atender aos requisitos normativos. Os objetos armazenados em uma região nunca saem
dessa região, a menos que você os transfira para outra região. Para obter uma lista das regiões da
AWS do Amazon S3, consulte Endpoints de serviço da AWS na Referência geral do Amazon Web
Services.
5. Em Bucket settings for Block Public Access (Configurações de bucket para o Bloqueio de acesso
público), mantenha os valores predefinidos.
Por padrão, o Amazon S3 bloqueia todo o acesso público aos seus buckets. Recomendamos deixar
todas as configurações de Bloqueio de acesso público habilitadas. Para obter mais informações sobre
como bloquear o acesso público, consulte Bloquear o acesso público ao armazenamento do Amazon
S3 (p. 469).
6. Selecione Create bucket (Criar bucket).
Próxima etapa
Para adicionar um objeto ao bucket, consulte Etapa 2: fazer upload de um objeto para o seu
bucket (p. 15).
Próxima etapa
Para visualizar o objeto, consulte Etapa 3: fazer download de um objeto (p. 15).
Próxima etapa
Para copiar e colar seu objeto no Amazon S3, consulte Etapa 4: copiar seu objeto para uma
pasta (p. 16).
Como alternativa, escolha Copy (Copiar) nas opções no canto superior direito.
6. Escolha a pasta de destino:
Para navegar em uma pasta e escolher uma subpasta como seu destino, escolha o nome da
pasta.
c. Escolha Choose destination (Escolher destino).
O caminho para a pasta de destino aparece na caixa Destination (Destino) . Em Destination (Destino),
você pode, também, inserir o caminho de destino, por exemplo, s3://bucket-name/folder-name/.
7. No canto inferior direito, escolha Copy (Copiar).
Próxima etapa
Para excluir um objeto e um bucket no Amazon S3, consulte Etapa 5: excluir seus objetos e
bucket (p. 16).
Antes de excluir seu bucket, esvazie-o ou exclua os objetos contidos nele. Depois de excluir seus objetos e
o bucket, eles não estarão mais disponíveis.
Se você quiser continuar usando o mesmo nome de bucket, recomendamos excluir os objetos ou esvaziar
o bucket, mas não excluir o bucket. Depois de excluir um bucket, o nome dele fica disponível para ser
reutilizado. No entanto, outra conta da AWS pode criar um bucket com o mesmo nome antes de você ter a
chance de reutilizá-lo.
Tópicos
• Esvaziar o bucket (p. 17)
• Excluir um objeto (p. 17)
• Excluir bucket (p. 17)
Esvaziar o bucket
Se pretender excluir seu bucket, primeiro você deve esvaziar seu bucket, o que exclui todos os objetos
contidos nele.
1. Na lista Buckets, selecione o bucket que deseja esvaziar e escolha Empty (Vazio).
2. Para confirmar que deseja esvaziar o bucket e excluir todos os objetos contidos nele, em Empty
bucket (Esvaziar bucket), insira o nome do bucket.
Important
Uma página Empty bucket :Status (Esvaziar bucket: status) é aberta, para que você possa revisar um
resumo de exclusões de objetos com falha e bem-sucedidas.
4. Para retornar à sua lista de buckets, escolha Exit (Sair).
Excluir um objeto
Se quiser escolher quais objetos excluir sem esvaziar todos os objetos do bucket, você pode excluir um
objeto.
Como alternativa, escolha Delete (Excluir) nas opções no canto superior direito.
4. Digite delete se solicitado para confirmar que você deseja excluir esses objetos.
5. Escolha Delete objects (Excluir objetos) no canto inferior direito e o Amazon S3 excluirá os objetos
especificados.
Excluir bucket
Depois de esvaziar o bucket ou excluir todos os objetos dele, você poderá excluir o bucket.
Não é possível desfazer a ação de excluir um bucket. Nomes de bucket são exclusivos. Se
você excluir seu bucket, outro usuário da AWS poderá usar o nome. Se quiser continuar
usando o mesmo nome de bucket, não exclua o bucket. Em vez disso, esvazie e conserve o
bucket.
4. Para excluir seu bucket, escolha Delete bucket (Excluir bucket).
Os seguintes tópicos explicam várias maneiras com as quais você obtém um entendimento mais profundo
do Amazon S3 para que você possa implementá-lo em suas aplicações.
Tópicos
• Cenários de uso comuns (p. 18)
• Considerações daqui para frente (p. 18)
• Recursos avançados do Amazon S3 (p. 19)
• Melhores práticas de controle de acesso (p. 20)
• Recursos de desenvolvimento (p. 24)
Tópicos
• Conta e credenciais de segurança da AWS (p. 19)
• Segurança (p. 19)
• Integração com a AWS (p. 19)
• Definição de preços (p. 19)
Se você for o proprietário ou administrador da conta e quiser saber mais sobre o IAM, consulte a descrição
do produto em https://aws.amazon.com/iam ou a documentação técnica no Guia do usuário do IAM.
Segurança
O Amazon S3 fornece mecanismos de autenticação para proteger os dados armazenados no Amazon
S3 contra acesso não autorizado. A menos que você especifique o contrário, apenas o proprietário da
conta AWS pode acessar dados carregados para o Amazon S3. Para obter mais informações sobre
como gerenciar o acesso a buckets e objetos, acesse Identity and Access Management no Amazon
S3 (p. 252).
No entanto, você pode criptografar seus dados antes de enviá-los para o Amazon S3.
• Amazon EC2
• Amazon EMR
• Amazon SQS
• Amazon CloudFront
Definição de preços
Conheça a estrutura de preços para armazenar e transferir dados no Amazon S3. Para obter mais
informações, consulte Definição de preço do Amazon S3.
Link Funcionalidade
Link Funcionalidade
Hospedagem de um site estático usando o Saiba como hospedar um site estático no Amazon
Amazon S3 (p. 945) S3.
Gerenciando seu ciclo de vida de Saiba como gerenciar o ciclo de vida de objetos
armazenamento (p. 569) no seu bucket. O gerenciamento do ciclo de
vida inclui o vencimento e o arquivamento de
objetos (mudança dos objetos para a classe de
armazenamento do S3 S3 Glacier).
Tópicos
• Criar um bucket (p. 20)
• Armazenar e compartilhar dados (p. 21)
• Compartilhar recursos (p. 22)
• Proteger dados (p. 22)
Criar um bucket
Ao criar um bucket, é necessário aplicar as seguintes ferramentas e configurações para ajudar a garantir
que os recursos do Amazon S3 estejam protegidos.
O Bloqueio de acesso público do S3 fornece quatro configurações para ajudar a evitar expor
inadvertidamente seus recursos do S3. É possível aplicar essas configurações em qualquer combinação a
pontos de acesso individuais, a buckets ou a contas da AWS inteiras. Caso você aplique uma configuração
a uma conta, ela se aplica a todos os buckets e pontos de acesso de propriedade dessa conta. Por padrão,
a configuração Block all public access (Bloquear todo o acesso público) é aplicada a novos buckets criados
no console do Amazon S3.
Se as configurações de bloqueio de acesso público do S3 forem muito restritivas, você poderá usar
identidades do AWS Identity and Access Management (IAM) para conceder acesso a usuários específicos
em vez de desabilitar todas as configurações de bloqueio de acesso público. Usar o Bloqueio de acesso
público com identidades do IAM ajuda a garantir que qualquer operação bloqueada por uma configuração
do Bloqueio de acesso público seja rejeitada, a menos que o usuário solicitante tenha recebido permissão
específica.
Para obter mais informações, consulte Configurações do bloqueio de acesso público (p. 470).
Ao configurar contas para novos membros da equipe que exigem acesso ao S3, use usuários e funções
do IAM para garantir privilégios mínimos. Também é possível implementar uma forma de autenticação
multifator (MFA) do IAM para apoiar uma base de identidade sólida. Com as identidades do IAM, é
possível conceder permissões exclusivas aos usuários e especificar quais recursos eles podem acessar e
quais ações eles podem executar. As identidades do IAM fornecem mais recursos, incluindo a capacidade
de exigir que os usuários insiram credenciais de login antes de acessar recursos compartilhados e aplicar
hierarquias de permissão a diferentes objetos em um único bucket.
Para obter mais informações, consulte Exemplo 1: Proprietário do bucket que concede permissões do
bucket aos usuários (p. 413).
Políticas de buckets
Com as políticas de bucket, é possível personalizar o acesso ao bucket para ajudar a garantir que somente
os usuários aprovados possam acessar recursos e executar ações neles. Além das políticas de bucket,
você deve usar as configurações do Bloqueio de acesso público no nível do bucket para limitar ainda mais
o acesso público aos dados.
Para obter mais informações, consulte Uso de políticas de bucket (p. 376).
Ao criar políticas, evite o uso de curingas no elemento Principal porque ele permite efetivamente que
qualquer pessoa acesse os recursos do Amazon S3. É melhor listar explicitamente usuários ou grupos que
têm permissão para acessar o bucket. Em vez de incluir um curinga para as ações, conceda permissões
específicas quando aplicável.
Para manter ainda mais a prática de privilégios mínimos, as instruções Deny (Negar) no elemento
Effect devem ser tão amplas quanto possível e as instruções Allow (Permitir) devem ser tão restritas
quanto possível. Negar efeitos emparelhados com a ação “s3:*” é outra boa maneira de implementar as
melhores práticas de adesão para os usuários incluídos em instrução de condição de política.
Para obter mais informações sobre como especificar condições para quando uma política estiver em vigor,
consulte Exemplos de chave de condição do Amazon S3 (p. 278).
Ao adicionar usuários em uma configuração corporativa, você poderá usar um endpoint de Virtual Private
Cloud (VPC) para permitir que todos os usuários na rede virtual acessem os recursos do Amazon S3. Os
VPC endpoints permitem que os desenvolvedores concedam acesso e permissões específicos a grupos
de usuários com base na rede à qual o usuário está conectado. Em vez de adicionar cada usuário a
uma função ou a um grupo do IAM, você poderá usar VPC endpoints para negar acesso ao bucket se a
solicitação não for originada do endpoint especificado.
Para obter mais informações, consulte Controlar o acesso a partir de VPC endpoints com políticas de
bucket (p. 377).
Se você usar o console do Amazon S3 para gerenciar buckets e objetos, você deve implementar o
versionamento do S3 e o bloqueio de objeto do S3. Esses recursos ajudam a evitar alterações acidentais
em dados críticos e permitem reverter ações não intencionais. Esse recurso é particularmente útil quando
há vários usuários com permissões completas de gravação e execução acessando o console do Amazon
S3.
Para obter informações sobre o Versionamento do S3, consulte Usando o controle de versão em buckets
do S3 (p. 516). Para obter mais informações sobre Bloqueio de objetos, consulte Usar o S3 Object
Lock (p. 554).
Para gerenciar os objetos para que eles sejam armazenados de forma econômica durante todo o ciclo
de vida, você pode emparelhar políticas de ciclo de vida com o versionamento de objetos. As políticas de
ciclo de vida definem as ações que você deseja que o S3 execute durante a vida útil de um objeto. Por
exemplo, é possível criar uma política de ciclo de vida que fará a transição de objetos para outra classe de
armazenamento, arquivá-los ou excluí-los após um período especificado. É possível definir uma política
de ciclo de vida para todos os objetos ou para um subconjunto de objetos no bucket usando um prefixo ou
uma tag compartilhados.
Para obter mais informações, consulte Gerenciando seu ciclo de vida de armazenamento (p. 569).
Ao criar buckets que são acessados por diferentes locais de escritório, você deve considerar a
implementação da replicação entre regiões do S3. A replicação entre regiões ajuda a garantir que todos os
usuários tenham acesso aos recursos de que precisam e aumenta a eficiência operacional. A replicação
entre regiões oferece maior disponibilidade copiando objetos entre buckets do S3 em diferentes regiões da
AWS. No entanto, o uso dessa ferramenta aumenta os custos de armazenamento.
Ao configurar um bucket para ser usado como um site estático acessado publicamente, é necessário
desabilitar todas as configurações do Bloqueio de acesso público. É importante fornecer apenas ações
s3:GetObject e não permissões ListObject ou PutObject ao escrever a política de bucket para o
site estático. Isso ajuda a garantir que os usuários não possam visualizar todos os objetos no bucket nem
adicionar seu próprio conteúdo.
Para obter mais informações, consulte Definir permissões para acesso ao site (p. 956).
O Amazon CloudFront fornece os recursos necessários para configurar um site estático seguro. Os sites
estáticos do Amazon S3 só oferecem suporte a endpoints HTTP. O CloudFront usa o armazenamento
durável do Amazon S3 ao mesmo tempo que fornece cabeçalhos de segurança adicionais, como HTTPS.
HTTPS adiciona segurança criptografando uma solicitação HTTP normal e protegendo contra ataques
cibernéticos comuns.
Para obter mais informações, consulte Conceitos básicos de um site estático seguro no Guia do
desenvolvedor do Amazon CloudFront.
Compartilhar recursos
Existem várias maneiras diferentes de compartilhar recursos com um grupo específico de usuários.
É possível usar as ferramentas a seguir para compartilhar um conjunto de documentos ou outros
recursos com um único grupo de usuários, departamento ou escritório. Embora todos possam ser usados
para atingir o mesmo objetivo, algumas ferramentas podem emparelhar melhor do que outras com as
configurações existentes.
Políticas de usuário
É possível compartilhar recursos com um grupo limitado de pessoas usando políticas de grupos e de
usuários do IAM. Ao criar um usuário do IAM, você será solicitado a criá-lo e adicioná-lo a um grupo. No
entanto, é possível criar e adicionar usuários a grupos a qualquer momento. Se os indivíduos com os quais
você pretende compartilhar esses recursos já estiverem configurados no IAM, será possível adicioná-los a
um grupo comum e compartilhar o bucket com o grupo dentro da política de usuário. Também é possível
usar políticas de usuário do IAM para compartilhar objetos individuais em um bucket.
Para obter mais informações, consulte Permitir que um usuário do IAM acesse um dos seus
buckets (p. 406).
Como regra geral, recomendamos que você use políticas de bucket do S3 ou políticas do IAM para
controle de acesso. As listas de controle de acesso (ACLs) do Amazon S3 são um mecanismo de controle
de acesso herdado que precede o IAM. Se você já usa ACLs do S3 e as considera suficientes, não há
necessidade de alterar. No entanto, determinados cenários de controle de acesso exigem o uso de ACLs.
Por exemplo, quando um proprietário de bucket deseja conceder permissão a objetos, mas nem todos os
objetos são de propriedade dele, o proprietário do objeto deve primeiro conceder permissão ao proprietário
do bucket. Isso é feito usando uma ACL de objeto.
Para obter mais informações, consulte Exemplo 3: O proprietário do bucket concede permissões para
objetos que não possui (p. 424).
Prefixos
Para obter mais informações, consulte Organizar objetos no console do Amazon S3 usando
pastas (p. 155).
Se usar a marcação de objetos para categorizar o armazenamento, você poderá compartilhar objetos
marcados com um valor específico com usuários especificados. A marcação de recursos permite controlar
o acesso a objetos com base nas tags associadas ao recurso que um usuário está tentando acessar.
Para fazer isso, use a condição ResourceTag/key-name dentro de uma política de usuário do IAM para
permitir o acesso aos recursos marcados.
Para obter mais informações, consulte Controlar o acesso aos recursos da AWS usando tags de recursos
no Guia do usuário do IAM.
Proteger dados
Use as seguintes ferramentas para ajudar a proteger os dados em trânsito e em repouso, ambas as quais
são cruciais para manter a integridade e a acessibilidade dos dados.
Object encryption
O Amazon S3 oferece várias opções de criptografia de objetos que protegem os dados em trânsito
e em repouso. A criptografia no lado do servidor criptografa o objeto antes de salvá-lo em discos em
seus datacenters e os descriptografa ao fazer download dos objetos. Contanto que você autentique sua
solicitação e tenha permissões de acesso, não há diferença na forma de acesso aos objetos criptografados
ou não criptografados. Ao configurar a criptografia no lado do servidor, você tem três opções mutuamente
exclusivas:
Para obter mais informações, consulte Proteção de dados usando criptografia no lado do
servidor (p. 195).
Criptografia no lado do cliente é o ato de criptografar os dados antes de enviá-los para o Amazon S3. Para
obter mais informações, consulte Proteger dados usando a criptografia no lado do cliente (p. 239).
Métodos de assinatura
Para obter mais informações, consulte Autenticar solicitações (AWS Signature versão 4) e Processo de
assinatura do Signature versão 4.
• Amazon CloudWatch
• AWS CloudTrail
• Logs de acesso do Amazon S3
• AWS Trusted Advisor
Para obter mais informações, consulte Registrar em log e monitorar no Amazon S3 (p. 506).
O Amazon S3 é integrado ao AWS CloudTrail, um serviço que fornece um registro das ações realizadas
por um usuário, uma função ou um serviço da AWS no Amazon S3. Esse recurso pode ser emparelhado
com o Amazon GuardDuty, que monitora ameaças contra seus recursos do Amazon S3 analisando
eventos de gerenciamento do CloudTrail e eventos de dados do CloudTrail S3. Essas fontes de dados
monitoram diferentes tipos de atividade. Por exemplo, os eventos de gerenciamento do CloudTrail
relacionados ao S3 incluem operações que listam ou configuram projetos do S3. O GuardDuty analisa
eventos de dados do S3 de todos os buckets do S3 e os monitora em busca de atividades maliciosas e
suspeitas.
Para obter mais informações, consulte Proteção do Amazon S3 no Amazon GuardDuty no Guia do usuário
do Amazon GuardDuty.
Recursos de desenvolvimento
Para ajudá-lo a criar aplicativos usando a linguagem de sua escolha, fornecemos os seguintes recursos:
Você pode usar esses exemplos de códigos para entender como implementar a API do Amazon S3.
Para obter mais informações, consulte o Centro do desenvolvedor da AWS.
• Tutoriais – nosso Centro de recursos oferece mais tutoriais do Amazon S3.
Esses tutoriais oferecem uma abordagem prática para o aprendizado das funcionalidades do Amazon
S3. Para obter mais informações, consulte Artigos e tutoriais.
• Fórum de clientes – Recomendamos que você examine o fórum do Amazon S3 para ter uma ideia do
que outros usuários estão fazendo e se beneficiar do que estão perguntando.
O fórum pode ajudar a entender o que pode e o que não pode ser feito com o Amazon S3. O fórum
também é um meio para que você faça perguntas que podem responder as dúvidas de outros usuários
ou representantes da AWS. Você pode usar o fórum para relatar problemas com o serviço ou a API.
Para obter mais informações, consulte os Fóruns de discussão.
Para armazenar um objeto no Amazon S3, crie um bucket e faça upload do objeto em um bucket. Quando
o objeto estiver no bucket, você poderá abri-lo, fazer download dele e movê-lo. Quando você não precisar
mais de um objeto ou um bucket, poderá limpar seus recursos.
Note
Com o Amazon S3, você paga somente pelo que for usado. Para obter mais informações sobre
os recursos e a definição de preço do Amazon S3, consulte Amazon S3. Se você for um novo
cliente do Amazon S3, você pode começar a usar o Amazon S3 gratuitamente. Para obter mais
informações, consulte AWS Free Tier (Nível gratuito da AWS).
Os tópicos desta seção fornecem uma visão geral do trabalho com buckets no Amazon S3. Eles incluem
informações sobre nomeação, criação, acesso e exclusão de buckets.
Tópicos
• Visão geral dos buckets (p. 26)
• Regras de nomeação de bucket (p. 30)
• Criação de um bucket (p. 31)
• Visualização das propriedades de um bucket do S3 (p. 35)
• Acessar um bucket (p. 36)
• Esvaziar um bucket (p. 38)
• Excluir um bucket (p. 40)
• Definir o comportamento padrão de criptografia do lado do servidor para buckets do Amazon
S3 (p. 43)
• Configurar transferências de arquivos rápidas e seguras usando o Amazon S3 Transfer
Acceleration (p. 48)
• Configuração de buckets de Pagamento pelo solicitante para transferências de armazenamento e
uso (p. 56)
• Restrições e limitações do bucket (p. 60)
Em termos de implementação, os buckets e objetos são recursos da AWS, e o Amazon S3 fornece APIs
para você gerenciá-los. Por exemplo, é possível criar um bucket e fazer upload de objetos usando a API do
Amazon S3. Também é possível usar o console do Amazon S3 para executar essas operações. O console
usa as APIs do Amazon S3 para enviar solicitações ao Amazon S3.
Esta seção descreve como trabalhar com buckets. Para obter mais informações sobre como trabalhar com
objetos, consulte Visão geral de objetos Amazon S3 (p. 62).
O Amazon S3 cria buckets na região que você especificar. Para otimizar a latência, minimizar os custos ou
atender a requisitos regulatórios, você pode escolher qualquer região da AWS geograficamente próxima
para otimizar a latência. Por exemplo, se você residir na Europa, poderá considerar vantajoso criar buckets
nas regiões UE (Irlanda) ou UE (Frankfurt). Para obter uma lista das regiões do Amazon S3, consulte
Regiões e endpoints na Referência geral da AWS.
Note
Os objetos pertencentes a um bucket criado em uma região da AWS específica jamais saem dela,
a menos que você os transfira explicitamente para outra região. Por exemplo, os objetos que são
armazenados na região UE (Irlanda) nunca saem dela.
Tópicos
• Sobre permissões (p. 27)
• Gerenciar o acesso público aos buckets (p. 27)
• Opções de configuração do bucket (p. 28)
Sobre permissões
É possível usar suas credenciais de usuário raiz da conta da AWS para criar um bucket e executar
qualquer outra operação do Amazon S3. No entanto, recomendamos que você não use as credenciais
de usuário raiz da sua conta da AWS para fazer solicitações, como criar um bucket. Em vez disso, crie
um usuário do AWS Identity and Access Management (IAM) e conceda a esse usuário acesso total (por
padrão, os usuários não têm permissões).
Esses usuários são referidos como administradores. As credenciais do usuário administrador podem ser
usadas em vez das credenciais do usuário raiz da conta para interagir com a AWS e executar tarefas, tais
como criar um bucket, criar usuários e conceder permissões a eles.
Para obter mais informações, consulte Credenciais de usuário raiz da conta da AWS e credenciais de
usuário do IAM na Referência geral da AWS e Melhores práticas de segurança no IAM no Guia do usuário
do IAM.
A conta da AWS que cria um recurso é proprietária daquele recurso. Por exemplo, se você criar um
usuário do IAM na sua conta da AWS e conceder permissões para esse usuário criar um bucket, o usuário
poderá criar um bucket. Mas o usuário não é proprietário do bucket; a conta da AWS à qual o usuário
pertence é do bucket. O usuário precisará de permissão adicional do proprietário do recurso para executar
qualquer outra operação de bucket. Para obter mais informações sobre o gerenciamento de permissões
para recursos do Amazon S3, consulte Identity and Access Management no Amazon S3 (p. 252).
Para ajudar a garantir que todos os seus buckets e objetos do Amazon S3 tenham o acesso público
bloqueado, recomendamos ativar as quatro configurações de bloqueio de acesso público na sua conta.
Estas configurações bloqueiam o acesso público a todos os buckets atuais e futuros.
Antes de aplicar estas configurações, verifique se seus aplicativos funcionarão corretamente sem
acesso público. Se você precisa de um certo nível de acesso público aos seus buckets ou objetos, por
exemplo, para hospedar um site estático como descrito em Hospedagem de um site estático usando o
Amazon S3 (p. 945), você pode personalizar as configurações individualmente para atender aos seus
casos de uso de armazenamento. Para obter mais informações, consulte Bloquear o acesso público ao
armazenamento do Amazon S3 (p. 469).
Há também configurações no nível do objeto. Por exemplo, você pode configurar permissões no
nível do objeto configurando uma lista de controle de acesso (ACL) específica para aquele objeto.
São chamados de sub-recursos porque existem no contexto de um bucket ou objeto específico. A tabela a
seguir lista os sub-recursos que permitem gerenciar configurações específicas de bucket.
Sub-recurso Descrição
cors Você pode configurar seu bucket para autorizar solicitações de origem cruzada.
(compartilhamento
de recurso de Para obter mais informações, consulte Usar o compartilhamento de recursos de
origem cruzada) origem cruzada (CORS) (p. 458).
notificação de Você pode permitir que seu bucket envie notificações de eventos do bucket
evento especificado.
ciclo de vida Você pode definir regras de ciclo de vida para objetos em seu bucket que têm
um ciclo de vida bem definido. Por exemplo, você pode definir uma regra para
arquivar objetos um ano após a criação ou excluir um objeto 10 anos após a
criação.
location Ao criar um bucket, você especifica a região da AWS onde deseja que o Amazon
S3 crie o bucket. O Amazon S3 armazena essas informações no sub-recurso local
e fornece uma API para que você recupere essas informações.
registro em log O registro em log permite que você rastreie solicitações de acesso ao seu bucket.
Cada registro de log de acesso fornece detalhes sobre uma única solicitação
de acesso, como solicitante, nome do bucket, horário da solicitação, ação da
solicitação, status de resposta e código de erro, se houver. As informações de log
de acesso podem ser úteis em auditorias de segurança e acesso. Isso também
Sub-recurso Descrição
pode ajudá-lo a conhecer sua base de clientes e entender a conta do Amazon S3.
bloqueio de objetos Para usar o bloqueio de objetos do S3, é necessário habilitá-lo para um bucket.
Também é possível configurar um modo e um período de retenção padrão que se
aplicam a novos objetos colocados no bucket.
política e ACL (lista Todos os seus recursos (como buckets e objetos) são privados por padrão. O
de controle de Amazon S3 é compatível com opções de política de bucket e de lista de controle
acesso) de acesso (ACL) para que você conceda e gerencie permissões no nível do
bucket. O Amazon S3 armazena as informações de permissão nos sub-recursos
política e acl.
requestPayment Por padrão, a conta da AWS que cria o bucket (o proprietário do bucket) paga
pelos downloads do bucket. Usando esse sub-recurso, o proprietário do bucket
pode especificar que a pessoa que solicita o download será cobrada pelo
download. O Amazon S3 fornece uma API para gerenciamento desse sub-recurso.
marcação Você pode adicionar tags de alocação de custo ao seu bucket para classificar
e acompanhar seus custos com a AWS. O Amazon S3 fornece o sub-recurso
marcação para armazenar e gerenciar tags em um bucket. Com o uso de tags em
seu bucket, a AWS gera um relatório de alocação de custos com o uso e custos
agregados por suas tags.
Sub-recurso Descrição
site Você pode configurar seu bucket para hospedagem de site estático. O Amazon S3
armazena essa configuração criando um sub-recurso site.
Para obter a melhor compatibilidade, recomendamos evitar o uso de pontos (.) em nomes de buckets,
exceto em buckets usados apenas para hospedagem de sites estáticos. Se você incluir pontos no nome
de um bucket, não poderá usar o endereçamento em estilo de host virtual por HTTPS, a menos que
execute sua própria validação de certificado. Isso ocorre porque os certificados de segurança usados para
hospedagem virtual de buckets não funcionam para buckets com pontos nos nomes.
Essa limitação não afeta os buckets usados para hospedagem de sites estáticos, pois essa hospedagem
só está disponível via HTTP. Para obter mais informações sobre o endereçamento no estilo de
hospedagem virtual, consulte Hospedagem virtual de buckets (p. 1025). Para obter mais informações
sobre hospedagem de sites estáticos, consulte Hospedagem de um site estático usando o Amazon
S3 (p. 945).
Note
Antes de 1º de março de 2018, os buckets criados na região Leste dos EUA (Norte da Virgínia)
podiam ter nomes com até 255 caracteres e incluíam letras maiúsculas e sublinhados. A partir de
1º de março de 2018, os novos buckets na região Leste dos EUA (Norte da Virgínia) devem estar
em conformidade com as mesmas regras aplicadas em todas as outras regiões.
• docexamplebucket1
• log-delivery-march-2020
• my-hosted-content
Os nomes de buckets de exemplo a seguir são válidos, mas não recomendados para usos que não sejam
hospedagem de sites estáticos:
• docexamplewebsite.com
• www.docexamplewebsite.com
• my.example.s3.bucket
Criação de um bucket
Para fazer upload de seus dados para o Amazon S3, você deve primeiro criar um bucket do Amazon
S3 em uma das regiões da AWS. Ao criar um bucket, você deve escolher um nome de bucket e Região.
Opcionalmente, você pode escolher outras opções de gerenciamento de armazenamento para o
bucket. Assim que você cria um bucket, não pode mais alterar o respectivo nome ou região. Para obter
informações sobre nomeação de buckets, consulte Regras de nomeação de bucket (p. 30).
A conta da AWS que cria o bucket é proprietária dele. Você pode fazer upload de um número ilimitado de
objetos para o bucket. Por padrão, você pode criar até 100 buckets em cada conta da AWS. Se precisar
de mais buckets, você poderá aumentar o limite de bucket da conta para um máximo de 1.000 buckets
enviando um aumento de limite de serviço. Para saber como solicitar um aumento de limite de bucket,
consulte Cotas de serviço da AWS na Referência geral da AWS. Você pode armazenar qualquer número
de objetos no bucket.
Você pode usar o console do Amazon S3, as APIs do Amazon S3, a AWS CLI ou os AWS SDKs para criar
um bucket.
Usar o console do S3
1. Faça login no Console de Gerenciamento da AWS e abra o console do Amazon S3 em https://
console.aws.amazon.com/s3/.
2. Selecione Create bucket (Criar bucket).
Depois de criado o bucket, você não pode mudar seu nome. Para obter informações sobre nomeação
de buckets, consulte Regras de nomeação de bucket (p. 30).
Important
Evite incluir informações confidenciais, como números de conta, no nome do bucket. O nome
do bucket é visível nos URLs que apontam para os objetos no bucket.
4. Em Region (Região), escolha a Região da AWS onde deseja que o bucket resida.
Escolha uma região próxima de você para minimizar a latência e os custos e atender aos requisitos
regulatórios. Os objetos armazenados em uma região nunca saem dessa região, a menos que você
os transfira para outra região. Para obter uma lista das regiões da AWS do Amazon S3, consulte
Endpoints de serviço da AWS na Referência geral do Amazon Web Services.
5. Em Bucket settings for Block Public Access (Configurações de bucket para o Bloqueio de acesso
público), escolha as configurações de bloqueio de acesso público que deseja aplicar ao bucket.
Recomendamos que você mantenha todas as configurações ativadas, a menos que saiba que
precisa desativar uma ou mais delas para seu caso de uso, como para hospedar um site público. As
configurações de bloqueio de acesso público que você habilitar para o bucket também serão ativadas
para todos os pontos de acesso criados no bucket. Para obter mais informações sobre como bloquear
o acesso público, consulte Bloquear o acesso público ao armazenamento do Amazon S3 (p. 469).
6. (Opcional) Se você quiser habilitar o Bloqueio de Objetos do S3, faça o seguinte:
Para obter mais informações sobre o recurso Bloqueio de Objeto do S3, consulte Usar o S3 Object
Lock (p. 554).
7. Selecione Create bucket (Criar bucket).
Para criar um cliente a fim de acessar um endpoint de pilha dupla, é necessário especificar uma região da
AWS. Para obter mais informações, consulte Endpoints de pilha dupla (p. 995). Para obter uma lista de
regiões da AWS disponíveis, consulte Regiões e endpoints na Referência geral da AWS.
Ao criar um cliente, a região mapeia para o endpoint específico da região. O cliente usa esse endpoint para
se comunicar com o Amazon S3: s3.<region>.amazonaws.com. Se a sua região foi lançada após 20
de março de 2019,, seu cliente e bucket devem estar na mesma região. No entanto, é possível usar um
cliente na região Leste dos EUA (Norte da Virgínia) para criar um bucket em qualquer região iniciada antes
de 20 de março de 2019. Para obter mais informações, consulte Endpoints legados (p. 1030).
• Crie um cliente especificando explicitamente uma região da AWS — No exemplo, o cliente usa
o s3.us-west-2.amazonaws.com endpoint para se comunicar com o Amazon S3. Você pode
especificar qualquer região da AWS. Para obter uma lista das regiões da AWS, consulte Regiões e
endpoints na Referência geral da AWS.
• Envie uma solicitação de bucket de criação especificando apenas um nome de bucket — O cliente envia
uma solicitação ao Amazon S3 para criar o bucket na região onde você criou um cliente.
• Recupere as informações sobre a localização do bucket. O Amazon S3 armazena as informações de
localização do bucket no sub-recurso location que está associado ao bucket.
Java
Este exemplo mostra como criar um bucket do Amazon S3 usando o AWS SDK para Java. Para obter
instruções sobre criar e testar um exemplo funcional, consulte Testar exemplos de código Java no
Amazon S3 (p. 1042).
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.CreateBucketRequest;
import com.amazonaws.services.s3.model.GetBucketLocationRequest;
import java.io.IOException;
try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();
if (!s3Client.doesBucketExistV2(bucketName)) {
// Because the CreateBucketRequest object doesn't specify a region, the
// bucket is created in the region specified in the client.
s3Client.createBucket(new CreateBucketRequest(bucketName));
// Verify that the bucket was created by retrieving it and checking its
location.
String bucketLocation = s3Client.getBucketLocation(new
GetBucketLocationRequest(bucketName));
System.out.println("Bucket location: " + bucketLocation);
}
} catch (AmazonServiceException e) {
// The call was transmitted successfully, but Amazon S3 couldn't process
// it and returned an error response.
e.printStackTrace();
} catch (SdkClientException e) {
// Amazon S3 couldn't be contacted for a response, or the client
// couldn't parse the response from Amazon S3.
e.printStackTrace();
}
}
}
.NET
Para obter informações sobre como criar e testar um exemplo funcional, consulte Executar os
exemplos de código do Amazon S3 .NET (p. 1044).
Example
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using Amazon.S3.Util;
using System;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class CreateBucketTest
{
private const string bucketName = "*** bucket name ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 s3Client;
public static void Main()
{
s3Client = new AmazonS3Client(bucketRegion);
CreateBucketAsync().Wait();
}
Ruby
Para obter informações sobre como criar e testar um exemplo funcional, consulte Usar o AWS SDK
para Ruby versão 3 (p. 1045).
Example
require 'aws-sdk-s3'
Para obter informações sobre a AWS CLI, consulte O que é a interface de linha de comando da AWS? no
Guia do usuário da interface de linha de comando da AWS.
Para obter informações sobre como ativar o versionamento, consulte Habilitar o controle de versão
em buckets (p. 521).
• Tags — com a alocação de custos da AWS, você pode usar tags de bucket para anotar o
faturamento de seu uso de um bucket. Uma tag é um par chave-valor que representa uma etiqueta
que você atribui a um bucket. Para adicionar tags, escolha Tags e, em seguida, Add tag (Adicionar
tag). Para obter mais informações, consulte Usar tags de alocação de custos para buckets do
S3 (p. 693).
• Default encryption (Criptografia padrão) — a ativação da criptografia padrão fornece criptografia
automática no lado do servidor. O Amazon S3 criptografa um objeto antes de salvá-lo em um
disco e descriptografa o objeto ao baixá-lo. Para obter mais informações, consulte Definir o
comportamento padrão de criptografia do lado do servidor para buckets do Amazon S3 (p. 43).
• Server access logging (Registro em log de acesso ao servidor) — obtenha registros detalhados
das solicitações feitas ao bucket com registro em log de acesso ao servidor. Por padrão, o Amazon
S3 não coleta logs de acesso ao servidor. Para obter informações sobre como habilitar o registro
em log de acesso ao servidor, consulte Habilitar registro em log de acesso ao servidor do Amazon
S3 (p. 835)
• AWS CloudTrail data events (Eventos de dados do AWS CloudTrail) — use o CloudTrail para
registrar eventos de dados. Por padrão, as trilhas não registram eventos de dados. Há cobranças
adicionais para eventos de dados. Para obter mais informações, consulte Registrar em log eventos
de dados para trilhas no Guia do usuário do AWS CloudTrail.
• Event notifications (Notificações de eventos) – habilite certos eventos de bucket do Amazon S3 para
enviar mensagens de notificação para um destino sempre que ocorrer eventos. Para ativar eventos,
escolha Create event notification (Criar notificação de evento) e especifique as configurações que
deseja usar. Para obter mais informações, consulte Habilitar e configurar notificações de eventos
usando o console do Amazon S3 (p. 877).
• Transfer Acceleration — possibilita transferências de arquivos rápidas, fáceis e seguras entre seu
cliente e um bucket do S3 em longas distâncias. Para obter informações sobre como habilitar o
Transfer Acceleration, consulte Habilitar e usar o S3 Transfer Acceleration (p. 51).
• Object Lock (Bloqueio de objetos) — use o bloqueio de objetos do S3 para evitar que um objeto
seja excluído ou substituído por um período fixo ou indefinidamente. Para obter mais informações,
consulte Usar o S3 Object Lock (p. 554).
• Requester Pays (Pagamento pelo solicitante) —habilite o Pagamento pelo solicitante para que o
solicitante (em vez do proprietário do bucket) pague por solicitações e transferências de dados.
Para obter mais informações, consulte Configuração de buckets de Pagamento pelo solicitante para
transferências de armazenamento e uso (p. 56).
• Static website hosting – você pode hospedar um site estático no Amazon S3. Para habilitar a
hospedagem de um site estático, escolha Static website hosting (Hospedagem de sites estáticos)
e especifique as configurações desejadas. Para obter mais informações, consulte Hospedagem de
um site estático usando o Amazon S3 (p. 945).
Acessar um bucket
É possível acessar seu bucket usando o console do Amazon S3. Usando a interface do console, você
pode executar quase todas as operações de bucket sem ter que gravar nenhum código.
Se você acessa um bucket de forma programática, o Amazon S3 oferece suporte à arquitetura RESTful na
qual seus buckets e objetos são recursos, cada um com um URI de recurso que os identifica de maneira
exclusiva.
O Amazon S3 é compatível com os URLs no estilo de hospedagem virtual e estilo de caminho para
acessar um bucket. Como os buckets podem ser acessados usando URLs no estilo de hospedagem virtual
e estilo de caminho, recomendamos criar buckets com nomes compatíveis com DNS. Para obter mais
informações, consulte Restrições e limitações do bucket (p. 60).
Versão da API 2006-03-01
36
Amazon Simple Storage Service Guia do usuário
Acesso no estilo de hospedagem virtual
Note
https://bucket-name.s3.Region.amazonaws.com/key name
Neste exemplo, my-bucket é o nome do bucket, Oeste dos EUA (Oregon) é a região, e puppy.png é o
nome da chave.
https://my-bucket.s3.us-west-2.amazonaws.com/puppy.png
Para obter mais informações sobre acesso no estilo de hospedagem virtual, consulte Solicitações no estilo
de hospedagem virtual (p. 1026).
https://s3.Region.amazonaws.com/bucket-name/key name
Por exemplo, se você criar um bucket chamado mybucket na região Oeste dos EUA (Oregon) e quiser
acessar o objeto puppy.jpg nele, use o seguinte URL no estilo de caminho:
https://s3.us-west-2.amazonaws.com/mybucket/puppy.jpg
Para obter mais informações, consulte Solicitações no estilo de caminho (p. 1026).
Important
Os pontos de acesso do S3 oferecem suporte apenas ao endereçamento em estilo de host virtual. Para
endereçar um bucket por meio de um ponto de acesso, use o formato a seguir.
https://AccessPointName-AccountId.s3-accesspoint.region.amazonaws.com.
Note
• Se o nome do ponto de acesso incluir caracteres de traço (-), inclua os traços no URL e insira
outro traço antes do ID da conta. Por exemplo, para usar um ponto de acesso chamado
finance-docs, de propriedade da conta 123456789012 na Região us-west-2, o URL
apropriado seria https://finance-docs-123456789012.s3-accesspoint.us-
west-2.amazonaws.com.
• Os pontos de acesso do S3 não suportam acesso por HTTP, apenas acesso seguro por
HTTPS.
S3://bucket-name/key-name
O exemplo a seguir usa o bucket de amostra descrito na seção de estilo de caminho anterior.
S3://mybucket/puppy.jpg
Esvaziar um bucket
Você pode esvaziar o conteúdo de um bucket usando o console do Amazon S3, AWS SDKs ou AWS
Command Line Interface (AWS CLI). Quando você esvazia um intervalo, você exclui todo o conteúdo, mas
mantém o intervalo.
Você também pode especificar a configuração de ciclo de vida em um bucket para expirar objetos para que
o Amazon S3 possa excluí-los. No entanto, há limitações nesse método com base no número de objetos
em seu bucket e no status de controle de versão do bucket. Para obter mais informações, consulte Definir
a configuração do ciclo de vida em um bucket (p. 575)
Usar o console do S3
Você pode usar o console do Amazon S3 para esvaziar um bucket, que exclui todos os objetos no bucket
sem excluir o bucket. Ao esvaziar um bucket com o S3 Bucket Versioning habilitado, todas as versões de
todos os objetos no bucket são excluídas. Para obter mais informações, consulte Trabalhar com objetos
em um bucket com versionamento habilitado (p. 525).
O comando rm a seguir remove os objetos com o prefixo de nome de chave doc, por exemplo, doc/doc1
e doc/doc2.
Use o comando a seguir para remover todos os objetos sem especificar um prefixo.
Para obter informações, consulte Usar comandos do S3 de alto nível com a CLI da AWS no Guia do
usuário da Interface de linha de comando da AWS.
Note
Não é possível remover objetos de um bucket que tenha o controle de versão ativado. O Amazon
S3 adiciona um marcador de exclusão quando você exclui um objeto, que é o que este comando
faz. Para obter mais informações sobre o S3 Bucket Versioning, consulte Usando o controle de
versão em buckets do S3 (p. 516).
Para obter um exemplo de como esvaziar um bucket usando o AWS SDK para Java, consulte Excluir um
bucket (p. 40). O código exclui todos os objetos, independentemente de o bucket ter versionamento
habilitado e, em seguida, exclui o bucket. Para só esvaziar o bucket, certifique-se de remover o comando
que exclui o bucket.
Para obter mais informações sobre como usar outros AWS SDKs, consulte Ferramentas para a Amazon
Web Services.
Você pode configurar o ciclo de vida no bucket para expirar objetos e solicitar que o Amazon S3 exclua
esses objetos. Você pode adicionar regras de configuração de ciclo de vida para tornar todos os objetos
ou um subconjunto de objetos expirados com um prefixo de nome de chave específico. Por exemplo,
para remover todos os objetos em um bucket, você pode definir uma regra de ciclo de vida para tornar os
objetos expirados um dia após a criação.
Se seu bucket tem versionamento habilitado, você também pode configurar a regra para tornar versões
desatualizadas de objetos expiradas. Para esvaziar completamente o conteúdo de um bucket habilitado
para versionamento, você deve configurar uma política de expiração em objetos atuais e não atuais no
bucket.
O Amazon S3 é compatível com uma regra de ciclo de vida de bucket que pode ser usada para fazer
com que o Amazon S3 interrompa multipart uploads que não são concluídos dentro de um número
especificado de dias após a inicialização. Recomendamos que você configure essa regra de ciclo de vida
para minimizar os custos de armazenamento. Para obter mais informações, consulte Configurando uma
política de ciclo de vida de bucket para anular multipart uploads incompletos (p. 85).
Para obter mais informações sobre como usar uma configuração de ciclo de vida para esvaziar um bucket,
consulte Definir a configuração do ciclo de vida em um bucket (p. 575) e Expirando objetos (p. 575).
Excluir um bucket
Você pode excluir um bucket vazio do Amazon S3. Antes de excluir um bucket, considere o seguinte:
• Nomes de bucket são exclusivos. Se você excluir um bucket, outro usuário da AWS poderá usar o nome.
• Se o bucket hospedar um site estático e você tiver criado e configurado uma zona hospedada do
Amazon Route 53 conforme descrito em Configurar um site estático usando um domínio personalizado
registrado no Route 53 (p. 973), você deverá limpar as configurações da zona hospedada do Route 53
relacionadas ao bucket. Para obter mais informações, consulte Etapa 2: exclua a zona hospedada do
Route 53 (p. 989).
• Se o bucket receber dados de log do Elastic Load Balancing (ELB): recomendamos a interrupção da
entrega de logs de ELB para o bucket antes da exclusão. Após excluir o bucket, se outro usuário criar
um bucket usando o mesmo nome, os dados de log poderão ser entregues a esse bucket. Para obter
informações sobre logs de acesso do ELB, consulte Logs de acesso no Guia do usuário para Classic
Load Balancers e Logs de Acesso no Guia do usuário para Application Load Balancers.
Solução de problemas
• permissões s3:DeleteBucket: se você não puder excluir um bucket, trabalhe com o administrador do IAM
para confirmar que você tem permissões s3:DeleteBucket na política de usuário do IAM.
• instrução de negação s3:DeleteBucket: se você tiver as permissões s3:DeleteBucket em sua política
do IAM e não puder excluir um bucket, a política de bucket poderá incluir uma instrução de negação
para s3:DeleteBucket. Os buckets criados pelo ElasticBeanStalk têm uma política que contém essa
instrução por padrão. Antes de excluir o bucket, você deve excluir essa instrução ou a política de bucket.
Important
Nomes de bucket são exclusivos. Se você excluir um bucket, outro usuário da AWS poderá
usar o nome. Se você deseja continuar a usar o mesmo nome do bucket, não exclua o bucket.
Recomendamos que você esvazie o bucket e mantenha-o.
Usar o console do S3
Para excluir um bucket do S3
Java
O exemplo de Java a seguir exclui um bucket que contém objetos. O exemplo exclui todos os objetos
e, em seguida, exclui o bucket. O exemplo também funciona para buckets com ou sem versionamento
habilitado.
Note
Para buckets sem versionamento habilitado, você pode excluir todos os objetos diretamente
e, em seguida, excluir o bucket. Para buckets com versionamento habilitado, você deve
excluir todas as versões do objeto antes de excluir o bucket.
Para obter instruções sobre criar e testar um exemplo funcional, consulte Testar exemplos de código
Java no Amazon S3 (p. 1042).
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.*;
import java.util.Iterator;
try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();
if (versionList.isTruncated()) {
versionList = s3Client.listNextBatchOfVersions(versionList);
} else {
break;
}
}
// After all objects and object versions are deleted, delete the bucket.
s3Client.deleteBucket(bucketName);
} catch (AmazonServiceException e) {
// The call was transmitted successfully, but Amazon S3 couldn't process
// it, so it returned an error response.
e.printStackTrace();
} catch (SdkClientException e) {
// Amazon S3 couldn't be contacted for a response, or the client couldn't
// parse the response from Amazon S3.
e.printStackTrace();
}
}
}
Se o bucket não tiver o versionamento habilitado, você poderá usar o comando rb (remover bucket) da
CLI da AWS com o parâmetro --force para excluir o bucket e todos os objetos nele. Esse comando
exclui todos os objetos primeiro e, em seguida, exclui o bucket.
Para obter informações, consulte Usar comandos do S3 de alto nível com a interface da linha de comando
da AWS no guia do usuário da AWS Command Line Interface.
Ao configurar seu bucket para usar criptografia padrão com o SSE-KMS, você também pode habilitar o
recurso Chaves de bucket do S3 para diminuir o tráfego de solicitações do Amazon S3 para o AWS Key
Management Service (AWS KMS) e reduzir o custo de criptografia. Para obter mais informações, consulte
Redução do custo do SSE-KMS com chaves de bucket do Amazon S3 (p. 204).
Quando você usa a criptografia no lado do servidor, o Amazon S3 criptografa um objeto antes de salvá-
lo no disco e o descriptografa quando você faz download dele. Para obter mais informações sobre como
proteger dados usando a criptografia do lado do servidor e o gerenciamento de chaves de criptografia,
consulte Proteção de dados usando criptografia no lado do servidor (p. 195).
Para obter mais informações sobre permissões necessárias para criptografia padrão, consulte
PutBucketEncryption na Referência da API do Amazon Simple Storage Service.
Para configurar a criptografia padrão em um bucket, use o console do Amazon S3, a CLI da AWS, os
AWS SDKs ou a API REST. Para obter mais informações, consulte the section called “Habilitar criptografia
padrão” (p. 45).
Para criptografar objetos existentes do Amazon S3 com uma única solicitação, use o recurso Operações
em lote do Amazon S3. Você fornece uma lista de objetos às operações em lote do S3 que, por sua vez,
chamam a respectiva API para realizar a operação especificada. É possível usar a operação de cópia
para copiar os objetos não criptografados existentes e gravar os novos objetos criptografados no mesmo
bucket. Um único trabalho de operações em lote pode realizar a operação especificada em bilhões de
objetos contendo exabytes de dados. Para obter mais informações, consulte Executar operações em lote
do S3 (p. 739).
Você também pode criptografar objetos existentes usando a API Copy Object. Para obter mais
informações, consulte a publicação do blog do AWS Storage Encrypting existing Amazon S3 objects with
the AWS CLI.
Note
Os buckets do Amazon S3 com criptografia de bucket padrão que usam SSE-KMS não
podem ser usados como buckets de destino para the section called “Registrando acesso ao
servidor” (p. 833). Somente a criptografia padrão SSE-S3 é suportada para buckets de destino
do log de acesso do servidor.
• A CMK gerenciada pela AWS (aws/s3) é usada quando um nome de recurso da Amazon (ARN) ou
alias da CMK não é fornecido no momento da solicitação, nem por meio da configuração de criptografia
padrão do bucket.
• Se você estiver carregando ou acessando objetos do S3 usando os principais do AWS Identity and
Access Management (IAM) que estão na mesma conta da AWS que sua CMK, você pode usar a CMK
gerenciada pela AWS (aws/s3).
• Use uma CMK gerenciada pelo cliente se desejar conceder acesso entre contas aos objetos do S3.
Você pode configurar a política de uma CMK gerenciada pelo cliente para permitir o acesso de outra
conta.
• Se especificar sua própria CMK, você deve usar um ARN de chave da CMK totalmente qualificado. Ao
usar um alias da CMK, lembre-se de que o AWS KMS resolverá a chave na conta do solicitante. Isso
pode resultar em dados criptografados com um CMK que pertence ao solicitante, e não ao administrador
do bucket.
• É necessário especificar uma chave para a qual você (o solicitante) recebeu a permissão Encrypt.
Para obter mais informações, consulte Permite que os principais usuários usem uma CMK para
operações criptográficas no Guia do desenvolvedor do AWS Key Management Service.
Para obter mais informações sobre quando usar CMKs gerenciadas pelo cliente e a CMK gerenciada pela
AWS, consulte Devo usar uma chave gerenciada pelo AWS KMS da AWS ou uma chave do AWS KMS
personalizada da AWS para criptografar meus objetos no Amazon S3?.
Para obter mais informações sobre como usar a criptografia padrão com SSE-KMS, consulte Replicar
objetos criptografados (p. 672).
do Amazon S3 para o AWS KMS a fim de reduzir o custo da criptografia do lado do servidor usando o
AWS Key Management Service (SSE-KMS).
Quando você configura seu bucket para usar o Chaves de bucket do S3 para SSE-KMS em novos objetos,
o AWS KMS gera uma chave de nível de bucket usada para criar uma chave de dados exclusiva para
objetos no bucket. Essa chave de bucket é usada por um período limitado no Amazon S3, reduzindo a
necessidade do Amazon S3 fazer solicitações ao AWS KMS para concluir operações de criptografia.
Para obter mais informações sobre como usar uma Chave de bucket do S3, consulte Redução do custo do
SSE-KMS com chaves de bucket do Amazon S3 (p. 204).
Ao configurar a criptografia padrão usando o AWS KMS, você também pode configurar a Chave de bucket
do S3. Para obter mais informações, consulte Redução do custo do SSE-KMS com chaves de bucket do
Amazon S3 (p. 204).
A criptografia padrão funciona com todos os buckets do Amazon S3, existentes e novos. Para criptografar
todos os objetos armazenados em um bucket sem a criptografia padrão, você precisa incluir informações
de criptografia com cada solicitação de armazenamento de objeto. Você também precisa configurar
uma política de bucket do Amazon S3 para rejeitar solicitações de armazenamento que não incluem
informações de criptografia.
Não há cobranças adicionais para usar a criptografia padrão para buckets do S3. As solicitações de
configuração do recurso de criptografia padrão geram cobranças padrão de solicitação do Amazon S3.
Para obter mais informações sobre definição de preços, consulte Definição de preços do Amazon S3. Para
o armazenamento CMK do SSE-KMS, as taxas do AWS KMS aplicam-se e são listadas na Definição de
preço da AWS
Você pode habilitar a criptografia padrão do Amazon S3 para um bucket do S3 usando o console do
Amazon S3, os AWS SDKs, a API REST do Amazon S3 e a Interface de linha de comando da AWS (CLI
da AWS).
Uso do console do S3
Para habilitar a criptografia padrão em um bucket do Amazon S3
Para obter mais informações sobre como usar a criptografia no lado do servidor do Amazon S3 para
criptografar seus dados, consulte Proteção de dados usando criptografia no lado do servidor com
chaves de criptografia gerenciadas pelo Amazon S3 (SSE-S3) (p. 213).
7. Para habilitar a criptografia no lado do servidor usando uma CMK do AWS KMS, siga estas etapas:
a. Em Encryption key type (Tipo de chave de criptografia), escolha AWS Key Management Service
key (SSE-KMS) (Chave do AWS Key Management Service (SSE-KMS)).
Important
Se você usar a opção do AWS KMS na sua configuração de criptografia padrão, estará
sujeito aos limites de RPS (solicitações por segundo) do AWS KMS. Para obter mais
informações sobre as cotas do AWS KMS e como solicitar um aumento de cota, consulte
Cotas.
b. Em AWS KMS key (Chave do AWS KMS) escolha uma das seguintes opções:
Important
Você só pode usar CMKs do KMS habilitadas na mesma região da AWS que o bucket.
Quando você seleciona Choose from your KMS master keys (Escolher entre as chaves
mestras do KMS), o console do S3 lista somente 100 CMKs do KMS por região. Se você
tiver mais de 100 CMKs na mesma região, será possível ver somente as primeiras 100
CMKs no console do S3. Para usar uma CMK do KMS que não esteja listada no console,
escolha Custom KMS ARN (Personalizar o ARN do KMS) e insira o ARN da CMK do
KMS.
Quando você usa uma CMK do AWS KMS para criptografia no lado do servidor no
Amazon S3, você deve escolher uma CMK simétrica. O Amazon S3 é compatível apenas
com CMKs simétricas e não com CMKs assimétricas. Para obter mais informações,
consulte Usar chaves simétricas e assimétricas no Guia do desenvolvedor do AWS Key
Management Service.
Para obter mais informações sobre como criar uma CMK do AWS KMS, consulte Criar chaves no
Guia do desenvolvedor do AWS Key Management Service. Para obter mais informações sobre
como usar o AWS KMS com o Amazon S3, consulte Proteção de dados usando criptografia
do lado do servidor com CMKs armazenadas no AWS Key Management Service (SSE-
KMS) (p. 195).
8. Para usar Chaves de bucket do S3, em Bucket Key (Chave de bucket), escolha Enable (Habilitar).
Quando você configura seu bucket para usar a criptografia padrão com o SSE-KMS, você também
pode habilitar a chave de bucket do S3. As chaves de bucket do S3 diminuem o tráfego de solicitações
do Amazon S3 para o AWS KMS e reduzem o custo da criptografia. Para obter mais informações,
consulte Redução do custo do SSE-KMS com chaves de bucket do Amazon S3 (p. 204).
9. Selecione Save changes.
Para obter mais informações sobre criptografia padrão, consulte Definir o comportamento padrão de
criptografia do lado do servidor para buckets do Amazon S3 (p. 43). Para obter mais informações sobre
o uso da CLI da AWS para configurar a criptografia padrão, consulte put-bucket-encryption.
Versão da API 2006-03-01
46
Amazon Simple Storage Service Guia do usuário
Habilitar criptografia padrão
Esse exemplo configura a criptografia de bucket padrão com criptografia gerenciada pelo Amazon S3.
Esse exemplo configura a criptografia de bucket padrão com o SSE-KMS usando uma chave de bucket do
S3.
Para obter mais informações, consulte PutBucketEncryption na Referência da API do Amazon Simple
Storage Service.
Depois de habilitar a criptografia padrão para um bucket, o seguinte comportamento de criptografia será
aplicado:
• Não há alteração na criptografia dos objetos que existiam no bucket antes da ativação da criptografia
padrão.
• Quando você faz upload de objetos após a ativação da criptografia padrão:
• Se seus cabeçalhos de solicitação PUT não incluírem informações de criptografia, o Amazon S3 usará
as configurações de criptografia padrão do bucket para criptografar os objetos.
• Se seus cabeçalhos de solicitação PUT incluírem informações de criptografia, o Amazon S3 usará as
informações de criptografia da solicitação PUT para criptografar objetos antes de armazená-los no
Amazon S3.
• Se você usar a opção SSE-KMS na sua configuração de criptografia padrão, estará sujeito aos limites
de RPS (solicitações por segundo) do AWS KMS. Para obter mais informações sobre os limites do AWS
KMS e sobre como solicitar um aumento de limite, consulte Limites do AWS KMS.
• PutBucketEncryption
• GetBucketEncryption
• DeleteBucketEncryption
Você também pode criar Amazon CloudWatch Events com operações no nível de bucket do S3 como o
tipo de evento. Para obter mais informações sobre eventos do CloudTrail, consulte Habilitar o registro em
log de objetos em um bucket usando o console (p. 825).
Você pode usar logs do CloudTrail para ações do Amazon S3 no nível de objeto a fim de rastrear
solicitações PUT e POST para o Amazon S3. Você pode usar essas ações para verificar se a criptografia
padrão está sendo usada para criptografar objetos quando as solicitações PUT recebidas não têm
cabeçalhos de criptografia.
Quando o Amazon S3 criptografa um objeto usando os cabeçalhos de criptografia PUT, o log inclui um dos
seguintes campos como par de nome/valor: "SSEApplied":"SSE_S3", "SSEApplied":"SSE_KMS ou
"SSEApplied":"SSE_C".
Para multipart uploads, essas informações estão incluídas nas solicitações de API
InitiateMultipartUpload. Para obter mais informações sobre como usar o CloudTrail e o
CloudWatch, consulte Monitorar o Amazon S3 (p. 812).
Quando você usa o Transfer Acceleration, podem ser aplicadas cobranças adicionais de transferência de
dados. Para obter mais informações sobre a definição de preços, consulte Definição de preços do Amazon
S3.
Para obter mais informações sobre quando usar o Transfer Acceleration, consulte Perguntas frequentes do
Amazon S3.
• O Transfer Acceleration só tem suporte em solicitações de estilo hospedadas virtualmente. Para obter
mais informações sobre solicitações de estilo hospedadas virtualmente, consulte Fazer solicitações
usando a API REST (p. 1024).
• O nome do bucket usado para o Transfer Acceleration deve ser compatível com DNS e não deve conter
pontos (“.”).
• O Transfer Acceleration deve estar ativado no bucket. Para obter mais informações, consulte Habilitar e
usar o S3 Transfer Acceleration (p. 51).
Depois de habilitar o Transfer Acceleration em um bucket, pode levar até 20 minutos para que a
velocidade da transferência de dados para o bucket aumente.
Note
No momento, o Transfer Acceleration não é compatível com buckets localizados nas seguintes
regiões:
• África (Cidade do Cabo) (af-south-1)
• Ásia-Pacífico (Hong Kong) (ap-east-1)
• Ásia-Pacífico (Osaka) (ap-northeast-3)
• UE (Estocolmo) (eu-north-1)
• UE (Milão) (eu-south-1)
• Oriente Médio (Bahrein) (me-south-1)
• Para acessar o bucket que está habilitado para o Transfer Acceleration, você deve usar o
endpoint bucketname.s3-accelerate.amazonaws.com. Ou use o endpoint de pilha dupla
bucketname.s3-accelerate.dualstack.amazonaws.com para se conectar ao bucket habilitado
por IPv6.
• Você deve ser o proprietário do bucket para configurar o estado de aceleração de transferência. O
proprietário do bucket pode designar permissões para outros usuários para permitir que eles definam
o estado de aceleração em um bucket. A permissão s3:PutAccelerateConfiguration autoriza
os usuários a habilitarem ou desabilitarem o Transfer Acceleration em um bucket. A permissão
s3:GetAccelerateConfiguration autoriza os usuários a retornar o estado do Transfer Acceleration
de um bucket, que é Enabled ou Suspended. Para obter mais informações sobre essas permissões,
consulte Exemplo: operações de sub-recursos de bucket (p. 274) e Identity and Access Management
no Amazon S3 (p. 252).
As seções a seguir descrevem como começar a usar o Amazon S3 Transfer Acceleration para transferir
dados.
Versão da API 2006-03-01
49
Amazon Simple Storage Service Guia do usuário
Conceitos básicos
Tópicos
• Conceitos básicos do Amazon S3 Transfer Acceleration (p. 50)
• Habilitar e usar o S3 Transfer Acceleration (p. 51)
• Usar a ferramenta de comparação de velocidade do Amazon S3 Transfer Acceleration (p. 56)
Você pode ativar o Transfer Acceleration em um bucket de qualquer uma das seguintes maneiras:
• Use o console do Amazon S3.
• Use a operação PUT Bucket accelerate da API REST.
• Use a CLI da AWS e os SDKs da AWS. Para obter mais informações, consulte Desenvolvimento com
o Amazon S3 usando os AWS SDKs e exploradores (p. 1034).
Para obter mais informações, consulte Habilitar e usar o S3 Transfer Acceleration (p. 51).
Note
Para que seu bucket funcione com a aceleração de transferência, o nome dele deve estar em
conformidade com os requisitos de nomenclatura de DNS e não deve conter pontos (“.”).
2. Transferir dados de e para o bucket habilitado para aceleração
Os endpoints de pilha dupla do Amazon S3 oferecem suporte para buckets do S3 por IPv6 e IPv4. O
endpoint de pilha dupla do Transfer Acceleration usa somente o tipo virtual hospedado de nome do
endpoint. Para obter mais informações, consulte Conceitos básicos para fazer solicitações por meio
do IPv6 (p. 992) e Usar endpoints de pilha dupla do Amazon S3 (p. 995).
Note
Você pode continuar a usar o endpoint regular além dos endpoints de aceleração.
Você pode apontar as solicitações de objeto PUT e objeto GET do Amazon S3 para o nome de
domínio do endpoint do s3-accelerate depois de habilitar o Transfer Acceleration. Por exemplo,
suponha que você tenha atualmente uma aplicação API REST usando PUT Object que usa o nome
do host mybucket.s3.us-east-1.amazonaws.com na solicitação PUT. Para acelerar o PUT,
altere o nome do host em sua solicitação para mybucket.s3-accelerate.amazonaws.com.
Para voltar a usar a velocidade de upload padrão, altere o nome de volta para mybucket.s3.us-
Versão da API 2006-03-01
east-1.amazonaws.com.
50
Amazon Simple Storage Service Guia do usuário
Habilitar o Transfer Acceleration
Depois que o Transfer Acceleration é ativado, pode demorar 20 minutos para você perceber o benefício
da performance. Contudo, o endpoint de aceleração estará disponível assim que você habilitar o
Transfer Acceleration.
Você pode usar o endpoint de aceleração na AWS CLI, em AWS SDKs e outras ferramentas que
transferem dados para e do Amazon S3. Se você estiver usando AWS SDKs, algumas linguagens
compatíveis usam uma sinalização de configuração de cliente do endpoint de aceleração para que
você não precise definir explicitamente o endpoint do Transfer Acceleration como bucketname.s3-
accelerate.amazonaws.com. Para ver exemplos de como usar uma sinalização de configuração de
cliente do endpoint de aceleração, consulte Habilitar e usar o S3 Transfer Acceleration (p. 51).
Você pode usar todas as operações do Amazon S3 por meio dos endpoints de aceleração de
transferência, exceto as seguintes:
Além disso, o Amazon S3 Transfer Acceleration não oferece suporte a cópias entre regiões usando PUT
Object - Copy.
Esta seção fornece exemplos de como ativar o Amazon S3 Transfer Acceleration em um bucket e usar o
endpoint de aceleração para o bucket ativado.
Para obter mais informações sobre os requisitos do Transfer Acceleration, consulte Configurar
transferências de arquivos rápidas e seguras usando o Amazon S3 Transfer Acceleration (p. 48).
Usar o console do S3
Note
Se você quiser comparar velocidades de upload aceleradas e não aceleradas, abra a ferramenta
Comparação de velocidade do Amazon S3 Transfer Acceleration.
A ferramenta de Comparação de velocidade usa o multipart uploads para transferir um arquivo
do seu navegador para várias regiões da AWS com e sem o uso do Amazon S3 Transfer
Acceleration. É possível comparar a velocidade de upload para uploads diretos e uploads de
transferência acelerada por região.
1. Depois que o Amazon S3 habilitar a aceleração de transferência para seu bucket, visualize a guia
Properties (Propriedades) do bucket.
2. Em Transfer acceleration (Aceleração de transferência), o Accelerated endpoint (Endpoint acelerado)
exibe o endpoint de aceleração de transferência para o bucket. Use esse endpoint para acessar
transferências de dados aceleradas do bucket e para ele.
O exemplo a seguir define Status=Enabled para ativar o Transfer Acceleration em um bucket. Use
Status=Suspended para suspender o Transfer Acceleration.
Example
Todas as solicitações são enviadas usando o estilo virtual de endereçamento de bucket: my-bucket.s3-
accelerate.amazonaws.com. As solicitações ListBuckets, CreateBucket e DeleteBucket não
serão enviadas ao endpoint de aceleração porque esse endpoint não oferece suporte a essas operações.
Example
Se você quiser usar o endpoint de aceleração para alguns comandos da AWS CLI, mas não para outros,
use qualquer um destes dois métodos:
• Use o endpoint de aceleração para qualquer comando s3 ou s3api definindo o parâmetro --endpoint-
url como https://s3-accelerate.amazonaws.com.
• Configure perfis separados em seu arquivo AWS Config. Por exemplo, crie um perfil que defina
use_accelerate_endpoint como true e um perfil que não defina use_accelerate_endpoint.
Ao executar um comando, especifique qual perfil deseja usar, caso queira ou não usar o endpoint de
aceleração.
O exemplo a seguir faz upload de um arquivo em um bucket habilitado para o Transfer Acceleration
usando o perfil padrão que foi configurado para usar o endpoint de aceleração.
Example
O exemplo a seguir faz upload de um arquivo em um bucket habilitado para o Transfer Acceleration
usando o parâmetro --endpoint-url para especificar o endpoint de aceleração.
Example
Java
Example
O exemplo a seguir mostra como usar um endpoint de aceleração para fazer upload de um objeto no
Amazon S3. O exemplo faz o seguinte:
• Cria um AmazonS3Client que é configurado para usar endpoints de aceleração. Todos os buckets
acessados pelo cliente devem ter o Transfer Acceleration habilitado.
• Habilita o Transfer Acceleration em um bucket especificado. Essa etapa é necessária somente se o
bucket que você especificar não tiver o Transfer Acceleration habilitado ainda.
• Verifica se a aceleração da transferência está habilitada para o bucket especificado.
• Faz upload de um novo objeto para o bucket especificado usando o endpoint de aceleração do
bucket.
Para obter mais informações sobre o Transfer Acceleration, consulte Conceitos básicos do Amazon
S3 Transfer Acceleration (p. 50). Para obter instruções sobre criar e testar um exemplo funcional,
consulte Testar exemplos de código Java no Amazon S3 (p. 1042).
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.BucketAccelerateConfiguration;
import com.amazonaws.services.s3.model.BucketAccelerateStatus;
import com.amazonaws.services.s3.model.GetBucketAccelerateConfigurationRequest;
import com.amazonaws.services.s3.model.SetBucketAccelerateConfigurationRequest;
try {
// Create an Amazon S3 client that is configured to use the accelerate
endpoint.
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withRegion(clientRegion)
.withCredentials(new ProfileCredentialsProvider())
.enableAccelerateMode()
.build();
.NET
O exemplo a seguir mostra como usar o AWS SDK para .NET para habilitar o Transfer Acceleration
em um bucket. Para obter instruções sobre como criar e testar um exemplo funcional, consulte
Executar os exemplos de código do Amazon S3 .NET (p. 1044).
Example
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class TransferAccelerationTest
{
private const string bucketName = "*** bucket name ***";
Ao fazer upload de um objeto a um bucket com Transfer Acceleration habilitado, especifique usando o
endpoint de aceleração no momento da criação de um cliente.
Javascript
Para ver um exemplo de ativação do Transfer Acceleration usando o AWS SDK para JavaScript,
consulte Chamada da operação putBucketAccelerateConfiguration na Referência de API do AWS SDK
para JavaScript.
Python (Boto)
Para obter um exemplo de ativação do Transfer Acceleration usando o SDK para Python, consulte
put_bucket_accelerate_configuration na Referência da API do AWS SDK para Python (Boto3).
Other
Para obter informações sobre como usar outros AWS SDKs, consulte Código de exemplo e
bibliotecas.
Você pode acessar a ferramenta de comparação de velocidade usando qualquer um dos seguintes
métodos:
• Copie o seguinte URL na janela do navegador, substituindo region pela região da AWS que você está
usando (por exemplo, us-west-2) e yourBucketName pelo nome do bucket que deseja avaliar:
https://s3-accelerate-speedtest.s3-accelerate.amazonaws.com/en/accelerate-
speed-comparsion.html?region=region&origBucketName=yourBucketName
Para obter uma lista das regiões compatíveis com o Amazon S3, consulte Endpoints e cotas do Amazon
S3 na Referência geral da AWS.
• Use o console do Amazon S3.
Normalmente, você configura buckets como Pagamento pelo solicitante quando quer compartilhar
dados, mas não quer incorrer em cobranças associadas a outros que acessam os dados. Você pode, por
exemplo, usar buckets de Pagamento pelo solicitante ao disponibilizar grandes conjuntos de dados, tais
como diretórios de CEP, dados de referência, informações geoespaciais ou dados de crawling da Web.
Important
Se você habilitar Pagamento pelo solicitante em um bucket, o acesso anônimo a esse bucket não
será permitido.
Você deve autenticar todas as solicitações que envolvem buckets de Pagamento pelo solicitante. A
autenticação da solicitação permite que o Amazon S3 identifique e cobre o solicitante pelo uso do bucket
de Pagamento pelo solicitante.
Quando o solicitante assume uma função do AWS Identity and Access Management (IAM) antes de fazer
a solicitação, a conta à qual a função pertence é cobrada pela solicitação. Para obter mais informações
sobre funções do IAM, consulte Funções do IAM no Guia do Usuário do IAM.
Após configurar um bucket para ser um bucket de Pagamento pelo solicitante, os solicitantes devem incluir
x-amz-request-payer em suas solicitações no cabeçalho, para solicitações POST, GET e HEAD,
ou como um parâmetro em uma solicitação REST para mostrar que entendem que serão cobrados pela
solicitação e pelo download dos dados.
Os buckets de Pagamento pelo solicitante não oferecem suporte aos itens a seguir.
• Solicitações anônimas
• BitTorrent
• Solicitações de SOAP
• Usando um bucket Pagamento pelo solicitante como bucket de destino para log de usuário final ou vice-
versa. No entanto, você pode ativar o log do usuário final em um bucket Pagamento pelo solicitante no
qual o bucket de destino não é um bucket Pagamento pelo solicitante.
Para obter mais informações Pagamentos pelo solicitante, consulte os tópicos abaixo.
Tópicos
• Configurar Pagamento pelo solicitante em um bucket (p. 57)
• Recuperar a configuração requestPayment usando a API REST (p. 59)
• Fazer download de objetos em buckets de Pagamento pelo solicitante (p. 59)
Esta seção fornece exemplos de como configurar o pagamento pelo solicitante em um bucket do Amazon
S3 usando o console e a API REST.
3. Escolha Propriedades.
4. Em Requester pays (Pagamento pelo solicitante), escolha Edit (Editar).
5. Escolha Enable (Habilitar) e Save changes (Salvar alterações).
O Amazon S3 habilitará o Pagamento pelo solicitante para o bucket e exibirá a Bucket overview
(Visão geral do bucket). Em Requester pays (Pagamento pelo solicitante), você verá a opção Enabled
(Habilitado).
Para reverter um bucket de Pagamento pelo solicitante para um bucket regular, use o valor BucketOwner.
Normalmente, você usaria BucketOwner ao fazer upload de dados para o bucket do Amazon S3 e
definiria o valor como Requester antes da publicação de objetos no bucket.
• Use uma solicitação PUT para definir o valor Payer como Requester em um bucket especificado.
<RequestPaymentConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Payer>Requester</Payer>
</RequestPaymentConfiguration>
HTTP/1.1 200 OK
x-amz-id-2: [id]
x-amz-request-id: [request_id]
Date: Wed, 01 Mar 2009 12:00:00 GMT
Content-Length: 0
Connection: close
Server: AmazonS3
x-amz-request-charged:requester
Você pode definir pagamentos do solicitante somente no nível de bucket. Você não pode definir
pagamentos pelo solicitante para objetos específicos dentro do bucket.
Você pode configurar um bucket para ser BucketOwner ou Requester a qualquer momento. No entanto,
pode haver alguns minutos antes que o novo valor de configuração entre em vigor.
Note
Proprietários de bucket que abrem mão de URLs pré-assinadas devem pensar duas vezes antes
de configurar um bucket para ser de pagamento pelo solicitante, especialmente se o URL tiver
um ciclo de vida bem longo. O proprietário do bucket é cobrado cada vez que o solicitante usa um
pre-signed URL que usa as credenciais do proprietário do bucket.
• Use uma solicitação GET para obter o recurso requestPayment, conforme exibido na seguinte
solicitação.
HTTP/1.1 200 OK
x-amz-id-2: [id]
x-amz-request-id: [request_id]
Date: Wed, 01 Mar 2009 12:00:00 GMT
Content-Type: [type]
Content-Length: [length]
Connection: close
Server: AmazonS3
Se a solicitação for bem-sucedida e o solicitante for cobrado, a resposta incluirá o cabeçalho x-amz-
request-charged:requester. Se x-amz-request-payer não estiver na solicitação, o Amazon S3
retornará um erro 403 e cobrará o proprietário do bucket pela solicitação.
Note
Proprietários de bucket não precisam adicionar x-amz-request-payer às suas solicitações.
Certifique-se de que você tenha incluído x-amz-request-payer e seu valor
no cálculo da assinatura. Para obter mais informações, consulte Criar o elemento
CanonicalizedAmzHeaders (p. 1064).
• Use uma solicitação GET para fazer download de um objeto em um bucket de Pagamento pelo
solicitante, conforme exibido na seguinte solicitação.
Se a solicitação GET for bem-sucedida e o solicitante for cobrado, a resposta incluirá x-amz-request-
charged:requester.
O Amazon S3 poderá retornar um erro Access Denied para solicitações que tentarem obter objetos de
um bucket de Pagamento pelo solicitante. Para obter informações, consulte Erros Responses (Respostas
com erro) na Referência de APIs do Amazon Simple Storage Service.
Ao criar um bucket, você escolhe o nome dele e a região da AWS onde criá-lo. Depois de criar um bucket,
não é necessário alterar o nome nem a região.
Ao nomear um bucket, escolha um nome que seja relevante para você ou para sua empresa. Evite usar
nomes associados a outros. Por exemplo, você deve evitar usar AWS ou Amazon em seu nome de bucket.
Por padrão, você pode criar até 100 buckets em cada conta da AWS. Se precisar de buckets adicionais,
você poderá aumentar o limite de bucket da conta para um máximo de 1.000 buckets enviando um
aumento de limite de serviço. Não há diferença no desempenho ao usar muitos buckets ou somente
alguns.
Para obter informações sobre como aumentar o limite do seu bucket, consulte Cotas de serviço da AWS
na Referência geral da AWS.
Se um bucket estiver vazio, você poderá excluí-lo. Depois de excluído, o nome do bucket fica disponível
para reutilização. No entanto, depois de excluir o bucket, talvez você não consiga reutilizar o nome por
diversos motivos.
Por exemplo, quando você exclui o bucket e o nome fica disponível para reutilização, uma outra conta
pode criar um bucket com esse nome. Além disso, pode demorar algum tempo até que seja possível
reutilizar o nome de um bucket excluído. Se você quiser usar o mesmo nome de bucket, recomendamos
que você não exclua o bucket.
Para obter mais informações sobre nomes de bucket, consulte Regras de nomeação de bucket (p. 30).
Objetos e buckets
Não há limite para o número de objetos que você pode armazenar em um bucket. Você pode armazenar
todos os objetos em um único bucket, ou pode organizá-los em vários buckets. No entanto, você não pode
criar um bucket de dentro de outro bucket.
Operações de buckets
A engenharia de alta disponibilidade do Amazon S3 é focada nas operações get, put, list e delete. Como
as operações de bucket funcionam em um espaço de recurso centralizado e global, não é apropriado
criar ou excluir buckets no caminho de código de alta disponibilidade da sua aplicação. É melhor criar ou
excluir buckets em uma rotina de inicialização ou configuração separada que você executa com menor
frequência.
Se o seu aplicativo cria buckets automaticamente, escolha um esquema de nomeação de bucket que não
seja suscetível a causar conflitos de nomeação. Certifique-se de que a lógica do seu aplicativo escolha um
nome de bucket diferente, caso um nome de bucket já esteja em uso.
Para obter mais informações sobre nomeação de bucket, consulte Regras de nomeação de
bucket (p. 30).
Para armazenar um objeto no Amazon S3, crie um bucket e faça upload do objeto em um bucket. Quando
o objeto estiver no bucket, você poderá abri-lo, fazer download dele e movê-lo. Quando você não precisa
mais de um objeto ou um bucket, você pode limpar esses recursos.
Com o Amazon S3, você paga somente pelo que for usado. Para obter mais informações sobre os
recursos e a definição de preço do Amazon S3, consulte Amazon S3. Se você for um novo cliente do
Amazon S3, você pode começar a usar o Amazon S3 gratuitamente. Para obter mais informações,
consulte AWS Free Tier (Nível gratuito da AWS).
Tópicos
• Visão geral de objetos Amazon S3 (p. 62)
• Criar nomes de chave de objeto (p. 64)
• Trabalhar com metadados de objeto (p. 66)
• Fazer upload de objetos (p. 71)
• Carregar e copiar objetos usando multipart upload (p. 80)
• Cópia de objetos (p. 114)
• Fazer download de um objeto (p. 122)
• Excluir objetos do Amazon S3 (p. 128)
• Organizar, listar e trabalhar com seus objetos (p. 148)
• Usar pre-signed URLs (p. 158)
• Transformar objetos com o S3 Object Lambda (p. 168)
• Recuperar objetos do Amazon S3 usando BitTorrent (p. 189)
Chave
O nome que você atribui a um objeto. Você usa a chave de objeto para recuperar o objeto. Para obter
mais informações, consulte Trabalhar com metadados de objetos (p. 66).
ID da versão
Um valor de objeto pode ser qualquer sequência de bytes. Objetos podem variar em tamanho de zero
a 5 TB. Para obter mais informações, consulte Fazer upload de objetos (p. 71).
Metadados
Você pode controlar o acesso aos objetos armazenados no Amazon S3. O Amazon S3 e compatível
com o controle de acesso baseado em recursos, como uma lista de controle de acesso (ACL) e
políticas de bucket, e com o controle de acesso de dados baseados no usuário. Para obter mais
informações, consulte Identity and Access Management no Amazon S3 (p. 252).
Seus recursos do Amazon S3 (por exemplo, buckets e objetos) são privados por padrão. É necessário
conceder permissão expressa para que outras pessoas acessem esses recursos. Para obter mais
informações sobre compartilhamento de objetos, consulte Compartilhar um objeto com uma pre-
signed URL (p. 159).
Sub-recursos do objeto
O Amazon S3 define um conjunto de sub-recursos associados a buckets e objetos. Os subrecursos são
subordinados aos objetos. Isso significa que os subrecursos não existem por conta própria. Eles são
sempre associados a alguma outra entidade, como um objeto ou um bucket.
Sub-recurso Descrição
Quando você cria um objeto, especifica o nome da chave que, exclusivamente, identifica o objeto no
bucket. Por exemplo, no console do Amazon S3, quando você destaca um bucket, uma lista de objetos
no bucket é exibida. Esses nomes são as chaves de objeto. O nome para uma chave é uma sequência de
caracteres Unicode cuja codificação UTF-8 é de, no máximo, 1.024 bytes de comprimento.
O modelo de dados do Amazon S3 é uma estrutura plana: você cria um bucket e o bucket armazena
objetos. Não há hierarquia de sub-buckets ou de subpastas. No entanto, é possível pressupor a hierarquia
lógica usando prefixos e delimitadores de nome de chave como faz o console do Amazon S3. O console
do Amazon S3 é compatível com o conceito de pastas. Para obter mais informações sobre como editar
metadados do console do Amazon S3, consulte Editar metadados de objeto no console do Amazon
S3 (p. 69).
Vamos supor que seu bucket (admin-created) tenha quatro objetos com as seguintes chaves de objeto:
Development/Projects.xls
Finance/statement1.pdf
Private/taxdocument.pdf
s3-dg.pdf
O console usa prefixos de nome de chave (Development/, Finance/ e Private/) e o delimitador ("/")
para apresentar uma estrutura de pasta. A chave s3-dg.pdf não tem um prefixo, portanto, seu objeto
aparece diretamente no nível raiz do bucket. Se você abrir a pasta Development/, você verá o objeto
Projects.xlsx dentro dela.
• O Amazon S3 é compatível com buckets e objetos e não há nenhuma hierarquia. No entanto, ao usar
prefixos e delimitadores em um nome de chave de objeto, o console do Amazon S3 e os AWS SDKs
podem pressupor uma hierarquia e apresentar o conceito de pastas.
• O console do Amazon S3 implementa a criação de objetos de pasta criando objetos de zero bytes com
o valor de prefixo e do delimitador da pasta como a chave. Esses objetos de pasta não aparecem no
console. Caso contrário, eles se comportam como qualquer outro objeto e podem ser visualizados e
manipulados por meio da API REST, da CLI da AWS e dos AWS SDKs.
Caracteres seguros
Os seguintes conjuntos de caracteres são, geralmente, confiáveis para uso em nomes de chave.
• 4my-organization
• my.great_photos-2014/jan/myvacation.jpg
• videos/2014/birthday/video1.wmv
Important
Se o nome da chave de um objeto terminar em com único ponto (.) ou com dois pontos (..), não
será possível fazer download do objeto usando o console do Amazon S3. Para fazer download
de um objeto com um nome de chave terminando com “.” ou “..”, é necessário usar a Interface de
linha de comando da AWS (CLI da AWS), os AWS SDKs ou a API REST.
Example
O exemplo a seguir ilustra o uso de um código de entidade XML como uma substituição para um retorno
de carro. Esta solicitação DeleteObjects exclui um objeto com o parâmetro key: /some/prefix/
objectwith\rcarriagereturn (onde \r é o retorno de carro).
<Delete xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Object>
<Key>/some/prefix/objectwith carriagereturn</Key>
</Object>
</Delete>
metadados. A única forma de modificar metadados de objeto é fazer uma cópia do objeto e definir os
metadados.
Ao criar um objeto, você também especifica o nome da chave, que identifica exclusivamente o objeto no
bucket. A chave de objeto (ou nome da chave) identifica o objeto em um bucket do Amazon S3 de maneira
exclusiva. Para obter mais informações, consulte Criar nomes de chave de objeto (p. 64).
Há dois tipos de metadados no Amazon S3: definidos pelo sistema e definidos pelo usuário. As seções
abaixo fornecem mais informações sobre metadados definidos pelo sistema e definidos pelo usuário. Para
obter mais informações sobre como editar metadados usando o console do Amazon S3, consulte Editar
metadados de objeto no console do Amazon S3 (p. 69).
1. Os metadados, como a data de criação do objeto, são controlados pelo sistema e somente o Amazon
S3 pode modificar o valor.
2. Outros metadados de sistema, como a classe de armazenamento configurada para o objeto e se o
objeto tem criptografia habilitada no lado do servidor, são exemplos cujos valores são controlados por
você. Se o bucket está configurado como um site, você pode querer redirecionar uma solicitação de
página para outra página ou para um URL externo. Nesse caso, uma página é um objeto no bucket. O
Amazon S3 armazena o valor de redirecionamento da página como metadados do sistema com valores
que você controla.
Ao criar objetos, você pode configurar os valores desses itens de metadados de sistema ou atualizar os
valores quando necessário. Para obter mais informações sobre classes de armazenamento, consulte
Uso de classes de armazenamento do Amazon S3 (p. 563).
Para obter mais informações sobre criptografia no lado do servidor, consulte Proteção de dados usando
criptografia (p. 194).
Note
A tabela a seguir fornece uma lista dos metadados definidos por sistema e se você pode atualizá-los.
Conteúdo-MD5 O resumo MD5 de 128 bits com codificação base64 do objeto. Não
O suporte de SOAP via HTTP está obsoleto, mas continua disponível via HTTPS. Novos recursos
do Amazon S3 não serão compatíveis com o SOAP. Recomendamos que você use a API REST
ou os AWS SDKs.
Quando os metadados são recuperados por meio da API REST, o Amazon S3 combina os cabeçalhos
que têm o mesmo nome (sem distinção entre letras maiúsculas e minúsculas) em uma lista delimitada por
vírgulas. Se alguns metadados contêm caracteres não imprimíveis, eles não são retornados. Em vez disso,
o cabeçalho x-amz-missing-meta é retornado com o valor do número de entradas de metadados não
imprimíveis. A ação HeadObject recupera metadados de um objeto sem retornar o próprio objeto. Essa
operação é útil se você estiver interessado apenas nos metadados de um objeto. Para usar HEAD, você
deve ter acesso READ ao objeto. Para obter mais informações, consulte HeadObject na Referência de API
do Amazon Simple Storage Service.
Metadados definidos pelo usuário são um conjunto de pares chave-valor. O Amazon S3 armazena chaves
de metadados definidas pelo usuário em minúsculas.
Para evitar problemas em torno da apresentação desses valores de metadados, é necessário estar em
conformidade com o uso de caracteres US-ASCII ao usar REST e UTF-8 ao usar SOAP ou uploads
baseados em navegador via POST.
Ao usar caracteres não US-ASCII em seus valores de metadados, a string Unicode fornecida é examinada
quanto a caracteres não US-ASCII. Se a string contiver apenas caracteres US-ASCII, ela será apresentada
como está. Se a string contiver caracteres não ASCII US-ASCII, ela será codificada em primeiro lugar
usando UTF-8 e depois em US-ASCII.
Note
Para obter informações sobre como adicionar metadados ao seu objeto após o upload, Editar metadados
de objeto no console do Amazon S3 (p. 69).
Você também pode definir alguns metadados ao carregar o objeto e depois editá-lo conforme suas
necessidades mudarem. Por exemplo, você pode ter um conjunto de objetos que você armazena
inicialmente na classe de armazenamento STANDARD. Com o tempo, talvez você não precise mais
que esses dados estejam altamente disponíveis. Assim, você altera a classe de armazenamento para
GLACIER editando o valor da chave x-amz-storage-class de STANDARD para GLACIER.
Note
• Essa ação cria uma cópia do objeto com configurações atualizadas e a data da última
modificação. Se o versionamento do S3 estiver habilitado, uma nova versão do objeto será
criada e o objeto existente se tornará uma versão mais antiga. A função do IAM que altera a
propriedade também se torna o proprietário do novo objeto ou (versão do objeto).
• A edição de metadados atualiza valores para nomes de chaves existentes.
• Objetos criptografados com chaves de criptografia fornecidas pelo cliente (SSE-C) não podem
ser copiados usando o console. Você deve usar a CLI da AWS, o AWS SDK ou a API REST do
Amazon S3.
Warning
Os tópicos a seguir descrevem como editar metadados de um objeto usando o console do Amazon S3.
Metadados definidos pelo usuário podem ter até 2 KB no total. Para calcular o tamanho total dos
metadados definidos pelo usuário, some o número de bytes na codificação UTF-8 referente a cada chave e
valor. As duas chaves e seus valores devem estar em conformidade com os padrões US-ASCII. Para obter
mais informações, consulte Metadados do objeto definidos pelo usuário (p. 68).
Você pode fazer upload de qualquer tipo de arquivo (imagens, backups, dados, filmes, etc.) para um
bucket do S3. O tamanho máximo de arquivo que você pode carregar usando o console do Amazon S3 é
de 160 GB. Para fazer upload de um arquivo com mais de 160 GB, use a AWS CLI, AWS SDK ou a API
REST do Amazon S3.
Se você fizer upload de um objeto com um nome de chave que já existe em um bucket com versionamento
habilitado, o Amazon S3 criará outra versão de objeto em vez de substituir o objeto existente. Para obter
mais informações sobre controle de versão, consulte Usar o console do S3 (p. 521).
Dependendo do tamanho de dados enviados por upload, o Amazon S3 oferece as seguintes opções:
• Fazer upload de um objeto em uma única operação usando AWS SDKs, a API REST ou a CLI da AWS:
com uma única operação PUT, é possível fazer upload de um único objeto com até 5 GB.
• Fazer upload de um único objeto usando o console do Amazon S3:Com o console do Amazon S3, é
possível fazer upload de um único objeto com até 160 GB de tamanho.
• Fazer upload de um objeto em partes usando AWS SDKs, a API REST ou a CLI da AWS: com a API de
multipart upload, é possível fazer upload de um único objeto grande, com até 5 TB.
A API multipart upload API foi projetada para melhorar a experiência de upload de objetos maiores.
É possível fazer upload de um objeto em partes. O upload dessas partes de objetos pode ser feito
independentemente, em qualquer ordem, e em paralelo. Você pode usar um multipart upload de objetos
de 5 MB a 5 TB. Para obter mais informações, consulte Carregar e copiar objetos usando multipart
upload (p. 80).
Ao fazer upload de um objeto, é possível solicitar, opcionalmente, que o Amazon S3 criptografe o objeto
antes de salvá-lo no disco e descriptografá-lo quando você fizer o download. Para obter mais informações,
consulte Proteção de dados usando criptografia (p. 194).
Uso do console do S3
Este procedimento explica como fazer upload de objetos e pastas para um bucket S3 usando o console.
Quando você faz upload de um objeto, o nome da chave de objeto é o nome do arquivo e quaisquer
prefixos opcionais. No console do Amazon S3, você pode criar pastas para organizar seus objetos. No
Amazon S3, as pastas são representadas como prefixos que aparecem no nome da chave de objeto. Se
você fizer upload um objeto individual para uma pasta no console do Amazon S3, o nome da pasta será
incluído no nome da chave do objeto.
Por exemplo, se você carregar um objeto chamado sample1.jpg para uma pasta chamada backup, o
nome da chave será backup/sample1.jpg. Contudo, o objeto é exibido no console como sample1.jpg
na pasta backup. Para obter mais informações sobre nomes de chaves, consulte Trabalhar com
metadados de objeto (p. 66).
Note
Se você renomear um objeto ou alterar qualquer uma das propriedades no console do S3,
por exemplo Storage Class (Classe de armazenamento), Encryption (Criptografia), Metadata
(Metadados), um novo objeto será criado para substituir o antigo. Se o versionamento do S3
estiver habilitado, uma nova versão do objeto será criada e o objeto existente se tornará uma
versão mais antiga. A função que altera a propriedade também se torna o proprietário do novo
objeto ou (versão do objeto).
Quando você faz upload de uma pasta, o Amazon S3 faz upload de todos os arquivos e subpastas da
pasta especificada em seu bucket. Ele então atribui um nome de chave de objeto que é uma combinação
do nome de arquivo carregado com o nome da pasta. Por exemplo, se você fizer upload de uma pasta
chamada /images que contém dois arquivos, sample1.jpg e sample2.jpg, o Amazon S3 fará upload
dos arquivos e atribuirá a eles os nomes de chave correspondentes, images/sample1.jpg e images/
sample2.jpg. Os nomes de chave incluem o nome da pasta como um prefixo. O console do Amazon S3
exibe somente a parte do nome de chave que vem depois do último “/”. Por exemplo, em uma pasta de
imagens, os objetos images/sample1.jpg e images/sample2.jpg são exibidos como sample1.jpg
e um sample2.jpg.
O Amazon S3 faz o upload de seus objetos e pastas. Quando o upload for concluído, você pode ver
uma mensagem de sucesso na página de Upload: status.
7. Para configurar propriedades de objeto adicionais antes de fazer o upload, consulte Para configurar
propriedades de objeto adicionais (p. 73).
1. Para configurar propriedades de objeto adicionais, escolha Additional upload options (Opções de
upload adicionais).
2. Na seção Storage class (Classe de armazenamento) escolha a classe de armazenamento para os
arquivos que você está fazendo upload.
Para obter mais informações sobre classes de armazenamento, consulte Uso de classes de
armazenamento do Amazon S3 (p. 563).
3. Para atualizar as configurações de criptografia para seus objetos, em Server-side encryption settings
(Configurações de criptografia do lado do servidor), faça o seguinte.
Para obter mais informações, consulte Proteção de dados usando criptografia no lado do servidor
com chaves de criptografia gerenciadas pelo Amazon S3 (SSE-S3) (p. 213).
c. Para criptografar os arquivos enviados por upload usando o AWS Key Management Service
(AWS KMS), escolha AWS Key Management Service key (Chave do AWS Key Management
Service). Em seguida, escolha uma opção para a AWS KMS key (Chave do AWS KMS).
• Chave gerenciada da AWS (aws/s3) - Escolha uma AWS managed CMK (CMK gerenciada pela
AWS).
• Escolha entre as chaves mestras do KMS - Escolha uma customer managed CMK (CMK
gerenciada pelo cliente) a partir de uma lista de CMKs na mesma região que seu bucket.
Para obter mais informações sobre como criar uma CMK do AWS KMS gerenciada pelo cliente,
consulte Criação de chaves no Guia do desenvolvedor do AWS Key Management Service.
Para obter mais informações sobre como proteger dados com o AWS KMS, consulte Proteção
de dados usando criptografia do lado do servidor com CMKs armazenadas no AWS Key
Management Service (SSE-KMS) (p. 195).
• Insira o ARN da chave mestra do KMS - Especifique o ARN da chave do AWS KMS para uma
CMK gerenciada pelo cliente e insira o nome de recurso da Amazon (ARN).
Você pode usar o ARN da chave mestra do KMS para dar a uma conta externa a capacidade
de usar um objeto protegido por uma CMK do AWS KMS. Para fazer isso, escolha Enter
KMS master key ARN (Insira o ARN da chave mestra do KMS) e insira o nome de recurso
da Amazon (ARN) para a conta externa. Os administradores de uma conta externa com
permissões de uso para um objeto protegido pela CMK do AWS KMS podem restringir ainda
mais o acesso criando um política do IAM no nível do recurso.
Note
Para criptografar objetos em um bucket, você pode usar apenas CMKs que estão
disponíveis na mesma região da AWS que o bucket.
4. Para alterar as permissões da lista de controle de acesso, em Lista de controle de acesso (Access
control list) (ACL), edite permissões.
Para informações sobre permissões de acesso a objeto, consulte Usar o console do S3 para definir
permissões de ACL para um objeto (p. 450). Você pode conceder acesso de leitura aos seus objetos
para o público em geral (todos no mundo), para todos os arquivos que você está fazendo upload.
Recomendamos que você não altere a configuração padrão para acesso de leitura pública. Conceder
acesso público de leitura é aplicável a um pequeno subconjunto de casos de uso, como quando
buckets são usados para sites. Você sempre pode fazer alterações nas permissões de objeto depois
de fazer seu upload.
5. Para adicionar tags a todos os objetos que você está carregando, escolha Add tag (Adicionar tag).
Digite um nome de tag no campo Key (Chave) . Digite um valor para a tag.
A marcação de objetos é uma forma de categorizar o armazenamento. Cada tag é um par de chave-
valor. Os valores de chave e tag diferenciam maiúsculas de minúsculas. É possível ter até dez tags
por objeto. Um chave de tag pode ter até 128 caracteres Unicode e os valores de tag podem ter até
255 caracteres Unicode. Para obter mais informações sobre tags de objetos, consulte Categorizando
seu armazenamento usando tags (p. 683).
6. Para adicionar metadados, escolha Add metadata (Adicionar metadados).
a. Em Type (Tipo), escolha System defined (Definido pelo sistema) ou User defined (Definido pelo
usuário).
Para metadados definidos pelo sistema, você pode selecionar cabeçalhos HTTP comuns, como
Content-Type e Content-Disposition. Para obter uma lista de metadados definidos pelo sistema e
informações sobre se você pode adicionar o valor, consulte Metadados do objeto definidos pelo
sistema (p. 67). Todos os metadados que começam com o prefixo x-amz-meta- são tratados
como metadados definidos pelo usuário. Os metadados definidos pelo usuário são armazenados
com o objeto e retornados quando você baixa o objeto. As chaves e seus valores devem estar em
conformidade com os padrões US-ASCII. Metadados definidos pelo usuário podem ter até 2 KB.
Para obter mais informações sobre metadados definidos pelo sistema e definidos pelo usuário,
consulte Trabalhar com metadados de objeto (p. 66).
b. Para Key (Chave), escolha uma chave.
c. Digite um valor para a chave.
7. Para carregar seus objetos, escolha Upload (Fazer upload).
O Amazon S3 faz o upload do objeto. Quando o upload for concluído, você pode ver uma mensagem
de sucesso na página de Upload: status.
8. Selecione Exit (Sair).
.NET
O exemplo de código C# a seguir cria dois objetos com as duas solicitações PutObjectRequest:
• A primeira solicitação PutObjectRequest salva uma sequência de texto como exemplo de dados
do objeto. Ela também especifica os nomes do bucket e da chave de objeto.
• A segunda solicitação PutObjectRequest faz upload de um arquivo especificando o nome do
arquivo. Essa solicitação também especifica o cabeçalho ContentType e os metadados opcionais
de objeto (título).
Para obter instruções sobre como criar e testar um exemplo funcional, consulte Executar os exemplos
de código do Amazon S3 .NET (p. 1044).
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class UploadObjectTest
{
private const string bucketName = "*** bucket name ***";
// For simplicity the example creates two objects from the same file.
// You specify key names for these objects.
private const string keyName1 = "*** key name for first object created ***";
private const string keyName2 = "*** key name for second object created ***";
private const string filePath = @"*** file path ***";
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.EUWest1;
putRequest2.Metadata.Add("x-amz-meta-title", "someTitle");
PutObjectResponse response2 = await client.PutObjectAsync(putRequest2);
}
catch (AmazonS3Exception e)
{
Console.WriteLine(
"Error encountered ***. Message:'{0}' when writing an object"
, e.Message);
}
catch (Exception e)
{
Console.WriteLine(
Java
O exemplo a seguir cria dois objetos. O primeiro objeto tem uma sequência de texto como
dados, e o segundo objeto é um arquivo. O exemplo cria o primeiro objeto especificando
o nome de bucket, a chave de objeto, e os dados de texto diretamente em uma chamada
para AmazonS3Client.putObject(). O exemplo cria um segundo objeto usando um
PutObjectRequest que especifica o nome de bucket, a chave de objeto, e o caminho do arquivo. O
PutObjectRequest também especifica o cabeçalho de ContentType e os metadados do título.
Para obter instruções sobre criar e testar um exemplo funcional, consulte Testar exemplos de código
Java no Amazon S3 (p. 1042).
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.ObjectMetadata;
import com.amazonaws.services.s3.model.PutObjectRequest;
import java.io.File;
import java.io.IOException;
try {
//This code expects that you have AWS credentials set up per:
// https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-
credentials.html
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withRegion(clientRegion)
.build();
} catch (SdkClientException e) {
// Amazon S3 couldn't be contacted for a response, or the client
// couldn't parse the response from Amazon S3.
e.printStackTrace();
}
}
}
JavaScript
O exemplo a seguir faz upload de um arquivo existente para um bucket do Amazon S3 em uma região
específica.
const file = "OBJECT_PATH_AND_NAME"; // Path to and name of object. For example '../
myFiles/index.js'.
const fileStream = fs.createReadStream(file);
PHP
Este tópico demonstra o uso de classes do AWS SDK para PHP para fazer upload de um objeto de
até 5 GB. Para arquivos maiores, você deve usar a API multipart upload. Para obter mais informações,
consulte Carregar e copiar objetos usando multipart upload (p. 80).
Este tópico pressupõe que você já esteja seguindo as instruções para Usar o AWS SDK para PHP e
executar exemplos do PHP (p. 1044) e tenha o AWS SDK para PHP devidamente instalado.
require 'vendor/autoload.php';
use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;
try {
// Upload data.
$result = $s3->putObject([
'Bucket' => $bucket,
'Key' => $keyname,
'Body' => 'Hello, world!',
'ACL' => 'public-read'
]);
Ruby
O AWS SDK para Ruby - versão 3 tem duas maneiras para fazer upload de um objeto para o Amazon
S3. O primeiro usa um upload gerenciado de arquivo, que facilita o upload de arquivos de qualquer
tamanho para disco. Usar o método de upload gerenciado de arquivo:
Example
require 'aws-sdk-s3'
# './my-file.txt'
# )
def object_uploaded?(s3_resource, bucket_name, object_key, file_path)
object = s3_resource.bucket(bucket_name).object(object_key)
object.upload_file(file_path)
return true
rescue StandardError => e
puts "Error uploading object: #{e.message}"
return false
end
A segunda maneira pela qual o AWS SDK para Ruby - versão 3 pode fazer upload de um objeto usa
o método #put de Aws::S3::Object. Isso é útil se o objeto for uma string ou um objeto de E/S que
não seja um arquivo em disco. Para usar este método:
Example
require 'aws-sdk-s3'
• Transferência aprimorada - Você pode fazer upload de partes em paralelo para melhorar a transferência.
• Recuperação rápida de alguns problemas de rede - Partes de tamanho menor minimizam o impacto de
reiniciar um upload que tenha falhado devido a um erro de rede.
• Pausar e retomar uploads de objeto - Você pode fazer upload de partes do objeto ao longo do tempo.
Após iniciar um multipart upload, não há expiração; você deverá concluir ou interromper explicitamente o
multipart upload.
• Começar um upload antes de saber o tamanho final do objeto - Você pode fazer upload de um objeto à
medida que ele for criado.
• Se você estiver fazendo upload de objetos grandes em uma rede de banda larga estável, use o multipart
upload para maximizar o uso da banda larga disponível, fazendo upload de partes do objeto em paralelo
para performance com vários threads.
• Se você estiver fazendo upload em uma rede lenta, use o multipart upload para aumentar a resiliência
dos erros de rede, evitando reinícios de upload. Ao usar o multipart upload, tente fazer upload
novamente apenas das partes que foram interrompidas durante o upload. Você não precisa reiniciar o
upload do seu objeto do começo.
Você pode listar todos os seus multipart uploads em andamento ou obter uma lista das partes que
carregou para um multipart upload específico. Cada uma dessas operações é explicada nesta seção.
Quando você envia uma solicitação para iniciar um multipart upload, o Amazon S3 retorna uma resposta
com um ID de upload, que é um identificador exclusivo do seu multipart upload. É necessário incluir esse
ID de upload sempre que fizer upload de partes, listar as partes, concluir um upload ou interromper um
upload. Se você desejar fornecer metadados que descrevem o objeto que está sendo carregado, deverá
fornecê-los na solicitação para iniciar o multipart upload.
Upload de partes
Ao fazer upload de uma parte, além do ID de upload, você deve especificar um número de parte.
Você pode escolher qualquer número de parte entre 1 e 10.000. Um número de parte identifica com
exclusividade a parte e sua posição no objeto do qual você está fazendo upload. O número de parte que
você escolheu não precisa estar em uma sequência consecutiva (por exemplo, pode ser 1, 5 e 14). Se
você fizer upload de uma nova parte usando o mesmo número da parte anteriormente carregada, a parte
anteriormente carregada será substituída.
Sempre que fizer upload de uma parte, o Amazon S3 retornará um cabeçalho ETag na resposta. Para
cada upload de parte, você deve registrar o número de parte e o valor de ETag. Você tem que incluir esses
valores na solicitação subsequente para concluir o multipart upload.
Note
Após iniciar um multipart upload e fazer upload de uma ou mais partes, é necessário concluir
ou interromper o multipart upload para parar de ser cobrado pelo armazenamento de peças
carregadas. Somente depois que você concluir ou interromper um multipart upload é que o
Amazon S3 liberará o armazenamento das partes e deixará de cobrar pelo armazenamento das
partes.
Quando você concluir um multipart upload, o Amazon S3 criará um objeto concatenando as partes em
ordem crescente com base no número da parte. Se algum metadado de objeto for fornecido na solicitação
iniciar multipart upload, o Amazon S3 associará esses metadados ao objeto. Depois de uma solicitação de
conclusão bem-sucedida, as partes não existem mais.
Sua solicitação completa de multipart upload deve incluir o ID de upload e uma lista de números de peça e
valores ETag correspondentes. A resposta do Amazon S3 inclui um ETag que identifica exclusivamente os
dados do objeto combinados. Esse ETag não é necessariamente um hash MD5 dos dados do objeto.
Se preferir, você poderá interromper o multipart upload. Depois de interromper um multipart upload, você
não pode fazer upload de nenhuma parte usando esse ID de upload novamente. Todo o armazenamento
de qualquer parte do multipart upload cancelado é então liberado. Se algum upload de parte estiver em
andamento, ele ainda poderá ser bem-sucedido ou falhar mesmo depois da interrupção. Para liberar todo
o armazenamento consumido por todas as partes, é necessário interromper um multipart upload somente
depois que todos os uploads de parte tiverem sido concluídos.
Você pode listar as partes de um multipart upload específico ou de todos os multipart uploads em
andamento. A operação de listagem de partes retorna as informações das partes que você fez upload
em um multipart upload específico. Para cada solicitação de listagem de partes, o Amazon S3 retorna
informações das partes do multipart upload especificado, até no máximo 1.000 partes. Se houver mais de
1.000 partes no multipart upload, você deverá enviar uma série de solicitações de listagem para recuperar
todas as partes. Observe que a lista de partes retornada não inclui partes que não tiveram o upload
concluído. Usando a operação listar multipart uploads, você pode obter uma lista de multipart uploads em
andamento.
Um multipart upload em andamento é um upload que você iniciou, mas que ainda não concluiu nem
interrompeu. Cada solicitação retorna no máximo 1.000 multipart uploads. Se houver mais de 1.000
multipart uploads em andamento, você precisará enviar solicitações adicionais para recuperar os
multipart uploads restantes. Use a listagem retornada apenas para verificação. Você não deve usar
o resultado desta listagem ao enviar uma solicitação completa de multipart upload. Em vez disso,
mantenha sua própria lista de números de parte que você especificou ao fazer upload das partes e valores
correspondentes de ETag que o Amazon S3 retorna.
É possível que alguma outra solicitação recebida entre o momento em que você iniciou um
multipart upload e o concluiu tenha precedência. Por exemplo, se outra operação excluir uma
chave depois que você iniciar um multipart upload com essa chave, mas antes de o concluir, a
resposta de conclusão do multipart upload poderá indicar a criação bem-sucedida de um objeto
sem você nunca ter visto o objeto.
As seções a seguir na Interface de linha de comando da AWS descrevem as operações para multipart
upload.
Criar multipart Você deve ter permissão para realizar a ação s3:PutObject em um objeto para criar
upload o multipart upload.
Iniciar multipart Você deve ter permissão para realizar a ação s3:PutObject em um objeto para
upload iniciar o multipart upload.
Iniciador O elemento de contêiner que identifica quem iniciou o multipart upload. Se o iniciador
for uma conta da AWS, esse elemento fornecerá as mesmas informações que
o elemento do proprietário. Se o iniciador for um usuário do IAM, esse elemento
fornecerá o ARN e o nome da exibição do usuário.
Upload de Você deve ter permissão para realizar a ação s3:PutObject em um objeto para fazer
parte upload de uma parte.
Upload de Você deve ter permissão para realizar a ação s3:PutObject em um objeto para fazer
parte (Copiar) upload de uma parte. Como você está fazendo upload de uma parte a partir de um
objeto existente, deverá ter permissão s3:GetObject no objeto de origem.
Para iniciador fazer upload de uma parte para um objeto, o proprietário do bucket deve
permitir que o iniciador realize a ação s3:PutObject no objeto.
Concluir Você deve ter permissão para realizar a ação s3:PutObject em um objeto para
multipart concluir o multipart upload.
upload
O proprietário do bucket deve permitir que o iniciador realize a ação s3:PutObject
em um objeto para que o iniciador possa concluir um multipart upload desse objeto.
Listar partes Você deve ter permissão para realizar a ação s3:ListMultipartUploadParts
para listar partes em um multipart upload.
Por padrão, o proprietário do bucket tem permissão para listar as partes de qualquer
multipart upload para o bucket. O iniciador do multipart upload tem permissão para
listar partes do multipart upload específico. Se o iniciador do multipart upload for
um usuário do IAM, a conta da AWS que controla o usuário do IAM também terá
permissão para listar partes desse upload.
Listar multipart Você deve ter permissão para realizar a ação s3:ListBucketMultipartUploads
uploads em um bucket para listar multipart uploads em andamento no bucket.
Além desse padrão, o proprietário do bucket pode permitir que outros principais
executem a ação s3:ListBucketMultipartUploads no bucket.
Permissões Para fazer um multipart upload com criptografia usando uma chave mestra de cliente
relacionadas à do AWS Key Management Service (AWS KMS), o solicitante deve ter permissão para
criptografia e as ações kms:Decrypt e kms:GenerateDataKey* na chave. Essas permissões
descriptografia são necessárias porque o Amazon S3 precisa descriptografar e ler os dados de partes
do AWS KMS de arquivos criptografados antes de concluir o multipart upload.
Para obter mais informações, consulte Fazer upload de um arquivo grande para
o Amazon S3 com criptografia usando uma CMK do AWS KMS no Centro de
conhecimento da AWS.
Se o seu usuário ou sua função do IAM estiver na mesma conta da AWS que a
CMK do AWS KMS, você deverá ter essas permissões na política da chave. Se o
seu usuário ou a sua função do IAM pertencer a uma conta diferente da CMK, será
necessário ter as permissões na política da chave e no usuário ou na função do IAM.
Para obter informações sobre a relação entre permissões de ACL e permissões em políticas de acesso,
consulte Mapeamento das permissões da ACL e das permissões da política de acesso (p. 443). Para
obter informações sobre usuários do IAM, acesse Trabalhar com usuários e grupos.
Tópicos
• Configurando uma política de ciclo de vida de bucket para anular multipart uploads
incompletos (p. 85)
• Fazer upload de um objeto usando multipart upload (p. 86)
• Fazer upload de um diretório usando a classe TransferUtility .NET de alto nível (p. 100)
• Listar multipart uploads (p. 102)
• Monitorar um multipart upload (p. 103)
• Abortar um multipart upload (p. 106)
• Copiar um objeto usando multipart upload (p. 110)
• Limites do multipart upload do Amazon S3 (p. 114)
O Amazon S3 é compatível com uma regra de ciclo de vida de bucket que pode ser usada para fazer
com que o Amazon S3 interrompa multipart uploads que não são concluídos dentro de um número
especificado de dias após a inicialização. Quando um multipart upload não é concluído no prazo, ele se
torna qualificado para uma operação de anulação e o Amazon S3 interrompe o multipart upload (e exclui
as partes associadas ao multipart upload).
Veja a seguir um exemplo de configuração de ciclo de vida que especifica uma regra com a ação
AbortIncompleteMultipartUpload.
<LifecycleConfiguration>
<Rule>
<ID>sample-rule</ID>
<Prefix></Prefix>
<Status>Enabled</Status>
<AbortIncompleteMultipartUpload>
<DaysAfterInitiation>7</DaysAfterInitiation>
</AbortIncompleteMultipartUpload>
</Rule>
</LifecycleConfiguration>
No exemplo, a regra não especifica um valor para o elemento Prefix (prefixo do nome da chave do
objeto). Portanto, ela se aplica a todos os objetos no bucket para o qual você iniciou multipart uploads.
Multipart uploads que foram iniciados e não concluídos dentro de sete dias tornam-se qualificados para
uma operação de anulação. A ação de anulação não tem efeito em multipart uploads concluídos.
Para obter mais informações sobre a configuração do ciclo de vida de bucket, consulte Gerenciando seu
ciclo de vida de armazenamento (p. 569).
Note
Se o multipart upload for concluído no número de dias especificado na regra, a ação de ciclo
de vida AbortIncompleteMultipartUpload não se aplicará (ou seja, o Amazon S3 não
executará nenhuma ação). Além disso, essa ação não se aplica a objetos. Nenhum objeto é
excluído por essa ação do ciclo de vida.
1. Configure a CLI da AWS. Para obter instruções, consulte Desenvolvimento com o Amazon S3 usando
a AWS CLI (p. 1033).
2. Salve a seguinte configuração de ciclo de vida de exemplo em um arquivo (lifecycle.json). A
configuração de exemplo especifica o prefixo vazio e, portanto, aplica-se a todos os objetos no bucket.
Você pode especificar um prefixo para restringir a política a um subconjunto de objetos.
{
"Rules": [
{
"ID": "Test Rule",
"Status": "Enabled",
"Filter": {
"Prefix": ""
},
"AbortIncompleteMultipartUpload": {
"DaysAfterInitiation": 7
}
}
]
}
3. Execute o comando da CLI a seguir para definir a configuração do ciclo de vida no seu bucket.
4. Para verificar, recupere a configuração de ciclo de vida usando o comando da CLI get-bucket-
lifecycle.
Você pode fazer upload de dados de um arquivo ou de um fluxo. Você também pode definir opções
avançadas, como o tamanho da parte que você deseja usar para o multipart upload, ou o número de
threads simultâneos que você quer usar quando fizer o upload das partes. Também é possível definir
propriedades opcionais de objetos, a classe de armazenamento ou a lista de controle de acesso (ACL).
Você usa as classes PutObjectRequest e TransferManagerConfiguration para definir essas
opções avançadas.
Quando possível, a classe TransferManager tenta usar vários threads para fazer upload de várias
partes de um upload único de uma vez só. Ao lidar com tamanhos grandes de conteúdo e com alta banda
larga, isso pode representar um aumento significativo na transferência.
Se precisar pausar e retomar multipart uploads, variar os tamanhos das partes durante o upload ou não
souber o tamanho necessário dos dados com antecedência, use a API de nível baixo PHP. Para obter
mais informações sobre multipart upload, incluindo a funcionalidade adicional oferecida por métodos API
de nível baixo, consulte Usar os SDKs da AWS (API de baixo nível) (p. 93).
Java
O exemplo a seguir carrega um objeto usando a API Java de alto nível de multipart upload (a classe
TransferManager). Para obter instruções sobre criar e testar um exemplo funcional, consulte Testar
exemplos de código Java no Amazon S3 (p. 1042).
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.transfer.TransferManager;
import com.amazonaws.services.s3.transfer.TransferManagerBuilder;
import com.amazonaws.services.s3.transfer.Upload;
import java.io.File;
try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withRegion(clientRegion)
.withCredentials(new ProfileCredentialsProvider())
.build();
TransferManager tm = TransferManagerBuilder.standard()
.withS3Client(s3Client)
.build();
upload.waitForCompletion();
System.out.println("Object upload complete");
} catch (AmazonServiceException e) {
// The call was transmitted successfully, but Amazon S3 couldn't process
// it, so it returned an error response.
e.printStackTrace();
} catch (SdkClientException e) {
// Amazon S3 couldn't be contacted for a response, or the client
// couldn't parse the response from Amazon S3.
e.printStackTrace();
}
}
}
.NET
Para fazer upload de um arquivo para um bucket do S3, use a classe TransferUtility. Ao fazer o
upload de dados de um arquivo, você deve fornecer o nome da chave do objeto. Caso contrário, a API
usará o nome do arquivo no lugar do nome da chave. Ao fazer o upload de dados de um fluxo, você
deve fornecer o nome da chave do objeto.
Para definir opções de upload avançadas, como o tamanho da parte, o número de threads ao fazer
upload das partes simultaneamente, os metadados, a classe de armazenamento, ou ACL, use a
classe TransferUtilityUploadRequest.
using Amazon;
using Amazon.S3;
using Amazon.S3.Transfer;
using System;
using System.IO;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class UploadFileMPUHighLevelAPITest
{
private const string bucketName = "*** provide bucket name ***";
private const string keyName = "*** provide a name for the uploaded object
***";
private const string filePath = "*** provide the full path name of the file to
upload ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 s3Client;
var fileTransferUtility =
new TransferUtility(s3Client);
// Option 1. Upload a file. The file name is used as the object key
name.
await fileTransferUtility.UploadAsync(filePath, bucketName);
Console.WriteLine("Upload 1 completed");
await fileTransferUtility.UploadAsync(fileTransferUtilityRequest);
Console.WriteLine("Upload 4 completed");
}
catch (AmazonS3Exception e)
{
Console.WriteLine("Error encountered on server. Message:'{0}' when
writing an object", e.Message);
}
catch (Exception e)
{
Console.WriteLine("Unknown encountered on server. Message:'{0}' when
writing an object", e.Message);
}
}
}
}
PHP
O exemplo de PHP a seguir faz upload de um arquivo em um bucket do Amazon S3. O exemplo
demonstra como definir parâmetros para o objeto MultipartUploader.
Para obter informações sobre a execução dos exemplos de PHP neste guia, consulte Executar
exemplos do PHP (p. 1045).
require 'vendor/autoload.php';
use Aws\Common\Exception\MultipartUploadException;
use Aws\S3\MultipartUploader;
use Aws\S3\S3Client;
Python
O exemplo a seguir carrega um objeto usando a API do Python de multipart upload de alto nível (a
classe TransferManager).
"""
Use Boto 3 managed file transfers to manage multipart uploads to and downloads
from an Amazon S3 bucket.
When the file to transfer is larger than the specified threshold, the transfer
manager automatically uses multipart uploads or downloads. This demonstration
shows how to use several of the available transfer manager settings and reports
thread usage and time to transfer.
"""
import sys
import threading
import boto3
from boto3.s3.transfer import TransferConfig
MB = 1024 * 1024
s3 = boto3.resource('s3')
class TransferCallback:
"""
Handle callbacks from the transfer manager.
self._target_size = target_size
self._total_transferred = 0
self._lock = threading.Lock()
self.thread_info = {}
target = self._target_size * MB
sys.stdout.write(
f"\r{self._total_transferred} of {target} transferred "
f"({(self._total_transferred / target) * 100:.2f}%).")
sys.stdout.flush()
The multipart chunk size controls the size of the chunks of data that are
sent in the request. A smaller chunk size typically results in the transfer
manager using more threads for the upload.
The metadata is a set of key-value pairs that are stored with the object
in Amazon S3.
"""
transfer_callback = TransferCallback(file_size_mb)
Setting a multipart threshold larger than the size of the file results
in the transfer manager sending the file as a standard upload instead of
a multipart upload.
"""
transfer_callback = TransferCallback(file_size_mb)
config = TransferConfig(multipart_threshold=file_size_mb * 2 * MB)
s3.Bucket(bucket_name).upload_file(
local_file_path,
object_key,
Config=config,
Callback=transfer_callback)
return transfer_callback.thread_info
transfer_callback = TransferCallback(file_size_mb)
config = TransferConfig(use_threads=False)
s3.Bucket(bucket_name).Object(object_key).download_file(
download_file_path,
Config=config,
Callback=transfer_callback)
return transfer_callback.thread_info
Setting a multipart threshold larger than the size of the file results
in the transfer manager sending the file as a standard download instead
of a multipart download.
"""
transfer_callback = TransferCallback(file_size_mb)
config = TransferConfig(multipart_threshold=file_size_mb * 2 * MB)
s3.Bucket(bucket_name).Object(object_key).download_file(
download_file_path,
Config=config,
Callback=transfer_callback)
return transfer_callback.thread_info
if sse_key:
extra_args = {
'SSECustomerAlgorithm': 'AES256',
'SSECustomerKey': sse_key}
else:
extra_args = None
s3.Bucket(bucket_name).Object(object_key).download_file(
download_file_path,
ExtraArgs=extra_args,
Callback=transfer_callback)
return transfer_callback.thread_info
Java
O exemplo a seguir mostra como usar as classes Java de baixo nível para fazer upload de um
arquivo. Ele realiza as seguintes etapas:
Example
Para obter instruções sobre criar e testar um exemplo funcional, consulte Testar exemplos de código
Java no Amazon S3 (p. 1042).
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.*;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withRegion(clientRegion)
.withCredentials(new ProfileCredentialsProvider())
.build();
// Create a list of ETag objects. You retrieve ETags for each object part
uploaded,
// then, after each individual part has been uploaded, pass the list of
ETags to
// the request to complete the upload.
List<PartETag> partETags = new ArrayList<PartETag>();
// Upload the part and add the response's ETag to our list.
UploadPartResult uploadResult = s3Client.uploadPart(uploadRequest);
partETags.add(uploadResult.getPartETag());
filePosition += partSize;
}
.NET
O exemplo de C# a seguir mostra como usar a API de multipart upload do AWS SDK para .NET
de baixo nível para fazer upload de um arquivo para um bucket do S3. Para obter informações
sobre multipart uploads do Amazon S3, consulte Carregar e copiar objetos usando multipart
upload (p. 80).
Note
Ao usar a API do AWS SDK para .NET para fazer upload de objetos grandes, um tempo limite
pode ocorrer enquanto os dados são gravados no fluxo da solicitação. Você pode definir um
tempo limite explícito usando o UploadPartRequest.
O exemplo do C# a seguir faz upload de um arquivo para um bucket do S3 usando a API de multipart
upload de nível baixo. Para obter informações sobre a compatibilidade do exemplo com uma versão
específica do AWS SDK para .NET e instruções para criar e testar um exemplo funcional, consulte
Executar os exemplos de código do Amazon S3 .NET (p. 1044).
using Amazon;
using Amazon.Runtime;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class UploadFileMPULowLevelAPITest
{
private const string bucketName = "*** provide bucket name ***";
private const string keyName = "*** provide a name for the uploaded object
***";
private const string filePath = "*** provide the full path name of the file to
upload ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 s3Client;
// Upload parts.
long contentLength = new FileInfo(filePath).Length;
long partSize = 5 * (long)Math.Pow(2, 20); // 5 MB
try
{
Console.WriteLine("Uploading parts");
long filePosition = 0;
for (int i = 1; filePosition < contentLength; i++)
{
UploadPartRequest uploadRequest = new UploadPartRequest
{
BucketName = bucketName,
Key = keyName,
UploadId = initResponse.UploadId,
PartNumber = i,
PartSize = partSize,
FilePosition = filePosition,
FilePath = filePath
};
filePosition += partSize;
}
PHP
Este tópico mostra como usar o método de baixo nível uploadPart da versão 3 do AWS SDK para
PHP para fazer upload de um arquivo em várias partes. Pressupõe-se que você já esteja seguindo
as instruções de Usar o AWS SDK para PHP e executar exemplos do PHP (p. 1044) e tenha o AWS
SDK para PHP devidamente instalado.
O exemplo de PHP a seguir faz upload de um arquivo para um bucket do Amazon S3 usando o
multipart upload da API de baixo nível do PHP. Para obter informações sobre a execução dos
exemplos de PHP neste guia, consulte Executar exemplos do PHP (p. 1045).
require 'vendor/autoload.php';
use Aws\S3\S3Client;
$result = $s3->createMultipartUpload([
'Bucket' => $bucket,
'Key' => $keyname,
'StorageClass' => 'REDUCED_REDUNDANCY',
'Metadata' => [
'param1' => 'value 1',
'param2' => 'value 2',
'param3' => 'value 3'
]
]);
$uploadId = $result['UploadId'];
Como alternativa, você pode usar as seguintes operações de cliente do multipart upload diretamente:
Para obter mais informações, consulte Usar o AWS SDK para Ruby versão 3 (p. 1045).
Também é possível usar essa API REST para fazer suas solicitações REST ou usar um dos SDKs da
AWS. Para obter mais informações sobre a API REST, consulte Uso dos REST API (p. 99). Para obter
mais informações sobre SDKs, consulte Fazer upload de um objeto usando multipart upload (p. 86).
Para selecionar arquivos no diretório especificado, com base nos critérios de filtragem, especifique
expressões de filtragem. Por exemplo, para carregar somente os arquivos .pdf de um diretório, você
especifica a expressão de filtragem de "*.pdf".
Ao fazer upload de arquivos de um diretório, você não especifica os nomes da chave para os objetos
resultantes. O Amazon S3 cria os nomes de chave usando o caminho original do arquivo. Por exemplo,
suponha que você tem um diretório denominado c:\myfolder com a seguinte estrutura:
Example
C:\myfolder
\a.txt
\b.pdf
\media\
An.mp3
quando você faz upload desse diretório, o Amazon S3 usa os seguintes nomes de chave:
Example
a.txt
b.pdf
media/An.mp3
Example
O exemplo de C# a seguir faz upload de um diretório em um bucket do Amazon S3. Ele mostra como usar
várias sobrecargas de TransferUtility.UploadDirectory para fazer upload do diretório. Cada
chamada sucessiva para upload substitui o upload anterior. Para obter instruções sobre como criar e testar
um exemplo funcional, consulte Executar os exemplos de código do Amazon S3 .NET (p. 1044).
using Amazon;
using Amazon.S3;
using Amazon.S3.Transfer;
using System;
using System.IO;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class UploadDirMPUHighLevelAPITest
{
private const string existingBucketName = "*** bucket name ***";
private const string directoryPath = @"*** directory path ***";
// The example uploads only .txt files.
private const string wildCard = "*.txt";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 s3Client;
static void Main()
{
s3Client = new AmazonS3Client(bucketRegion);
UploadDirAsync().Wait();
}
// 1. Upload a directory.
await directoryTransferUtility.UploadDirectoryAsync(directoryPath,
existingBucketName);
Console.WriteLine("Upload statement 1 completed");
await directoryTransferUtility.UploadDirectoryAsync(request);
Console.WriteLine("Upload statement 3 completed");
}
catch (AmazonS3Exception e)
{
Console.WriteLine(
"Error encountered ***. Message:'{0}' when writing an object",
e.Message);
}
catch (Exception e)
{
Console.WriteLine(
"Unknown encountered on server. Message:'{0}' when writing an object",
e.Message);
}
}
}
As tarefas a seguir fornecem orientações para usar as classes Java de baixo nível para listar todos os
multipart uploads em andamento em um bucket.
Example
ListMultipartUploadsRequest allMultpartUploadsRequest =
new ListMultipartUploadsRequest(existingBucketName);
MultipartUploadListing multipartUploadListing =
s3Client.listMultipartUploads(allMultpartUploadsRequest);
.NET
Um multipart upload em andamento é um multipart upload que foi iniciado com o uso da solicitação
para iniciar o multipart upload, mas que ainda não foi concluído ou parado. Para obter mais
informações sobre multipart uploads do Amazon S3, consulte Carregar e copiar objetos usando
multipart upload (p. 80).
O exemplo de C# a seguir mostra como usar o AWS SDK para .NET para listar todos os multipart
uploads em andamento em um bucket. Para obter informações sobre a compatibilidade do exemplo
com uma versão específica do AWS SDK para .NET e instruções sobre como criar e testar um
exemplo funcional, consulte Executar os exemplos de código do Amazon S3 .NET (p. 1044).
PHP
Este tópico mostra como usar as classes da API de baixo nível da versão 3 do AWS SDK para PHP
para listar todos os multipart uploads em andamento para um bucket. Pressupõe-se que você já esteja
seguindo as instruções de Usar o AWS SDK para PHP e executar exemplos do PHP (p. 1044) e
tenha o AWS SDK para PHP devidamente instalado.
require 'vendor/autoload.php';
use Aws\S3\S3Client;
Java
Example
Example
O código Java a seguir carrega um arquivo e usa o ProgressListener para rastrear o progresso
do upload. Para obter instruções sobre como criar e testar um exemplo funcional, consulte Testar
exemplos de código Java no Amazon S3 (p. 1042).
import java.io.File;
import com.amazonaws.AmazonClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.event.ProgressEvent;
import com.amazonaws.event.ProgressListener;
import com.amazonaws.services.s3.model.PutObjectRequest;
import com.amazonaws.services.s3.transfer.TransferManager;
import com.amazonaws.services.s3.transfer.Upload;
// You can ask the upload for its progress, or you can
// add a ProgressListener to your request to receive notifications
// when bytes are transferred.
request.setGeneralProgressListener(new ProgressListener() {
@Override
public void progressChanged(ProgressEvent progressEvent) {
System.out.println("Transferred bytes: " +
progressEvent.getBytesTransferred());
}
});
try {
// You can block and wait for the upload to finish
upload.waitForCompletion();
} catch (AmazonClientException amazonClientException) {
System.out.println("Unable to upload file, upload aborted.");
amazonClientException.printStackTrace();
}
}
}
.NET
using Amazon;
using Amazon.S3;
using Amazon.S3.Transfer;
using System;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class TrackMPUUsingHighLevelAPITest
{
private const string bucketName = "*** provide the bucket name ***";
private const string keyName = "*** provide the name for the uploaded object
***";
private const string filePath = " *** provide the full path name of the file to
upload **";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 s3Client;
uploadRequest.UploadProgressEvent +=
new EventHandler<UploadProgressArgs>
(uploadRequest_UploadPartProgressEvent);
await fileTransferUtility.UploadAsync(uploadRequest);
Console.WriteLine("Upload completed");
}
catch (AmazonS3Exception e)
{
Console.WriteLine("Error encountered on server. Message:'{0}' when
writing an object", e.Message);
}
catch (Exception e)
{
Console.WriteLine("Unknown encountered on server. Message:'{0}' when
writing an object", e.Message);
}
}
Você é cobrado por todo o armazenamento associado a partes enviadas por upload. Para obter mais
informações, consulte Multipart upload e definição de preço (p. 82). Portanto, é importante que você
conclua o multipart upload para ter o objeto criado ou pare o multipart upload para remover todas as partes
enviadas por upload.
Você pode interromper um multipart upload em andamento no Amazon S3 usando a Interface de linha
de comando da AWS (CLI da AWS), a API REST ou os AWS SDKs. Você também pode interromper um
multipart upload incompleto usando uma política de ciclo de vida de bucket.
As tarefas a seguir orientam sobre a utilização de classes Java de alto nível para interromper multipart
uploads.
O código Java a seguir interrompe todos os multipart uploads em andamento que foram iniciados em
um bucket específico uma semana atrás. Para obter instruções sobre como criar e testar um exemplo
funcional, consulte Testar exemplos de código Java no Amazon S3 (p. 1042).
import java.util.Date;
import com.amazonaws.AmazonClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.services.s3.transfer.TransferManager;
try {
tm.abortMultipartUploads(existingBucketName, oneWeekAgo);
} catch (AmazonClientException amazonClientException) {
System.out.println("Unable to upload file, upload was aborted.");
amazonClientException.printStackTrace();
}
}
}
Note
Você também pode parar um multipart upload específico. Para obter mais informações,
consulte Usar os AWS SDKs (API de baixo nível) (p. 108).
.NET
O exemplo do C# a seguir interrompe todos os multipart uploads em andamento que foram iniciados
em um bucket específico há uma semana. Para obter informações sobre a compatibilidade do
exemplo com uma versão específica do AWS SDK para .NET e instruções para criar e testar um
exemplo funcional, consulte Executar os exemplos de código do Amazon S3 .NET (p. 1044).
using Amazon;
using Amazon.S3;
using Amazon.S3.Transfer;
using System;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class AbortMPUUsingHighLevelAPITest
{
private const string bucketName = "*** provide bucket name ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 s3Client;
Note
Você também pode parar um multipart upload específico. Para obter mais informações,
consulte Usar os AWS SDKs (API de baixo nível) (p. 108).
Para parar um multipart upload, é preciso fornecer o ID de upload e nomes do bucket e da chave usados
no upload. Após parar um multipart upload, não é possível usar o ID de upload para fazer upload de partes
adicionais. Para obter mais informações sobre multipart uploads do Amazon S3, consulte Carregar e copiar
objetos usando multipart upload (p. 80).
Java
Example
InitiateMultipartUploadRequest initRequest =
new InitiateMultipartUploadRequest(existingBucketName, keyName);
InitiateMultipartUploadResult initResponse =
s3Client.initiateMultipartUpload(initRequest);
Note
Em vez de um multipart upload específico, você pode interromper todos os multipart iniciados
antes de uma determinada hora que ainda estiverem em andamento. Essa operação de
limpeza é útil para interromper multipart uploads antigos que você iniciou, mas não concluiu
ou parou. Para obter mais informações, consulte Usar os SDKs da AWS (API de alto
nível) (p. 106).
.NET
O exemplo do C# a seguir mostra como parar um multipart upload. Para um exemplo do C# completo
que inclui o código seguinte, consulte Usar os SDKs da AWS (API de baixo nível) (p. 93).
Você também pode anular todos os multipart uploads em andamento que foram iniciados antes de um
horário específico. Essa operação de limpeza é útil para anular os multipart uploads que não foram
concluídos nem anulados. Para obter mais informações, consulte Usar os SDKs da AWS (API de alto
nível) (p. 106).
PHP
Este tópico descreve como usar uma classe da versão 3 do AWS SDK para PHP para anular um
multipart upload que está em andamento. Pressupõe-se que você já esteja seguindo as instruções de
Usar o AWS SDK para PHP e executar exemplos do PHP (p. 1044) e tenha o AWS SDK para PHP
devidamente instalado. O exemplo do método abortMultipartUpload().
Para obter informações sobre a execução dos exemplos de PHP neste guia, consulte Executar
exemplos do PHP (p. 1045).
require 'vendor/autoload.php';
use Aws\S3\S3Client;
Java
Example
O exemplo a seguir mostra como usar a API Java de baixo nível do Amazon S3 para realizar uma
cópia multipart. Para obter instruções sobre criar e testar um exemplo funcional, consulte Testar
exemplos de código Java no Amazon S3 (p. 1042).
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.*;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();
// Get the object size to track the end of the copy operation.
GetObjectMetadataRequest metadataRequest = new
GetObjectMetadataRequest(sourceBucketName, sourceObjectKey);
ObjectMetadata metadataResult =
s3Client.getObjectMetadata(metadataRequest);
long objectSize = metadataResult.getContentLength();
// Complete the upload request to concatenate all uploaded parts and make
the copied object available.
CompleteMultipartUploadRequest completeRequest = new
CompleteMultipartUploadRequest(
destBucketName,
destObjectKey,
initResult.getUploadId(),
getETags(copyResponses));
s3Client.completeMultipartUpload(completeRequest);
System.out.println("Multipart copy complete.");
} catch (AmazonServiceException e) {
// The call was transmitted successfully, but Amazon S3 couldn't process
// it, so it returned an error response.
e.printStackTrace();
} catch (SdkClientException e) {
// Amazon S3 couldn't be contacted for a response, or the client
// couldn't parse the response from Amazon S3.
e.printStackTrace();
}
}
return etags;
}
}
.NET
O exemplo de C# a seguir mostra como usar o AWS SDK para .NET para copiar um objeto do
Amazon S3 com mais de 5 GB de um local de origem para outro, como de um bucket para outro. Para
copiar objetos menores que 5 GB, use um procedimento de cópia de operação única descrito em
Uso dos AWS SDKs (p. 117). Para obter mais informações sobre multipart uploads do Amazon S3,
consulte Carregar e copiar objetos usando multipart upload (p. 80).
Este exemplo mostra como copiar um objeto Amazon S3 com mais de 5 GB de um bucket do S3 para
outro usando a API de multipart upload do AWS SDK para .NET. Para obter informações sobre a
compatibilidade com o SDK e instruções para criar e testar um exemplo funcional, consulte Executar
os exemplos de código do Amazon S3 .NET (p. 1044).
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class CopyObjectUsingMPUapiTest
{
private const string sourceBucket = "*** provide the name of the bucket with
source object ***";
private const string targetBucket = "*** provide the name of the bucket to copy
the object to ***";
private const string sourceObjectKey = "*** provide the name of object to copy
***";
private const string targetObjectKey = "*** provide the name of the object copy
***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 s3Client;
await s3Client.InitiateMultipartUploadAsync(initiateRequest);
try
{
// Get the size of the object.
GetObjectMetadataRequest metadataRequest = new GetObjectMetadataRequest
{
BucketName = sourceBucket,
Key = sourceObjectKey
};
GetObjectMetadataResponse metadataResponse =
await s3Client.GetObjectMetadataAsync(metadataRequest);
long objectSize = metadataResponse.ContentLength; // Length in bytes.
long bytePosition = 0;
for (int i = 1; bytePosition < objectSize; i++)
{
CopyPartRequest copyRequest = new CopyPartRequest
{
DestinationBucket = targetBucket,
DestinationKey = targetObjectKey,
SourceBucket = sourceBucket,
SourceKey = sourceObjectKey,
UploadId = uploadId,
FirstByte = bytePosition,
LastByte = bytePosition + partSize - 1 >= objectSize ?
objectSize - 1 : bytePosition + partSize - 1,
PartNumber = i
};
copyResponses.Add(await s3Client.CopyPartAsync(copyRequest));
bytePosition += partSize;
}
}
}
}
Use essas APIs para fazer suas solicitações REST ou use um dos SDKs que fornecemos. Para obter
mais informações sobre como usar o multipart upload com a CLI da AWS, consulte Usar a CLI da
AWS (p. 99). Para obter mais informações sobre o recurso SDKs, consulte Suporte do SDK da AWS
para multipart upload (p. 83).
Item Especificação
Cópia de objetos
A operação de cópia cria uma cópia de um objeto que já está armazenado no Amazon S3.
Você pode criar uma cópia do seu objeto de até 5 GB em uma única operação atômica. Contudo, para
copiar um objeto maior que 5 GB, você deve usar a API de multipart upload.
Cada objeto do Amazon S3 tem metadados. É um conjunto de pares nome-valor. Você pode definir
metadados de objeto no momento em que fizer seu upload. Após fazer upload do objeto, você não pode
modificar seus metadados. A única forma de modificar metadados de objeto é fazer uma cópia do objeto
e definir os metadados. Na operação de cópia, você define o mesmo objeto como origem e destino.
Cada objeto tem metadados. Alguns deles são metadados de sistema e outros são definidos pelo usuário.
Usuários controlam alguns dos metadados de sistema, como a configuração de classe de armazenamento
para usar o objeto e configurar a criptografia do lado do servidor. Quando você copia um objeto, os
metadados de sistema controlados pelo usuário e os metadados definidos pelo usuário também são
copiados. O Amazon S3 redefine os metadados controlados pelo sistema. Por exemplo, quando você
copia um objeto, o Amazon S3 redefine a data de criação do objeto copiado. Você não precisa definir
nenhum desses valores na sua solicitação de cópia.
Ao copiar um objeto, você pode decidir atualizar alguns dos valores de metadados. Por exemplo, se
o objeto de origem é configurado para usar o armazenamento padrão, você pode escolher usar o
armazenamento com redundância reduzida para a cópia de objeto. Você também pode modificar os
valores de metadados definidos pelo usuário presentes no objeto de origem. Se optar por atualizar
metadados configuráveis do usuário do objeto (definidos pelo sistema ou pelo usuário) durante a cópia,
você deverá especificar explicitamente todos os metadados configuráveis pelo usuário presentes no objeto
de origem na solicitação, mesmo se estiver apenas alterando um dos valores de metadados.
Para obter mais informações sobre metadados de objeto, consulte Trabalhar com metadados de
objeto (p. 66).
Note
Ao copiar objetos, é possível solicitar que o Amazon S3 salve o objeto de destino criptografado com
uma chave mestra de cliente (CMK) do AWS Key Management Service (AWS KMS), uma chave de
criptografia gerenciada pelo Amazon S3 ou uma chave de criptografia fornecida pelo cliente. Da mesma
forma, você deve especificar informações de criptografia na solicitação. Se a origem da cópia for um
objeto armazenado no Amazon S3 usando criptografia do lado do servidor com chave fornecida pelo
cliente, você precisará fornecer informações de criptografia na solicitação, de maneira que o Amazon S3
possa decodificar o objeto para a cópia. Para obter mais informações, consulte Proteção de dados usando
criptografia (p. 194).
Para copiar mais de um objeto do Amazon S3 com uma única solicitação, é possível usar operações em
lote do Amazon S3. Você fornece às operações em lote do S3 uma lista de objetos nos quais operar. O
S3 Batch Operations chama a respectiva API para executar a operação especificada. Um único trabalho
de operações em lote pode realizar a operação especificada em bilhões de objetos contendo exabytes de
dados.
Usar o console do S3
No console do S3, você pode copiar ou mover um objeto. Para obter mais informações, consulte os
procedimentos abaixo.
Como alternativa, escolha Copy (Copiar) nas opções no canto superior direito.
5. Selecione o tipo de destino e a conta de destino. Para especificar o caminho de destino, escolha
Browse S3 (Procurar S3), navegue até o destino e marque a caixa de seleção à esquerda do destino.
Escolha Choose destination (Escolher destino) no canto inferior direito.
Como alternativa, escolha Move (Mover) nas opções no canto superior direito.
5. Para especificar o caminho de destino, escolha Browse S3 (Procurar S3), navegue até o destino e
marque a caixa de seleção à esquerda do destino. Escolha Choose destination (Escolher destino) no
canto inferior direito.
Note
• Essa ação cria uma cópia de todos os objetos especificados com configurações atualizadas,
atualiza a data da última modificação no local especificado e adiciona um marcador de exclusão
ao objeto original.
• Ao mover pastas, aguarde a conclusão da ação de movimentação antes de fazer alterações
adicionais nas pastas.
• Objetos criptografados com chaves de criptografia fornecidas pelo cliente (SSE-C) não podem
ser copiados usando o console do S3. Para copiar objetos criptografados com o SSE-C, use a
AWS CLI, o AWS SDK ou a API REST do Amazon S3.
• Essa ação atualiza metadados para versionamento de bucket, criptografia, recursos de bloqueio
de objetos e objetos arquivados.
Java
Example
O exemplo a seguir copia um objeto no Amazon S3 usando o AWS SDK para Java. Para obter
instruções sobre criar e testar um exemplo funcional, consulte Testar exemplos de código Java no
Amazon S3 (p. 1042).
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.CopyObjectRequest;
import java.io.IOException;
try {
.NET
O exemplo de C# a seguir usa o AWS SDK para .NET de alto nível para copiar objetos de até 5 GB
em uma única operação. Para objetos maiores do que 5 GB, use o exemplo de cópia do multipart
upload descrito em Copiar um objeto usando multipart upload (p. 110).
Esse exemplo faz a cópia de um objeto de até 5 GB. Para obter informações sobre a compatibilidade
do exemplo com uma versão específica do AWS SDK para .NET e instruções sobre como
criar e testar um exemplo funcional, consulte Executar os exemplos de código do Amazon
S3 .NET (p. 1044).
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class CopyObjectTest
{
private const string sourceBucket = "*** provide the name of the bucket with
source object ***";
private const string destinationBucket = "*** provide the name of the bucket to
copy the object to ***";
private const string objectKey = "*** provide the name of object to copy ***";
private const string destObjectKey = "*** provide the destination object key
name ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 s3Client;
try
{
CopyObjectRequest request = new CopyObjectRequest
{
SourceBucket = sourceBucket,
SourceKey = objectKey,
DestinationBucket = destinationBucket,
DestinationKey = destObjectKey
};
CopyObjectResponse response = await s3Client.CopyObjectAsync(request);
}
catch (AmazonS3Exception e)
{
Console.WriteLine("Error encountered on server. Message:'{0}' when
writing an object", e.Message);
}
catch (Exception e)
{
Console.WriteLine("Unknown encountered on server. Message:'{0}' when
writing an object", e.Message);
}
}
}
}
PHP
Este tópico orienta como usar classes da versão 3 do AWS SDK para PHP para copiar um único
objeto e múltiplos objetos no Amazon S3 de um bucket para outro ou no mesmo bucket.
Este tópico pressupõe que você já esteja seguindo as instruções para Usar o AWS SDK para PHP e
executar exemplos do PHP (p. 1044) e tenha o AWS SDK para PHP devidamente instalado.
O exemplo de PHP a seguir ilustra o uso do método copyObject() para copiar um único objeto no
Amazon S3. Mostra também como um lote de chamadas para CopyObject, por meio do método
getcommand(), é usado para fazer várias cópias de um objeto.
Cópia de objetos
require 'vendor/autoload.php';
use Aws\S3\S3Client;
// Copy an object.
$s3->copyObject([
'Bucket' => $targetBucket,
'Key' => "{$sourceKeyname}-copy",
'CopySource' => "{$sourceBucket}/{$sourceKeyname}",
]);
Ruby
As tarefas a seguir orientam como usar classes Ruby para copiar um objeto no Amazon S3 de um
bucket para outro ou no mesmo bucket.
Cópia de objetos
1 Use o gem modularizado do Amazon S3 para a versão 3 do AWS SDK para Ruby, exija
'aws-sdk-s3' e forneça suas credenciais da AWS. Para obter mais informações sobre
como fornecer suas credenciais, consulte Fazer solicitações usando credenciais de
usuário do IAM ou da conta da AWS (p. 999).
require 'aws-sdk-s3'
Este exemplo copia o objeto flotsam do bucket pacific para o objeto jetsam do bucket atlantic,
preservando seus metadados.
PUT\r\n
\r\n
\r\n
Wed, 20 Feb 2008 22:12:21 +0000\r\n
x-amz-copy-source:/pacific/flotsam\r\n
/atlantic/jetsam
O Amazon S3 retorna a resposta a seguir, que especifica a ETag do objeto e quando ele foi modificado
pela última vez.
HTTP/1.1 200 OK
x-amz-id-2: Vyaxt7qEbzv34BnSu5hctyyNSlHTYZFMWK4FtzO+iX8JQNyaLdTshL0KxatbaOZt
x-amz-request-id: 6B13C3C5B34AF333
Date: Wed, 20 Feb 2008 22:13:01 +0000
Content-Type: application/xml
Transfer-Encoding: chunked
Connection: close
Server: AmazonS3
<?xml version="1.0" encoding="UTF-8"?>
<CopyObjectResult>
<LastModified>2008-02-20T22:13:01</LastModified>
<ETag>"7e9c608af58950deeb370c98608ed097"</ETag>
</CopyObjectResult>
As taxas de transferência de dados se aplicam ao baixar objetos. Para obter informações sobre os
recursos e a definição de preço do Amazon S3, consulte Amazon S3.
Important
Se o nome da chave de um objeto consistir em um único ponto (.) ou em dois pontos (..), não
será possível fazer download do objeto usando o console do Amazon S3. Para fazer download
de um objeto com um nome de chave “.” ou “..”, é necessário usar a AWS CLI, os AWS SDKs ou
a API REST. Para obter mais informações sobre como nomear objetos, consulte Diretrizes de
nomeação de chave de objeto (p. 64).
É possível fazer download de um único objeto por solicitação usando o console do Amazon S3. Para fazer
download de vários objetos, use a CLI da AWS CLI, os SDKs da AWS ou a API REST.
Quando você faz download de um objeto programaticamente, seus metadados são retornados nos
cabeçalhos de resposta. Às vezes, você deseja substituir certos valores no cabeçalho da resposta
retornados em uma resposta do GET. Por exemplo, você pode substituir o valor Content-Disposition
no cabeçalho da resposta em sua solicitação GET. A API REST GET Object (consulte GET Object) permite
que você especifique parâmetros de query string na sua solicitação GET para substituir esses valores. Os
AWS SDKs para Java, .NET e PHP também fornecem os objetos necessários que você pode usar para
especificar valores para esses cabeçalhos na resposta à sua solicitação GET.
Ao recuperar objetos que são armazenados com criptografia usando criptografia do lado do servidor,
você precisará fornecer os cabeçalhos apropriados de solicitação. Para obter mais informações, consulte
Proteção de dados usando criptografia (p. 194).
Uso do console do S3
Esta seção explica como usar o console do Amazon S3 para fazer download de objetos de um bucket do
S3.
As taxas de transferência de dados se aplicam ao baixar objetos. Para obter informações sobre os
recursos e a definição de preço do Amazon S3, consulte Amazon S3.
Important
Se o nome da chave de um objeto consistir em um único ponto (.) ou em dois pontos (..), não
será possível fazer download do objeto usando o console do Amazon S3. Para fazer download
de um objeto com um nome de chave “.” ou “..”, é necessário usar a AWS CLI, os AWS SDKs ou
a API REST. Para obter mais informações sobre como nomear objetos, consulte Diretrizes de
nomeação de chave de objeto (p. 64).
3. Você pode fazer download de um objeto de um bucket do S3 de qualquer uma das formas a seguir:
Ao fazer download de um objeto com o AWS SDK para Java, o Amazon S3 retorna todos os
metadados do objeto e um fluxo de entrada de onde ler os conteúdos do objeto.
Note
A conexão de rede permanece aberta até que você leia todos os dados ou feche o fluxo de
entrada. Recomendamos que você leia o conteúdo de fluxo o mais rápido possível.
• Em vez de ler o objeto inteiro, você pode ler apenas uma parte dos dados do objeto especificando o
intervalo de bytes que você deseja na solicitação.
• Opcionalmente, é possível substituir os valores do cabeçalho de resposta usando um objeto
ResponseHeaderOverrides e definindo a propriedade de solicitação correspondente. Por
exemplo, você pode usar esse recurso para indicar que o objeto deve ser baixado em um arquivo
com um nome de arquivo diferente do nome da chave do objeto.
O exemplo a seguir recupera o objeto de um bucket do Amazon S3 de três maneiras: primeiro, como
um objeto completo, depois, como uma faixa de bytes do objeto e, por fim, como um objeto completo
com os valores do cabeçalho da resposta substituídos. Para obter mais informações sobre como obter
objetos do Amazon S3, consulte GET Object. Para obter instruções sobre criar e testar um exemplo
funcional, consulte Testar exemplos de código Java no Amazon S3 (p. 1042).
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.GetObjectRequest;
import com.amazonaws.services.s3.model.ResponseHeaderOverrides;
import com.amazonaws.services.s3.model.S3Object;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
objectPortion.close();
}
if (headerOverrideObject != null) {
headerOverrideObject.close();
}
}
}
.NET
Ao fazer download de um objeto, você obtém todos os metadados do objeto e um fluxo do qual você
lê o conteúdo. É necessário ler o conteúdo do fluxo o mais rápido possível porque os dados são
transmitidos diretamente do Amazon S3 e sua conexão de rede permanecerá aberta até que você leia
todos os dados ou feche o fluxo de entrada. Para obter um objeto, faça o seguinte:
• Em vez de ler o objeto inteiro, você pode ler apenas a parte dos dados do objeto especificando o
intervalo de bytes na solicitação, conforme exibido no seguinte exemplo do C#:
Example
• Ao recuperar um objeto, você pode substituir os valores do cabeçalho da resposta (consulte Fazer
download de um objeto (p. 122)) usando o objeto ResponseHeaderOverrides e configurando
a propriedade da solicitação correspondente. O exemplo de código C# a seguir mostra como fazer
isso. Por exemplo, você pode usar esse recurso para indicar que o objeto deve ser baixado em um
arquivo com um nome de arquivo diferente do nome da chave do objeto.
Example
request.ResponseHeaderOverrides = responseHeaders;
Example
O exemplo de código C# a seguir recupera um objeto de um bucket do Amazon
S3. A partir da resposta, o exemplo lê os dados do objeto usando a propriedade
GetObjectResponse.ResponseStream. O exemplo também mostra como você pode usar a
coleção GetObjectResponse.Metadata para ler os metadados do objeto. Se o objeto que você
recupera têm os metadados x-amz-meta-title, o código imprime o valor dos metadados.
Para obter instruções sobre como criar e testar um exemplo funcional, consulte Executar os exemplos
de código do Amazon S3 .NET (p. 1044).
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.IO;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class GetObjectTest
{
private const string bucketName = "*** bucket name ***";
private const string keyName = "*** object key ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 client;
}
catch (AmazonS3Exception e)
{
// If bucket or object does not exist
Console.WriteLine("Error encountered ***. Message:'{0}' when reading
object", e.Message);
}
catch (Exception e)
{
Console.WriteLine("Unknown encountered on server. Message:'{0}' when
reading object", e.Message);
}
}
}
}
PHP
Este tópico explica como usar uma classe do AWS SDK para PHP para recuperar um objeto do
Amazon S3. Você pode recuperar um objeto inteiro ou um intervalo de bytes do objeto. Presumimos
que você já esteja seguindo as instruções para Usar o AWS SDK para PHP e executar exemplos do
PHP (p. 1044) e tenha o AWS SDK para PHP devidamente instalado.
Example
$result = $s3->getObject([
'Bucket' => $bucket,
'Key' => $keyname,
'ResponseContentType' => 'text/plain',
'ResponseContentLanguage' => 'en-US',
'ResponseContentDisposition' => 'attachment; filename=testing.txt',
'ResponseCacheControl' => 'No-cache',
'ResponseExpires' => gmdate(DATE_RFC2822, time() + 3600),
]);
Para obter mais informações sobre recuperação de objetos, consulte Fazer download de um
objeto (p. 122).
require 'vendor/autoload.php';
use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;
try {
// Get the object.
$result = $s3->getObject([
'Bucket' => $bucket,
'Key' => $keyname
]);
Para obter mais informações sobre o formato de solicitação e de resposta, consulte Objeto GET.
Para obter informações sobre os recursos e a definição de preço do Amazon S3, consulte a definição de
preço do Amazon S3.
• Excluir um único objeto: o Amazon S3 fornece a API DELETE que pode ser usada para excluir um objeto
em uma única solicitação HTTP.
• Excluir vários objetos: o Amazon S3 fornece a API para exclusão de vários objetos que pode ser usada
para excluir até 1.000 objetos em uma única solicitação HTTP.
Ao excluir objetos de um bucket que não esteja habilitado para versionamento, você fornece apenas o
nome da chave de objeto. No entanto, ao excluir objetos de um bucket habilitado para versionamento, você
tem a opção de fornecer o ID da versão do objeto para excluir uma versão específica dele.
• Especificar uma solicitação de exclusão não versionada: especifique somente a chave do objeto, e não
o ID de versão. Nesse caso, o Amazon S3 cria um marcador de exclusão e retorna o ID de versão na
resposta. Isso faz com que o objeto desapareça do bucket. Para obter informações sobre versionamento
de objetos e sobre o conceito de marcador de exclusão, consulte Usando o controle de versão em
buckets do S3 (p. 516).
• Especificar uma solicitação de exclusão versionada: especifique a chave e um ID de versão. Nesse
caso, os dois resultados a seguir são possíveis:
• Se o ID de versão for mapeado para uma versão de objeto específica, o Amazon S3 excluirá versão
específica do objeto.
• Se o ID de versão for mapeado para o marcador de exclusão do objeto em questão, o Amazon S3
excluirá o marcador de exclusão. Isso faz com que o objeto reapareça no bucket.
• Se você tiver um bucket habilitado para MFA, fizer uma solicitação de exclusão não versionada (sem
excluir um objeto versionado) e não fornecer um token de MFA, a exclusão será concluída.
• Se você tiver uma solicitação de exclusão de vários objetos especificando somente objetos não
versionados a serem excluídos de um bucket habilitado para MFA e não fornecer um token de MFA, as
exclusões serão feitas com êxito.
Para obter informações sobre a exclusão de MFA, consulte Configurando a exclusão de MFA (p. 524).
Tópicos
• Excluir um único objeto (p. 129)
• Excluir vários objetos (p. 136)
Como todos os objetos em seu bucket do S3 incorrem em custos de armazenamento, você deve excluir
os objetos de que não precisa mais. Por exemplo, se estiver coletando arquivos de log, é uma boa ideia
excluí-los quando não forem mais necessários. Você pode definir uma regra de ciclo de vida para excluir
automaticamente objetos como arquivos de log. Para obter mais informações, consulte the section called
“Definir a configuração do ciclo de vida” (p. 575).
Para obter informações sobre os recursos e a definição de preço do Amazon S3, consulte a definição de
preço do Amazon S3.
Uso do console do S3
Siga as etapas a seguir para usar o console do Amazon S3 a fim de excluir um único objeto de um bucket.
Para obter mais informações sobre versionamento do S3, consulte Usando o controle de versão em
buckets do S3 (p. 516).
Java
O exemplo a seguir pressupõe que o bucket não esteja habilitado para versionamento e o objeto não
tenha IDs de versão. Na solicitação de exclusão, especifique somente a chave do objeto e não um ID
de versão.
Para obter instruções sobre criar e testar um exemplo funcional, consulte Testar exemplos de código
Java no Amazon S3 (p. 1042).
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.DeleteObjectRequest;
import java.io.IOException;
try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();
O exemplo a seguir exclui um objeto de um bucket com versionamento. O exemplo exclui uma versão
específica do objeto ao especificar o nome da chave e o ID de versão do objeto.
Você pode obter os IDs de versão de um objeto enviando uma solicitação ListVersions.
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.BucketVersioningConfiguration;
import com.amazonaws.services.s3.model.DeleteVersionRequest;
import com.amazonaws.services.s3.model.PutObjectResult;
import java.io.IOException;
try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();
.NET
Os exemplos a seguir mostram como excluir um objeto de buckets com e sem versionamento. Para
obter mais informações sobre versionamento do S3, consulte Usando o controle de versão em buckets
do S3 (p. 516).
Para obter informações sobre como criar e testar um exemplo funcional, consulte Executar os
exemplos de código do Amazon S3 .NET (p. 1044).
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class DeleteObjectNonVersionedBucketTest
{
private const string bucketName = "*** bucket name ***";
private const string keyName = "*** object key ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 client;
Console.WriteLine("Deleting an object");
await client.DeleteObjectAsync(deleteObjectRequest);
}
catch (AmazonS3Exception e)
{
Console.WriteLine("Error encountered on server. Message:'{0}' when
deleting an object", e.Message);
}
catch (Exception e)
{
Console.WriteLine("Unknown encountered on server. Message:'{0}' when
deleting an object", e.Message);
}
}
}
}
O exemplo do C# a seguir exclui um objeto de um bucket com versionamento. Ele exclui uma versão
específica do objeto ao especificar o nome da chave e o ID de versão do objeto.
Para obter informações sobre como criar e testar um exemplo funcional, consulte Executar os
exemplos de código do Amazon S3 .NET (p. 1044).
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class DeleteObjectVersion
{
private const string bucketName = "*** versioning-enabled bucket name ***";
private const string keyName = "*** Object Key Name ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 client;
Key = objectKey,
ContentBody = "This is the content body!"
};
PutObjectResponse response = await client.PutObjectAsync(request);
return response.VersionId;
}
}
}
PHP
Este exemplo mostra como usar classes da versão 3 do AWS SDK para PHP para excluir um objeto
de um bucket sem versionamento. Para obter informações sobre como excluir um objeto de um bucket
com versões, consulte Uso dos REST API (p. 136).
Este exemplo pressupõe que você já esteja seguindo as instruções para Usar o AWS SDK para PHP
e executar exemplos do PHP (p. 1044) e tenha o AWS SDK para PHP devidamente instalado. Para
obter informações sobre a execução dos exemplos de PHP neste guia, consulte Executar exemplos
do PHP (p. 1045).
O exemplo de PHP a seguir exclui um objeto de um bucket. Como esse exemplo mostra como excluir
objetos de bucket sem versionamento, ele oferece apenas o nome do bucket e a chave do objeto (não
um ID de versão) na solicitação de exclusão.
<?php
require 'vendor/autoload.php';
use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;
$result = $s3->deleteObject([
'Bucket' => $bucket,
'Key' => $keyname
]);
if ($result['DeleteMarker'])
{
echo $keyname . ' was deleted or does not exist.' . PHP_EOL;
} else {
exit('Error: ' . $keyname . ' was not deleted.' . PHP_EOL);
}
}
catch (S3Exception $e) {
exit('Error: ' . $e->getAwsErrorMessage() . PHP_EOL);
}
$result = $s3->getObject([
'Bucket' => $bucket,
'Key' => $keyname
]);
Para excluir um objeto por solicitação, use a API DELETE. Para obter mais informações, consulte DELETE
Object. Para obter mais informações sobre como usar a CLI para excluir um objeto, consulte delete-object.
Para obter informações sobre os recursos e a definição de preço do Amazon S3, consulte a definição de
preço do Amazon S3.
Você pode usar o console do Amazon S3 ou a API Multi-Object Delete para excluir vários objetos
simultaneamente de um bucket do S3.
Uso do console do S3
Siga etapas a seguir para usar o console do Amazon S3 a fim de excluir vários objetos de um bucket.
Como alternativa, escolha Delete (Excluir) nas opções no canto superior direito.
5. Digite delete se solicitado para confirmar que você deseja excluir esses objetos.
6. Escolha Delete objects (Excluir objetos) no canto inferior direito e o Amazon S3 excluirá os objetos
especificados.
Warning
Para saber mais sobre exclusão de objetos, consulte Excluir objetos do Amazon S3 (p. 128).
Java
Example
O exemplo a seguir usa a API de Exclusão de vários objetos para excluir objetos de um bucket
sem versionamento. O exemplo faz upload de objetos de exemplo no bucket e, em seguida, usa o
método AmazonS3Client.deleteObjects() para excluir os objetos em uma única solicitação. Na
DeleteObjectsRequest, o exemplo especifica apenas os nomes de chaves de objeto porque os
objetos não têm IDs de versão.
Para obter instruções sobre criar e testar um exemplo funcional, consulte Testar exemplos de código
Java no Amazon S3 (p. 1042).
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.DeleteObjectsRequest;
import com.amazonaws.services.s3.model.DeleteObjectsRequest.KeyVersion;
import com.amazonaws.services.s3.model.DeleteObjectsResult;
import java.io.IOException;
import java.util.ArrayList;
try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withRegion(clientRegion)
.build();
Example
O exemplo a seguir usa a API de Exclusão de vários objetos para excluir objetos de um bucket com
versionamento. Ela faz o seguinte:
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.BucketVersioningConfiguration;
import com.amazonaws.services.s3.model.DeleteObjectsRequest;
import com.amazonaws.services.s3.model.DeleteObjectsRequest.KeyVersion;
import com.amazonaws.services.s3.model.DeleteObjectsResult;
import com.amazonaws.services.s3.model.DeleteObjectsResult.DeletedObject;
import com.amazonaws.services.s3.model.PutObjectResult;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
try {
S3_CLIENT = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();
// Delete the delete markers, leaving the objects intact in the bucket.
DeleteObjectsResult delObjRes = S3_CLIENT.deleteObjects(deleteRequest);
int successfulDeletes = delObjRes.getDeletedObjects().size();
System.out.println(successfulDeletes + " delete markers successfully deleted");
}
}
.NET
O AWS SDK para .NET fornece um método conveniente para excluir vários objetos: DeleteObjects.
Para cada objeto que você deseja excluir, especifique o nome da chave e a versão do objeto. Se o
bucket não for habilitado para versionamento, você especifica null para o ID de versão. Se uma
exceção ocorrer, reveja a resposta DeleteObjectsException para determinar quais objetos não
foram excluídos e por quê.
O exemplo do C# a seguir usa a API de Exclusão de vários objetos para excluir objetos de um
bucket sem versionamento. O exemplo faz upload dos objetos de exemplo no bucket e, em
seguida, usa o método DeleteObjects para excluir os objetos em uma única solicitação. Na
DeleteObjectsRequest, o exemplo especifica apenas os nomes das chaves dos objetos porque os
IDs das versões são nulos.
Para obter informações sobre como criar e testar um exemplo funcional, consulte Executar os
exemplos de código do Amazon S3 .NET (p. 1044).
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class DeleteMultipleObjectsNonVersionedBucketTest
{
private const string bucketName = "*** versioning-enabled bucket name ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 s3Client;
O exemplo do C# a seguir usa a API de exclusão de vários objetos para excluir objetos de um bucket
com versionamento. O exemplo executa as seguintes ações:
1. Cria objetos de exemplo e os exclui especificando o nome da chave e o ID de versão para cada
objeto. A operação exclui versões específicas dos objetos.
2. Cria objetos de exemplo e os exclui especificando somente os nomes de chave. Como o exemplo
não especifica IDs de versão, a operação somente adiciona marcadores de exclusão. Ela não
exclui nenhuma versão específica dos objetos. Após a exclusão, esses objetos não são exibidos no
console do Amazon S3.
3. Exclui os marcadores de exclusão especificando as chaves de objeto e os IDs de versão dos
marcadores de exclusão. Quando a operação exclui os marcadores de exclusão, os objetos
reaparecem no console.
Para obter informações sobre como criar e testar um exemplo funcional, consulte Executar os
exemplos de código do Amazon S3 .NET (p. 1044).
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class DeleteMultipleObjVersionedBucketTest
{
private const string bucketName = "*** versioning-enabled bucket name ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 s3Client;
// Delete objects using only keys. Amazon S3 creates a delete marker and
// returns its version ID in the response.
List<DeletedObject> deletedObjects = await
NonVersionedDeleteAsync(keysAndVersions2);
return deletedObjects;
}
catch (DeleteObjectsException e)
{
PrintDeletionReport(e);
throw; // Some deletes failed. Investigate before continuing.
}
// This response contains the DeletedObjects list which we use to delete
the delete markers.
return response.DeletedObjects;
}
// Now, delete the delete marker to bring your objects back to the bucket.
try
{
Console.WriteLine("Removing the delete markers .....");
var deleteObjectResponse = await
s3Client.DeleteObjectsAsync(multiObjectDeleteRequest);
Console.WriteLine("Successfully deleted all the {0} delete markers",
deleteObjectResponse.DeletedObjects.Count);
}
catch (DeleteObjectsException e)
{
PrintDeletionReport(e);
}
}
};
};
keys.Add(keyVersion);
}
return keys;
}
}
}
PHP
Estes exemplos mostram como usar as classes da versão 3 do AWS SDK para PHP para excluir
vários objetos de buckets do Amazon S3 com e sem versionamento. Para obter mais informações
sobre controle de versão, consulte Usando o controle de versão em buckets do S3 (p. 516).
Os exemplos presumem que você já esteja seguindo as instruções para Usar o AWS SDK para PHP e
executar exemplos do PHP (p. 1044) e tenha o AWS SDK para PHP devidamente instalado.
O PHP de exemplo a seguir usa o método deleteObjects() para excluir vários objetos de um
bucket sem versionamento.
Para obter informações sobre a execução dos exemplos de PHP neste guia, consulte Executar
exemplos do PHP (p. 1045).
<?php
require 'vendor/autoload.php';
use Aws\S3\S3Client;
]
]
]);
}
O PHP de exemplo a seguir usa o método deleteObjects() para excluir vários objetos de um
bucket habilitado para versionamento.
Para obter informações sobre a execução dos exemplos de PHP neste guia, consulte Executar
exemplos do PHP (p. 1045).
<?php
require 'vendor/autoload.php';
use Aws\S3\S3Client;
// 3. List the objects versions and get the keys and version IDs.
$versions = $s3->listObjectVersions(['Bucket' => $bucket]);
]
]);
if (isset($result['Deleted']))
{
$deleted = true;
if (isset($result['Errors']))
{
$errors = true;
if ($deleted)
{
echo $deletedResults;
}
if ($errors)
{
echo $errorResults;
}
Para obter mais informações, consulte Excluir vários objetos na Referência da API do Amazon Simple
Storage Service.
No console do Amazon S3, os prefixos são chamados de pastas. Você pode exibir todos os objetos e
pastas no console do S3 navegando até um bucket. Você também pode exibir informações sobre cada
objeto incluindo propriedades do objeto.
Para obter mais informações sobre como listar e organizar seus dados no Amazon S3, consulte os tópicos
a seguir.
Tópicos
• Organizar objetos usando prefixos (p. 149)
• Listar chaves de objeto programaticamente (p. 150)
• Organizar objetos no console do Amazon S3 usando pastas (p. 155)
• Exibir uma visão geral do objeto no console do Amazon S3 (p. 157)
• Exibir propriedades do objeto no console do Amazon S3 (p. 157)
O prefixo limita os resultados a somente essas chaves que começam com o prefixo especificado. O
delimitador faz com que uma operação de lista acumule todas as chaves que compartilham um prefixo
comum em um único resultado da lista de resumo.
Por exemplo, se você estava armazenando informações sobre cidades, pode, naturalmente, organizá-las
por continente, país, província ou estado. Como esses nomes geralmente não usam pontuação, você pode
usar a barra (/) como delimitador. Os seguintes exemplos usam uma barra (/) como delimitador.
• Europa/França/Nova Aquitânia/Bordeaux
• América do Norte/Canadá/Quebec/Montreal
• América do Norte /EUA/Washington/Bellevue
• América do Norte /EUA/Washington/Seattle
Se você armazenou dados de cada cidade do mundo desta forma, ficaria estranho gerenciar um
namespace plano de chave. Usando Prefix e Delimiter com a operação de lista, você pode usar a
hierarquia que criou para listar seus dados. Por exemplo, para listar todos os estados nos EUA, defina
Delimiter='/' e Prefix='América do Norte/USA/'. Para listar todas as províncias no Canadá para as
quais você tenha dados, defina Delimiter='/' e Prefix='América do Norte/Canadá/'.
sample.jpg
photos/2006/January/sample.jpg
photos/2006/February/sample2.jpg
photos/2006/February/sample3.jpg
photos/2006/February/sample4.jpg
O bucket de exemplo tem somente sample.jpg o objeto no nível raiz. Para listar somente os objetos
no nível raiz no bucket, você envia uma solicitação GET no bucket com o caractere delimitador “/”. Em
resposta, o Amazon S3 retorna a chave do objeto sample.jpg porque ela não contém o caractere
delimitador “/”. Todas as outras chaves contêm o caractere delimitador. O Amazon S3 agrupa essas
chaves e retorna um único elemento CommonPrefixes com valor de prefixo photos/ que é uma
substring do início dessas chaves até a primeira ocorrência do delimitador especificado.
Example
<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Name>ExampleBucket</Name>
<Prefix></Prefix>
<Marker></Marker>
<MaxKeys>1000</MaxKeys>
<Delimiter>/</Delimiter>
<IsTruncated>false</IsTruncated>
<Contents>
<Key>sample.jpg</Key>
<LastModified>2011-07-24T19:39:30.000Z</LastModified>
<ETag>"d1a7fb5eab1c16cb4f7cf341cf188c3d"</ETag>
<Size>6</Size>
<Owner>
<ID>75cc57f09aa0c8caeab4f8c24e99d10f8e7faeebf76c078efc7c6caea54ba06a</ID>
<DisplayName>displayname</DisplayName>
</Owner>
<StorageClass>STANDARD</StorageClass>
</Contents>
<CommonPrefixes>
<Prefix>photos/</Prefix>
</CommonPrefixes>
</ListBucketResult>
Para obter mais informações sobre como listar chaves de objeto programaticamente, consulte Listar
chaves de objeto programaticamente (p. 150).
O Amazon S3 expõe uma operação de lista que permite a enumeração das chaves contidas em um
bucket. As chaves são selecionadas para a listagem pelo bucket e pelo prefixo. Por exemplo, considere um
bucket chamado “dictionary” que contém uma chave para cada palavra inglesa. Você pode fazer uma
chamada para listar todas as chaves no bucket iniciadas com a letra “q”. Os resultados da lista são obtidos
sempre em ordem binária UTF-8.
As operações de lista SOAP e REST retornam um documento XML que contém nomes de chaves
correspondentes e informações sobre o objeto identificado em cada chave.
Note
O suporte de SOAP via HTTP está obsoleto, mas continua disponível via HTTPS. Novos recursos
do Amazon S3 não serão compatíveis com o SOAP. Recomendamos que você use a API REST
ou os AWS SDKs.
Grupos de chaves que compartilham um prefixo terminado por um delimitador especial podem ser rolados
para acima pelo prefixo comum para fins de listagem. Isso permite que aplicativos organizem e naveguem
por suas chaves hierarquicamente, de maneira muito similar a como você organizaria seus arquivos em
diretórios em um sistema de arquivos.
Por exemplo, para estender o bucket de dicionário para conter mais do que apenas palavras inglesas,
você poderia formar chaves prefixando cada palavra com seu idioma e um delimitador, tal como “French/
logical”. Usando esse esquema de nomeação e o recurso hierárquico de listagem, você poderia
recuperar uma lista somente de palavras francesas. Você também poderia pesquisar a parte superior
da lista de idiomas sem ter que iterar com todas as chaves de iteração lexicográficas. Para obter mais
informações sobre esse aspecto de listagem, consulte Organizar objetos usando prefixos (p. 149).
API REST
Se a sua aplicação exigir, você pode enviar solicitações REST diretamente. Você pode enviar uma
solicitação GET para retornar alguns ou todos os objetos em um bucket ou pode usar critérios de seleção
para obter um subconjunto de objetos em um bucket. Para obter mais informações, consulte GET Bucket
(listar objetos) versão 2 na Referência da API do Amazon Simple Storage Service.
A performance da lista não é substancialmente afetada pelo número total de chaves no bucket. Também
não é afetada pela presença ou ausência dos argumentos prefix, marker, maxkeys ou delimiter.
Como os buckets podem conter um número praticamente ilimitado de chaves, os resultados completos
de uma consulta de lista podem ser muito extensos. Para gerenciar grandes conjuntos de resultados, a
API do Amazon S3 é compatível com a paginação para separá-los em várias respostas. Cada resposta de
chaves de lista retorna uma página com até 1.000 chaves com um indicador apontando se a resposta está
truncada. Você envia uma série de requisições de chaves de lista até que você receba todas as chaves. As
bibliotecas wrapper do AWS SDK fornecem a mesma paginação.
Java
O exemplo a seguir lista as chaves de objeto em um bucket. O exemplo usa a paginação para
recuperar um conjunto de chaves de objeto. Se houver mais chaves a retornar após a primeira página,
o Amazon S3 incluirá um token de continuação na resposta. O exemplo usa o token de continuação
na solicitação subsequente para buscar o próximo conjunto de chaves de objeto.
Para obter instruções sobre criar e testar um exemplo funcional, consulte Testar exemplos de código
Java no Amazon S3 (p. 1042).
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.ListObjectsV2Request;
import com.amazonaws.services.s3.model.ListObjectsV2Result;
import com.amazonaws.services.s3.model.S3ObjectSummary;
import java.io.IOException;
try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();
System.out.println("Listing objects");
do {
result = s3Client.listObjectsV2(req);
.NET
Para obter instruções sobre como criar e testar um exemplo funcional, consulte Executar os exemplos
de código do Amazon S3 .NET (p. 1044).
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class ListObjectsTest
{
private const string bucketName = "*** bucket name ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
PHP
Este exemplo orienta como usar classes da versão 3 do AWS SDK para PHP para listar chaves de
objeto contidas em um bucket do Amazon S3.
Este exemplo pressupõe que você já esteja seguindo as instruções para Usar o AWS SDK para PHP
e executar exemplos do PHP (p. 1044) e tenha o AWS SDK para PHP devidamente instalado.
Para listar as chaves de objeto contidas em um bucket usando o AWS SDK para PHP, primeiramente
é necessário listar os objetos contidos no bucket e então extrair a chave de cada um dos objetos
listados. Ao listar objetos em um bucket, você tem a opção de usar o método de baixo nível Aws
\S3\S3Client::listObjects() ou a classe de alto nível Aws\ResultPaginator.
O método de baixo nível listObjects() mapeia para a API REST subjacente do Amazon S3. Cada
solicitação listObjects() retorna uma página de até 1.000 objetos. Se houver mais de 1.000
objetos no bucket, a resposta será truncada e você precisará enviar outra solicitação listObjects()
para recuperar o conjunto seguinte de 1.000 objetos.
Você pode usar o paginador de alto nível ListObjects para facilitar a listagem de objetos contidos
em um bucket. Para usar o paginador ListObjects para criar uma lista de objetos, execute o
método getPaginator() do cliente do Amazon S3 (herdado da classe Aws/AwsClientInterface) com
o comando ListObjects como o primeiro argumento e uma matriz que contenha os objetos
retornados do bucket especificado como o segundo argumento.
As tarefas a seguir orientam como usar métodos PHP do cliente do Amazon S3 para listar objetos
contidos em um bucket no qual é possível listar as chaves do objeto.
require 'vendor/autoload.php';
use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;
Por exemplo, é possível criar uma pasta no console chamada photos, e armazenar um objeto chamado
myphoto.jpg nela. Em seguida, o objeto é armazenado como o nome da chave photos/myphoto.jpg,
em que photos/ é o prefixo.
Você pode ter pastas dentro de pastas, mas não buckets dentro de buckets. Você pode carregar e copiar
objetos diretamente em uma pasta. As pastas podem ser criadas, excluídas e tornadas públicas, mas não
podem ser renomeadas. Os objetos podem ser copiados de uma pasta para outra.
Important
O console do Amazon S3 trata todos os objetos que têm um caractere barra (“/”) como o último
caractere (final) no nome da chave como uma pasta, por exemplo, examplekeyname/. Não é
possível fazer upload de um objeto que tenha um nome de chave com caractere de “/” no final
usando o console do Amazon S3. No entanto, é possível fazer upload de objetos nomeados com
uma “/” no final com a API do Amazon S3 usando a AWS CLI, os AWS SDKs ou a API REST.
Um objeto que é nomeado com uma “/” no final aparece como uma pasta no console do Amazon
S3. O console do Amazon S3 não exibe o conteúdo e os metadados desse objeto. Ao usar o
console para copiar um objeto nomeado com uma barra "/" no final, é criada uma pasta no local
de destino, mas os dados e os metadados do objeto não são copiados.
Tópicos
• Criar uma pasta (p. 155)
• Tornar as pastas públicas (p. 156)
• Excluir pastas (p. 156)
Se sua política de bucket impedir o upload de objetos para este bucket sem beneficiários de
criptografia, tags, metadados ou lista de controle de acesso (ACL), você não poderá criar uma
pasta usando essa configuração. Em vez disso, carregue uma pasta vazia e especifique essas
configurações na configuração de upload.
No console do Amazon S3, você pode tornar uma pasta pública. Também é possível tornar uma pasta
pública criando uma política de bucket que limita o acesso por prefixo. Para obter mais informações,
consulte Identity and Access Management no Amazon S3 (p. 252).
Warning
Após tornar uma pasta pública no console do Amazon S3, não será possível torná-la privada
novamente. Em vez disso, é necessário definir permissões em cada objeto individual na pasta
pública para que o objeto não tenha acesso público. Para obter mais informações, consulte
Configurar ACLs (p. 448).
Excluir pastas
Esta seção explica como usar o console do Amazon S3 para excluir pastas de um bucket do S3.
Para obter informações sobre os recursos e a definição de preço do Amazon S3, consulte Amazon S3.
Warning
Essa ação exclui todos os objetos especificados. Ao excluir pastas, aguarde a conclusão da ação
de exclusão antes de adicionar objetos novos à pasta. Caso contrário, os objetos novos também
podem ser excluídos.
• Para fazer download de uma versão do objeto, marque a caixa de seleção ao lado do ID da versão,
escolha Actions (Ações) e, em seguida, escolha Download.
• Para excluir uma versão de objeto, marque a caixa de seleção ao lado do ID da versão e escolha
Delete (Excluir).
Important
Você pode cancelar a exclusão de um objeto somente se ele foi excluído como a versão mais
recente (atual). Não é possível cancelar a exclusão de uma versão anterior de um objeto que
foi excluído.
A Object overview (Visão geral do objeto) de seu objeto é aberta. Você pode rolar para baixo para
exibir as propriedades do objeto.
4. Na página Object overview (Visão geral do objeto), você pode configurar as propriedades a seguir
para o objeto.
Note
Se você alterar as propriedades Storage Class (Classe de armazenamento), Encryption
(Criptografia) ou Metadata (Metadados), um novo objeto será criado para substituir o antigo.
Se o versionamento do S3 estiver habilitado, uma nova versão do objeto será criada e o
objeto existente se tornará uma versão mais antiga. A função que altera a propriedade
também se torna o proprietário do novo objeto ou (versão do objeto).
a. Storage class (Classe de armazenamento) – cada objeto no Amazon S3 tem uma classe de
armazenamento associada a ela. A classe de armazenamento que você decide usar depende
da frequência com que acessa o objeto. A classe de armazenamento padrão de objetos do
S3 é STANDARD. Escolha qual classe de armazenamento usar ao fazer upload de um objeto.
Para obter mais informações sobre classes de armazenamento, consulte Uso de classes de
armazenamento do Amazon S3 (p. 563).
Para alterar a classe de armazenamento depois de fazer upload de um objeto, escolha Storage
class (Classe de armazenamento). Escolha a classe de armazenamento desejada e Save
(Salvar).
b. Server-side encryption settings (Configurações de criptografia no lado do servidor): você pode
usar a criptografia no lado do servidor para criptografar seus objetos do S3. Para obter mais
informações, consulte Especificando criptografia no lado do servidor com o AWS KMS (SSE-
KMS) (p. 198) ou Especificação de criptografia do Amazon S3 (p. 214).
c. Metadata (Metadados) – cada objeto no Amazon S3 tem um conjunto de pares de nome-valor
que representa seus metadados. Para obter informações sobre como adicionar metadados a um
objeto do S3, consulte Editar metadados de objeto no console do Amazon S3 (p. 69).
d. Tags: você categoriza o armazenamento adicionando tags a um objeto do S3. Para obter mais
informações, consulte Categorizando seu armazenamento usando tags (p. 683).
e. Object lock legal hold and retention (Retenção legal e retenção do Bloqueio de objetos): você
pode impedir que um objeto seja excluído. Para obter mais informações, consulte Usar o S3
Object Lock (p. 554).
Em essência, os pre-signed URLs são um token de portador que concede acesso aos clientes que os têm.
Dessa forma, recomendamos que você os proteja adequadamente.
Se quiser restringir o uso de pre-signed URLs e todo o acesso do S3 a caminhos de rede específicos,
você poderá escrever políticas do AWS Identity and Access Management (IAM) que exijam um caminho
de rede específico. Essas políticas podem ser definidas no principal do IAM que faz a chamada, no bucket
do Amazon S3 ou em ambos. Uma restrição de caminho de rede no principal exige que o usuário dessas
credenciais faça solicitações na rede especificada. Uma restrição no bucket limita o acesso a esse bucket
somente às solicitações originadas da rede especificada. Perceba que essas restrições também se
aplicam fora do cenário de pre-signed URL.
A condição global do IAM que você usa depende do tipo de endpoint. Se estiver usando o endpoint público
para o Amazon S3, use aws:SourceIp. Se estiver usando um VPC endpoint para o Amazon S3, use
aws:SourceVpc ou aws:SourceVpce.
A declaração de política do IAM a seguir requer que o principal acesse a AWS somente pelo intervalo de
rede especificado. Com essa declaração de política em vigor, exige-se que todo acesso seja originário
desse intervalo. Isso inclui o caso de alguém usando um pre-signed URL para o S3.
{
"Sid": "NetworkRestrictionForIAMPrincipal",
"Effect": "Deny",
"Action": "",
"Resource": "",
"Condition": {
"NotIpAddressIfExists": { "aws:SourceIp": "IP-address" },
"BoolIfExists": { "aws:ViaAWSService": "false" }
}
}
Para obter mais informações sobre como usar uma pre-signed URL para compartilhar ou fazer upload de
objetos, consulte os tópicos a seguir.
Tópicos
• Compartilhar um objeto com uma pre-signed URL (p. 159)
• Fazer upload de objetos usando pre-signed URLs (p. 162)
Quando cria um pre-signed URL para seu objeto, você deve fornecer as credenciais de segurança,
especificar um nome de bucket, uma chave de objeto, especificar o método HTTP (GET para download do
objeto) e data e hora de expiração. Os pre-signed URLs são válidos apenas pela duração especificada.
Qualquer um que recebe o pre-signed URL pode acessar o objeto. Por exemplo, se você tiver um vídeo
em seu bucket e o bucket e o objeto forem privados, será possível compartilhar o vídeo gerando um pre-
signed URL.
Note
• Qualquer um com credenciais de segurança válidas pode criar um pre-signed URL. No entanto,
para acessar com êxito um objeto, o pre-signed URL deve ter sido criado por alguém que tenha
permissão para executar a operação na qual o pre-signed URL está baseado.
• As credenciais que podem ser usadas para criar um pre-signed URL incluem:
• Perfil de instância do IAM: válido por até 6 horas
• AWS Security Token Service: válido por até 36 horas quando assinado com credenciais
permanentes, como as credenciais do usuário raiz da conta da AWS ou um usuário do IAM.
• Usuário do IAM: válido por até 7 dias quando o AWS Signature versão 4 estiver sendo usado
Para criar um pre-signed URL, que é válido por até 7 dias, primeiro designe credenciais de
usuário do IAM (a chave de acesso e a chave de acesso secreta) para o SDK que está sendo
usado. Depois, gere um pre-signed URL usando o AWS Signature versão 4.
• Se você criou um pre-signed URL usando um token temporário, o URL expirará quando o token
expirar, mesmo se o URL tiver sido criado com uma hora de expiração posterior.
• Como os URLs pré-assinados concedem acesso aos buckets do Amazon S3 a quem tiver o
URL, recomendamos que você os proteja adequadamente. Para obter mais detalhes sobre
como proteger pre-signed URLs, consulte Limitar recursos de pre-signed URLs (p. 158).
Para instruções sobre como instalar o AWS Explorer, consulte Desenvolvimento com o Amazon S3 usando
os AWS SDKs e exploradores (p. 1034).
.NET
Example
O exemplo a seguir gera um pre-signed URL que você pode compartilhar para recuperar um objeto.
Para obter mais informações, consulte Compartilhar um objeto com uma pre-signed URL (p. 159).
Para obter instruções sobre como criar e testar um exemplo funcional, consulte Executar os exemplos
de código do Amazon S3 .NET (p. 1044).
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
namespace Amazon.DocSamples.S3
{
class GenPresignedURLTest
{
private const string bucketName = "*** bucket name ***";
private const string objectKey = "*** object key ***";
// Specify how long the presigned URL lasts, in hours
private const double timeoutDuration = 12;
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 s3Client;
BucketName = bucketName,
Key = objectKey,
Expires = DateTime.UtcNow.AddHours(duration)
};
urlString = s3Client.GetPreSignedURL(request1);
}
catch (AmazonS3Exception e)
{
Console.WriteLine("Error encountered on server. Message:'{0}' when
writing an object", e.Message);
}
catch (Exception e)
{
Console.WriteLine("Unknown encountered on server. Message:'{0}' when
writing an object", e.Message);
}
return urlString;
}
}
}
Go
Você pode usar o SDK para Go para fazer upload de um objeto. Você pode enviar uma solicitação
PUT para fazer upload de dados em uma única operação. Para obter mais informações, consulte
Gerar um URL pré-assinado para uma operação PUT do Amazon S3 com uma carga útil específica no
Guia do desenvolvedor do AWS SDK para Go.
Java
Example
O exemplo a seguir gera um pre-signed URL que você pode compartilhar para recuperar um objeto de
um bucket do S3. Para obter mais informações, consulte Compartilhar um objeto com uma pre-signed
URL (p. 159).
Para obter instruções sobre criar e testar um exemplo funcional, consulte Testar exemplos de código
Java no Amazon S3 (p. 1042).
import com.amazonaws.AmazonServiceException;
import com.amazonaws.HttpMethod;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.GeneratePresignedUrlRequest;
import java.io.IOException;
import java.net.URL;
import java.time.Instant;
try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withRegion(clientRegion)
.withCredentials(new ProfileCredentialsProvider())
.build();
PHP
Para obter mais informações sobre o uso do AWS SDK for PHP versão 3 para gerar uma pre-signed
URL, consulte Pre-signed URL do Amazon S3 com o AWS SDK para PHP versão 3 no Guia do
desenvolvedor do AWS SDK para PHP.
Python
Gere uma URL pré-assinada para compartilhar um objeto usando o SDK para Python (Boto3). Por
exemplo, use um cliente Boto3 e a função generate_presigned_url para gerar uma URL pré-
assinada que obtém um objeto.
import boto3
url = boto3.client('s3').generate_presigned_url(
ClientMethod='get_object',
Params={'Bucket': 'BUCKET_NAME', 'Key': 'OBJECT_KEY'},
ExpiresIn=3600)
Para obter um exemplo completo que mostra como gerar URLs pré-assinadas e como usar o pacote
de Solicitações para carregar e baixar objetos, consulte o exemplo de URL pré-assinada do PHP no
GitHub. Para obter mais informações sobre como usar o SDK para Python (Boto3) para gerar uma
URL pré-assinada, consulte Python na Referência do AWS SDK para API de PHP.
Por padrão, todos os objetos e buckets são privados. Os pre-signed URLs serão úteis se você desejar que
o usuário/cliente seja capaz de fazer upload de um objeto específico no seu bucket, mas não exigir que ele
tenha credenciais ou permissões de segurança da AWS.
Quando cria um pre-signed URL, você deve fornecer as credenciais de segurança, e então especificar
um nome de bucket, uma chave de objeto, um método HTTP (PUT para upload de objetos) e data e hora
de expiração. Os pre-signed URLs são válidos apenas pela duração especificada. Ou seja, é necessário
iniciar a ação antes da data e a hora de expiração. Se a ação consistir em várias etapas, como um
multipart upload, todas as etapas devem ser iniciadas antes da expiração, caso contrário, você receberá
um erro quando o Amazon S3 tentar iniciar uma etapa com um URL expirado.
É possível usar o pre-signed URL várias vezes, até a data e a hora de expiração.
Como os URLs pré-assinados concedem acesso aos buckets do Amazon S3 a quem tiver o URL,
recomendamos que você os proteja adequadamente. Para obter mais detalhes sobre como proteger pre-
signed URLs, consulte Limitar recursos de pre-signed URLs (p. 158).
Qualquer um com credenciais de segurança válidas pode criar um pre-signed URL. No entanto, para
fazer upload de um objeto, o pre-signed URL deve ter sido criado por alguém que tenha permissão para
executar a operação na qual o pre-signed URL está baseado.
É possível gerar uma URL pré-assinada de forma programática usando o AWS SDK para Java, .NET,
Ruby, PHP, Node.js e Python.
Se você estiver usando o Microsoft Visual Studio, também poderá usar o AWS Explorer para gerar um
pre-signed URL de objeto sem gravar nenhum código. Qualquer pessoa que receber um pre-signed URL
válido poderá fazer upload de um objeto programaticamente. Para obter mais informações, consulte Usar
o Amazon S3 no AWS Explorer. Para obter instruções sobre como instalar o AWS Explorer, consulte
Desenvolvimento com o Amazon S3 usando os AWS SDKs e exploradores (p. 1034).
É possível usar o AWS SDK para gerar um URL pré-assinado que você, ou qualquer pessoa a quem você
der o URL, poderá usar para fazer upload de um objeto no Amazon S3. Quando você usar o URL para
fazer upload de um objeto, o Amazon S3 cria o objeto no bucket especificado. Se um objeto com a mesma
chave especificada no pre-signed URL já existir no bucket, o Amazon S3 substituirá o objeto existente pelo
objeto obtido por upload.
Exemplos
Os exemplos a seguir mostram como fazer upload de objetos usando URLs pré-assinados.
.NET
O exemplo de C# a seguir mostra como usar o AWS SDK para .NET para fazer upload de um objeto
para um bucket do S3 usando um pre-signed URL.
Esse exemplo gera um pre-signed URL para um objeto específico e o utiliza para fazer upload de um
arquivo. Para obter informações sobre a compatibilidade do exemplo com uma versão específica do
AWS SDK para .NET e instruções sobre como criar e testar um exemplo funcional, consulte Executar
os exemplos de código do Amazon S3 .NET (p. 1044).
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.IO;
using System.Net;
namespace Amazon.DocSamples.S3
{
class UploadObjectUsingPresignedURLTest
{
private const string bucketName = "*** provide bucket name ***";
private const string objectKey = "*** provide the name for the uploaded object
***";
private const string filePath = "*** provide the full path name of the file
to upload ***";
// Specify how long the presigned URL lasts, in hours
private const double timeoutDuration = 12;
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 s3Client;
Java
Example
Esse exemplo gera um pre-signed URL e o usa para fazer upload dos dados de amostra como um
objeto. Para obter instruções sobre criar e testar um exemplo funcional, consulte Testar exemplos de
código Java no Amazon S3 (p. 1042).
import com.amazonaws.AmazonServiceException;
import com.amazonaws.HttpMethod;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.GeneratePresignedUrlRequest;
import com.amazonaws.services.s3.model.S3Object;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();
// Create the connection and use it to upload the new object using the pre-
signed URL.
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setRequestMethod("PUT");
OutputStreamWriter out = new
OutputStreamWriter(connection.getOutputStream());
out.write("This text uploaded as an object via presigned URL.");
out.close();
// Check the HTTP response code. To complete the upload and make the object
available,
// you must interact with the connection object in some way.
connection.getResponseCode();
System.out.println("HTTP response code: " + connection.getResponseCode());
Python
Gere uma URL pré-assinada para compartilhar um objeto usando o SDK para Python (Boto3). Por
exemplo, use um cliente Boto3 e a função generate_presigned_url para gerar uma URL pré-
assinada que coloca um objeto.
import boto3
url = boto3.client('s3').generate_presigned_url(
ClientMethod='get_object',
Params={'Bucket': 'BUCKET_NAME', 'Key': 'OBJECT_KEY'},
ExpiresIn=3600)
Para obter um exemplo completo que mostra como gerar URLs pré-assinadas e como usar o pacote
de Solicitações para carregar e baixar objetos, consulte o exemplo de URL pré-assinada do PHP no
GitHub. Para obter mais informações sobre como usar o SDK para Python (Boto3) para gerar uma
URL pré-assinada, consulte Python na Referência do AWS SDK para API de PHP.
Ruby
As tarefas a seguir orientam como usar um script do Ruby para fazer upload de um objeto usando um
pre-signed URL para SDK para Ruby – Versão 3.
Gere um pre-signed URL criando uma instância da classe URI e use-a para analisar o
método .presigned_url da instância da classe Aws::S3::Resource. Você deve
especificar :put como um argumento para .presigned_url e especificar PUT como
Net::HTTP::Session#send_request se quiser fazer upload de um objeto.
O upload cria um objeto ou substitui qualquer objeto existente pela mesma chave
especificada no pre-signed URL.
O exemplo de código do Ruby a seguir demonstra as tarefas precedentes para o SDK para Ruby –
Versão 3.
Example
require 'aws-sdk-s3'
require 'net/http'
if http_client.nil?
Net::HTTP.start(url.host) do |http|
http.send_request(
'PUT',
url.request_uri,
object_content,
'content-type' => ''
)
end
else
http_client.start(url.host) do |http|
http.send_request(
'PUT',
url.request_uri,
object_content,
'content-type' => ''
)
end
end
content = object.get.body
puts "The presigned URL for the object '#{object_key}' in the bucket " \
"'#{bucket_name}' is:\n\n"
puts url
puts "\nUsing this presigned URL to get the content that " \
"was just uploaded to this object, the object\'s content is:\n\n"
puts content.read
return true
O S3 Object Lambda usa funções do AWS Lambda para processar automaticamente a saída de uma
solicitação GET padrão do S3. O AWS Lambda é um serviço de computação sem servidor que executa
código definido pelo cliente sem exigir o gerenciamento de recursos de computação subjacentes. Você
pode criar e executar suas próprias funções do Lambda personalizadas, adaptando a transformação de
dados para seus casos de uso específicos. Você pode configurar uma função do Lambda e anexá-la a
um endpoint de serviço S3 Object Lambda e o S3 chamará automaticamente sua função. Em seguida,
qualquer dado recuperado usando uma solicitação S3 GET por meio do endpoint do S3 Object Lambda
retornará um resultado transformado de volta à aplicação. Todas as outras solicitações serão processadas
como normais, conforme ilustrado no diagrama a seguir.
Os tópicos nesta seção descrevem como trabalhar com pontos de acesso do Object Lambda.
Tópicos
• Criar pontos de acesso do Object Lambda (p. 170)
• Configurando políticas do IAM para pontos de acesso do Object Lambda (p. 173)
• Escrever e depurar funções do Lambda para pontos de acesso do S3 Object Lambda (p. 175)
• Usar funções do Lambda criadas pela AWS (p. 186)
• Práticas recomendadas e diretrizes para o S3 Object Lambda (p. 187)
• Considerações de segurança para pontos de acesso do S3 Object Lambda (p. 189)
As seções a seguir descrevem como criar um ponto de acesso do Object Lambda usando o Console de
Gerenciamento da AWS e a CLI da AWS.
Uso do console do S3
Tal como acontece com pontos de acesso padrão, existem regras para nomeação. Para obter mais
informações, consulte Regras para nomear pontos de acesso do Amazon S3 (p. 485).
5. Para Supporting Access Point (Ponto de acesso de suporte), insira ou navegue até o ponto de acesso
padrão que você deseja usar. O ponto de acesso deve estar na mesma região da AWS que os objetos
que você deseja transformar.
6. Para Invoke Lambda function (Invocar uma função do Lambda), você pode optar por usar uma função
pré-criada ou inserir o nome do recurso da Amazon (ARN) de uma função do AWS Lambda em sua
conta da AWS.
Para obter mais informações sobre funções pré-construídas, consulte Usar funções do Lambda
criadas pela AWS (p. 186).
7. (Opcional) Para Range and part number (Intervalo e número de peça), você deve habilitar esta opção
a fim processar solicitações GET com cabeçalhos de intervalo e número de peça. Selecionar essa
opção confirma que sua função do Lambda é capaz de reconhecer e processar essas solicitações.
Para obter mais informações sobre cabeçalhos de intervalo e números de peça, consulte Trabalhar
com cabeçalhos Range e partNumber (p. 183).
8. (Opcional) Em Payload (Carga útil), adicione um texto JSON para fornecer informações adicionais à
sua função do Lambda. Uma carga útil é um JSON opcional que você pode fornecer à sua função do
Lambda como entrada. Você pode configurar cargas úteis com parâmetros diferentes para pontos de
acesso do Object Lambda diferentes que invocam a mesma função do Lambda, estendendo assim a
flexibilidade da sua função do Lambda.
9. (Opcional) Para Request metrics (Métricas de solicitação), escolha Enable (Habilitar) ou Disable
(Desabilitar) para adicionar o monitoramento do Amazon S3 ao seu ponto de acesso do Object
Lambda. As métricas de solicitação são cobradas na taxa padrão do CloudWatch.
10. (Opcional) Em Object Lambda access point policy (Política de ponto de acesso do Object Lambda),
defina uma política de recursos. Esta política de recurso concede permissão GetObject para o ponto
de acesso do Object Lambda especificado.
11. Escolha Create Object Lambda access point (Criar ponto de acesso do Object Lambda).
O exemplo a seguir cria um ponto de acesso do Object Lambda nomeado my-object-lambda-ap para o
bucket DOC-EXAMPLE-BUCKET1 na conta 111122223333. Este exemplo supõe que um ponto de acesso
padrão nomeado example-ap já foi criado. Para obter informações sobre como criar um ponto de acesso
padrão, consulte the section called “Criar pontos de acesso” (p. 485).
Este exemplo usa a função pré-construída da AWS compress. Para exemplos de funções do AWS
Lambda, consulte the section called “Usar funções criadas pela AWS” (p. 186).
1. Crie um bucket. Neste exemplo, usaremos DOC-EXAMPLE-BUCKET1. Para obter mais informações
sobre a criação de buckets, consulte the section called “Criação de um bucket” (p. 31).
2. Crie um ponto de acesso padrão e anexe-o ao seu bucket. Neste exemplo, usaremos example-ap.
Para obter informações sobre a criação de pontos de acesso padrão, consulte the section called “Criar
pontos de acesso” (p. 485)
3. Crie uma função do Lambda em sua conta que você gostaria de usar para transformar seu objeto
S3. Consulte Usar o Lambda com a CLI da AWS no Guia do desenvolvedor do AWS Lambda. Você
também pode usar uma função do Lambda pré-criada pela AWS.
4. Crie um arquivo de configuração JSON denominado my-olap-configuration.json. Nesta
configuração, forneça o ponto de acesso de suporte e o ARN da função do Lambda criados nas
etapas anteriores.
Example
{
"SupportingAccessPoint" : "arn:aws:s3:us-east-1:111122223333:accesspoint/example-
ap",
"TransformationConfigurations": [{
"Actions" : ["GetObject"],
"ContentTransformation" : {
"AwsLambda": {
"FunctionPayload" : "{\"compressionType\":\"gzip\"}",
"FunctionArn" : "arn:aws:lambda:us-east-1:111122223333:function/
compress"
}
}
}]
}
Essa política de recursos concede permissão GetObject para a conta 444455556666 ao ponto de
acesso do Object Lambda especificado.
Example
{
"Version" : "2008-10-17",
"Statement":[{
"Sid": "Grant account 444455556666 GetObject access",
"Effect":"Allow",
"Principal" : {
"AWS": "arn:aws:iam::444455556666:root"
}
}
]
}
Uma carga útil é um JSON opcional que você pode fornecer à sua função do AWS Lambda como
entrada. Você pode configurar cargas úteis com parâmetros diferentes para pontos de acesso do
Object Lambda diferentes que invocam a mesma função do Lambda, estendendo assim a flexibilidade
da sua função do Lambda.
A configuração do ponto de acesso do Object Lambda a seguir mostra uma carga útil com dois
parâmetros.
{
"SupportingAccessPoint": "AccessPointArn",
"CloudWatchMetricsEnabled": false,
"TransformationConfigurations": [{
"Actions": ["GetObject"],
"ContentTransformation": {
"AwsLambda": {
"FunctionArn": "FunctionArn",
"FunctionPayload": "{\"res-x\": \"100\",\"res-y\": \"100\"}"
}
}
}]
}
A configuração do ponto de acesso do Object Lambda a seguir mostra uma carga útil com um
parâmetro, intervalo e número de peça habilitados.
{
"SupportingAccessPoint":"AccessPointArn",
"CloudWatchMetricsEnabled": false,
"AllowedFeatures": ["GetObject-Range", "GetObject-PartNumber"],
"TransformationConfigurations": [{
"Actions": ["GetObject"],
"ContentTransformation": {
"AwsLambda": {
"FunctionArn":"FunctionArn",
Important
Ao usar pontos de acesso do Object Lambda, a carga útil não deve conter nenhuma
informação confidencial.
No caso de uma única conta da AWS, os seguintes quatro recursos devem ter permissões concedidas
para trabalhar com pontos de acesso do Object Lambda:
• Um bucket do Amazon S3 com permissões delegadas ao seu ponto de acesso. Para obter mais
informações, consulte Delegar controle de acesso a pontos de acesso (p. 482).
arn:aws:s3:::DOC-EXAMPLE-BUCKET1
• Um ponto de acesso padrão do Amazon S3 neste bucket com o seguinte ARN:
arn:aws:s3:us-east-1:111122223333:accesspoint/my-access-point
• Um ponto de acesso do Object Lambda com o seguinte ARN:
arn:aws:s3-object-lambda:us-east-1:111122223333:accesspoint/my-object-lambda-
ap
• Uma função do AWS Lambda com o seguinte ARN:
arn:aws:lambda:us-east-1:111122223333:function/MyObjectLambdaFunction
A política do IAM a seguir concede permissão de usuário para interagir com esses recursos.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowLambdaInvocation",
"Action": [
"lambda:InvokeFunction"
],
"Effect": "Allow",
"Resource": "arn:aws:lambda:us-east-1:111122223333:function/MyObjectLambdaFunction",
"Condition": {
"ForAnyValue:StringEquals": {
"aws:CalledVia": [
"s3-object-lambda.amazonaws.com"
]
}
}
},
{
"Sid": "AllowStandardAccessPointAccess",
"Action": [
"s3: Get*",
"s3: List*"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:us-east-1:111122223333:accesspoint/my-access-point/*",
"Condition": {
"ForAnyValue:StringEquals": {
"aws:CalledVia": [
"s3-object-lambda.amazonaws.com"
]
}
}
},
{
"Sid": "AllowObjectLambdaAccess",
"Action": [
"s3-object-lambda:Get*",
"s3-object-lambda:List*"
],
"Effect": "Allow",
"Resource": "arn:aws:s3-object-lambda:us-east-1:111122223333:accesspoint/my-object-
lambda-ap"
}
]
}
Sua função do AWS Lambda precisa de permissão para chamar de volta ao ponto de acesso do Object
Lambda com o WriteGetObjectResponse. Adicione a instrução a seguir à função Execution usada
pela função do Lambda.
{
{
"Sid": "AllowObjectLambdaAccess",
"Action": ["s3-object-lambda:WriteGetObjectResponse"],
"Effect": "Allow",
"Resource": "*"
}
Tópicos
• Trabalhar com WriteGetObjectResponse (p. 175)
• Depuração do S3 Object Lambda (p. 183)
• Trabalhar com cabeçalhos Range e partNumber (p. 183)
• Formato e uso de contexto de evento (p. 184)
Exemplo 1:
Você pode usar WriteGetObjectResponse para responder com um 403 Proibido com base no conteúdo do
objeto.
Java
package com.amazon.s3.objectlambda;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.events.S3ObjectLambdaEvent;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.model.WriteGetObjectResponseRequest;
import java.io.ByteArrayInputStream;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
// If it does not, we send a 4XX response and a custom error code and message.
// If we're happy with the request, we retrieve the object from S3 and stream
it
// to the client unchanged.
var tokenIsNotPresent = !
event.getUserRequest().getHeaders().containsKey("requiredToken");
if (tokenIsNotPresent) {
s3Client.writeGetObjectResponse(new WriteGetObjectResponseRequest()
.withRequestRoute(event.outputRoute())
.withRequestToken(event.outputToken())
.withStatusCode(403)
.withContentLength(0L).withInputStream(new ByteArrayInputStream(new
byte[0]))
.withErrorCode("MissingRequiredToken")
.withErrorMessage("The required token was not present in the
request."));
return;
}
// Prepare the presigned URL for use and make the request to S3.
HttpClient httpClient = HttpClient.newBuilder().build();
var presignedResponse = httpClient.send(
HttpRequest.newBuilder(new URI(event.inputS3Url())).GET().build(),
HttpResponse.BodyHandlers.ofInputStream());
Python
import boto3
import requests
"""
Retrieve the operation context object from event. This has info to where the
WriteGetObjectResponse request
should be delivered and a presigned URL in `inputS3Url` where we can download the
requested object from.
The `userRequest` object has information related to the user which made this
`GetObject` request to S3OL.
"""
get_context = event["getObjectContext"]
user_request_headers = event["userRequest"]["headers"]
route = get_context["outputRoute"]
token = get_context["outputToken"]
s3_url = get_context["inputS3Url"]
# Check for the presence of a `CustomHeader` header and deny or allow based on that
header
is_token_present = "SuperSecretToken" in user_request_headers
if is_token_present:
# If the user presented our custom `SuperSecretToken` header we send the
requested object back to the user.
response = requests.get(s3_url)
s3.write_get_object_response(RequestRoute=route, RequestToken=token,
Body=response.content)
else:
# If the token is not present we send an error back to the user.
s3.write_get_object_response(RequestRoute=route, RequestToken=token,
StatusCode=403,
ErrorCode="NoSuperSecretTokenFound", ErrorMessage="The request was not secret
enough.")
NodeJS
const { S3 } = require('aws-sdk');
const axios = require('axios').default;
// Retrieve the operation context object from event. This has info to where the
WriteGetObjectResponse request
// should be delivered and a presigned URL in `inputS3Url` where we can download
the requested object from.
// The `userRequest` object has information related to the user which made this
`GetObject` request to S3OL.
const { userRequest, getObjectContext } = event;
const { outputRoute, outputToken, inputS3Url } = getObjectContext;
// Check for the presence of a `CustomHeader` header and deny or allow based on
that header
const isTokenPresent = Object
.keys(userRequest.headers)
.includes("SuperSecretToken");
if (!isTokenPresent) {
// If the token is not present we send an error back to the user. Notice the
`await` infront of the request as
// we want to wait for this request to finish sending before moving on.
await s3.writeGetObjectResponse({
RequestRoute: outputRoute,
RequestToken: outputToken,
StatusCode: 403,
ErrorCode: "NoSuperSecretTokenFound",
ErrorMessage: "The request was not secret enough.",
}).promise();
} else {
// If the user presented our custom `SuperSecretToken` header we send the
requested object back to the user.
// Again notice the presence of `await`.
const presignedResponse = await axios.get(inputS3Url);
await s3.writeGetObjectResponse({
RequestRoute: outputRoute,
RequestToken: outputToken,
Body: presignedResponse.data,
}).promise();
}
Exemplo 2:
Ao executar uma transformação de imagem, você pode achar que você precisa de todos os bytes do
objeto de origem antes de começar a processá-los. Consequentemente, seu WriteGetObjectResponse
retornará todo o objeto à aplicação solicitante de uma só vez.
Java
package com.amazon.s3.objectlambda;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.events.S3ObjectLambdaEvent;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.model.WriteGetObjectResponseRequest;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.awt.Image;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
// Prepare the presigned URL for use and make the request to S3.
var presignedResponse = httpClient.send(
HttpRequest.newBuilder(new URI(event.inputS3Url())).GET().build(),
HttpResponse.BodyHandlers.ofInputStream());
// The entire image is loaded into memory here so that we can resize it.
// Once the resizing is completed, we write the bytes into the body
// of the WriteGetObjectResponse.
var originalImage = ImageIO.read(presignedResponse.body());
var resizingImage = originalImage.getScaledInstance(WIDTH, HEIGHT,
Image.SCALE_DEFAULT);
var resizedImage = new BufferedImage(WIDTH, HEIGHT,
BufferedImage.TYPE_INT_RGB);
resizedImage.createGraphics().drawImage(resizingImage, 0, 0, WIDTH, HEIGHT,
null);
Python
import boto3
import requests
import io
from PIL import Image
"""
In this case we're resizing `.png` images which are stored in S3 and are accessible
via the presigned url
`inputS3Url`.
"""
image_request = requests.get(s3_url)
image = Image.open(io.BytesIO(image_request.content))
image.thumbnail((256,256), Image.ANTIALIAS)
transformed = io.BytesIO()
image.save(transformed, "png")
NodeJS
const { S3 } = require('aws-sdk');
const axios = require('axios').default;
const sharp = require('sharp');
// Retrieve the operation context object from event. This has info to where the
WriteGetObjectResponse request
// should be delivered and a presigned URL in `inputS3Url` where we can download
the requested object from
const { getObjectContext } = event;
const { outputRoute, outputToken, inputS3Url } = getObjectContext;
// In this case we're resizing `.png` images which are stored in S3 and are
accessible via the presigned url
// `inputS3Url`.
const { data } = await axios.get(inputS3Url, { responseType: 'arraybuffer' });
Exemplo 3:
Java
package com.amazon.s3.objectlambda;
import com.amazonaws.services.lambda.runtime.events.S3ObjectLambdaEvent;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.model.WriteGetObjectResponseRequest;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
// We're consuming the incoming response body from the presigned request,
// applying our transformation on that data and emitting the transformed bytes
// into the body of the WriteGetObjectResponse request as soon as they're
ready.
// This example compresses the data from S3, but any processing pertinent
// to your application can be performed here.
var bodyStream = new GZIPCompressingInputStream(presignedResponse.body());
Python
import boto3
import requests
import zlib
from botocore.config import Config
"""
A helper class to work with content iterators. Takes an interator and compresses the
bytes that come from it. It
implements `read` and `__iter__` so the SDK can stream the response
"""
class Compress:
def __init__(self, content_iter):
self.content = content_iter
self.compressed_obj = zlib.compressobj()
def __iter__(self):
while True:
data = next(self.content)
chunk = self.compressed_obj.compress(data)
if not chunk:
break
yield chunk
yield self.compressed_obj.flush()
"""
Retrieve the operation context object from event. This has info to where the
WriteGetObjectResponse request
should be delivered and a presigned URL in `inputS3Url` where we can download the
requested object from.
The `userRequest` object has information related to the user which made this
`GetObject` request to S3OL.
"""
get_context = event["getObjectContext"]
route = get_context["outputRoute"]
token = get_context["outputToken"]
s3_url = get_context["inputS3Url"]
NodeJS
const { S3 } = require('aws-sdk');
const axios = require('axios').default;
const zlib = require('zlib');
// Retrieve the operation context object from event. This has info to where the
WriteGetObjectResponse request
// should be delivered and a presigned URL in `inputS3Url` where we can download
the requested object from
const { getObjectContext } = event;
const { outputRoute, outputToken, inputS3Url } = getObjectContext;
Note
Embora o S3 Object Lambda permita enviar uma resposta completa ao autor da chamada
WriteGetObjectResponse em até 60 segundos, a quantidade real de tempo disponível pode ser
menor, por exemplo, se o tempo limite da função do Lambda for inferior a 60 segundos. Em outros
casos, o autor da chamada pode ter tempos limite mais rigorosos.
A chamada WriteGetObjectResponse deve ser feita para que o autor da chamada original receba uma
resposta que não seja 500. Se a função do Lambda retornar, excepcionalmente ou de outra forma,
antes que a API do WriteGetObjectResponse seja chamada, o autor da chamada original receberá uma
resposta 500. Exceções lançadas durante o tempo necessário para concluir a resposta resultarão em
respostas truncadas ao autor da chamada. Se o Lambda receber uma resposta 200 da chamada da API
do WriteGetObjectResponse, o autor da chamada original enviou a solicitação completa. A resposta do
Lambda, excepcional ou não, é ignorada pelo S3 Object Lambda.
Ao chamar essa API, o S3 requer a rota e o token de solicitação do contexto do evento. Para obter mais
informações, consulte Formato e uso de contexto de evento (p. 184).
Esses parâmetros são necessários para conectar o WriteGetObjectResult com o autor da chamada
original. Embora seja sempre apropriado repetir respostas 500, observe que o token de solicitação é um
token de uso único e as tentativas subsequentes de usá-lo podem resultar em respostas 400 Bad Request.
Embora a chamada para WriteGetObjectResponse com os tokens de rota e solicitação não precise ser
feita a partir do Lambda invocado, ela precisa ser feita por uma identidade na mesma conta e deve ser
concluída antes que o Lambda termine a execução.
Para obter mais informações sobre a depuração geral da função do Lambda, consulte Monitoramento e
solução de problemas de aplicações do Lambda no Guia do desenvolvedor do AWS Lambda.
Para obter informações sobre erros padrão do Amazon S3, consulte Respostas de erro na Referência da
API do Amazon Simple Storage Service.
Você pode habilitar métricas de solicitação no CloudWatch para seus pontos de acesso do Object Lambda.
Essas métricas podem ser usadas para monitorar a performance operacional do seu ponto de acesso.
Os eventos de dados do CloudTrail podem ser ativados para obter registros em log mais granulares sobre
solicitações feitas aos seus pontos de acesso do Object Lambda. Para obter mais informações, consulte
Registrar em log eventos de dados para trilhas no Guia do usuário do AWS CloudTrail.
Ao receber uma solicitação GET, o S3 Object Lambda invoca sua função do Lambda especificada
primeiro, portanto, se sua solicitação GET contiver parâmetros de intervalo ou número de peça, você
deve garantir que sua função do Lambda esteja equipada para reconhecer e gerenciar esses parâmetros.
Como pode haver várias entidades conectadas em tal configuração (solicitando clientes e serviços como
Lambda, S3, outros), é aconselhável que todas as entidades envolvidas interpretem o intervalo solicitado
(ou partNumber) de forma uniforme. Isso garante que os intervalos que a aplicação está esperando
correspondam aos intervalos que a função do Lambda está processando. Ao criar uma função para lidar
com solicitações com cabeçalhos de intervalo, teste todas as combinações de tamanhos de resposta,
tamanhos de objetos originais e tamanhos de intervalo de solicitações que sua aplicação planeja usar.
Por padrão, os pontos de acesso do S3 Object Lambda responderão com um 501 a qualquer solicitação
GetObject que contenha um parâmetro de intervalo ou número de peça, seja nos cabeçalhos ou
parâmetros de consulta. Você pode confirmar que sua função do Lambda está preparada para lidar com
solicitações de intervalo ou parte atualizando sua configuração de ponto de acesso do Object Lambda por
meio do Console de Gerenciamento da AWS ou da CLI da AWS.
O exemplo de código a seguir demonstra como recuperar o cabeçalho Range da solicitação GET e
adicioná-lo ao presignedURL que o Lambda pode usar para recuperar o intervalo solicitado do S3.
As solicitações de intervalo para o S3 podem ser feitas usando cabeçalhos ou parâmetros de consulta.
Se a solicitação original usou o cabeçalho Range, ele pode ser encontrado no contexto de evento em
userRequest.headers.Range. Se a solicitação original usou um parâmetro de consulta, então ele
estará presente em userRequest.url como “Range”. Em ambos os casos, o URL predefinido fornecido
não conterá o intervalo especificado e o cabeçalho do intervalo deve ser adicionado a ele para recuperar o
intervalo solicitado de S3.
As solicitações de parte para o S3 são feitas usando parâmetros de consulta. Se a solicitação original
incluiu um número de peça, ele pode ser encontrado nos parâmetros de consulta em userRequest.url
como “partNumber”. O URL predefinido fornecido não conterá o partNumber especificado.
{
"xAmzRequestId": "requestId",
"getObjectContext": {
"inputS3Url": "https://my-s3-ap-111122223333.s3-accesspoint.us-
east-1.amazonaws.com/example?X-Amz-Security-Token=<snip>",
"outputRoute": "io-use1-001",
"outputToken": "OutputToken"
},
"configuration": {
"accessPointArn": "arn:aws:s3-object-lambda:us-east-1:111122223333:accesspoint/
example-object-lambda-ap",
"supportingAccessPointArn": "arn:aws:s3:us-east-1:111122223333:accesspoint/example-
ap",
"payload": "{}"
},
"userRequest": {
"url": "https://object-lambda-111122223333.s3-object-lambda.us-
east-1.amazonaws.com/example",
"headers": {
"Host": "object-lambda-111122223333.s3-object-lambda.us-east-1.amazonaws.com",
"Accept-Encoding": "identity",
"X-Amz-Content-SHA256": "e3b0c44298fc1example"
}
},
"userIdentity": {
"type": "AssumedRole",
"principalId": "principalId",
"arn": "arn:aws:sts::111122223333:assumed-role/Admin/example",
"accountId": "111122223333",
"accessKeyId": "accessKeyId",
"sessionContext": {
"attributes": {
"mfaAuthenticated": "false",
"creationDate": "Wed Mar 10 23:41:52 UTC 2021"
},
"sessionIssuer": {
"type": "Role",
"principalId": "principalId",
"arn": "arn:aws:iam::111122223333:role/Admin",
"accountId": "111122223333",
"userName": "Admin"
}
}
},
"protocolVersion": "1.00"
}
Para obter mais informações sobre como implantar várias aplicações no AWS Serverless Application
Repository, consulte Implantando aplicações no Guia do desenvolvedor do AWS Serverless Application
Repository.
Para começar, basta implantar a função do Lambda a seguir em sua conta e adicionar o ARN na
configuração do ponto de acesso do Object Lambda.
ARN:
arn:aws:serverlessrepo:us-east-1:839782855223:applications/
ComprehendPiiAccessControlS3ObjectLambda
Você pode adicionar a exibição dessa função no Console de Gerenciamento da AWS usando o seguinte
link SAR: ComprehendPiiAccessControlS3ObjectLambda.
Para visualizar essa função no GitHub, consulte S3 Object Lambda do Amazon Comprehend.
automaticamente informações de identificação pessoal (PII), como nomes, endereços, datas, números
de cartão de crédito e números de previdência social de documentos em seu bucket do Amazon S3. Se
você tiver documentos em seu bucket que incluam informações como números de cartão de crédito ou
informações de contas bancárias, você poderá configurar a função do S3 Object Lambda de remoção de
PII para detectar PII e, em seguida, retornar uma cópia desses documentos nos quais os tipos de entidade
de PII são removidos.
Para começar, basta implantar a função do Lambda a seguir em sua conta e adicionar o ARN na
configuração do ponto de acesso do Object Lambda.
ARN:
arn:aws:serverlessrepo:us-east-1:839782855223:applications/
ComprehendPiiRedactionS3ObjectLambda
Você pode adicionar a exibição dessa função no Console de Gerenciamento da AWS usando o seguinte
link SAR: ComprehendPiiRedactionS3ObjectLambda.
Para visualizar essa função no GitHub, consulte S3 Object Lambda do Amazon Comprehend.
Exemplo 3: descompressão
A função do Lambda S3ObjectLambdaDecompression está equipada para descomprimir objetos
armazenados no S3 em um dos seis formatos de arquivo compactados, incluindo bzip2, gzip, snappy, zlib,
zstandard e ZIP. Para começar, basta implantar a função do Lambda a seguir em sua conta e adicionar o
ARN na configuração do ponto de acesso do Object Lambda.
ARN:
arn:aws:serverlessrepo:eu-west-1:123065155563:applications/S3ObjectLambdaDecompression
Você pode adicionar a exibição desta função no Console de Gerenciamento da AWS usando o seguinte
link SAR: S3ObjectLambdaDecompression.
Tópicos
• Trabalhar com o S3 Object Lambda (p. 187)
• Serviços da AWS usados em conexão com o S3 Object Lambda (p. 188)
• Trabalhar com cabeçalhos GET Range e partNumber (p. 188)
• Trabalhar com CLI da AWS e SDKs (p. 188)
não transformadas. Você pode criar no máximo 1.000 pontos de acesso do Object Lambda por conta da
AWS por região. A função do AWS Lambda que você usa deve estar na mesma conta e região da AWS
que o ponto de acesso do Object Lambda.
O S3 Object Lambda permite transmitir uma resposta completa ao seu autor da chamada em até 60
segundos. Sua função também está sujeita a cotas padrão do Lambda. Para obter mais informações,
consulte Cotas do Lambda no Guia do desenvolvedor do AWS Lambda. O uso do S3 Object Lambda
invoca sua função do Lambda especificada e você é responsável por garantir que todos os dados
substituídos ou excluídos do S3 pela função ou aplicação do Lambda especificada sejam pretendidos e
corretos.
Você só pode usar o S3 Object Lambda para executar operações em objetos. Você não pode usá-los para
realizar outras operações do Amazon S3, como modificar ou excluir buckets. Para obter uma lista completa
das operações do S3 que oferecem suporte a pontos de acesso, consulte Compatibilidade de ponto de
acesso com operações do S3 e serviços da AWS (p. 493).
Além dessa lista, os pontos de acesso do S3 Object Lambda não suportam POST Object, Copiar (como
origem) ou Selecionar conteúdo do objeto.
Ao receber uma solicitação GET, o S3 Object Lambda invoca sua função do Lambda especificada
primeiro, portanto, se sua solicitação GET contiver parâmetros de intervalo ou número de peça, você
deve garantir que sua função do Lambda esteja equipada para reconhecer e gerenciar esses parâmetros.
Como pode haver várias entidades conectadas em tal configuração (solicitando clientes e serviços como
Lambda, S3, outros), é aconselhável que todas as entidades envolvidas interpretem o intervalo solicitado
(ou partNumber) de forma uniforme. Isso garante que os intervalos que a aplicação está esperando
correspondam aos intervalos que a função do Lambda está processando. Ao criar uma função para lidar
com solicitações com cabeçalhos de intervalo, teste todas as combinações de tamanhos de resposta,
tamanhos de objetos originais e tamanhos de intervalo de solicitações que sua aplicação planeja usar.
Por padrão, os pontos de acesso do S3 Object Lambda responderão com um 501 a qualquer solicitação
GetObject que contenha um parâmetro de intervalo ou número de peça, seja nos cabeçalhos ou
parâmetros de consulta. Você pode confirmar que sua função do Lambda está preparada para lidar com
solicitações de intervalo ou parte atualizando sua configuração de ponto de acesso do Object Lambda por
meio do Console de Gerenciamento da AWS ou da CLI da AWS.
Para mitigar esse risco, recomendamos que a função de execução do Lambda seja cuidadosamente
definida para o menor conjunto de privilégios possível. Além disso, o Lambda deve fazer seus acessos ao
S3 através do URL pré-assinado fornecido sempre que possível.
Comportamento de criptografia
Como o ponto de acesso do Object Lambda usa o Amazon S3 e o AWS Lambda, há diferenças no
comportamento de criptografia. Para obter mais informações sobre o comportamento de criptografia
padrão do S3, consulte Definir o comportamento padrão de criptografia do lado do servidor para buckets
do Amazon S3 (p. 43).
• Ao usar a criptografia do lado do servidor do S3 com pontos de acesso do Object Lambda, o objeto será
descriptografado antes de ser enviado para o AWS Lambda, onde será processado sem criptografia até
o autor da chamada original (no caso de um GET).
• Para evitar que a chave seja registrada em log, o S3 rejeitará solicitações GET para objetos
criptografados por meio de criptografia no lado do servidor usando chaves fornecidas pelo cliente. A
função do Lambda ainda pode recuperar esses objetos desde que tenha acesso à chave fornecida pelo
cliente.
• Ao usar a criptografia do lado do cliente do S3 com pontos de acesso do Object Lambda, verifique se o
Lambda tem acesso à chave para descriptografar e criptografar novamente o objeto.
Para obter mais informações sobre pontos de acesso padrão, consulte Gerenciamento de acesso a dados
com pontos de acesso do Amazon S3 (p. 480).
Para obter informações sobre como trabalhar com buckets, consulte Visão geral dos buckets (p. 26).
Para obter mais informações sobre como trabalhar com objetos, consulte Visão geral de objetos Amazon
S3 (p. 62).
O Amazon S3 oferece suporte ao protocolo BitTorrent para que os desenvolvedores possam economizar
ao distribuir conteúdo em alta escala. O Amazon S3 é útil para armazenamento simples e confiável de
qualquer dado. O mecanismo de distribuição padrão para dados do Amazon S3 é via download de cliente/
servidor. Na distribuição de cliente/servidor, o objeto inteiro é transferido ponto a ponto do Amazon S3 para
cada usuário autorizado que solicitar esse objeto. Embora a entrega de cliente/servidor seja adequada
para uma grande variedade de casos de uso, ela não é ideal para todos. Especificamente, os custos da
distribuição de cliente/servidor aumentam linearmente conforme aumenta o número de usuários que fazem
download de objetos. Isso pode torná-lo caro para distribuição de objetos populares.
O BitTorrent resolve esse problema recrutando os próprios clientes que estão fazendo download do objeto
como distribuidores: cada cliente faz download de algumas partes do objeto do Amazon S3 e algumas
de outros clientes, fazendo o upload das partes do mesmo objeto para outros “pares" interessados. O
benefício para os publicadores é que, para arquivos populares grandes, a quantidade de dados fornecida
pelo Amazon S3 pode ser substancialmente menor do que seria ao atender os mesmos clientes via
download de cliente/servidor. Menos dados transferidos significa custos reduzidos para o publicador do
objeto.
Note
• O Amazon S3 não é compatível com o protocolo BitTorrent nas regiões da AWS lançadas após
30 de maio de 2016.
• É possível obter somente um arquivo de torrent para objetos com menos de 5 GB de tamanho.
Tópicos
• Como você será cobrado pela entrega de BitTorrent (p. 190)
• Uso do BitTorrent para recuperar objetos armazenados no Amazon S3 (p. 191)
• Publicação de conteúdo com o Amazon S3 e o BitTorrent (p. 191)
O suporte de SOAP via HTTP está obsoleto, mas continua disponível via HTTPS. Novos recursos
do Amazon S3 não serão compatíveis com o SOAP. Recomendamos que você use a API REST
ou os AWS SDKs.
A economia de transferência de dados conseguida com o uso do BitTorrent pode variar amplamente
dependendo da popularidade do objeto. Os objetos menos populares exigem um uso mais pesado do
"seeder" para servir os clientes, e a diferença entre custos de distribuição do BitTorrent e custos de
distribuição de cliente/servidor pode ser pequena para tais objetos. Especificamente, se apenas um
cliente fizer download de um objeto específico por vez, o custo de entrega do BitTorrent será o mesmo do
download direto.
O ponto inicial para um download do BitTorrent é um arquivo .torrent. Esse arquivo pequeno descreve
para clientes BitTorrent os dados a serem baixados e onde começar a encontrar esses dados. Um
arquivo .torrent é uma pequena fração do tamanho do objeto real a ser baixado. Assim que você executa
um arquivo .torrent gerado pelo Amazon S3 na aplicação cliente BitTorrent, o download dele deve começar
imediatamente pelo Amazon S3 e por qualquer “par” nos clientes BitTorrent.
É fácil recuperar um arquivo .torrent para qualquer objeto publicamente disponível. Basta adicionar
um parâmetro de string de consulta "?torrent" ao final da solicitação REST GET do objeto. Nenhuma
autenticação é necessária. Assim que você tiver um cliente BitTorrent instalado, o download de um objeto
usando o download do BitTorrent pode ser tão fácil quanto abrir esse URL em seu navegador da web.
Não há nenhum mecanismo para buscar o .torrent para um objeto do Amazon S3 usando a API SOAP.
Note
O suporte de SOAP via HTTP está obsoleto, mas continua disponível via HTTPS. Novos recursos
do Amazon S3 não serão compatíveis com o SOAP. Recomendamos que você use a API REST
ou os AWS SDKs.
Example
Este exemplo recupera o arquivo Torrent para o objeto “Nelson” no bucket "quotes".
Sample Request
Sample Response
HTTP/1.1 200 OK
x-amz-request-id: 7CD745EBB7AB5ED9
Date: Wed, 25 Nov 2009 12:00:00 GMT
Content-Disposition: attachment; filename=Nelson.torrent;
Content-Type: application/x-bittorrent
Content-Length: 537
Server: AmazonS3
É possível direcionar os clientes para seus objetos acessíveis pelo BitTorrent fornecendo a eles o
arquivo .torrent diretamente ou publicando um link para o URL ?torrent do objeto, conforme descrito por
GetObjectTorrent na Referência da API do Amazon Simple Storage Service. É importante salientar que
o arquivo .torrent que descreve um objeto do Amazon S3 é gerado sob demanda na primeira vez que é
solicitado (por meio do recurso ?torrent REST). A geração do .torrent de um objeto demora um tempo
proporcional ao tamanho desse objeto. Para objetos grandes, esse tempo pode ser significativo. Portanto,
antes de publicar um link para o ?torrent, sugerimos que você mesmo faça a primeira solicitação para ele.
O Amazon S3 pode demorar vários minutos para responder à essa primeira solicitação, porque ele gera
o arquivo .torrent. A menos que você atualize o objeto em questão, as solicitações subsequentes para
o .torrent serão rápidas. Seguindo este procedimento antes de implantar um link para o ?torrent garantirá
uma experiência de download do BitTorrent suave para seus clientes.
Para parar a distribuição de um arquivo usando o BitTorrent, simplesmente remova o acesso anônimo a
ele. Isso pode ser realizado excluindo o arquivo do Amazon S3 ou modificando a política de controle de
acesso para proibir leituras anônimas. Depois disso, o Amazon S3 não atuará como um “propagador” na
rede do BitTorrent para seu arquivo e não atenderá o arquivo .torrent por meio da API REST ?torrent. No
entanto, após a publicação de um .torrent para seu arquivo, essa ação talvez não interrompa downloads
públicos do objeto que acontecem exclusivamente usando a rede ponto a ponto do BitTorrent.
Segurança do Amazon S3
A segurança da nuvem na AWS é a nossa maior prioridade. Como cliente da AWS, você aproveita um
datacenter e uma arquitetura de rede criados para atender aos requisitos das empresas com as maiores
exigências de segurança.
• Segurança da nuvem – a AWS é responsável por proteger a infraestrutura que executa serviços da
AWS na Nuvem AWS. A AWS também fornece serviços que você pode usar com segurança. A eficácia
de nossa segurança é regularmente testada e verificada por auditores de terceiros como parte dos
programas de conformidade da AWS. Para saber mais sobre os programas de conformidade que se
aplicam ao Amazon S3, consulte Serviços da AWS no escopo por programa de conformidade.
• Segurança na nuvem – a responsabilidade é determinada pelo serviço da AWS usado. Você também
é responsável por outros fatores, incluindo a confidencialidade de seus dados, os requisitos da sua
organização e as leis e regulamentos aplicáveis.
Esta documentação ajudará você a entender como aplicar o modelo de responsabilidade compartilhada
ao usar o Amazon S3. Os tópicos a seguir mostram como configurar o Amazon S3 para atender aos seus
objetivos de segurança e de conformidade. Você também aprenderá como usar outros serviços da AWS
que podem ajudar a monitorar e proteger seus recursos do Amazon S3.
Tópicos
• Proteção de dados no Amazon S3 (p. 193)
• Proteção de dados usando criptografia (p. 194)
• Privacidade do tráfego entre redes (p. 243)
• AWS PrivateLink para Amazon S3 (p. 243)
• Identity and Access Management no Amazon S3 (p. 252)
• Registrar em log e monitorar no Amazon S3 (p. 506)
• Validação de conformidade para o Amazon S3 (p. 507)
• Resiliência no Amazon S3 (p. 508)
• Segurança da infraestrutura no Amazon S3 (p. 509)
• Análise de configuração e vulnerabilidade no Amazon S3 (p. 510)
• Melhores práticas de segurança para o Amazon S3 (p. 510)
O Amazon S3 protege ainda mais seus dados usando o versionamento. O versionamento pode ser usado
para preservar, recuperar e restaurar todas as versões de cada objeto armazenado no bucket do Amazon
S3. Com o versionamento, você pode se recuperar, facilmente, de ações não intencionais do usuário e
de falhas de aplicativo. Por padrão, as solicitações recuperam a versão gravada mais recente. Você pode
recuperar as versões mais antigas de um objeto, especificando uma versão do objeto em uma solicitação.
Para fins de proteção de dados, recomendamos que você proteja as credenciais da conta da AWS e
configure contas de usuário individuais com o AWS Identity and Access Management (IAM), de modo que
cada usuário receba somente as permissões necessárias para cumprir suas funções de trabalho.
Se você precisar de módulos criptográficos validados pelo FIPS 140-2 ao acessar a AWS por meio de uma
interface de linha de comando ou uma API, use um endpoint do FIPS. Para obter mais informações sobre
endpoints do FIPS, consulte Federal Information Processing Standard (FIPS) 140-2.
As melhores práticas de segurança a seguir também abordam a proteção de dados no Amazon S3:
• Criptografia no lado do servidor: peça que o Amazon S3 criptografe o objeto antes de salvá-lo em discos
em seus datacenters e descriptografe-o ao fazer download dos objetos.
Para configurar a criptografia do lado do servidor, consulte Especificando criptografia no lado do servidor
com o AWS KMS (SSE-KMS) (p. 198) ou Especificação de criptografia do Amazon S3 (p. 214).
• Criptografia no lado do cliente: criptografe dados no lado do cliente e faça upload dos dados
criptografados no Amazon S3. Nesse caso, você gerencia o processo de criptografia, as chaves de
criptografia e as ferramentas relacionadas.
Para configurar a criptografia do lado do cliente, consulte Proteger dados usando a criptografia no lado
do cliente (p. 239).
Para obter mais informações sobre criptografia do lado do servidor e criptografia do lado do cliente,
consulte os tópicos listados abaixo.
Tópicos
• Proteção de dados usando criptografia no lado do servidor (p. 195)
• Proteger dados usando a criptografia no lado do cliente (p. 239)
Você tem três opções mutuamente exclusivas, dependendo de como escolhe gerenciar as chaves de
criptografia.
Quando usar criptografia no lado do servidor com as chaves gerenciadas pelo Amazon S3 (SSE-S3),
cada objeto será criptografado com uma chave exclusiva. Como proteção adicional, a própria chave é
criptografada com uma chave mestra que é alterada regularmente. A criptografia no lado do servidor do
Amazon S3 usa uma das cifras de bloco mais fortes disponíveis, o padrão de criptografia avançada de 256
bits (AES-256), para criptografar seus dados. Para obter mais informações, consulte Proteção de dados
usando criptografia no lado do servidor com chaves de criptografia gerenciadas pelo Amazon S3 (SSE-
S3) (p. 213).
Criptografia do lado do servidor com chaves mestras do cliente (CMKs) armazenadas no AWS Key
Management Service (SSE-KMS)
A criptografia no lado do servidor com chaves mestras de cliente (CMKs) armazenadas no AWS Key
Management Service (SSE-KMS) é semelhante a SSE-S3, mas com alguns benefícios adicionais e
cobranças para usar esse serviço. Há outras permissões para uso de uma CMK que fornece maior
proteção contra acesso não autorizado de seus objetos no Amazon S3. O SSE-KMS também fornece
uma trilha de auditoria que mostra quando a CMK foi usada e por quem. Além disso, é possível criar e
gerenciar CMKs gerenciadas pelo cliente ou usar CMKs gerenciadas pela AWS que são exclusivas para
você, para o seu serviço e para a sua região. Para obter mais informações, consulte Proteção de dados
usando criptografia do lado do servidor com CMKs armazenadas no AWS Key Management Service (SSE-
KMS) (p. 195).
Com a criptografia do lado do servidor com chaves fornecidas pelo cliente (SSE-C), você gerencia
as chaves de criptografia e o Amazon S3 gerencia a criptografia, conforme grava em discos; e a
descriptografia, ao acessar os objetos. Para obter mais informações, consulte Proteger dados usando a
criptografia de servidor com chaves de criptografia fornecidas pelo cliente (SSE-C) (p. 225).
seguros e altamente disponíveis para fornecer um sistema de gerenciamento de chave com escalabilidade
para a nuvem. O Amazon S3 usa chaves mestras do cliente (CMKs) do AWS KMS para criptografar seus
objetos do Amazon S3. O AWS KMS criptografa somente os dados de objeto. Nenhum metadado de
objeto é criptografado.
Se você usar CMKs, usará o AWS KMS por meio do Console de Gerenciamento da AWS ou APIs do AWS
KMS para criar centralmente CMKs, definir as políticas que controlam como as CMKs podem ser usadas
e auditar o uso de CMKs para provar que estão sendo usadas corretamente. Você pode usar essas CMKs
para proteger seus dados em buckets do Amazon S3. Ao usar a criptografia SSE-KMS com um bucket do
S3, a CMK do AWS KMS deve estar na mesma região que o bucket.
Há custos adicionais pelo uso de CMKs do AWS KMS. Para obter mais informações, consulte Conceitos
do AWS KMS — Chaves mestras do cliente (CMKs) no Guia do desenvolvedor do AWS Key Management
Service e definição de preço do AWS KMS.
Important
Para fazer upload de um objeto criptografado com uma CMK do AWS KMS para o Amazon S3,
você precisa das permissões kms:Decrypt e kms:GenerateDataKey na chave. Para fazer
download de um objeto criptografado com uma CMK do AWS KMS, você precisa de permissões
kms:Decrypt. Para obter informações sobre permissões do AWS KMS e multipart upload,
consulte API de multipart upload e permissões (p. 83).
Se você não especificar uma CMK gerenciada pelo cliente, o Amazon S3 criará automaticamente uma
CMK gerenciada pela AWS em sua conta da AWS na primeira vez que adicionar um objeto criptografado
com SSE-KMS a um bucket. Por padrão, o Amazon S3 usa essa CMK para SSE-KMS.
Se você quiser usar uma CMK gerenciada pelo cliente para SSE-KMS, poderá criar a CMK antes de
configurar o SSE-KMS. Depois, ao configurar o SSE-KMS para seu bucket, especifique a CMK gerenciada
pelo cliente existente.
Criar sua própria CMK gerenciada pelo cliente oferece mais flexibilidade e controle sobre a CMK. Por
exemplo, você pode criar, alternar e desabilitar CMKs gerenciadas pelo cliente. Você também pode definir
controles de acesso e auditar as CMKs gerenciadas pelo cliente que você usa para proteger seus dados.
Para obter mais informações sobre CMKs gerenciadas pelo cliente e gerenciadas pela AWS, consulte
Conceitos do AWS KMS no Guia do desenvolvedor do AWS Key Management Service.
Important
Quando você usa uma CMK do AWS KMS para criptografia no lado do servidor no Amazon
S3, você deve escolher uma CMK simétrica. O Amazon S3 é compatível apenas com CMKs
simétricas e não com CMKs assimétricas. Para obter mais informações, consulte Usar chaves
simétricas e assimétricas no Guia do desenvolvedor do AWS Key Management Service.
Quando você configura seu bucket para usar Chaves de bucket do S3 para SSE-KMS em novos objetos, o
AWS KMS gera uma chave no nível de bucket usada para criar chaves de dados exclusivas para objetos
no bucket. Essa chave de bucket é usada por um período limitado no Amazon S3, reduzindo ainda mais a
necessidade do Amazon S3 fazer solicitações ao AWS KMS para concluir operações de criptografia. Para
obter mais informações sobre como usar Chaves de bucket do S3, consulte Redução do custo do SSE-
KMS com chaves de bucket do Amazon S3 (p. 204).
Todas as solicitações GET e PUT para um objeto protegido pelo AWS KMS falharão se não forem
feitas por SSL ou TLS ou se não forem feitas usando o SigV4.
Destaques de SSE-KMS
Os destaques de SSE-KMS são os seguintes:
• É possível escolher a CMK gerenciada pelo cliente que você cria e gerencia ou pode escolher uma CMK
gerenciada pela AWS que o Amazon S3 cria em sua conta da AWS e gerencia por você. Como uma
CMK gerenciada pelo cliente, sua CMK gerenciada pela AWS é exclusiva à sua conta e região da AWS.
Somente o Amazon S3 tem permissão para usar essa CMK em seu nome. O Amazon S3 só oferece
suporte a CMKs simétricas.
• É possível criar, alternar e desabilitar CMKs gerenciadas pelo cliente auditáveis no console do AWS
KMS.
• O ETag na resposta não é o MD5 dos dados de objeto.
• As chaves de dados usadas para criptografar os dados também são criptografadas e armazenadas com
os dados protegidos.
• Os controles de segurança do AWS KMS podem ajudá-lo a satisfazer os requisitos de conformidade
relacionados à criptografia.
{
"Version":"2012-10-17",
"Id":"PutObjectPolicy",
"Statement":[{
"Sid":"DenyUnEncryptedObjectUploads",
"Effect":"Deny",
"Principal":"*",
"Action":"s3:PutObject",
"Resource":"arn:aws:s3:::awsexamplebucket1/*",
"Condition":{
"StringNotEquals":{
"s3:x-amz-server-side-encryption":"aws:kms"
}
}
}
]
}
Para exigir que uma CMK do AWS KMS específica seja usada para criptografar os objetos em um bucket,
use a chave de condição s3:x-amz-server-side-encryption-aws-kms-key-id. Para especificar
a CMK do AWS KMS, é necessário usar um nome de recurso da Amazon (ARN) da chave no formato
"arn:aws:kms:region:acct-id:key/key-id".
Note
Ao fazer upload de um objeto, você pode especificar a CMK do AWS KMS usando o cabeçalho x-
amz-server-side-encryption-aws-kms-key-id. Se o cabeçalho não estiver presente na
solicitação, o Amazon S3 assumirá a CMK gerenciada pela AWS. No entanto, o ID de chave do
AWS KMS que o Amazon S3 usa para a criptografia de objeto deve corresponder ao ID de chave
do AWS KMS na política. Caso contrário, o Amazon S3 negará a solicitação.
Para obter uma lista completa de chaves de condição específicas do Amazon S3 e mais informações sobre
como especificar chaves de condição, consulte Exemplos de chave de condição do Amazon S3 (p. 278).
Contexto de criptografia
O Amazon S3 oferece suporte a um contexto de criptografia com o cabeçalho x-amz-server-side-
encryption-context. Um contexto de criptografia é um conjunto opcional de pares chave-valor que
pode conter informações contextuais adicionais sobre os dados.
Para obter informações sobre o contexto de criptografia no Amazon S3, consulte Contexto de
criptografia (p. 198). Para obter mais informações sobre o contexto de criptografia, consulte Conceitos
do AWS Key Management Service Concepts - contexto de criptografia no Guia do desenvolvedor do AWS
Key Management Service.
O contexto de criptografia pode ser qualquer valor desejado, desde que o cabeçalho tenha o formato
JSON com codificação Base64. No entanto, como o contexto de criptografia não é criptografado e só é
registrado em log se o registro em log do AWS CloudTrail estiver ativado, ele não deve incluir informações
confidenciais. Recomendamos ainda que o contexto descreva os dados que estão sendo criptografados ou
descriptografados para que você possa compreender os eventos do CloudTrail produzidos pelo AWS KMS.
No Amazon S3, o objeto ou bucket do Amazon Resource Name (ARN) é comumente usado como um
contexto de criptografia. Se você usar o SSE-KMS sem habilitar uma chave de bucket do S3, você usará
o ARN de objeto como seu contexto de criptografia, por exemplo, arn:aws:s3:::object_ARN. No
entanto, se você usar o SSE-KMS e habilitar uma chave de bucket do S3, use o ARN do bucket para o
contexto de criptografia, por exemplo, arn:aws:s3:::bucket_ARN. Para obter mais informações sobre
chaves de buckets do S3, consulte Redução do custo do SSE-KMS com chaves de bucket do Amazon
S3 (p. 204).
Se a chave ainda não aws:s3:arn estiver no contexto de criptografia, o Amazon S3 poderá anexar
uma chave predefinida do aws:s3:arn ao contexto de criptografia fornecido por você. O Amazon S3
acrescenta essa chave predefinida quando processa suas solicitações. Se você usar o SSE-KMS sem uma
chave de bucket do S3, o valor será igual ao ARN do objeto. Se você usar o SSE-KMS com uma chave de
bucket do S3 ativada, o valor será igual ao ARN do bucket.
Você pode usar essa chave predefinida para rastrear solicitações relevantes no CloudTrail. Assim, você
sempre pode ver qual ARN do Amazon S3 foi usado com qual chave de criptografia. Você pode usar
logs do CloudTrail para garantir que o contexto de criptografia não seja idêntico entre diferentes objetos
e buckets do Amazon S3, o que fornece segurança adicional. Seu contexto de criptografia completo será
validado para ter o valor igual ao objeto ou ARN do bucket.
Tópicos
• Especificando criptografia no lado do servidor com o AWS KMS (SSE-KMS) (p. 198)
• Redução do custo do SSE-KMS com chaves de bucket do Amazon S3 (p. 204)
verdade quando você está fazendo upload de um novo objeto ou copiando um objeto existente. Essa
criptografia é conhecida como SSE-KMS.
Você pode especificar o SSE-KMS usando o console do S3, as APIs REST, os SDKs da AWS e a AWS
CLI. Para obter mais informações, consulte os tópicos abaixo.
Uso do console do S3
Este tópico descreve como definir ou alterar o tipo de criptografia de um objeto usando o console do
Amazon S3.
Note
Se você alterar a criptografia de um objeto, um novo objeto será criado para substituir o antigo.
Se o versionamento do S3 estiver habilitado, uma nova versão do objeto será criada e o objeto
existente se tornará uma versão mais antiga. A função que altera a propriedade também se torna
o proprietário do novo objeto ou (versão do objeto).
Se você usar a opção do AWS KMS na sua configuração de criptografia padrão, estará
sujeito aos limites de RPS (solicitações por segundo) do AWS KMS. Para obter mais
informações sobre os limites do AWS KMS e sobre como solicitar um aumento de limite,
consulte Limites do AWS KMS.
7. Em AWS KMS key (Chave do AWS KMS) escolha uma das seguintes opções:
Important
Você só pode usar CMKs do KMS habilitadas na mesma região da AWS que o bucket.
Quando você seleciona Choose from your KMS master keys (Escolher entre as chaves
mestras do KMS), o console do S3 lista somente 100 CMKs do KMS por região. Se você tiver
mais de 100 CMKs na mesma região, será possível ver somente as primeiras 100 CMKs
Versão da API 2006-03-01
199
Amazon Simple Storage Service Guia do usuário
Criptografia do lado do servidor
no console do S3. Para usar uma CMK do KMS que não esteja listada no console, escolha
Custom KMS ARN (Personalizar o ARN do KMS) e insira o ARN da CMK do KMS.
Quando você usa uma CMK do AWS KMS para criptografia no lado do servidor no Amazon
S3, você deve escolher uma CMK habilitada na mesma região do bucket. O Amazon S3 é
compatível apenas com CMKs simétricas e não com CMKs assimétricas. Para obter mais
informações, consulte Usar chaves simétricas e assimétricas no Guia do desenvolvedor do
AWS Key Management Service.
Para obter mais informações sobre como criar uma CMK do AWS KMS, consulte Criar chaves no Guia
do desenvolvedor do AWS Key Management Service. Para obter mais informações sobre como usar
AWS KMS com o Amazon S3, consulte Proteção de dados usando criptografia do lado do servidor
com CMKs armazenadas no AWS Key Management Service (SSE-KMS) (p. 195).
8. Selecione Save changes.
Note
Essa ação aplica criptografia a todos os objetos especificados. Ao criptografar pastas, aguarde a
conclusão da operação de salvamento antes de adicionar novos objetos à pasta.
Quando você cria um objeto, ou seja, quando você carrega um novo objeto ou copia um objeto existente,
você pode especificar a utilização de criptografia pelo servidor com chaves mestres do cliente (CMKs)
do AWS Key Management Service (AWS KMS) para criptografar seus dados. Para fazer isso, adicione
o cabeçalho x-amz-server-side-encryption à solicitação. Defina o valor do cabeçalho como o
algoritmo de criptografia aws:kms. O Amazon S3 confirma que o objeto foi armazenado usando SSE-KMS
retornando o cabeçalho de resposta x-amz-server-side-encryption.
• x-amz-server-side-encryption-aws-kms-key-id
• x-amz-server-side-encryption-context
• x-amz-server-side-encryption-bucket-key-enabled
Tópicos
• APIs REST do Amazon S3 compatíveis com SSE-KMS (p. 200)
• Contexto de criptografia (x-amz-server-side-encryption-context) (p. 201)
• ID da chave do AWS KMS (x-amz-server-side-encryption-aws-kms-key-id) (p. 201)
• Chaves de bucket do S3 (x-amz-server-side-encryption-aws-bucket-key-enabled) (p. 202)
• Objeto PUT: ao carregar dados usando a API PUT, você pode especificar esses cabeçalhos de
solicitação.
• Objeto PUT - Copiar: quando você copia um objeto, tem um objeto de origem e um objeto de destino.
Ao transmitir cabeçalhos de SSE-KMS com a operação de COPY (Copiar), eles são aplicados somente
ao objeto de destino. Ao copiar um objeto existente, independentemente de o objeto de origem ser
criptografado ou não, o objeto de destino não é criptografado, a menos que você solicite explicitamente a
criptografia de servidor.
• Objeto POST: ao usar uma operação POST para fazer upload de um objeto, em vez dos cabeçalhos de
solicitação, você fornece as mesmas informações nos campos de formulário.
• Iniciar multipart upload: ao fazer upload de objetos grandes usando a API de multipart upload, você pode
especificar esses cabeçalhos. Esses cabeçalhos são especificados na solicitação de início.
• Objeto PUT
• Objeto PUT - Copiar
• Objeto POST
• Iniciar multipart upload
• Upload de parte
• Upload de parte - Copiar
• Concluir multipart upload
• Objeto Get
• Objeto Head
Important
• Todas as solicitações GET e PUT para um objeto protegido por AWS KMS falharão se elas não
forem feitas usando SSL (Secure Sockets Language) ou o Signature versão 4.
• Se o objeto usar SSE-KMS, os cabeçalhos de solicitação de criptografia não deverão ser
enviados para solicitações GET e solicitações HEAD,ou um erro HTTP 400 BadRequest será
exibido.
No Amazon S3, o objeto ou bucket do Amazon Resource Name (ARN) é comumente usado como um
contexto de criptografia. Se você usar o SSE-KMS sem habilitar uma chave de bucket do S3, você usará
o ARN de objeto como seu contexto de criptografia, por exemplo, arn:aws:s3:::object_ARN. No
entanto, se você usar o SSE-KMS e habilitar uma chave de bucket do S3, use o ARN do bucket para o
contexto de criptografia, por exemplo, arn:aws:s3:::bucket_ARN.
Para obter informações sobre o contexto de criptografia no Amazon S3, consulte Contexto de
criptografia (p. 198). Para obter mais informações sobre o contexto de criptografia, consulte Conceitos
do AWS Key Management Service Concepts - contexto de criptografia no Guia do desenvolvedor do AWS
Key Management Service.
Important
Quando você usa uma CMK do AWS KMS para criptografia no lado do servidor no Amazon
S3, você deve escolher uma CMK simétrica. O Amazon S3 é compatível apenas com CMKs
simétricas e não com CMKs assimétricas. Para obter mais informações, consulte Usar chaves
simétricas e assimétricas no Guia do desenvolvedor do AWS Key Management Service.
Ao usar AWS SDKs, você pode solicitar que o Amazon S3 use as chaves mestras do cliente (CMKs) do
AWS Key Management Service (AWS KMS). Esta seção fornece exemplos de uso dos AWS SDKs para
Java e .NET. Para obter informações sobre outros SDKs, consulte Código de exemplo e bibliotecas.
Important
Quando você usa uma CMK do AWS KMS para criptografia no lado do servidor no Amazon
S3, você deve escolher uma CMK simétrica. O Amazon S3 é compatível apenas com CMKs
simétricas e não com CMKs assimétricas. Para obter mais informações, consulte Usar chaves
simétricas e assimétricas no Guia do desenvolvedor do AWS Key Management Service.
Operação de cópia
Operação PUT
Java
Ao fazer upload de um objeto usando o AWS SDK para Java, você pode pedir ao Amazon S3 para
usar uma CMK do AWS KMS adicionando a propriedade SSEAwsKeyManagementParams, conforme
exibido na seguinte solicitação:
Nesse caso, o Amazon S3 usa a CMK gerenciada pela AWS (consulte Usar a criptografia no lado do
servidor com CMKs armazenadas no AWS KMS (p. 195)). Opcionalmente, é possível criar uma
CMK simétrica gerenciada pelo cliente e especificar isso na solicitação.
Para obter mais informações sobre como criar CMKs gerenciadas pelo cliente, consulte Programar a
API do AWS KMS no Guia do desenvolvedor do AWS Key Management Service.
Para ver exemplos de código funcionais de upload de um objeto, consulte os seguintes tópicos. Você
precisará atualizar esses exemplos de código e fornecer informações de criptografia conforme exibido
no fragmento de código anterior.
• Para fazer upload de um objeto em uma única operação, consulte Fazer upload de objetos (p. 71).
• Para um multipart upload, consulte os seguintes tópicos:
• Para saber como usar a API de multipart upload de alto nível, consulte Fazer upload de um objeto
usando multipart upload (p. 86).
• Se você estiver usando a API de multipart upload de baixo nível, consulte Usar os SDKs da AWS
(API de baixo nível) (p. 93).
.NET
Ao fazer upload de um objeto usando o AWS SDK para .NET, você pode pedir ao Amazon S3
para usar uma CMK do AWS KMS adicionando a propriedade ServerSideEncryptionMethod,
conforme exibido na seguinte solicitação:
Nesse caso, o Amazon S3 usa a CMK gerenciada pela AWS. Para obter mais informações, consulte
Proteção de dados usando criptografia do lado do servidor com CMKs armazenadas no AWS Key
Management Service (SSE-KMS) (p. 195). Opcionalmente, é possível criar sua própria CMK
simétrica gerenciada pelo cliente e especificar isso na solicitação.
Para obter mais informações sobre como criar CMKs gerenciadas pelo cliente, consulte Programar a
API do AWS KMS no Guia do desenvolvedor do AWS Key Management Service.
Para ver exemplos de código funcionais de upload de um objeto, consulte os seguintes tópicos. Você
precisará atualizar esses exemplos de código e fornecer informações de criptografia, conforme exibido
no fragmento de código anterior.
• Para fazer upload de um objeto em uma única operação, consulte Fazer upload de objetos (p. 71).
• Para multipart upload, consulte os seguintes tópicos:
• Para saber como usar a API de multipart upload de alto nível, consulte Fazer upload de um objeto
usando multipart upload (p. 86).
• Para saber como usar a API de multipart upload de baixo nível, consulte Fazer upload de um
objeto usando multipart upload (p. 86).
Pre-signed URLs
Java
Ao criar um pre-signed URL para um objeto criptografado usando uma CMK do AWS KMS, você
deverá especificar explicitamente o Signature versão 4.
Para ver um exemplo de código, consulte Compartilhar um objeto com uma pre-signed URL (p. 159).
.NET
Ao criar um pre-signed URL para um objeto criptografado usando uma CMK do AWS KMS, você
deverá especificar explicitamente o Signature versão 4.
AWSConfigs.S3Config.UseSignatureVersion4 = true;
Para ver um exemplo de código, consulte Compartilhar um objeto com uma pre-signed URL (p. 159).
Cargas de trabalho que acessam milhões ou bilhões de objetos criptografados com o SSE-KMS podem
gerar grandes volumes de solicitações para o KMS. Quando você usa o SSE-KMS para proteger seus
dados sem uma chave de bucket do S3, o Amazon S3 usa uma chave de dados individual do AWS KMS
para cada objeto. Ele faz uma chamada para o AWS KMS sempre que uma solicitação é feita contra um
objeto criptografado no KMS. Para obter informações sobre como o SSE-KMS funciona, consulte Proteção
de dados usando criptografia do lado do servidor com CMKs armazenadas no AWS Key Management
Service (SSE-KMS) (p. 195).
Quando você configura seu bucket para usar uma chave de bucket do S3 para SSE-KMS, o KMS da
AWS gera uma chave em nível de bucket que é usada para criar chaves de dados exclusivas para novos
objetos que você adiciona ao bucket. Essa chave de bucket do S3 é usada por um período limitado
no Amazon S3, reduzindo a necessidade do Amazon S3 fazer solicitações ao AWS KMS para concluir
operações de criptografia. Isso reduz o tráfego do S3 para o AWS KMS, permitindo que você acesse
objetos criptografados no AWS KMS no S3 por uma fração do custo anterior.
Quando você configura uma chave de bucket do S3, os objetos que já estão no bucket não usam a chave
do bucket do S3. Para configurar uma chave de bucket do S3 para objetos existentes, você pode usar uma
operação COPY. Para obter mais informações, consulte Configuração de uma chave de bucket do S3 no
nível do objeto usando a API REST, AWS SDKs ou AWS CLI (p. 210).
O Amazon S3 compartilhará apenas uma chave de bucket do S3 para objetos criptografados pela mesma
chave mestre do cliente (CMK) do AWS KMS.
Você pode configurar seu bucket para usar uma chave de bucket do S3 para SSE-KMS em novos objetos
por meio do console do Amazon S3, AWS SDKs, AWS CLI ou REST API. Você também pode substituir
a configuração da chave de bucket do S3 para objetos específicos em um bucket por uma chave KMS
individual por objeto usando a API REST, o AWS SDK ou a AWS CLI. Você também pode visualizar as
configurações da Chave do bucket do S3.
Antes de configurar seu bucket para usar uma chave de bucket do S3, revise Alterações na observação
antes de habilitar uma chave de bucket do S3 (p. 206).
Ao criar um novo bucket, você pode configurar seu bucket para usar uma Chave de bucket do S3 para
SSE-KMS em novos objetos. Você também pode configurar um bucket existente para usar uma Chave de
bucket do S3 para SSE-KMS em novos objetos atualizando suas propriedades do bucket.
Para obter mais informações, consulte Configurando seu bucket para usar uma chave de bucket do S3
com SSE-KMS para novos objetos (p. 207).
Suporte de API REST, AWS CLI e AWS SDK para chaves de bucket do S3
Você pode usar a API REST, a AWS CLI ou o AWS SDK para configurar seu bucket para usar uma chave
de bucket do S3 para SSE-KMS em novos objetos. Você também pode habilitar uma chave de bucket do
S3 no nível do objeto.
• Configuração de uma chave de bucket do S3 no nível do objeto usando a API REST, AWS SDKs ou
AWS CLI (p. 210)
• Configurando seu bucket para usar uma chave de bucket do S3 com SSE-KMS para novos
objetos (p. 207)
• PutBucketEncryption
• ServerSideEncryptionRule aceita o parâmetro BucketKeyEnabled para habilitar e desabilitar
uma chave de bucket do S3.
• GetBucketEncryption
Para copiar ou fazer upload de objetos com chaves de bucket do S3, a política de chaves do AWS
KMS para a CMK deve incluir a permissão kms:Decrypt para o principal de chamada.
Quando você habilita uma chave de bucket do S3, a política de chaves do AWS KMS para a CMK deve
incluir a permissão kms:Decrypt para o principal de chamada. Se o principal de chamada estiver em uma
conta diferente da CMK do AWS KMS, você também deverá incluir a permissão kms:Decrypt na política
do IAM. A chamada para kms:Decrypt verifica a integridade da chave do bucket do S3 antes de usá-la.
Você só precisa incluir as permissões kms:Decrypt na política de chaves se usar uma CMK do AWS
KMS gerenciada pelo cliente. Se você habilitar uma chave de bucket do S3 para criptografia no lado do
servidor usando uma CMK gerenciada pela AWS (aws/s3), sua política de chaves do AWS KMS já incluirá
permissões kms:Decrypt.
Para obter mais informações sobre contexto de criptografia e chaves de bucket do S3, consulte Contexto
de criptografia (x-amz-server-side-encryption-context) (p. 201).
Para usar a replicação com uma chave de bucket do S3, a política de chaves do AWS KMS para
a CMK usada para criptografar a réplica do objeto deve incluir permissões kms:Decrypt para o
principal de chamada. A chamada para kms:Decrypt verifica a integridade da chave do bucket
do S3 antes de usá-la. Para obter mais informações, consulte Uso de uma chave de bucket do
S3 com replicação (p. 206). Para obter mais informações sobre SSE-KMS e chave de bucket do
S3, consulte Chaves de bucket do Amazon S3 e replicação (p. 674).
Os exemplos a seguir ilustram como uma chave de bucket do S3 funciona com a replicação. Para obter
mais informações, consulte Replicação de objetos criados com criptografia no lado do servidor (SSE)
usando CMKs do AWS KMS (p. 672).
Example Exemplo 1 — O objeto de origem usa chaves de bucket do S3, o bucket de destino usa
criptografia padrão
Se o objeto de origem usa uma Chave de bucket do S3, mas seu bucket de destino usa criptografia padrão
com o SSE-KMS, o objeto de réplica manterá suas configurações de criptografia S3 Bucket Key no bucket
de destino. O bucket de destino ainda usa criptografia padrão com SSE-KMS.
Example Exemplo 2 — O objeto de origem não é criptografado, o bucket de destino usa uma
chave de bucket do S3 com SSE-KMS
Se o objeto de origem não estiver criptografado e o bucket de destino usar uma chave de bucket S3 com
SSE-KMS, o objeto de origem será criptografado com uma chave de bucket S3 usando SSE-KMS no
bucket de destino. Isso faz com que a ETag do objeto de origem seja diferente da ETag do objeto de
réplica. Você precisa atualizar os aplicativos que usam a ETag para acomodar essa diferença.
Para obter mais informações sobre como ativar e trabalhar com chaves de bucket do S3, consulte as
seguintes seções:
• Configurando seu bucket para usar uma chave de bucket do S3 com SSE-KMS para novos
objetos (p. 207)
• Configuração de uma chave de bucket do S3 no nível do objeto usando a API REST, AWS SDKs ou
AWS CLI (p. 210)
• Exibição de configurações para uma chave de bucket do S3 (p. 211)
Configurando seu bucket para usar uma chave de bucket do S3 com SSE-KMS para novos
objetos
Ao configurar a criptografia do lado do servidor usando o SSE-KMS, você pode configurar seu bucket para
usar uma chave de bucket do S3 para SSE-KMS em novos objetos. As chaves de bucket do S3 diminuem
o tráfego de solicitações do Amazon S3 para o AWS Key Management Service (AWS KMS) e reduzem o
custo do SSE-KMS. Para obter mais informações, consulte Redução do custo do SSE-KMS com chaves
de bucket do Amazon S3 (p. 204).
Você pode configurar seu bucket para usar uma chave de bucket do S3 para SSE-KMS em novos objetos
usando o console do Amazon S3, a API REST, o AWS SDK, a AWS CLI ou o AWS CloudFormation. Se
você quiser ativar ou desativar uma chave de bucket S3 para objetos existentes, você pode usar uma
operação COPY. Para obter mais informações, consulte Configuração de uma chave de bucket do S3 no
nível do objeto usando a API REST, AWS SDKs ou AWS CLI (p. 210).
Quando uma chave de bucket do S3 estiver habilitada para o bucket de origem ou de destino, o contexto
de criptografia será o Amazon Resource Name (ARN) do bucket e não o ARN do objeto, por exemplo,
arn:aws:s3:::bucket_ARN. Você precisa atualizar suas políticas do IAM para usar o ARN de bucket
para o contexto de criptografia. Para obter mais informações, consulte Conceder permissões adicionais
para a função do IAM (p. 674).
Os exemplos a seguir ilustram como uma chave de bucket do S3 funciona com a replicação. Para obter
mais informações, consulte Replicação de objetos criados com criptografia no lado do servidor (SSE)
usando CMKs do AWS KMS (p. 672).
Pré-requisito:
Antes de configurar seu bucket para usar uma chave de bucket do S3, revise Alterações na observação
antes de habilitar uma chave de bucket do S3 (p. 206).
Uso do console do S3
No console do S3, você pode ativar ou desativar uma chave de bucket do S3 para um bucket novo
ou existente. Os objetos no console do S3 herdam sua configuração de chave de bucket do S3 da
configuração do bucket. Quando você habilita uma chave de bucket do S3 para seu bucket, novos objetos
que você envia para o bucket usam uma chave de bucket do S3 para criptografia no lado do servidor
usando o AWS KMS.
Carregando, copiando ou modificando objetos em buckets que tenham uma chave de bucket S3 ativada
Se você carregar, modificar ou copiar um objeto em um bucket que tenha uma chave de bucket S3 ativada,
as configurações da chave de bucket do S3 para esse objeto poderão ser atualizadas para alinhar com a
configuração do bucket.
Se um objeto já tiver uma chave de bucket S3 ativada, as configurações da chave de bucket do S3 para
esse objeto não serão alteradas quando você copia ou modifica o objeto. No entanto, se você modificar
ou copiar um objeto que não tenha uma chave de bucket S3 ativada e o bucket de destino tiver uma
configuração de chave de bucket S3, o objeto herdará as configurações da chave de bucket S3 do bucket
de destino. Por exemplo, se o objeto de origem não tiver uma chave de bucket S3 ativada, mas o bucket
de destino tiver a chave de bucket S3 ativada, uma chave de bucket S3 será habilitada para o objeto.
O Amazon S3 cria seu bucket com uma chave de bucket do S3 ativada. Novos objetos que você
carregar no bucket usarão uma chave de bucket do S3. Para desabilitar uma chave de bucket do S3,
siga as etapas anteriores e escolha disable (desativar).
O Amazon S3 habilita uma chave de bucket do S3 para novos objetos adicionados ao seu bucket. Os
objetos existentes não usam a chave de bucket do S3. Para desativar uma chave de bucket do S3,
siga as etapas anteriores e escolha Disable (Desativar).
Você pode usar o PutBucketenCryption para ativar ou desativar uma chave de bucket S3 para seu
bucket. Para configurar uma chave de bucket do S3 com PutBucketEncryption, especifique o
ServerSideEncryptionRule, que inclui criptografia padrão com criptografia no lado do servidor usando
chaves mestre de cliente (CMKs) do AWS KMS. Você também pode usar opcionalmente uma CMK
gerenciada pelo cliente especificando o ID da chave KMS para a CMK.
O exemplo a seguir permite a criptografia de bucket padrão com SSE-KMS e uma chave de bucket do S3
usando o AWS SDK para Java.
Java
new ServerSideEncryptionConfiguration().withRules(Collections.singleton(rule));
O exemplo a seguir permite a criptografia de bucket padrão com SSE-KMS e uma chave de bucket do S3
usando a AWS CLI.
Para obter mais informações sobre como configurar uma chave de bucket do S3 usando o AWS
CloudFormation, consulte AWS# S3# Bucket ServerSideEncryptionRule no Guia do usuário do AWS
CloudFormation.
Configuração de uma chave de bucket do S3 no nível do objeto usando a API REST, AWS SDKs
ou AWS CLI
Quando você executa uma operação PUT ou COPY usando a API REST, AWS SDKs ou AWS CLI,
você pode ativar ou desativar uma chave de bucket do S3 no nível do objeto. As chaves de bucket do
S3 reduzem o custo da criptografia do lado do servidor usando o AWS Key Management Service (AWS
KMS) (SSE-KMS) diminuindo o tráfego de solicitações do Amazon S3 para o AWS KMS. Para obter mais
informações, consulte Redução do custo do SSE-KMS com chaves de bucket do Amazon S3 (p. 204).
Quando você configura uma chave de bucket do S3 para um objeto usando uma operação PUT ou COPY,
o Amazon S3 atualiza somente as configurações desse objeto. As configurações da chave de bucket S3
para o bucket de destino não são alteradas. Se você não especificar uma chave de bucket do S3 para seu
objeto, o Amazon S3 aplicará as configurações da chave de bucket do S3 para o bucket de destino ao
objeto.
Pré-requisito:
Antes de configurar seu objeto para usar uma chave de bucket do S3, revise Alterações na observação
antes de habilitar uma chave de bucket do S3 (p. 206).
Tópicos
• Uso dos REST API (p. 211)
• Uso do AWS SDK Java (PutObject) (p. 211)
• Uso da AWS CLI (PutObject) (p. 211)
Ao usar o SSE-KMS, você pode habilitar uma chave de bucket do S3 para um objeto usando as seguintes
APIs:
Para habilitar uma chave de bucket do S3 no nível do objeto, inclua o cabeçalho da solicitação x-amz-
server-side-encryption-bucket-key-enabled. Para obter mais informações sobre o SSE-KMS e
a API REST, consulte Uso dos REST API (p. 200).
Você pode usar o exemplo a seguir para configurar uma chave de bucket do S3 no nível de objeto usando
o AWS SDK para Java.
Java
Você pode usar o seguinte exemplo da AWS CLI para configurar uma chave de bucket do S3 no nível de
objeto como parte de uma solicitação dePutObject.
aws s3api put-object --bucket <bucket name> --key <object key name> --server-side-
encryption aws:kms --bucket-key-enabled --body <filepath>
Você pode visualizar as configurações de uma chave de bucket do S3 no nível de bucket ou objeto usando
o console do Amazon S3, a API REST, a AWS CLI ou os SDKs da AWS.
Para exibir as configurações da chave de bucket do S3 para um bucket ou um objeto que herdou
as configurações da chave de bucket S3 da configuração do bucket, você precisa de permissão
para executar a ação s3:GetEncryptionConfiguration. Para obter mais informações,
consulteGetBucketEncryption na Referência da API do Amazon Simple Storage Service.
Uso do console do S3
No console do S3, você pode visualizar as configurações da chave de bucket do S3 para seu bucket ou
objeto. As configurações da chave de bucket do S3 são herdadas da configuração do bucket, a menos que
os objetos de origem já tenham uma chave de bucket S3 configurada.
Objetos e pastas no mesmo bucket podem ter configurações diferentes da chave de bucket do S3. Por
exemplo, se você fizer upload de um objeto usando a API REST e habilitar uma chave de bucket S3 para
o objeto, o objeto manterá sua configuração da chave de bucket de S3 no bucket de destino, mesmo que
a chave de bucket S3 esteja desativada no bucket de destino. Como outro exemplo, se você habilitar uma
chave de bucket S3 para um bucket existente, os objetos que já estão no bucket não usarão uma chave de
bucket do S3. No entanto, novos objetos têm uma chave de bucket S3 ativada.
Se você não conseguir ver a configuração da chave de bucket do S3, talvez não tenha permissão
para executar a açãos3:GetEncryptionConfiguration. Para obter mais informações,
consulteGetBucketEncryption na Referência da API do Amazon Simple Storage Service.
Em Bucket Key, (Chave de bucket) você vê a configuração da chave de bucket do S3 para seu objeto,
mas não pode editá-la.
Para retornar informações de criptografia de um bucket, incluindo configurações para uma chave de
bucket do S3, use a operação GetBucketEncryption. As configurações da chave de bucket do S3
Para retornar o status da chave de bucket S3 para um objeto, use a operação HeadObject. O
HeadObject retorna o cabeçalho de resposta de x-amz-server-side-encryption-bucket-key-
enabled para mostrar se uma chave de bucket de S3 está ativada ou desativada para o objeto. Para
obter mais informações, consulte HeadObject (Objeto do cabeçalho) na Referência da API do Amazon S3.
• PutObject
• PostObject
• CopyObject
• CreateMultipartUpload
• UploadPartCopy
• UploadPart
• CompleteMultipartUpload
• GetObject
Não há novas cobranças pelo uso da criptografia no lado do servidor com chaves gerenciadas pelo
Amazon S3 (SSE-S3). No entanto, as solicitações para configurar e usar o SSE-S3 incorrem em cobranças
padrão de solicitação do Amazon S3. Para obter mais informações sobre definição de preços, consulte
Definição de preços do Amazon S3.
Se você precisar de criptografia no lado do servidor para todos os objetos armazenados em um bucket,
use uma política de bucket. Por exemplo, a política de bucket a seguir negará permissões para fazer
upload de um objeto, a menos que a solicitação não inclua o cabeçalho x-amz-server-side-
encryption a fim de solicitar criptografia no lado do servidor:
{
"Version": "2012-10-17",
"Id": "PutObjectPolicy",
"Statement": [
{
"Sid": "DenyIncorrectEncryptionHeader",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::awsexamplebucket1/*",
"Condition": {
"StringNotEquals": {
"s3:x-amz-server-side-encryption": "AES256"
}
}
},
{
"Sid": "DenyUnencryptedObjectUploads",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::awsexamplebucket1/*",
"Condition": {
"Null": {
"s3:x-amz-server-side-encryption": "true"
}
}
}
]
}
Note
• Operações PUT — Especifique o cabeçalho de solicitação ao fazer upload de dados usando a API PUT.
Para obter mais informações, consulte Objeto PUT.
• Iniciar multipart upload — Especifique o cabeçalho na solicitação de inicialização ao fazer upload
de objetos grandes usando a API de multipart upload. Para obter mais informações, consulte Iniciar
Multipart Upload.
• Operações COPY — Quando você copia um objeto, tem um objeto de origem e um objeto de destino.
Para obter mais informações, consulte Objeto PUT - Copiar.
Note
Ao usar uma operação POST para fazer upload de um objeto, em vez de fornecer o cabeçalho
de solicitação, você fornece as mesmas informações nos campos de formulário. Para obter mais
informações, consulte Objeto POST.
Os SDKs da AWS também fornecem APIs de wrapper que você pode usar para solicitar criptografia no
lado do servidor. Você também pode usar o Console de Gerenciamento da AWS para fazer upload de
objetos e solicitar a criptografia no lado do servidor.
Tópicos
• Especificação de criptografia do Amazon S3 (p. 214)
fazendo upload de um novo objeto ou copiando um objeto existente. Essa criptografia é conhecida como
SSE-S3.
Você pode especificar o SSE-S3 usando o console do S3, APIs REST, AWS SDKs e AWS CLI. Para obter
mais informações, consulte os tópicos abaixo.
Para obter um exemplo de como copiar um objeto sem criptografia, consulte Cópia de objetos (p. 114).
Uso do console do S3
Este tópico descreve como definir ou alterar o tipo de criptografia de um objeto usando o console de
Gerenciamento da AWS. Quando você copia um objeto usando o console, ele copia o objeto no estado em
que ele se encontra. Ou seja, se a origem é criptografada, o objeto de destino também é criptografado. O
console também permite que você adicione ou altere a criptografia de um objeto.
Note
Se você alterar a criptografia de um objeto, um novo objeto será criado para substituir o antigo.
Se o versionamento do S3 estiver habilitado, uma nova versão do objeto será criada e o objeto
existente se tornará uma versão mais antiga. A função que altera a propriedade também se torna
o proprietário do novo objeto ou (versão do objeto).
Para obter mais informações sobre como usar a criptografia no lado do servidor do Amazon S3 para
criptografar seus dados, consulte Proteção de dados usando criptografia no lado do servidor com
chaves de criptografia gerenciadas pelo Amazon S3 (SSE-S3) (p. 213).
7. Selecione Save changes.
Note
Essa ação aplica criptografia a todos os objetos especificados. Ao criptografar pastas, aguarde a
conclusão da operação de salvamento antes de adicionar novos objetos à pasta.
No momento da criação do objeto (quando você faz upload de um objeto novo ou faz uma cópia de um
objeto existente), você pode especificar se deseja que o Amazon S3 criptografe seus dados adicionando
• Objeto PUT
• Objeto PUT - Copiar
• Objeto POST
• Iniciar multipart upload
Ao fazer upload de objetos grandes usando a API de multipart upload, você pode especificar a criptografia
no lado do servidor adicionando o cabeçalho x-amz-server-side-encryption à solicitação
Iniciar multipart upload. Ao copiar um objeto existente, independentemente de o objeto de origem ser
criptografado ou não, o objeto de destino não é criptografado, a menos que você solicite explicitamente a
criptografia de servidor.
• Objeto PUT
• Objeto PUT - Copiar
• Objeto POST
• Iniciar multipart upload
• Upload de parte
• Upload de parte - Copiar
• Concluir multipart upload
• Objeto Get
• Objeto Head
Note
Os cabeçalhos de solicitação de criptografia não deverão ser enviados para solicitações GET e
solicitações HEAD se o objeto usar SSE-S3 ou for exibido um erro HTTP 400 BadRequest.
Ao usar AWS SDKs, você pode solicitar ao Amazon S3 que use chaves de criptografia gerenciadas pelo
Amazon S3. Esta seção fornece exemplos de uso dos SDKs da AWS em vários idiomas. Para obter
informações sobre outros SDKs, consulte Código de exemplo e bibliotecas.
Java
Ao usar o AWS SDK para Java para carregar um objeto, você pode usar criptografia no lado do
servidor para criptografar o objeto. Para solicitar a criptografia no lado do servidor, use a propriedade
ObjectMetadata da PutObjectRequest para configurar o cabeçalho da solicitação x-amz-
server-side-encryption. Ao chamar o método putObject() do AmazonS3Client, o Amazon
S3 criptografa e salva os dados.
Você também pode solicitar a criptografia de servidor ao fazer upload de objetos com a API multipart
upload:
• Ao usar a API de alto nível de multipart upload, você usa os métodos TransferManager para
aplicar criptografia no lado do servidor aos objetos conforme faz upload desses objetos. Você pode
usar qualquer um dos métodos de upload que assumem ObjectMetadata como um parâmetro.
Para obter mais informações, consulte Fazer upload de um objeto usando multipart upload (p. 86).
• Ao usar a API de multipart upload de baixo nível, você especifica a criptografia de servidor ao
iniciar o multipart upload. Você adiciona a propriedade ObjectMetadata chamando o método
InitiateMultipartUploadRequest.setObjectMetadata(). Para obter mais informações,
consulte Usar os SDKs da AWS (API de baixo nível) (p. 93).
Você não poderá alterar diretamente o estado de criptografia de um objeto (criptografando um objeto
não criptografado ou descriptografando um objeto criptografado). Para alterar o estado de criptografia
de um objeto, faça uma cópia do objeto, especificando o estado desejado de criptografia para a cópia
e, em seguida, exclua o objeto original. O Amazon S3 criptografa o objeto copiado somente se você
solicitar explicitamente criptografia no lado do servidor. Para solicitar a criptografia do objeto copiado
por meio da API Java, use a propriedade ObjectMetadata para especificar a criptografia no lado do
servidor na CopyObjectRequest.
Example Exemplo
O exemplo a seguir mostra como definir a criptografia no lado do servidor usando o AWS SDK para
Java. Ele mostra como executar as seguintes tarefas:
Para obter mais informações sobre criptografia no lado do servidor, consulte Uso dos REST
API (p. 215). Para obter instruções sobre criar e testar um exemplo funcional, consulte Testar
exemplos de código Java no Amazon S3 (p. 1042).
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.internal.SSEResultBase;
import com.amazonaws.services.s3.model.*;
import java.io.ByteArrayInputStream;
try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withRegion(clientRegion)
.withCredentials(new ProfileCredentialsProvider())
.build();
// Make a copy of the object and use server-side encryption when storing the
copy.
CopyObjectRequest request = new CopyObjectRequest(bucketName,
sourceKey,
bucketName,
destKey);
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setSSEAlgorithm(ObjectMetadata.AES_256_SERVER_SIDE_ENCRYPTION);
request.setNewObjectMetadata(objectMetadata);
// Perform the copy operation and display the copy's encryption status.
CopyObjectResult response = s3Client.copyObject(request);
System.out.println("Object \"" + destKey + "\" uploaded with SSE.");
printEncryptionStatus(response);
// Delete the original, unencrypted object, leaving only the encrypted copy in
Amazon S3.
s3Client.deleteObject(bucketName, sourceKey);
System.out.println("Unencrypted object \"" + sourceKey + "\" deleted.");
}
.NET
Ao fazer upload de um objeto, você pode instruir o Amazon S3 a criptografar esse objeto. Para alterar
o estado de criptografia de um objeto existente, faça uma cópia do objeto e exclua o objeto de origem.
Por padrão, a operação de cópia criptografa o destino somente se você solicitar explicitamente a
criptografia no lado do servidor do objeto de destino. Para especificar a criptografia no lado do servidor
na CopyObjectRequest, adicione o seguinte:
ServerSideEncryptionMethod = ServerSideEncryptionMethod.AES256
Para obter um exemplo funcional de como copiar um objeto, consulte Uso dos AWS SDKs (p. 117).
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class SpecifyServerSideEncryptionTest
{
private const string bucketName = "*** bucket name ***";
private const string keyName = "*** key name for object created ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 client;
{
BucketName = bucketName,
Key = keyName,
ContentBody = "sample text",
ServerSideEncryptionMethod = ServerSideEncryptionMethod.AES256
};
PHP
Este tópico mostra como usar classes da versão 3 do AWS SDK para PHP para adicionar criptografia
no lado do servidor a objetos que você envia para o Amazon Simple Storage Service (Amazon S3).
Pressupõe-se que você já esteja seguindo as instruções de Usar o AWS SDK para PHP e executar
exemplos do PHP (p. 1044) e tenha o AWS SDK para PHP devidamente instalado.
Para fazer upload de um objeto no Amazon S3, use o método Aws\S3\S3Client::putObject(). Para
adicionar o cabeçalho de solicitação x-amz-server-side-encryption à sua solicitação de
upload, especifique o parâmetro ServerSideEncryption com o valor AES256, conforme exibido
no seguinte exemplo de código. Para obter informações sobre solicitações de criptografia no lado do
servidor, consulte Uso dos REST API (p. 215).
require 'vendor/autoload.php';
use Aws\S3\S3Client;
Ao fazer upload de objetos grandes usando a API de multipart upload, você pode especificar a
criptografia de servidor para os objetos que estiver fazendo upload, conforme segue:
• Ao usar a API de multipart upload de baixo nível, especifique a criptografia de servidor ao chamar
o método Aws\S3\S3Client::createMultipartUpload(). Para adicionar o cabeçalho de solicitação x-
amz-server-side-encryption à sua solicitação, especifique a chave array do parâmetro
ServerSideEncryption com o valor AES256. Para obter mais informações sobre a API de baixo
nível de multipart upload, consulte Usar os SDKs da AWS (API de baixo nível) (p. 93).
• Ao usar a API de alto nível de multipart upload, especifique a criptografia de servidor usando o
parâmetro ServerSideEncryption do método CreateMultipartUpload. Para ver um exemplo de
uso do método setOption() com a API de alto nível de multipart upload, consulte Fazer upload de
um objeto usando multipart upload (p. 86).
require 'vendor/autoload.php';
use Aws\S3\S3Client;
Para alterar o estado de criptografia de um objeto existente, faça uma cópia do objeto usando o
método Aws\S3\S3Client::copyObject() e exclua o objeto de origem. Por padrão, o copyObject()
não criptografará o destino, a menos que você solicite explicitamente a criptografia de servidor do
objeto de destino usando o parâmetro ServerSideEncryption com o valor AES256. O exemplo
de código PHP a seguir faz uma cópia de um objeto e adiciona a criptografia no lado do servidor ao
objeto copiado.
require 'vendor/autoload.php';
use Aws\S3\S3Client;
Ruby
Ao usar o AWS SDK para Ruby para fazer upload de um objeto, você pode especificar que o objeto
seja armazenado criptografado em repouso com a criptografia no lado do servidor (SSE). Ao ler o
objeto de volta, ele é descriptografado automaticamente.
O exemplo de AWS SDK para Ruby - Versão 3 a seguir demonstra como especificar que um arquivo
carregado no Amazon S3 seja criptografado em repouso.
require 'aws-sdk-s3'
# Uploads a file to an Amazon S3 bucket and then encrypts the file server-side
# by using the 256-bit Advanced Encryption Standard (AES-256) block cipher.
#
# Prerequisites:
#
# - An Amazon S3 bucket.
#
# @param s3_client [Aws::S3::Client] An initialized Amazon S3 client.
# @param bucket_name [String] The name of the bucket.
# @param object_key [String] The name for the uploaded object.
# @param object_content [String] The content to upload into the object.
# @return [Boolean] true if the file was successfully uploaded and then
# encrypted; otherwise, false.
# @example
# exit 1 unless upload_file_encrypted_aes256_at_rest?(
# Aws::S3::Client.new(region: 'us-east-1'),
# 'doc-example-bucket',
# 'my-file.txt',
# 'This is the content of my-file.txt.'
# )
def upload_file_encrypted_aes256_at_rest?(
s3_client,
bucket_name,
object_key,
object_content
)
s3_client.put_object(
bucket: bucket_name,
key: object_key,
body: object_content,
server_side_encryption: 'AES256'
)
return true
rescue StandardError => e
puts "Error uploading object: #{e.message}"
return false
end
Para obter um exemplo que mostra como fazer upload de um objeto sem SSE, consulte Fazer upload
de objetos (p. 71).
require 'aws-sdk-s3'
Se a criptografia no lado do servidor não for usada para o objeto que é armazenado no Amazon S3, o
método retornará nulo.
Para alterar o estado de criptografia de um objeto existente, faça uma cópia do objeto e exclua o
objeto de origem. Por padrão, os métodos de cópia não criptografam o destino, a menos que você
solicite explicitamente a criptografia no lado do servidor. Você pode solicitar a criptografia do objeto
de destino especificando o valor server_side_encryption no argumento de hash de opções
conforme exibido no seguinte exemplo de código Ruby. O exemplo de código demonstra como copiar
um objeto e criptografar a cópia.
require 'aws-sdk-s3'
# Prerequisites:
#
# - A bucket containing an object to be copied.
# - A separate bucket to copy the object into.
#
# @param s3_client [Aws::S3::Client] An initialized Amazon S3 client.
# @param source_bucket_name [String] The source bucket's name.
# @param source_object_key [String] The name of the object to be copied.
# @param target_bucket_name [String] The target bucket's name.
# @param target_object_key [String] The name of the copied object.
# @param encryption_type [String] The server-side encryption type for
# the copied object.
# @return [Boolean] true if the object was copied with the specified
# server-side encryption; otherwise, false.
# @example
# s3_client = Aws::S3::Client.new(region: 'us-east-1')
# if object_copied_with_encryption?(
# s3_client,
# 'doc-example-bucket1',
# 'my-source-file.txt',
# 'doc-example-bucket2',
# 'my-target-file.txt',
# 'AES256'
# )
# puts 'Copied.'
# else
# puts 'Not copied.'
# end
def object_copied_with_encryption?(
s3_client,
source_bucket_name,
source_object_key,
target_bucket_name,
target_object_key,
encryption_type
)
response = s3_client.copy_object(
bucket: target_bucket_name,
copy_source: source_bucket_name + '/' + source_object_key,
key: target_object_key,
server_side_encryption: encryption_type
)
return true if response.copy_object_result
rescue StandardError => e
puts "Error while copying object: #{e.message}"
end
Para especificar o SSE-S3 ao fazer upload de um objeto usando a AWS CLI, use o exemplo a seguir.
Para obter mais informações, consulte put-object na referência da AWS CLI. Para especificar o SSE-S3 ao
copiar um objeto usando a AWS CLI, consulte copy-object.
Para obter exemplos de configuração de criptografia usando o AWS CloudFormation, consulte Criar um
bucket com criptografia padrão e Criar um bucket usando a criptografia do lado do servidor do AWS KMS
com uma chave de bucket do S3 no Guia do usuário do AWS CloudFormation.
Quando você faz upload de um objeto, o Amazon S3 usa a chave de criptografia fornecida para aplicar a
criptografia AES-256 aos seus dados e elimina a chave de criptografia da memória. Quando você recupera
um objeto, deve fornecer a mesma chave de criptografia como parte de sua solicitação. O Amazon S3
primeiro verifica se a chave de criptografia fornecida é correspondente e, depois, decifra o objeto antes de
retornar os dados de objeto.
Não há novas cobranças pelo uso da criptografia do lado do servidor com chaves de criptografia
fornecidas pelo cliente (SSE-C). No entanto, as solicitações para configurar e usar o SSE-C incorrem em
cobranças padrão de solicitação do Amazon S3. Para obter mais informações sobre definição de preços,
consulte Definição de preços do Amazon S3.
Important
O Amazon S3 não armazena a chave de criptografia que você fornece. Em vez disso, ele
armazena um valor de HMAC com salt aleatório da chave de criptografia para validar solicitações
futuras. O valor de HMAC com salt não pode ser usado para derivar o valor da chave de
criptografia ou para decifrar o conteúdo do objeto criptografado. Isso significa que, se você perder
a chave de criptografia, perderá o objeto.
O Amazon S3 rejeitará todas as solicitações feitas por HTTP ao usar o SSE-C. Por questões de
segurança, recomendamos considerar que todas as chaves enviadas erroneamente por HTTP
como estando comprometidas. Você deve descartar a chave e alterná-la conforme apropriado.
• O ETag na resposta não é o MD5 dos dados de objeto.
• Você gerencia um mapeamento cuja chave de criptografia foi usada para criptografar objetos. O Amazon
S3 não armazena chaves de criptografia. Você é responsável por acompanhar a chave de criptografia
que forneceu para um objeto.
• Se seu bucket tiver versionamento ativado, cada versão de objeto carregada usando esse recurso
poderá ter sua própria chave de criptografia. Você é responsável por acompanhar a chave de
criptografia usada para uma versão de objeto.
• Como gerencia chaves de criptografia no lado do cliente, você gerencia todas as proteções adicionais,
como a alternância de chave, no lado do cliente.
Warning
Se você perder a chave de criptografia, qualquer solicitação GET de um objeto sem chave de
criptografia falhará e você perderá o objeto.
Tópicos
• Especificação de criptografia no lado do servidor com chaves fornecidas pelo cliente (SSE-
C). (p. 226)
Nome Descrição
x-amz-server-side- Use esse cabeçalho para fornecer a chave de criptografia com codificação
encryption-customer- base64 de 256 bits para o Amazon S3 a ser usada para criptografar ou
key descriptografar seus dados.
x-amz-server-side- Use esse cabeçalho para fornecer o resumo MD5 com codificação base64
encryption-customer- de 128 bits da chave de criptografia de acordo com RFC 1321. O Amazon
key-MD5 S3 usa esse cabeçalho para fazer uma verificação de integridade de
mensagens e conferir se a chave de criptografia foi transmitida sem erros.
Você pode usar bibliotecas de wrapper do AWS SDK para adicionar esses cabeçalhos à sua solicitação.
Se precisar, você pode fazer com que a API REST do Amazon S3 seja chamada diretamente na aplicação.
Note
Você não pode usar o console do Amazon S3 para fazer upload de um objeto e solicitar o SSE-
C. Também não é possível usar o console para atualizar (por exemplo, alterar a classe de
armazenamento ou adicionar metadados) um objeto armazenado com o SSE-C.
Você pode gerar um pre-signed URL que pode ser usado para operações, como fazer upload de um objeto
novo, recuperar um objeto existente ou metadados de objeto. Os pre-signed URLs oferecem suporte para
SSE-C da seguinte maneira:
Para objetos não SSE-C, é possível gerar um pre-signed URL e colá-lo diretamente em um
navegador, por exemplo, para acessar os dados.
No entanto, isso não é válido para objetos SSE-C porque, além do pre-signed URL, você
também precisa incluir cabeçalhos HTTP específicos para objetos SSE-C. Dessa forma, é
possível usar o pre-signed URL para objetos SSE-C somente de maneira programática.
As APIs do Amazon S3 a seguir oferecem suporte à criptografia pelo servidor com chaves de criptografia
fornecidas pelo cliente (SSE-C).
• Operação GET: ao recuperar objetos usando a API GET (consulte GET Object), você pode especificar
os cabeçalhos da solicitação. O Torrent não é compatível com objetos criptografados usando SSE-C.
• Operação HEAD: para recuperar metadados de objeto usando a API HEAD (consulte HEAD Object),
você pode especificar esses cabeçalhos de solicitação.
• Operação PUT: ao fazer upload de dados usando a API PUT (consulte PUT Object), você pode
especificar esses cabeçalhos de solicitação.
• Multipart upload: ao fazer upload de objetos grandes usando a API de multipart upload, você pode
especificar esses cabeçalhos. Especifique esses cabeçalhos na solicitação iniciada (consulte Iniciar
o multipart upload) e em cada solicitação de upload de parte subsequente (consulte Fazer upload de
parte) ou
). Para cada solicitação de upload de parte, as informações de criptografia devem ser as mesmas que
você forneceu na solicitação iniciada do multipart upload.
• Operação POST: ao usar uma operação POST para fazer upload de um objeto (consulte Objeto POST),
em vez dos cabeçalhos de solicitação, você fornece as mesmas informações nos campos de formulário.
• Operação de cópia: quando você copia um objeto (consulte Objeto PUT - Copiar), tem um objeto de
origem e um objeto de destino.
• Se você quiser que o objeto de destino seja criptografado usando criptografia de servidor com chaves
gerenciadas pela AWS, forneça o cabeçalho de solicitação x-amz-server-side-encryption.
• Se você quiser que o objeto de destino seja criptografado usando SSE-C, forneça informações de
criptografia usando os três cabeçalhos descritos na tabela anterior.
• Se o objeto de origem for criptografado usando SSE-C, você deverá fornecer informações de chave
de criptografia usando os seguintes cabeçalhos para que o Amazon S3 possa descriptografar o objeto
para cópia.
Nome Descrição
x-amz-copy- Inclua esse cabeçalho para fornecer o resumo MD5 com codificação
source-server- base64 de 128 bits da chave de criptografia, de acordo com RFC 1321.
side-encryption-
customer-key-MD5
Uso dos SDKs da AWS para especificar SSE-C para operações PUT, GET, Head e Copy
O exemplo a seguir mostra como solicitar a criptografia de servidor com chaves fornecidas pelo cliente
(SSE-C) para objetos. Os exemplos executam as seguintes operações. Cada operação mostra como
especificar cabeçalhos relacionados a SSE-C na solicitação:
• Objeto PUT: faz upload de um objeto e solicita a criptografia de servidor, usando uma chave de
criptografia fornecida pelo cliente.
• Objeto Get: faça download do objeto carregado na etapa anterior. Na solicitação, você fornece as
mesmas informações de criptografia fornecidas quando o objeto foi carregado. O Amazon S3 precisa
dessas informações para descriptografar o objeto e para que ele possa ser devolvido a você.
• Obter metadados do objeto: recupera os metadados do objeto. Você fornece as mesmas informações de
criptografia usadas quando o objeto foi criado.
• Copy object (Copiar objeto): faz uma cópia de um objeto carregado anteriormente. Como o objeto
de origem é armazenado usando SSE-C, você deve fornecer suas informações de criptografia na
solicitação de cópia. Por padrão, o Amazon S3 criptografa a cópia do objeto somente se você solicitar
explicitamente. Esse exemplo direciona o Amazon S3 a armazenar uma cópia criptografada do objeto.
Java
Note
Este exemplo mostra como fazer upload de um objeto em uma única operação. Ao usar a
API de Multipart Upload para fazer upload de objetos grandes, você fornece informações
de criptografia da mesma maneira que exibidas nesse exemplo. Para obter exemplos de
multipart uploads que usam o AWS SDK para Java, consulte Fazer upload de um objeto
usando multipart upload (p. 86).
Para obter informações sobre SSE-C, consulte Proteger dados usando a criptografia de servidor com
chaves de criptografia fornecidas pelo cliente (SSE-C) (p. 225). Para obter instruções sobre criar e
testar um exemplo funcional, consulte Testar exemplos de código Java no Amazon S3 (p. 1042).
Example
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.*;
import javax.crypto.KeyGenerator;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
try {
S3_CLIENT = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();
// Upload an object.
uploadObject(bucketName, keyName, new File(uploadFileName));
// Copy the object into a new object that also uses SSE-C.
copyObject(bucketName, keyName, targetKeyName);
} catch (AmazonServiceException e) {
// The call was transmitted successfully, but Amazon S3 couldn't process
// it, so it returned an error response.
e.printStackTrace();
} catch (SdkClientException e) {
// Amazon S3 couldn't be contacted for a response, or the client
// couldn't parse the response from Amazon S3.
e.printStackTrace();
}
}
S3_CLIENT.copyObject(copyRequest);
System.out.println("Object copied");
}
.NET
Note
Para exemplos de upload de objetos grandes usando a API multipart upload, consulte Fazer
upload de um objeto usando multipart upload (p. 86) e Usar os SDKs da AWS (API de baixo
nível) (p. 93).
Para obter informações sobre SSE-C, consulte Proteger dados usando a criptografia de servidor
com chaves de criptografia fornecidas pelo cliente (SSE-C) (p. 225)). Para obter informações sobre
como criar e testar um exemplo funcional, consulte Executar os exemplos de código do Amazon
S3 .NET (p. 1044).
Example
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.IO;
using System.Security.Cryptography;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class SSEClientEncryptionKeyObjectOperationsTest
{
private const string bucketName = "*** bucket name ***";
private const string keyName = "*** key name for new object created ***";
private const string copyTargetKeyName = "*** key name for object copy ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 client;
ServerSideEncryptionCustomerProvidedKey = base64Key
};
if (getResponse.ServerSideEncryptionCustomerMethod ==
ServerSideEncryptionCustomerMethod.AES256)
Console.WriteLine("Object encryption method is AES256, same as we
set");
else
Console.WriteLine("Error...Object encryption method is not the same
as AES256 we set");
// Assert.AreEqual(putObjectRequest.ContentBody, content);
// Assert.AreEqual(ServerSideEncryptionCustomerMethod.AES256,
getResponse.ServerSideEncryptionCustomerMethod);
}
}
private static async Task GetObjectMetadataAsync(string base64Key)
{
GetObjectMetadataRequest getObjectMetadataRequest = new
GetObjectMetadataRequest
{
BucketName = bucketName,
Key = keyName,
ServerSideEncryptionCustomerProvidedKey = copyBase64Key
};
await client.CopyObjectAsync(copyRequest);
}
}
}
Uso dos SDKs da AWS para especificar SSE-C para multipart uploads
O exemplo da seção anterior mostra como solicitar a criptografia de servidor com a chave fornecida pelo
cliente (SSE-C) nas operações PUT, GET, Head e Copy. Esta seção descreve outras APIs do Amazon S3
que oferecem suporte para SSE-C.
Java
Para fazer upload de objetos grandes, você pode usar a API de multipart upload (consulte Carregar e
copiar objetos usando multipart upload (p. 80)). Você pode usar APIs de alto ou baixo nível para fazer
upload de objetos grandes. Essas APIs oferecem suporte para cabeçalhos relacionados à criptografia
na solicitação.
O exemplo a seguir usa TransferManager para criar objetos e mostra como fornecer informações
relacionadas a SSE-C. O exemplo faz o seguinte:
Example
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.CopyObjectRequest;
import com.amazonaws.services.s3.model.PutObjectRequest;
import com.amazonaws.services.s3.model.SSECustomerKey;
import com.amazonaws.services.s3.transfer.Copy;
import com.amazonaws.services.s3.transfer.TransferManager;
import com.amazonaws.services.s3.transfer.TransferManagerBuilder;
import com.amazonaws.services.s3.transfer.Upload;
import javax.crypto.KeyGenerator;
import java.io.File;
import java.security.SecureRandom;
try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withRegion(clientRegion)
.withCredentials(new ProfileCredentialsProvider())
.build();
TransferManager tm = TransferManagerBuilder.standard()
.withS3Client(s3Client)
.build();
// Copy the object and store the copy using SSE-C with a new key.
CopyObjectRequest copyObjectRequest = new CopyObjectRequest(bucketName,
keyName, bucketName, targetKeyName);
SSECustomerKey sseTargetObjectEncryptionKey = new
SSECustomerKey(keyGenerator.generateKey());
copyObjectRequest.setSourceSSECustomerKey(sseCustomerEncryptionKey);
copyObjectRequest.setDestinationSSECustomerKey(sseTargetObjectEncryptionKey);
}
}
}
.NET
Para fazer upload de objetos grandes, você pode usar a API de multipart upload (consulte Carregar
e copiar objetos usando multipart upload (p. 80)). O AWS SDK para .NET fornece APIs de alto ou
baixo nível para fazer upload de grandes objetos. Essas APIs oferecem suporte para cabeçalhos
relacionados à criptografia na solicitação.
• Ao usar a API de baixo nível, você fornece informações relacionadas à criptografia na solicitação
para iniciar o multipart upload, seguidas por informações de criptografia idênticas nas solicitações
subsequentes de upload de parte. Você não precisa fornecer cabeçalhos específicos de criptografia
na solicitação de multipart upload completo. Para ver exemplos, consulte Usar os SDKs da AWS
(API de baixo nível) (p. 93).
O seguinte é um exemplo de multipart upload de baixo nível que faz uma cópia de um objeto grande
existente. No exemplo, o objeto a ser copiado é armazenado no Amazon S3 usando o SSE-C, e
você deseja salvar o objeto de destino também usando o SSE-C. No exemplo, faça o seguinte:
• Inicie uma solicitação de multipart upload fornecendo uma chave de criptografia e as informações
relacionadas.
• Forneça as chaves de criptografia de objeto de origem e de destino e as informações
relacionadas na CopyPartRequest.
• Obtenha o tamanho do objeto de origem a ser copiado recuperando os metadados do objeto.
• Faça upload dos objetos em partes de 5 MB.
Example
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Collections.Generic;
using System.IO;
using System.Security.Cryptography;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class SSECLowLevelMPUcopyObjectTest
{
private const string existingBucketName = "*** bucket name ***";
private const string sourceKeyName = "*** source object key name ***";
private const string targetKeyName = "*** key name for the target object
***";
private const string filePath = @"*** file path ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 s3Client;
static void Main()
{
s3Client = new AmazonS3Client(bucketRegion);
CopyObjClientEncryptionKeyAsync().Wait();
}
// 1. Initialize.
InitiateMultipartUploadRequest initiateRequest = new
InitiateMultipartUploadRequest
{
BucketName = existingBucketName,
Key = targetKeyName,
ServerSideEncryptionCustomerMethod =
ServerSideEncryptionCustomerMethod.AES256,
ServerSideEncryptionCustomerProvidedKey = base64Key,
};
InitiateMultipartUploadResponse initResponse =
await s3Client.InitiateMultipartUploadAsync(initiateRequest);
// 2. Upload Parts.
long partSize = 5 * (long)Math.Pow(2, 20); // 5 MB
long firstByte = 0;
long lastByte = partSize;
try
{
// First find source object size. Because object is stored encrypted
with
// customer provided key you need to provide encryption information
in your request.
GetObjectMetadataRequest getObjectMetadataRequest = new
GetObjectMetadataRequest()
{
BucketName = existingBucketName,
Key = sourceKeyName,
ServerSideEncryptionCustomerMethod =
ServerSideEncryptionCustomerMethod.AES256,
ServerSideEncryptionCustomerProvidedKey = base64Key // " *
**source object encryption key ***"
};
long filePosition = 0;
for (int i = 1; filePosition <
getObjectMetadataResponse.ContentLength; i++)
{
CopyPartRequest copyPartRequest = new CopyPartRequest
{
UploadId = initResponse.UploadId,
// Source.
SourceBucket = existingBucketName,
SourceKey = sourceKeyName,
// Source object is stored using SSE-C. Provide encryption
information.
CopySourceServerSideEncryptionCustomerMethod =
ServerSideEncryptionCustomerMethod.AES256,
CopySourceServerSideEncryptionCustomerProvidedKey =
base64Key, //"***source object encryption key ***",
FirstByte = firstByte,
// If the last part is smaller then our normal part size then
use the remaining size.
LastByte = lastByte >
getObjectMetadataResponse.ContentLength ?
getObjectMetadataResponse.ContentLength - 1 : lastByte,
// Target.
DestinationBucket = existingBucketName,
DestinationKey = targetKeyName,
PartNumber = i,
// Encryption information for the target object.
ServerSideEncryptionCustomerMethod =
ServerSideEncryptionCustomerMethod.AES256,
ServerSideEncryptionCustomerProvidedKey = base64Key
};
uploadResponses.Add(await
s3Client.CopyPartAsync(copyPartRequest));
filePosition += partSize;
firstByte += partSize;
lastByte += partSize;
}
// Step 3: complete.
CompleteMultipartUploadRequest completeRequest = new
CompleteMultipartUploadRequest
{
BucketName = existingBucketName,
Key = targetKeyName,
UploadId = initResponse.UploadId,
};
completeRequest.AddPartETags(uploadResponses);
CompleteMultipartUploadResponse completeUploadResponse =
await s3Client.CompleteMultipartUploadAsync(completeRequest);
}
catch (Exception exception)
{
Console.WriteLine("Exception occurred: {0}", exception.Message);
AbortMultipartUploadRequest abortMPURequest = new
AbortMultipartUploadRequest
{
BucketName = existingBucketName,
Key = targetKeyName,
UploadId = initResponse.UploadId
};
s3Client.AbortMultipartUpload(abortMPURequest);
}
}
// 1. Initialize.
InitiateMultipartUploadRequest initiateRequest = new
InitiateMultipartUploadRequest
{
BucketName = existingBucketName,
Key = sourceKeyName,
ServerSideEncryptionCustomerMethod =
ServerSideEncryptionCustomerMethod.AES256,
ServerSideEncryptionCustomerProvidedKey = base64Key
};
InitiateMultipartUploadResponse initResponse =
await s3Client.InitiateMultipartUploadAsync(initiateRequest);
// 2. Upload Parts.
long contentLength = new FileInfo(filePath).Length;
long partSize = 5 * (long)Math.Pow(2, 20); // 5 MB
try
{
long filePosition = 0;
for (int i = 1; filePosition < contentLength; i++)
{
UploadPartRequest uploadRequest = new UploadPartRequest
{
BucketName = existingBucketName,
Key = sourceKeyName,
UploadId = initResponse.UploadId,
PartNumber = i,
PartSize = partSize,
FilePosition = filePosition,
FilePath = filePath,
ServerSideEncryptionCustomerMethod =
ServerSideEncryptionCustomerMethod.AES256,
ServerSideEncryptionCustomerProvidedKey = base64Key
};
filePosition += partSize;
}
// Step 3: complete.
CompleteMultipartUploadRequest completeRequest = new
CompleteMultipartUploadRequest
{
BucketName = existingBucketName,
Key = sourceKeyName,
UploadId = initResponse.UploadId,
//PartETags = new List<PartETag>(uploadResponses)
};
completeRequest.AddPartETags(uploadResponses);
CompleteMultipartUploadResponse completeUploadResponse =
await s3Client.CompleteMultipartUploadAsync(completeRequest);
}
catch (Exception exception)
{
Console.WriteLine("Exception occurred: {0}", exception.Message);
AbortMultipartUploadRequest abortMPURequest = new
AbortMultipartUploadRequest
{
BucketName = existingBucketName,
Key = sourceKeyName,
UploadId = initResponse.UploadId
};
await s3Client.AbortMultipartUploadAsync(abortMPURequest);
}
}
}
}
• Use uma chave mestra do cliente (CMK) armazenada no AWS Key Management Service (AWS KMS).
• Use uma chave mestra que você armazena na sua aplicação.
O SDK de criptografia da AWS é uma biblioteca de criptografia do lado do cliente que é separada dos
SDKs específicos de linguagem. Você pode usar essa biblioteca de criptografia para implementar com
mais facilidade as práticas recomendadas no Amazon S3. Ao contrário dos clientes de criptografia do
Amazon S3 nos AWS SDKs específicos da linguagem, o SDK de Criptografia da AWS não é vinculado
ao Amazon S3 e pode ser usado para criptografar ou descriptografar os dados a serem armazenados em
qualquer lugar.
Os clientes de SDK de criptografia da AWS e do Amazon S3 não são compatíveis, pois eles produzem
textos cifrados com diferentes formatos de dados. Para obter mais informações sobre o SDK de
criptografia da AWS, consulte o Guia do desenvolvedor de SDK de criptografia da AWS.
• Ao fazer upload de um objeto: usando o ID da CMK, o cliente primeiro envia uma solicitação ao AWS
KMS para uma nova chave simétrica que pode ser usada para criptografar seus dados de objeto. O
AWS KMS retorna duas versões de uma chave de dados gerada aleatoriamente:
• Uma versão em texto simples da chave de dados que o cliente usa para criptografar os dados de
objeto.
• Um blob de criptografia da mesma chave de dados que o cliente faz upload para o Amazon S3 como
metadados de objeto.
Note
O cliente obtém uma chave de dados exclusiva para cada objeto cujo upload é feito.
• Ao fazer download de um objeto: o cliente faz download do objeto criptografado do Amazon S3 junto
com a versão do blob de criptografia da chave de dados armazenada como metadados de objeto.
Depois, o cliente envia o blob de criptografia para o AWS KMS para obter a versão em texto simples da
chave de dados para poder descriptografar os dados de objeto.
Para obter mais informações sobre o AWS KMS, consulte O que é o AWS Key Management Service? no
Guia do desenvolvedor do AWS Key Management Service.
Example
O exemplo de código a seguir demonstra como fazer upload de um objeto para o Amazon S3 usando o
AWS KMS com o AWS SDK para Java. O exemplo usa uma CMK gerenciada pela AWS para criptografar
dados no lado do cliente antes de fazer upload no Amazon S3. Se já tiver uma CMK, você poderá usá-la
especificando o valor da variável keyId no código de exemplo. Se não tiver um CMK, ou precisar de outro,
você poderá gerar um por meio da API Java. O código de exemplo gera automaticamente uma CMK a ser
usada.
Para obter instruções sobre criar e testar um exemplo funcional, consulte Testar exemplos de código Java
no Amazon S3 (p. 1042).
// --
// specify an Amazon KMS customer master key (CMK) ID
String keyId = createKeyResult.getKeyMetadata().getKeyId();
kmsClient.scheduleKeyDeletion(scheduleKeyDeletionRequest);
s3Encryption.shutdown();
kmsClient.shutdown();
As chaves mestras no lado do cliente e seus dados não criptografados nunca são enviados para a
AWS. É importante que você gerencie com segurança suas chaves de criptografia. Se perdê-las,
você não poderá descriptografar os seus dados.
Como funciona:
• Ao fazer upload de um objeto: você fornece uma chave mestra no lado do cliente para o cliente
de criptografia do Amazon S3. O cliente usa a chave mestra apenas para criptografar a chave de
criptografia de dados que gera aleatoriamente.
A chave mestra no lado do cliente que você fornece pode ser uma chave simétrica ou um par de chaves
pública/privada. Os exemplos de código a seguir mostram como usar cada tipo de chave.
Para obter mais informações, consulte Criptografia de dados no lado do cliente com o AWS SDK para Java
e o Amazon S3.
Note
Se você receber uma mensagem de erro de criptografia quando usar a API de criptografia
pela primeira vez, sua versão do JDK pode ter um arquivo de políticas de jurisdição JCE (Java
Cryptography Extension) que limita o tamanho máximo da chave para transformações de
criptografia e descriptografia para 128 bits. O AWS SDK requer uma chave de tamanho máximo
de 256 bits.
Para verificar o tamanho de chave máximo, use o método getMaxAllowedKeyLength() da
classe javax.crypto.Cipher. Para remover a restrição de tamanho da chave, instale os
arquivos de política de jurisdição de força ilimitada JCE (Java Cryptography Extension).
Example
O exemplo de código a seguir mostra como fazer essas tarefas:
Para obter instruções sobre criar e testar um exemplo funcional, consulte Testar exemplos de código Java
no Amazon S3 (p. 1042).
// --
// generate a symmetric encryption key for testing
SecretKey secretKey = keyGenerator.generateKey();
Example
Para obter instruções sobre criar e testar um exemplo funcional, consulte Testar exemplos de código Java
no Amazon S3 (p. 1042).
// --
// generate an asymmetric key pair for testing
KeyPair keyPair = keyPairGenerator.generateKeyPair();
.withCryptoConfiguration(new
CryptoConfigurationV2().withCryptoMode(CryptoMode.StrictAuthenticatedEncryption))
.withEncryptionMaterialsProvider(new StaticEncryptionMaterialsProvider(new
EncryptionMaterials(keyPair)))
.build();
• Uma conexão AWS Site-to-Site VPN. Para obter mais informações, consulte O que é o AWS Site-to-Site
VPN?
• Uma conexão AWS Direct Connect. Para obter mais informações, consulte O que é o AWS Direct
Connect?
• Uma conexão com o AWS PrivateLink. Para obter mais informações, consulte AWS PrivateLink para
Amazon S3 (p. 243).
O acesso ao Amazon S3 pela rede acontece por meio de APIs publicadas pela AWS. Os clientes devem
ter suporte ao Transport Layer Security (TLS) 1.0. Recomendamos TLS 1.2 ou posterior. Os clientes
também devem ter suporte a pacotes de criptografia com sigilo de encaminhamento perfeito (PFS) como
Ephemeral Diffie-Hellman (DHE) ou Ephemeral Elliptic Curve Diffie-Hellman (ECDHE). A maioria dos
sistemas modernos como Java 7 e versões posteriores oferece suporte a esses modos. Além disso, você
deve assinar solicitações usando um ID de chave de acesso e uma chave de acesso secreta associados
a uma entidade principal do IAM, ou você pode usar o AWS Security Token Service (STS) para gerar
credenciais de segurança temporárias para assinar solicitações.
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 a partir de aplicativos locais 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 local, 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 Guia do AWS PrivateLink.
Tópicos
• Tipos de VPC endpoints para o Amazon S3 (p. 244)
• Restrições e limitações do AWS PrivateLink para Amazon S3 (p. 244)
• Acessar endpoints da interface do Amazon S3 (p. 245)
• Acessar buckets e pontos de acesso do S3 a partir de endpoints de interface S3 (p. 245)
• Atualizar uma configuração de DNS no local (p. 248)
• Criar uma política de VPC endpoint para o Amazon S3 (p. 250)
Não permite acesso de outra região da AWS Permite acesso de outra região da AWS
Para obter mais informações sobre endpoints de gateway, consulte Endpoints da VPC de gateway no Guia
do AWS PrivateLink Guide.
Para acessar o Amazon S3 usando o AWS PrivateLink, você deve atualizar seus aplicativos para
usar nomes de DNS específicos de endpoint.
Quando você cria um endpoint de interface, o Amazon S3 gera dois tipos de nomes de DNS do S3
específicos do endpoint: regional e zonal.
Os nomes de DNS do S3 específicos do endpoint podem ser resolvidos a partir do domínio DNS público do
S3.
Note
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 AWS PrivateLink.
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.
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.
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'
)
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'
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'
)
// 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();
// 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");
// 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());
// 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()
// 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()
// 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()
• Sua rede local usa o AWS Direct Connect ou o AWS VPN para se conectar à VPC A.
• Seus aplicativos no local 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.
• Os aplicativos locais enviam dados para o endpoint de interface na VPC por meio do AWS Direct
Connect (ou AWS VPN). O AWS PrivateLink move os dados do endpoint da interface para o Amazon S3
pela rede da AWS.
• Os aplicativos na VPC também enviam tráfego para o endpoint de interface. O AWS PrivateLink move os
dados do endpoint da interface para o Amazon S3 pela rede da AWS.
• Os aplicativos locais usam nomes de DNS específicos do endpoint para enviar dados para o endpoint de
interface dentro da VPC por meio do AWS Direct Connect (ou AWS VPN). O AWS PrivateLink move os
dados do endpoint da interface para o Amazon S3 pela rede da AWS.
• Usando nomes regionais padrão do Amazon S3, as aplicações no 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.
• O 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.
Tópicos
• Exemplo: restringir o acesso a um bucket específico a partir de um endpoint da VPC (p. 250)
• Exemplo: restringir o acesso a buckets em uma conta específica a partir de um endpoint da
VPC (p. 251)
• Exemplo: restringir o acesso a um endpoint da VPC específico na política de bucket do S3 (p. 251)
Important
• 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 VPC
endpoint incorreto. Como corrigir a política para que eu possa acessar o bucket? no Centro 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.
{
"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/*"]
}
]
}
{
"Statement": [
{
"Sid": "Access-to-bucket-in-specific-account-only",
"Principal": "*",
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Effect": "Deny",
"Resource": "arn:aws:s3:::*",
"Condition": {
"StringNotEquals": {
"s3:ResourceAccount": "111122223333"
}
}
}
]
}
{
"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 Opções de conectividade entre a rede
e a VPC no whitepaper da AWS: Opções de conectividade do Amazon Virtual Private Cloud.
O Amazon S3 oferece opções de política de acesso classificadas amplamente como políticas com base
em recursos e políticas de usuário. As políticas de acesso que você anexa aos recursos (buckets e
objetos) são chamadas de políticas com base em recursos. Por exemplo, as políticas de bucket e as
listas de controle de acesso (ACLs) são políticas com base em recursos. Você também pode anexar
políticas de acesso a usuários em sua conta. Elas são chamadas de políticas de usuário. Você pode
optar por usar políticas com base em recursos, políticas de usuário ou qualquer combinação delas para
gerenciar permissões para seus recursos do Amazon S3. As seções a seguir fornecem diretrizes gerais
para gerenciar permissões no Amazon S3.
Para obter mais informações sobre como gerenciar o acesso aos seus objetos e buckets do Amazon S3,
consulte os tópicos abaixo.
Tópicos
• Visão geral do gerenciamento de acesso (p. 252)
• Diretrizes para políticas de acesso (p. 258)
• Como o Amazon S3 autoriza uma solicitação (p. 261)
• Políticas de bucket e políticas de usuário (p. 268)
• Gerenciar o acesso com ACLs (p. 440)
• Usar o compartilhamento de recursos de origem cruzada (CORS) (p. 458)
• Bloquear o acesso público ao armazenamento do Amazon S3 (p. 469)
• Gerenciamento de acesso a dados com pontos de acesso do Amazon S3 (p. 480)
• Revisar o acesso de bucket usando o Access Analyzer for S3 (p. 496)
• Controlar a propriedade de objetos carregados usando a propriedade de objetos do S3 (p. 500)
• Verificar a propriedade do bucket com a condição de proprietário do bucket (p. 502)
Tópicos
• Recursos do Amazon S3: buckets e objetos (p. 253)
• Propriedade de bucket e objeto do Amazon S3 (p. 253)
• Operações de recurso (p. 254)
• Gerenciar o acesso aos recursos (p. 255)
• Qual método de controle de acesso devo usar? (p. 258)
• lifecycle: armazena informações sobre a configuração do ciclo de vida. Para obter mais informações,
consulte Gerenciando seu ciclo de vida de armazenamento (p. 569).
• website: armazena informações de configuração do site se você configurar o bucket para hospedagem
de sites. Para obter mais informações, consulte Hospedagem de um site estático usando o Amazon
S3 (p. 945).
• versioning: armazena a configuração de versionamento. Para obter mais informações, consulte
Versionamento do bucket PUT na Referência da API do Amazon Simple Storage Service.
• policy e acl (lista de controle de acesso) – Armazena informações de permissão de acesso do bucket.
• cors (compartilhamento de recursos de origem cruzada): oferece suporte a configuração do bucket para
permitir solicitações de origem cruzada. Para obter mais informações, consulte Usar o compartilhamento
de recursos de origem cruzada (CORS) (p. 458).
• object ownership: permite que o proprietário do bucket assuma a propriedade de novos objetos no
bucket, independentemente de quem faz upload deles. Para obter mais informações, consulte Controlar
a propriedade de objetos carregados usando a propriedade de objetos do S3 (p. 500).
• logging: permite solicitar ao Amazon S3 para salvar logs de acesso de bucket.
• acl – Armazena uma lista de permissões de acesso no objeto. Para obter mais informações, consulte
Visão geral da lista de controle de acesso (ACL) (p. 440).
• restore: oferece suporte para restaurar, temporariamente, um objeto arquivado. Para obter mais
informações, consulte Restauração do objeto POST na Referência de APIs do Amazon Simple Storage
Service.
• A conta da AWS que você usa para criar buckets e fazer upload de objetos é proprietária desses
recursos.
• Se fizer upload de um objeto usando credenciais de função ou usuário do AWS Identity and Access
Management (IAM), a conta da AWS à qual o usuário ou a função pertencem é proprietária do objeto.
• Um proprietário do bucket pode conceder permissões entre contas à outra conta da AWS (ou aos
usuários em outra conta) para fazer upload de objetos. Nesse caso, a conta da AWS que faz upload
dos objetos detém esses objetos. O proprietário do bucket não tem permissões nos objetos que outras
contas possuem, com as seguintes exceções:
• O proprietário do bucket paga as faturas. O proprietário do bucket pode negar acesso a todos os
objetos ou excluir objetos no bucket, independentemente de quem o possui.
• O proprietário do bucket pode arquivar todos os objetos ou restaurar os objetos arquivados,
independentemente de quem os possui. Arquivo refere-se à classe de armazenamento usada para
armazenar os objetos. Para obter mais informações, consulte Gerenciando seu ciclo de vida de
armazenamento (p. 569).
Um proprietário do bucket pode permitir solicitações não autenticadas. Por exemplo, solicitações PUT
Object não autenticadas são permitidas quando um bucket tem uma política pública de bucket, ou quando
uma ACL do bucket concede acesso WRITE ou FULL_CONTROL ao grupo All Users (Todos os usuários)
ou ao usuário anônimo especificamente. Para obter mais informações sobre políticas de bucket público e
listas de controle de acesso (ACLs) públicas, consulte O significado de "público" (p. 473).
Todas as solicitações não autenticadas são feitas pelo usuário anônimo. Esse usuário é representado
em ACLs pelo ID de usuário canônico específico 65a011a29cdf8ec533ec3d1ccaae921c. Se for feito
o upload de um objeto em um bucket por meio de uma solicitação não autenticada, o usuário anônimo
será proprietário o objeto. A ACL padrão do objeto concede FULL_CONTROL ao usuário anônimo como
o proprietário do objeto. Portanto, o Amazon S3 permite que solicitações não autenticadas recuperem o
objeto ou modifiquem a ACL dele.
Para evitar que os objetos sejam modificados pelo usuário anônimo, recomendamos que você não
implemente políticas de bucket que permitam gravações públicas anônimas em seu bucket ou use
ACLs que concedam ao usuário anônimo acesso de gravação ao bucket. Você pode aplicar esse
comportamento recomendado usando o Bloqueio de acesso público do Amazon S3.
Para obter mais informações sobre como bloquear o acesso público, consulte Bloquear o acesso público
ao armazenamento do Amazon S3 (p. 469). Para obter mais informações sobre ACLs, consulte Visão
geral da lista de controle de acesso (ACL) (p. 440).
Important
Recomendamos que você não use credenciais de usuário raiz da conta da AWS para fazer
solicitações autenticadas. Em vez disso, crie um usuário do IAM e conceda acesso total a ele.
Esses usuários são conhecidos como usuários administradores. As credenciais do usuário
administrador podem ser usadas, em vez das credenciais do usuário raiz da conta da AWS,
para interagir com a AWS e executar tarefas, como criar um bucket, criar usuários e conceder
permissões a eles. Para obter mais informações, consulte Credenciais de usuário raiz da conta
da AWS e credenciais de usuário do IAM nas práticas recomendadas de referência geral e
segurança da AWS no IAM no Guia do usuário do IAM.
Operações de recurso
O Amazon S3 fornece um conjunto de operações para trabalhar com recursos do Amazon S3. Para ver
uma lista das operações disponíveis, consulte Ações definidas pelo Amazon S3 (p. 289).
• Políticas com base em recursos: as políticas de bucket e listas de controle de acesso (ACLs) são com
base em recurso porque você as anexa aos recursos do Amazon S3.
• ACL – Cada bucket e objeto tem uma ACL associada. Uma ACL é uma lista de concessões que
identifica o concessionário e a permissão concedida. Você usa ACLs para conceder permissões de
leitura/gravação básicas a outras contas da AWS. As ACLs usam um esquema XML específico do
Amazon S3.
Esta é uma ACL de bucket de exemplo. A concessão na ACL mostra um proprietário do bucket com
permissão de controle total.
<Permission>FULL_CONTROL</Permission>
</Grant>
</AccessControlList>
</AccessControlPolicy>
{
"Version":"2012-10-17",
"Statement": [
{
"Sid":"GrantAnonymousReadPermissions",
"Effect":"Allow",
"Principal": "*",
"Action":["s3:GetObject"],
"Resource":["arn:aws:s3:::awsexamplebucket1/*"]
}
]
}
• Políticas de usuário: você pode usar o IAM para gerenciar o acesso a recursos do Amazon S3. Você
pode criar usuários, grupos e funções do IAM em sua conta e anexar políticas de acesso que concedem
acesso a recursos da AWS, incluindo o Amazon S3.
Para obter mais informações sobre o IAM, consulte AWS Identity and Access Management (IAM).
Veja a seguir um exemplo de política de usuário. Você não pode conceder permissões anônimas em
uma política de usuário do IAM, pois a política é anexada a um usuário. A política de exemplo permite ao
usuário associado que está anexado executar seis ações diferentes do Amazon S3 em um bucket nos
objetos contidos nele. É possível anexar essa política a um usuário, grupo ou função específico do IAM.
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AssignUserActions",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:ListBucket",
"s3:DeleteObject",
"s3:GetBucketLocation"
],
"Resource": [
"arn:aws:s3:::awsexamplebucket1/*",
"arn:aws:s3:::awsexamplebucket1"
]
},
{
"Sid": "ExampleStatement2",
"Effect": "Allow",
"Action": "s3:ListAllMyBuckets",
"Resource": "*"
}
]
}
Quando o Amazon S3 recebe uma solicitação, deve avaliar todas as políticas de acesso para determinar
se deve autorizar ou negar a solicitação. Para obter mais informações sobre como o Amazon S3 avalia
essas políticas, consulte Como o Amazon S3 autoriza uma solicitação (p. 261).
No Analisador de acesso para S3, você pode bloquear todo o acesso público a um bucket com um único
clique. Recomendamos que você bloqueie todo o acesso aos buckets, a menos que exija acesso público
para dar suporte a um caso de uso específico. Antes de bloquear todo o acesso público, certifique-
se de que os aplicativos continuarão funcionando corretamente sem acesso público. Para obter mais
informações, consulte Bloquear o acesso público ao armazenamento do Amazon S3 (p. 469).
Você também pode detalhar as configurações de permissão no nível do bucket para definir níveis
granulares de acesso. Para casos de uso específicos e verificados que exigem acesso público ou
compartilhado, você pode confirmar e registrar sua intenção de que o bucket permaneça público ou
compartilhado arquivando as descobertas do bucket. Você pode acessar novamente e modificar essas
configurações de bucket a qualquer momento. Você também pode fazer download das descobertas como
um relatório CSV para fins de auditoria.
O Analisador de acesso para S3 está disponível sem custo adicional no console do Amazon S3. O
Analisador de acesso para S3 é desenvolvido pelo Analisador de acesso do AWS Identity and Access
Management (IAM). Para usar o Analisador de acesso para S3 no console do Amazon S3, você deve
visitar o console do IAM e criar um analisador no nível da conta no Analisador de acesso do IAM por
região.
Para obter mais informações sobre o Access Analyzer for S3, consulte Revisar o acesso de bucket usando
o Access Analyzer for S3 (p. 496).
• Quando devo usar qual método de controle de acesso? Por exemplo, para conceder permissões de
bucket, devo usar uma política de bucket ou uma ACL de bucket?
Possuo um bucket e os objetos no bucket. Devo usar uma política de acesso baseada em recursos ou
uma política de usuário do IAM?
Se eu usar uma política de acesso baseada em recursos, devo usar uma política de bucket ou uma ACL
de objeto para gerenciar permissões de objeto?
• Possuo um bucket, mas não possuo todos os seus objetos. Como as permissões de acesso são
gerenciadas para objetos que alguém possui?
• Se eu conceder acesso usando uma combinação dessas opções de política de acesso, como o Amazon
S3 determinará se um usuário tem permissão para executar uma operação solicitada?
As seções a seguir explicam essas alternativas de controle de acesso, como o Amazon S3 avalia
mecanismos de controle de acesso e quando usar cada método de controle de acesso. Também fornecem
demonstrações com exemplos.
Tópicos
• Quando usar uma política de acesso com base em ACL (ACLs de bucket e objeto) (p. 258)
• Quando usar uma política de bucket (p. 260)
• Quando usar uma política de usuário (p. 260)
• Tópicos relacionados (p. 261)
• Se a conta da AWS que possui o objeto também possuir o bucket, poderá gravar uma política de bucket
para gerenciar permissões de objeto.
• Se a conta da AWS que possui o objeto desejar conceder permissão a um usuário em sua conta, poderá
usar uma política de usuário.
Então quando usar ACLs de objeto para gerenciar permissões de objeto? Veja a seguir os cenários em
que você faria isso.
Uma ACL de objeto é a única maneira de gerenciar o acesso a objetos não pertencentes ao proprietário do
bucket. Uma conta da AWS que possui o bucket pode conceder permissão para outra conta da AWS fazer
upload de objetos. O proprietário do bucket não detém esses objetos. A conta da AWS que criou o objeto
deve conceder permissões usando ACLs de objeto.
Note
Um proprietário do bucket não pode conceder permissões em objetos que não possui. Por
exemplo, uma política de bucket que concede permissões de objeto aplica-se somente a objetos
do proprietário do bucket. Contudo, o proprietário do bucket, que paga as faturas, pode gravar
uma política de bucket para negar acesso a todos os objetos no bucket, independentemente de
quem o possui. O proprietário do bucket também pode excluir todos os objetos no bucket.
Suponha que as permissões variem de acordo com o objeto e você precise gerenciar permissões no nível
do objeto. É possível gravar uma única instrução de política que conceda a uma conta da AWS permissão
de leitura e milhões de objetos com um prefixo específico de nome de chave. Por exemplo, você pode
permissão de leitura em objetos que começam com “logs” como prefixo de nome de chave. Contudo, se
as permissões de acesso variam por objeto, conceder permissões para objetos individuais usando uma
política de bucket talvez não seja prático. Além disso, as políticas de bucket são limitadas a 20 KB.
Nesse caso, você pode considerar o uso de ACLs de objeto como uma boa alternativa. No entanto, mesmo
uma ACL de objeto é limitada a, no máximo, 100 concessões. Para obter mais informações, consulte Visão
geral da lista de controle de acesso (ACL) (p. 440).
Há uma política de bucket para o bucket todo, mas as ACLs de objeto são especificadas por objeto.
Uma conta da AWS que possui um bucket pode conceder outra permissão de conta da AWS para
gerenciar a política de acesso. Ela permite que a conta altere algo na política. Para gerenciar permissões
melhor, você pode optar por não conceder uma permissão tão ampla e conceder somente as permissões
READ-ACP e WRITE-ACP em um subconjunto de objetos. Isso limita a conta para gerenciar permissões
somente em objetos específicos atualizando ACLs de objeto individuais.
Se você quiser que o Amazon S3 forneça logs de acesso ao seu bucket, deve conceder permissão de
gravação no bucket ao grupo de entrega de log. A única maneira de conceder as permissões necessárias
para o grupo de entrega de log é usar uma ACL de bucket, conforme exibido no seguinte fragmento de
ACL de bucket.
<AccessControlPolicy xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Owner>
...
</Owner>
<AccessControlList>
<Grant>
...
</Grant>
<Grant>
<Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group">
<URI>http://acs.amazonaws.com/groups/s3/LogDelivery</URI>
</Grantee>
<Permission>WRITE</Permission>
</Grant>
</AccessControlList>
</AccessControlPolicy>
Você deseja gerenciar permissões entre contas para todas as permissões do Amazon S3
Você pode usar ACLs para conceder permissões entre contas a outras contas. Mas as ACLs são
compatíveis apenas com um conjunto finito de permissões, e essas não incluem todas as permissões do
Amazon S3. Para obter mais informações, consulte Quais permissões posso conceder? (p. 443). Por
exemplo, você não pode conceder permissões em sub-recursos de bucket usando uma ACL. Para obter
mais informações, consulte Identity and Access Management no Amazon S3 (p. 252).
As políticas de bucket e de usuário são compatíveis com a concessão de permissão para todas as
operações do Amazon S3. (Para obter mais informações, consulte Ações do Amazon S3 (p. 273).) No
entanto, as políticas de usuário se destinam a gerenciar permissões para usuários em sua conta. Para
permissões entre contas para outras contas da AWS ou usuários em outra conta, você deve usar uma
política de bucket.
Com o AWS Identity and Access Management (IAM), é possível criar vários usuários em sua conta da
AWS e gerenciar as permissões deles por meio de políticas de usuário. Um usuário do IAM deve ter
permissões na conta pai a qual pertence e na conta da AWS que tem o recurso que o usuário deseja
acessar. As permissões podem ser concedidas do seguinte modo:
• Permissão na conta pai: a conta pai pode conceder permissões para seu usuário anexando uma política
de usuário.
• Permissão do proprietário do recurso: o proprietário do recurso pode conceder permissão para o usuário
do IAM (usando uma política de bucket) ou para a conta pai (usando uma política de bucket, uma ACL
de bucket ou uma ACL de objeto).
É semelhante a uma criança que deseja brincar com um brinquedo que pertence a outra pessoa. Nesse
caso, a criança precisa obter permissão de um responsável para brincar com o brinquedo e permissão do
proprietário do brinquedo.
Delegação de permissão
Se uma conta da AWS possuir um recurso, poderá conceder essas permissões para outra conta da AWS.
Essa conta pode então delegar essas permissões, ou um subconjunto delas, para usuários da conta. Isso
é chamado de delegação de permissão. Mas uma conta que recebe permissões de outra conta não pode
delegar permissão entre contas para outra conta da AWS.
Tópicos relacionados
Recomendamos que você analise, primeiramente, todos os tópicos introdutórios que explicam como
gerenciar o acesso aos recursos do Amazon S3 e as diretrizes relacionadas. Para obter mais informações,
consulte Identity and Access Management no Amazon S3 (p. 252). Você pode usar os seguintes tópicos
para obter mais informações sobre as opções específicas da política de acesso.
•
• Visão geral da lista de controle de acesso (ACL) (p. 440)
• Controlar a propriedade de objetos carregados usando a propriedade de objetos do S3 (p. 500)
Para determinar se o solicitante tem permissão para executar a operação específica, o Amazon S3 faz o
seguinte, na ordem, quando recebe uma solicitação:
1. Converte todas as políticas de acesso relevantes (política de usuário, política de bucket, ACLs) em
tempo de execução em um conjunto de políticas para avaliação.
2. Avalia o conjunto de políticas resultante nas seguintes etapas. Em cada etapa, o Amazon S3 avalia um
subconjunto de políticas em um contexto específico, com base na autoridade contextual.
a. Contexto de usuário: no contexto de usuário, a conta pai à qual o usuário pertence é a autoridade
contextual.
Um usuário deve ter permissão da conta pai para executar uma operação.
A etapa se aplicará apenas se a solicitação for feita por um usuário em uma conta da AWS. Se a
solicitação for feita usando credenciais raiz de uma conta da AWS, o Amazon S3 ignorará esta etapa.
b. Contexto de bucket: no contexto de bucket, o Amazon S3 avalia as políticas de propriedade da conta
da AWS que possui o bucket.
Se a solicitação for para uma operação de bucket, o solicitante deverá ter permissão do proprietário
do bucket. Se a solicitação for para um objeto, o Amazon S3 avaliará todas as políticas de
propriedade do proprietário do bucket para verificar se o proprietário do bucket não negou
explicitamente o acesso ao objeto. Se houver uma negação explícita definida, o Amazon S3 não
autorizará a solicitação.
c. Contexto de objeto: se a solicitação for para um objeto, o Amazon S3 avaliará o subconjunto de
políticas de propriedade do proprietário do objeto.
Veja a seguir alguns exemplos de cenários que ilustram como o Amazon S3 autoriza uma solicitação.
Example O solicitante é um principal do IAM: é uma solicitação para um objeto que não pertence
ao proprietário do bucket
Se a solicitação for para uma operação em um objeto que o proprietário do bucket não possui, além de
verificar se o solicitante tem permissões do proprietário do objeto, o Amazon S3 também deverá verificar
a política do bucket para garantir que o proprietário do bucket não definiu negação explícita no objeto.
Um proprietário de bucket (que paga a fatura) pode negar explicitamente o acesso aos objetos do bucket
independentemente de quem os possui. O proprietário do bucket também pode excluir qualquer objeto do
bucket
Para obter mais informações sobre como o Amazon S3 avalia as políticas de acesso para autorizar ou
negar solicitações para operações de bucket e operações de objeto, consulte os seguintes tópicos:
Tópicos
• Como o Amazon S3 autoriza uma solicitação para uma operação de bucket (p. 262)
• Como o Amazon S3 autoriza uma solicitação para uma operação de objeto (p. 265)
1. Contexto do usuário: se o solicitante for um principal do IAM, o principal deverá ter permissão da
conta pai da AWS à qual pertence. Nesta etapa, o Amazon S3 avalia um subconjunto de políticas
de propriedade da conta pai (também conhecida como a autoridade de contexto). Esse subconjunto
de políticas inclui a política de usuário que a conta pai anexa ao principal. Se o pai também possuir
o recurso na solicitação (neste caso, o bucket), o Amazon S3 também avaliará as políticas dos
recursos correspondentes (a política do bucket e a ACL do bucket) ao mesmo tempo. Sempre que uma
solicitação para uma operação de bucket é feita, os logs de acesso ao servidor registram o ID canônico
do solicitante. Para obter mais informações, consulte Registrar em log as solicitações com registro em
log de acesso ao servidor (p. 833).
2. Contexto de bucket: o solicitante deve ter permissões do proprietário do bucket para executar uma
operação específica de bucket. Nesta etapa, o Amazon S3 avalia um subconjunto de políticas de
propriedade da conta da AWS que possui o bucket.
O proprietário do bucket pode conceder permissão usando uma política do bucket ou a ACL do bucket.
Observe que, se a conta da AWS que possui o bucket também for a conta pai de um principal do IAM,
ela poderá configurar permissões de bucket em uma política de usuário.
O seguinte é uma ilustração gráfica da avaliação baseada em contexto para a operação de bucket.
1. Como a solicitação é feita usando credenciais raiz de uma conta da AWS, o contexto de usuário não é
avaliado.
2. No contexto de bucket, o Amazon S3 analisa a política de bucket para determinar se o solicitante tem
permissão para executar a operação. O Amazon S3 autoriza a solicitação.
Exemplo 2: operação de bucket solicitada por uma conta da AWS que não é a
proprietária do bucket
Neste exemplo, uma solicitação é feita usando as credenciais raiz da conta da AWS 1111-1111-1111 para
uma operação de bucket de propriedade da conta da AWS 2222-2222-2222. Nenhum usuário do IAM está
envolvido nessa solicitação.
1. Como a solicitação é feita usando as credenciais raiz de uma conta da AWS, o contexto de usuário não
é avaliado.
2. No contexto de bucket, o Amazon S3 examina a política de bucket. Se o proprietário do bucket (conta
da AWS 2222-2222-2222) não autorizou a conta da AWS 1111-1111-1111 a executar a operação
solicitada, o Amazon S3 negará a solicitação. Caso contrário, o Amazon S3 concederá a solicitação e
executará a operação.
Exemplo 3: operação de bucket solicitada por um principal do IAM cuja conta pai
da AWS também é a proprietária do bucket
No exemplo, a solicitação é enviada por Jill, uma usuária do IAM na conta da AWS 1111-1111-1111, que
também possui o bucket.
Neste exemplo, a conta pai da AWS 1111-1111-1111, à qual o principal pertence, também é a
proprietária do bucket. Como resultado, além da política do usuário, o Amazon S3 também avalia a
política do bucket e a ACL do bucket no mesmo contexto, porque pertencem à mesma conta.
2. Como o Amazon S3 avaliou a política do bucket e a ACL do bucket como parte do contexto de usuário,
ele não avalia o contexto de bucket.
Exemplo 4: operação de bucket solicitada por um principal do IAM cuja conta pai
da AWS não é a proprietária do bucket
Neste exemplo, a solicitação é enviada por Jill, uma usuária do IAM cuja conta pai da AWS é
1111-1111-1111, mas o bucket é de propriedade da outra conta da AWS, 2222-2222-2222.
Jill precisará de permissões da conta pai da AWS e do proprietário do bucket. O Amazon S3 avalia o
contexto da seguinte forma:
1. Contexto do usuário: se o solicitante for um principal do IAM, o principal deverá ter permissão da
conta pai da AWS à qual pertence. Nesta etapa, o Amazon S3 avalia um subconjunto de políticas de
propriedade da conta pai (também conhecida como a autoridade de contexto). Esse subconjunto de
políticas inclui a política de usuário que a pai anexa ao principal. Se o pai também possuir o recurso na
solicitação (bucket, objeto), o Amazon S3 avaliará as políticas de recursos correspondentes (política de
bucket, ACL de bucket e ACL de objeto) ao mesmo tempo.
Note
Se a conta pai da AWS possuir o recurso (bucket ou objeto), ela poderá conceder permissões
de recursos ao principal do IAM usando a política de usuário ou a política de recurso.
2. Contexto de bucket: neste contexto, o Amazon S3 avalia as políticas de propriedade da conta da AWS
que possui o bucket.
Se a conta da AWS que possui o objeto na solicitação não for a mesma que a do proprietário do bucket,
no contexto do bucket, o Amazon S3 verificará as políticas se o proprietário do bucket tiver negado
explicitamente o acesso ao objeto. Se houver uma negação explícita definida no objeto, o Amazon S3
não autorizará a solicitação.
3. Contexto de objeto: o solicitante deve ter permissões do proprietário do objeto para executar uma
operação específica de objeto. Nesta etapa, o Amazon S3 avalia a ACL do objeto.
Note
O seguinte é uma ilustração gráfica da avaliação baseada em contexto para uma operação de objeto.
Jill precisará de permissão da conta pai da AWS, do proprietário do bucket e do proprietário do objeto. O
Amazon S3 avalia o contexto da seguinte forma:
1. Como a solicitação é de um principal do IAM, o Amazon S3 avalia o contexto de usuário para verificar
se a conta pai da AWS 1111-1111-1111 forneceu a Jill permissão para executar a operação solicitada.
Se ela tiver essa permissão, o Amazon S3 avaliará o contexto de bucket. Caso contrário, o Amazon S3
negará a solicitação.
2. No contexto de bucket, o proprietário do bucket, conta da AWS 2222-2222-2222, é a autoridade de
contexto. O Amazon S3 avalia a política de bucket para determinar se o proprietário do bucket negou
explicitamente o acesso de Jill ao objeto.
3. No contexto de objeto, a autoridade de contexto é a conta da AWS 3333-3333-3333, a proprietária
do objeto. O Amazon S3 avalia a ACL do objeto para determinar se Jill tem permissão para acessar o
objeto. Se tiver, o Amazon S3 autorizará a solicitação.
Os tópicos nesta seção descrevem os elementos da linguagem de política de chave, com ênfase
em detalhes específicos do Amazon S3, e oferecem exemplos de política de bucket e usuário.
Recomendamos analisar primeiro os tópicos introdutórios que explicam os conceitos básicos e as opções
disponíveis para gerenciar o acesso aos recursos do Amazon S3. Para obter mais informações, consulte
Identity and Access Management no Amazon S3 (p. 252).
Important
Tópicos
• Políticas e permissões no Amazon S3 (p. 269)
• Uso de políticas de bucket (p. 376)
• Uso de políticas de usuário do IAM (p. 387)
• Demonstrações de exemplo: gerenciar o acesso aos recursos do Amazon S3 (p. 410)
• Usar funções vinculadas a serviços para o Amazon S3 Storage Lens (p. 437)
Para obter uma lista completa de ações, recursos e condições do Amazon S3, consulte Ações, recursos e
chaves de condição do Amazon S3 (p. 288).
• Recursos (p. 270): buckets, objetos, pontos de acesso e trabalhos são os recursos do Amazon S3
para os quais você pode permitir ou negar permissões. Em uma política, você usa o nome de recurso da
Amazon (ARN) para identificar o recurso. Para obter mais informações, consulte Recursos do Amazon
S3 (p. 270).
• Ações (p. 273): para cada recurso, o Amazon S3 oferece suporte a um conjunto de operações. Você
identifica as operações de recursos que permitirão (ou negarão) usando palavras-chave de ação.
Por exemplo, a permissão s3:ListBucket autoriza o usuário a empregar a operação GET Bucket (List
Objects) do Amazon S3. Para obter mais informações, consulte Ações do Amazon S3 (p. 273).
• Efeito: qual será o efeito quando o usuário solicitar a ação específica - pode ser permitir ou negar.
Se você não conceder (permitir) explicitamente acesso a um recurso, o acesso estará implicitamente
negado. Você também pode negar acesso explicitamente a um recurso. Você poderia fazer isso para
garantir que um usuário não possa acessar o recurso, mesmo se uma política diferente conceder
acesso. Para obter mais informações, consulte Elementos da política JSON do IAM: efeito.
• Principal (p. 271): a conta ou usuário que tem permissão de acesso a ações e recursos na instrução.
Em uma política de bucket, o principal é o usuário, a conta, o serviço ou outra entidade que receba essa
permissão. Para obter mais informações, consulte Principais (p. 271).
• Condição (p. 278): condições para quando uma política está em vigor. Você pode usar chaves de
toda a AWS e chaves específicas do Amazon S3 para especificar condições em uma política de acesso
do Amazon S3. Para obter mais informações, consulte Exemplos de chave de condição do Amazon
S3 (p. 278).
A política de bucket de exemplo a seguir mostra os elementos efeito, principal, ação e recurso. A
política permite que Dave, um usuário na conta ID de conta, tenha as permissões s3:GetObject,
s3:GetBucketLocation e s3:ListBucket do Amazon S3 no bucket awsexamplebucket1.
{
"Version": "2012-10-17",
"Id": "ExamplePolicy01",
"Statement": [
{
"Sid": "ExampleStatement01",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789012:user/Dave"
},
"Action": [
"s3:GetObject",
"s3:GetBucketLocation",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::awsexamplebucket1/*",
"arn:aws:s3:::awsexamplebucket1"
]
}
]
}
Para obter mais informações, consulte os tópicos abaixo. Para obter informações completas sobre
linguagem de políticas, consulte Políticas e permissões e Referência de política de JSON do IAM no Guia
do usuário do IAM.
Tópicos
• Recursos do Amazon S3 (p. 270)
• Principais (p. 271)
• Ações do Amazon S3 (p. 273)
• Chaves de condição do Amazon S3 (p. 275)
• Ações, recursos e chaves de condição do Amazon S3 (p. 288)
Recursos do Amazon S3
O formato comum de nome de recurso da Amazon (ARN) a seguir identifica recursos na AWS:
arn:partition:service:region:namespace:relative-id
Para obter informações sobre ARNs, consulte Nomes de recurso da Amazon (ARNs) na Referência geral
da AWS.
Para obter informações sobre recursos, consulte Elementos de política de JSON do IAM: recurso no Guia
do usuário do IAM.
• Partição: aws é um nome de partição comum. Se os seus recursos estiverem na região China (Pequim),
aws-cn será o nome da partição.
• Serviço: s3.
• ID relativo: bucket-name ou um bucket-name/object-key. Você pode usar curingas.
arn:aws:s3:::bucket_name/key_name
Para obter uma lista completa dos recursos do Amazon S3, consulte Ações, recursos e chaves de
condição do Amazon S3 (p. 288).
Para encontrar o ARN de um bucket do S3, consulte as páginas de permissões Bucket Policy (Política
de bucket) ou CORS configuration (Configuração CORS) do console do Amazon S3. Para obter mais
informações, consulte os tópicos a seguir:
arn:aws:s3:::examplebucket/developers/design_info.doc
Curingas
Você pode usar curingas como parte do ARN do recurso. É possível usar caracteres curinga (* e ?) em
qualquer segmento de ARN (partes separadas por dois pontos). Um asterisco (*) representa qualquer
combinação de zero ou mais caracteres, e um ponto de interrogação (?) representa qualquer caractere
único. É possível usar vários caracteres * ou ? em cada segmento, mas um curinga não pode abranger
segmentos.
• O ARN a seguir usa o curinga * na parte do ARN relativa ao ID para identificar todos os objetos no
bucket examplebucket.
arn:aws:s3:::examplebucket/*
• O ARN a seguir usa * para indicar todos os recursos do Amazon S3 (todos os buckets e objetos do S3
em sua conta).
arn:aws:s3:::*
• O ARN a seguir usa curingas, * e ?, na parte de relative-ID. Ele identifica todos os objetos em
buckets, como example1bucket, example2bucket, example3bucket e assim por diante.
arn:aws:s3:::example?bucket/*
Variáveis de políticas
Você pode usar variáveis de política em ARNs do Amazon S3. No momento da avaliação da política, essas
variáveis predefinidas são substituídas pelos valores correspondentes. Vamos supor que você organize
seu bucket como um conjunto de pastas, sendo uma pasta para cada um dos seus usuários. O nome da
pasta é igual ao nome do usuário. Para conceder aos usuários permissão às pastas, você pode especificar
uma variável de política no ARN do recurso:
arn:aws:s3:::bucket_name/developers/${aws:username}/
Principais
O elemento Principal especifica o usuário, a conta, o serviço ou outra entidade que tem o acesso
permitido ou negado a um recurso. Veja a seguir exemplos de especificação de Principal. Para obter
mais informações, consulte Principal no Guia do usuário do IAM.
"AWS":"account-ARN"
"Principal":{"AWS":"arn:aws:iam::AccountNumber-WithoutHyphens:root"}
"Principal":{"AWS":["arn:aws:iam::AccountNumber1-
WithoutHyphens:root","arn:aws:iam::AccountNumber2-WithoutHyphens:root"]}
O Amazon S3 também oferece suporte a um ID de usuário canônico, que é uma forma complexa do ID de
conta da AWS. Você pode especificar esse ID usando o formato a seguir.
"CanonicalUser":"64-digit-alphanumeric-value"
"Principal":{"CanonicalUser":"64-digit-alphanumeric-value"}
Para obter informações sobre como encontrar o ID de usuário canônico da conta, consulte Encontrar o ID
de usuário canônico da conta.
Important
Quando você usa um ID de usuário canônico em uma política, o Amazon S3 pode alterar o ID
canônico para o ID da conta da AWS correspondente. Isso afeta a política, pois os dois IDs
identificam a mesma conta.
"Principal":{"AWS":"arn:aws:iam::account-number-without-hyphens:user/username"}
Para obter exemplos detalhados que fornecem instruções passo a passo, consulte Exemplo 1: Proprietário
do bucket que concede permissões do bucket aos usuários (p. 413) e Exemplo 3: O proprietário do
bucket concede permissões para objetos que não possui (p. 424).
"Principal":"*"
"Principal":{"AWS":"*"}
Warning
Tenha cuidado ao conceder acesso anônimo ao bucket do S3. Quando você concede acesso
anônimo, qualquer pessoa no mundo pode acessar seu bucket. É altamente recomendável que
você nunca conceda nenhum tipo de acesso anônimo de gravação ao seu bucket do S3.
(OAI) do CloudFront. Em seguida, altere as permissões no bucket ou nos objetos em seu bucket. O
formato para especificar a OAI em uma instrução Principal é o descrito a seguir.
Para obter mais informações, consulte Como usar uma identidade de acesso de origem para restringir o
acesso ao conteúdo do Amazon S3 no Guia do desenvolvedor do Amazon CloudFront.
Ações do Amazon S3
O Amazon S3 define um conjunto de permissões que você pode especificar em uma política. Estas são
palavras-chave e cada uma mapeia para uma operação específica do Amazon S3. Para obter mais
informações sobre as operações do Amazon S3, consulte Ações na Referência da API do Amazon Simple
Storage Service.
Para ver como especificar permissões em uma política do Amazon S3, revise os exemplos de políticas
a seguir. Para obter uma lista de ações, recursos e chaves de condição do Amazon S3 para uso em
políticas, consulte Ações, recursos e chaves de condição do Amazon S3 (p. 288). Para obter uma lista
completa das ações do Amazon S3, consulte Ações.
Tópicos
• Exemplo: operações de objeto (p. 273)
• Exemplo: operações de bucket (p. 274)
• Exemplo: operações de sub-recursos de bucket (p. 274)
• Exemplo: operações de conta (p. 275)
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "statement1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::12345678901:user/Dave"
},
"Action": [
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": "arn:aws:s3:::awsexamplebucket1/*"
}
]
}
Você pode usar um curinga para conceder permissão para todas as ações do Amazon S3.
"Action": "*"
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"statement1",
"Effect":"Allow",
"Action":[
"s3:CreateBucket",
"s3:ListAllMyBuckets",
"s3:GetBucketLocation"
],
"Resource":[
"arn:aws:s3:::*"
]
}
]
}
Se um usuário quiser usar o Console de Gerenciamento da AWS para visualizar buckets e o conteúdo
de qualquer um desses buckets, o usuário deverá ter as permissões s3:ListAllMyBuckets e
s3:GetBucketLocation. Para obter um exemplo, consulte Política de acesso ao console no post de
blog Escrever políticas do IAM: como conceder acesso a um bucket do S3.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "statement1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789012:user/Dave"
},
"Action": [
"s3:GetObjectVersion",
"s3:GetBucketAcl"
],
"Resource": [
"arn:aws:s3:::DOC-EXAMPLE-BUCKET1",
"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/*"
]
}
]
}
Você pode excluir objetos chamando explicitamente a API DELETE objeto ou configurando seu ciclo de
vida (consulte Gerenciando seu ciclo de vida de armazenamento (p. 569)) de modo que o Amazon S3
possa remover os objetos quando seu ciclo de vida expirar. Para bloquear explicitamente usuários ou
contas para exclusão de objetos, você deve negar explicitamente as permissões s3:DeleteObject,
s3:DeleteObjectVersion e s3:PutLifecycleConfiguration.
Negação explícita
Por padrão, os usuários não têm nenhuma permissão. Mas, à medida que você cria usuários, adiciona
usuários a grupos e concede permissões a eles, eles podem obter certas permissões que você não
pretendia conceder. É aí que você pode usar a negação explícita, que se sobrepõe a todas as outras
permissões que um usuário pode ter e nega ao usuário permissões para ações específicas.
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"statement1",
"Effect":"Allow",
"Action":[
"s3:GetAccountPublicAccessBlock"
],
"Resource":[
"*"
]
}
]
}
No elemento Condition, que é opcional, você cria expressões em que usa operadores boolianos (equal,
less than, etc.) para fazer a correspondência da sua condição com os valores na solicitação. Por exemplo,
ao conceder a um usuário permissão para fazer upload de um objeto, o proprietário do bucket pode exigir
que o objeto seja publicamente legível adicionando a condição StringEquals conforme mostrado aqui:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "statement1",
"Effect": "Allow",
"Action": "s3:PutObject",
"Resource": [
"arn:aws:s3:::awsexamplebucket1/*"
],
"Condition": {
"StringEquals": {
"s3:x-amz-acl": "public-read"
}
}
}
]
}
No exemplo, o bloco Condition especifica a condição StringEquals que é aplicada ao par de chave-
valor especificado, "s3:x-amz-acl":["public-read"]. Existe um conjunto de chaves predefinidas
que pode ser usado para expressar uma condição. O exemplo usa a chave de condição s3:x-amz-acl.
Essa condição exige que o usuário inclua o cabeçalho x-amz-acl com o valor public-read em cada
solicitação de objeto PUT.
Tópicos
• Chaves de condição de toda a AWS (p. 276)
• Chaves de condição específicas do Amazon S3 (p. 277)
• Exemplos de chave de condição do Amazon S3 (p. 278)
A AWS fornece um conjunto de chaves comuns que recebe o suporte de todos serviços da AWS que, por
sua vez, dão suporte às políticas. Essas chaves são chamadas chaves de toda a AWS e usam o prefixo
aws:. Para obter uma lista completa de chaves de condição em toda a AWS, consulte Chaves da AWS
disponíveis para condições no Guia do usuário do IAM.
Você pode usar chaves de condição de toda a AWS no Amazon S3. O exemplo de política de bucket a
seguir concede a usuários autenticados permissão para usar a ação s3:GetObject, se a solicitação for
proveniente de um intervalo específico de endereços IP (192.0.2.0.*), a menos que o endereço IP seja
192.0.2.188. No bloco de condição, IpAddress e NotIpAddress são condições, e cada condição recebe
um par chave-valor para avaliação. Neste exemplo, os dois pares de chave-valor usam a chave da AWS
aws:SourceIp.
Note
{
"Version": "2012-10-17",
"Id": "S3PolicyId1",
"Statement": [
{
"Sid": "statement1",
"Effect": "Allow",
"Principal": "*",
"Action":"s3:GetObject",
"Resource": "arn:aws:s3:::awsexamplebucket1/*",
"Condition" : {
"IpAddress" : {
"aws:SourceIp": "192.0.2.0/24"
},
"NotIpAddress" : {
"aws:SourceIp": "192.0.2.188/32"
}
}
}
]
}
Você também pode usar outras chaves de condição de toda a AWS nas políticas do Amazon S3. Por
exemplo, você pode especificar o aws:SourceVpce e as chaves de condição aws:SourceVpc em
políticas de bucket para VPC endpoints. Para ver exemplos, consulte Controlar o acesso a partir de VPC
endpoints com políticas de bucket (p. 377).
Você pode usar chaves de condição do Amazon S3 com ações específicas do Amazon S3. Cada chave
de condição mapeia para o mesmo cabeçalho de solicitação de nome permitido pela API na qual a
condição pode ser definida. As chaves de condição específicas do Amazon S3 ditam o comportamento
dos cabeçalhos de solicitação de mesmo nome. Para obter uma lista completa de chaves de condição
específicas do Amazon S3, consulte Ações, recursos e chaves de condição do Amazon S3 (p. 288).
Por exemplo, a chave de condição s3:x-amz-acl usada para conceder permissão de condição para a
permissão
s3:PutObject
define o comportamento do cabeçalho de solicitação x-amz-acl para o qual a API do objeto PUT oferece
suporte. A chave de condição s3:VersionId que você usa para conceder permissão condicional para a
permissão
s3:GetObjectVersion
define o comportamento do parâmetro de consulta versionId que você define em uma solicitação de
objeto GET.
A política de bucket a seguir concede a permissão s3:PutObject para duas contas da AWS se a
solicitação incluir o cabeçalho x-amz-acl, tornando o objeto publicamente legível. O bloco Condition
usa a condição StringEquals e recebe um par de chave/valor, "s3:x-amz-acl":["public-read",
para avaliação. No par de chave-valor, s3:x-amz-acl é uma chave específica do Amazon S3, conforme
indicado pelo prefixo s3:.
{
"Version":"2012-10-17",
"Statement": [
{
"Sid":"AddCannedAcl",
"Effect":"Allow",
"Principal": {
"AWS": [
"arn:aws:iam::Account1-ID:root",
"arn:aws:iam::Account2-ID:root"
]
},
"Action":"s3:PutObject",
"Resource": ["arn:aws:s3:::awsexamplebucket1/*"],
"Condition": {
"StringEquals": {
"s3:x-amz-acl":["public-read"]
}
}
}
]
}
Important
Nem todas as condições fazem sentido para todas as ações. Por exemplo, faz sentido
incluir uma condição s3:LocationConstraint em uma política que concede a permissão
s3:CreateBucket do Amazon S3. No entanto, não faz sentido incluir essa condição em
uma política que conceda a permissão s3:GetObject. O Amazon S3 pode testar erros de
semântica para esse tipo que envolve condições específicas do Amazon S3. Contudo, se você
estiver criando uma política para um usuário do IAM e incluir uma condição do Amazon S3
semanticamente inválida, nenhum erro será reportado porque o IAM não pode validar condições
do Amazon S3.
Você pode usar a linguagem de políticas de acesso para especificar condições ao conceder permissões.
Você pode usar o elemento Condition opcional, ou o bloco Condition para especificar condições para
quando uma política está em vigor.
Para obter políticas que usam chaves de condição do Amazon S3 para operações de objeto e bucket,
consulte os exemplos a seguir. Para obter mais informações sobre essas chaves de condição, consulte
Chaves de condição do Amazon S3 (p. 275). Para obter uma lista completa de ações do Amazon S3,
chaves de condição e recursos que você pode especificar nas políticas, consulte Ações, recursos e chaves
de condição do Amazon S3 (p. 288).
Esta seção fornece exemplos que mostram como você pode usar chaves de condição específicas do
Amazon S3 para operações de objeto. Para obter uma lista completa de ações do Amazon S3, as chaves
de condição e os recursos que você pode especificar em políticas, consulte Ações, recursos e chaves de
condição do Amazon S3 (p. 288).
Várias das políticas de exemplo mostram como você pode usar chaves de condições com operações
de objeto PUT. As operações de objeto PUT permitem cabeçalhos específicos baseados em lista de
controle de acesso (ACL) usados para conceder permissões baseadas em ACL. Usando essas chaves,
o proprietário do bucket pode definir uma condição para exigir permissões de acesso específicas quando
o usuário faz upload de um objeto. Você também pode conceder permissões baseadas em ACL com a
operação PutoObjectAcl. Para obter mais informações, consulte PutObjectAcl na Referência da API do
Amazon S3 Amazon Simple Storage Service. Para obter mais informações sobre ACLs, consulte Visão
geral da lista de controle de acesso (ACL) (p. 440).
Tópicos
• Exemplo 1: Concessão da permissão s3:PutObject com uma condição que exige que o proprietário do
bucket obtenha controle total (p. 278)
• Exemplo 2: Concessão da permissão s3:PutObject que exige os objetos armazenados usando
criptografia no lado do servidor (p. 280)
• Exemplo 3: Concessão da permissão s3:PutObject para copiar objetos com uma restrição na origem
da cópia (p. 281)
• Exemplo 4: Concessão de acesso a uma versão específica de um objeto (p. 282)
• Exemplo 5: restrição de uploads de objetos com uma classe de armazenamento específica (p. 283)
• Exemplo 6: conceder permissões com base em tags de objetos (p. 283)
• Exemplo 7: restringir o acesso pelo ID da conta da AWS do proprietário do bucket (p. 283)
• Exemplo 8: exigir uma versão mínima de TLS (p. 283)
Exemplo 1: Concessão da permissão s3:PutObject com uma condição que exige que o
proprietário do bucket obtenha controle total
A operação PUT Object permite cabeçalhos específicos da lista de controle de acesso (ACL) que você usa
para conceder permissões baseadas em ACL. Usando essas chaves, o proprietário do bucket pode definir
uma condição para exigir permissões de acesso específicas quando o usuário faz upload de um objeto.
Suponha que a conta A seja proprietária de um bucket e que o administrador da conta queira conceder
a Dave, um usuário na conta B, permissões para fazer upload de objetos. Por padrão, os objetos que
Dave carrega são de propriedade da conta B, e a conta A não tem permissões nesses objetos. Como
o proprietário do bucket é quem paga a fatura, ele quer permissões completas nos objetos que Dave
carrega. O administrador da conta A pode fazer isso concedendo a Dave a permissão s3:PutObject,
com a condição de que a solicitação inclua cabeçalhos específicos da ACL, que concede permissão total
explícita ou usa uma ACL pré-configurada. Para obter mais informações, consulte Objeto PUT.
Você pode exigir o cabeçalho x-amz-full-control na solicitação com permissão de controle total do
proprietário do bucket. A política de bucket a seguir concede ao usuário Dave a permissão s3:PutObject
com uma condição de uso da chave de condição s3:x-amz-grant-full-control, que exige que a
solicitação inclua o cabeçalho x-amz-full-control.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "statement1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::AccountB-ID:user/Dave"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::awsexamplebucket1/*",
"Condition": {
"StringEquals": {
"s3:x-amz-grant-full-control": "id=AccountA-CanonicalUserID"
}
}
}
]
}
Note
Este exemplo trata da permissão entre contas. Contudo, se Dave, a quem é concedida a
permissão, pertencer à conta da AWS que é proprietária do bucket, essa permissão condicional
não será necessária. Isso acontece porque a conta pai à qual o Dave pertence é proprietária dos
objetos que o usuário carrega.
A política de bucket anterior concede permissão condicional ao usuário Dave na conta B. Enquanto
essa política estiver em vigor, Dave poderá obter a mesma permissão sem nenhuma condição por meio
de alguma outra política. Por exemplo, Dave pode pertencer a um grupo e você concede ao grupo a
permissão s3:PutObject sem nenhuma condição. Para evitar essas brechas de permissão, você pode
elaborar uma política de acesso mais estrita adicionando uma negação explícita. Neste exemplo, você
nega explicitamente a permissão de upload ao usuário Dave se ele não incluir os cabeçalhos necessários
na solicitação, concedendo permissões totais ao proprietário do bucket. A negação explícita sempre se
sobrepõe a qualquer outra permissão concedida. Veja a seguir um exemplo de política de acesso revisada
com a negação explícita adicionada.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "statement1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::AccountB-ID:user/AccountBadmin"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::awsexamplebucket1/*",
"Condition": {
"StringEquals": {
"s3:x-amz-grant-full-control": "id=AccountA-CanonicalUserID"
}
}
},
{
"Sid": "statement2",
"Effect": "Deny",
"Principal": {
"AWS": "arn:aws:iam::AccountB-ID:user/AccountBadmin"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::awsexamplebucket1/*",
"Condition": {
"StringNotEquals": {
"s3:x-amz-grant-full-control": "id=AccountA-CanonicalUserID"
}
}
}
]
}
Se você tiver duas contas da AWS, poderá testar a política usando a interface de linha de comando da
AWS (CLI da AWS). Anexe a política e use as credenciais de Dave para testar a permissão usando o
seguinte comando put-object da CLI da AWS. Você fornece as credenciais de Dave adicionando o
parâmetro --profile. Você concede permissão de controle total ao proprietário do bucket adicionando
o parâmetro --grant-full-control. Para obter mais informações sobre configuração e uso da AWS
CLI, consulte Desenvolvimento com o Amazon S3 usando a AWS CLI (p. 1033).
Você pode exigir o cabeçalho x-amz-acl com uma ACL padrão que concede permissão de controle total
ao proprietário do bucket. Para exigir o cabeçalho x-amz-acl na solicitação, você pode substituir o par de
chave-valor no bloco Condition e especificar a chave de condição s3:x-amz-acl, conforme o exemplo
abaixo.
"Condition": {
"StringNotEquals": {
"s3:x-amz-acl": "bucket-owner-full-control"
}
Para testar a permissão usando a CLI do AWS, você especifica o parâmetro --acl. A CLI do AWS
adiciona o cabeçalho x-amz-acl quando ele envia a solicitação.
Vamos supor que a conta A é proprietária de um bucket. O administrador da conta deseja conceder a
Jane, uma usuária na conta A, a permissão para fazer upload de objetos com a condição de que Jane
sempre solicite criptografia no lado do servidor, de modo que o Amazon S3 salve objetos criptografados.
O administrador da conta A pode fazer isso usando a chave de condição s3:x-amz-server-side-
encryption, conforme exibido. O par de chave-valor no bloco Condition especifica a chave s3:x-
amz-server-side-encryption.
"Condition": {
"StringNotEquals": {
"s3:x-amz-server-side-encryption": "AES256"
}
Ao testar a permissão usando a CLI da AWS, adicione o parâmetro obrigatório usando o parâmetro --
server-side-encryption.
Exemplo 3: Concessão da permissão s3:PutObject para copiar objetos com uma restrição na
origem da cópia
Na solicitação PUT objeto, quando você especifica o objeto de origem, isso é uma operação de cópia
(consulte PUT objeto - Copiar). De acordo com isso, o proprietário do bucket pode conceder ao usuário
permissão para copiar objetos com restrições na origem; por exemplo:
A política de bucket a seguir concede a permissão s3:PutObject ao usuário (Dave). Permite copiar
apenas objetos com uma condição de que a solicitação inclua o cabeçalho s3:x-amz-copy-source e o
valor do cabeçalho especifique o prefixo de nome de chave /awsexamplebucket1/public/*.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "cross-account permission to user in your own account",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789012:user/Dave"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::awsexamplebucket1/*"
},
{
"Sid": "Deny your user permission to upload object if copy source is not /
bucket/folder",
"Effect": "Deny",
"Principal": {
"AWS": "arn:aws:iam::123456789012:user/Dave"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::awsexamplebucket1/*",
"Condition": {
"StringNotLike": {
"s3:x-amz-copy-source": "awsexamplebucket1/public/*"
}
}
}
]
}
Você pode testar a permissão usando o comando da CLI da AWS copy-object. Você especifica a
origem adicionando o parâmetro --copy-source; o prefixo de nome de chave que deve coincidir
com o prefixo permitido na política. Você precisa inserir as credenciais do usuário de Dave usando o
parâmetro --profile. Para obter mais informações sobre a configuração da CLI da AWS, consulte
Desenvolvimento com o Amazon S3 usando a AWS CLI (p. 1033).
A política anterior usa a condição StringNotLike. Para conceder a permissão para copiar apenas um
objeto em específico, altere a condição de StringNotLike para StringNotEquals e, em seguida,
especifique a chave de objeto exata, conforme exibido.
"Condition": {
"StringNotEquals": {
"s3:x-amz-copy-source": "awsexamplebucket1/public/PublicHappyFace1.jpg"
}
}
Para obter mais informações, consulte GetObject na Referência da API do Amazon Simple Storage
Service.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "statement1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789012:user/Dave"
},
"Action": "s3:GetObjectVersion",
"Resource": "arn:aws:s3:::examplebucketversionenabled/HappyFace.jpg"
},
{
"Sid": "statement2",
"Effect": "Deny",
"Principal": {
"AWS": "arn:aws:iam::123456789012:user/Dave"
},
"Action": "s3:GetObjectVersion",
"Resource": "arn:aws:s3:::examplebucketversionenabled/HappyFace.jpg",
"Condition": {
"StringNotEquals": {
"s3:VersionId": "AaaHbAQitwiL_h47_44lRO2DDfLlBO5e"
}
}
}
]
}
Você pode testar as permissões usando o comando get-object da CLI da AWS com o parâmetro --
version-id que identifica a versão específica do objeto. O comando recupera o objeto e o salva no
arquivo OutputFile.jpg.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "statement1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789012:user/Dave"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET1/*",
"Condition": {
"StringEquals": {
"s3:x-amz-storage-class": [
"STANDARD_IA"
]
}
}
}
]
}
• Restringir o acesso a buckets em uma conta da AWS especificada no Guia do AWS PrivateLink
• Limitar o acesso a contas específicas da AWS no Blog de armazenamento da AWS
S3 com base na versão TLS usada pelo cliente. Você pode usar essa chave de condição para gravar
políticas que exigem uma versão mínima de TLS.
Example
Este exemplo de política de bucket nega solicitações PutObject por clientes que tenham uma versão TLS
inferior a 1.2, por exemplo, 1.1 ou 1.0.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Principal": "*",
"Action": "s3:PutObject",
"Resource": [
"arn:aws:s3:::DOC-EXAMPLE-BUCKET1",
"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/*"
],
"Condition": {
"NumericLessThan": {
"s3:TlsVersion": 1.2
}
}
}
]
}
Example
Esta política de bucket de exemplo permite solicitações PutObject por clientes que têm uma versão TLS
maior que 1.1, por exemplo, 1.2, 1.3 ou superior.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:PutObject",
"Resource": [
"arn:aws:s3:::DOC-EXAMPLE-BUCKET1",
"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/*"
],
"Condition": {
"NumericGreaterThan": {
"s3:TlsVersion": 1.1
}
}
}
]
}
Esta seção fornece exemplos de políticas que mostram como você pode usar chaves de condição
específicas do Amazon S3 para operações de bucket.
Tópicos
• Exemplo 1: conceder a um usuário permissão para criar um bucket somente em uma região
específica (p. 285)
• Exemplo 2: obter uma lista de objetos em um bucket com um prefixo específico (p. 286)
• Exemplo 3: definir o número máximo de chaves (p. 288)
Exemplo 1: conceder a um usuário permissão para criar um bucket somente em uma região
específica
Vamos supor que um administrador de uma conta da AWS queira conceder ao seu usuário (Dave)
a permissão para criar um bucket somente na região América do Sul (São Paulo). O administrador
da conta pode anexar a política de usuário a seguir que concede a permissão s3:CreateBucket
com uma condição, conforme exibido. O par de chave-valor no bloco Condition especifica a chave
s3:LocationConstraint e a região sa-east-1 como valor.
Note
Neste exemplo, o proprietário do bucket concede permissão para um de seus usuários, de modo
que tanto uma política de bucket quanto uma política de usuário podem ser usadas. Este exemplo
mostra uma política de usuário.
Para obter uma lista das regiões do Amazon S3, consulte Regiões e endpoints na Referência geral da
AWS.
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"statement1",
"Effect":"Allow",
"Action": "s3:CreateBucket",
"Resource": "arn:aws:s3:::*",
"Condition": {
"StringLike": {
"s3:LocationConstraint": "sa-east-1"
}
}
}
]
}
A política acima impede que o usuário crie um bucket em qualquer outra Região, exceto sa-east-1.
No entanto, alguma outra política pode conceder a esse usuário permissão para criar buckets em outra
Região. Por exemplo, se ele pertencer a um grupo, o grupo pode ter uma política anexada que permita que
todos os seus usuários tenham permissão para criar buckets em outra Região. Para garantir que o usuário
não obtenha permissão para criar buckets em nenhuma outra Região, você pode adicionar uma instrução
de negação explícita nessa política.
A declaração Deny usa a condição StringNotLike. Isto é, uma solicitação de criação de bucket será
negada se a restrição de localização não for sa-east-1. A negação explícita não permite que o usuário
crie um bucket em nenhuma outra região, independentemente de outras permissões que o usuário receba.
A política abaixo inclui uma instrução de negação explícita.
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"statement1",
"Effect":"Allow",
"Action": "s3:CreateBucket",
"Resource": "arn:aws:s3:::*",
"Condition": {
"StringLike": {
"s3:LocationConstraint": "sa-east-1"
}
}
},
{
"Sid":"statement2",
"Effect":"Deny",
"Action": "s3:CreateBucket",
"Resource": "arn:aws:s3:::*",
"Condition": {
"StringNotLike": {
"s3:LocationConstraint": "sa-east-1"
}
}
}
]
}
Você pode testar a política usando o seguinte comando da CLI da AWS create-bucket. Este exemplo
usa o arquivo bucketconfig.txt para especificar a restrição de localização. Observe o caminho do
arquivo do Windows. Você precisa atualizar o nome e o caminho do bucket conforme apropriado. Você
deve fornecer as credenciais do usuário usando o parâmetro --profile. Para obter mais informações
sobre configuração e uso da AWS CLI, consulte Desenvolvimento com o Amazon S3 usando a AWS
CLI (p. 1033).
{"LocationConstraint": "sa-east-1"}
Você pode usar a chave de condição s3:prefix para limitar a resposta da API GET Bucket (ListObjects)
a nomes de chave com um prefixo específico. Se você for o proprietário do bucket, poderá restringir
um usuário a listar o conteúdo de um prefixo específico no bucket. Essa chave de condição será útil se
os objetos no bucket forem organizados por prefixos de nome de chave. O console do Amazon S3 usa
prefixos de nomes de chaves para mostrar um conceito de pasta. Somente o console suporta o conceito
de pastas; a API do Amazon S3 suporta somente buckets e objetos. Para obter mais informações sobre
como usar prefixos e delimitadores para filtrar permissões de acesso, consulte Controlar o acesso a um
bucket com políticas de usuário (p. 387).
Por exemplo, se você tiver dois objetos com nomes de chave public/object1.jpg e public/
object2.jpg, o console mostrará os objetos na pasta public. Na API do Amazon S3, esses são
objetos com prefixos, não objetos em pastas. No entanto, na API do Amazon S3, se você organizar suas
chaves de objeto usando tais prefixos, poderá conceder a permissão s3:ListBucket com a condição
s3:prefix que permitirá que o usuário obtenha uma lista de nomes de chave com um prefixo específico.
Neste exemplo, o proprietário do bucket e a conta pai à qual o usuário pertence são os mesmos. Assim,
o proprietário do bucket pode usar uma política de bucket ou uma política de usuário. Para obter mais
informações sobre outras chaves de condição que você pode usar com a API GET Bucket (ListObjects),
consulte ListObjects.
Política de usuário
A política de usuário a seguir concede a permissão s3:ListBucket (consulte GET bucket (listar objetos))
com uma condição que exige que o usuário especifique o prefix na solicitação com o valor projects.
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"statement1",
"Effect":"Allow",
"Action": "s3:ListBucket",
"Resource":"arn:aws:s3:::awsexamplebucket1",
"Condition" : {
"StringEquals" : {
"s3:prefix": "projects"
}
}
},
{
"Sid":"statement2",
"Effect":"Deny",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::awsexamplebucket1",
"Condition" : {
"StringNotEquals" : {
"s3:prefix": "projects"
}
}
}
]
}
A condição restringe o usuário a listar chaves de objeto com o prefixo projects. A negação
explícita adicionada nega a solicitação do usuário para listar chaves com qualquer outro prefixo,
independentemente de outras permissões que o usuário possa ter. Por exemplo, é possível que o usuário
receba a permissão para listar chaves de objetos sem nenhuma restrição, tanto por meio de atualizações
na política de usuário anterior quanto por meio de uma política de bucket. Como a negação explícita
sempre prevalece, a solicitação do usuário para listar outras chaves além do prefixo projects é negada.
Política de bucket
Se você adicionar o elemento Principal à política de usuário acima, identificando o usuário, agora terá
uma política de bucket conforme exibido.
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"statement1",
"Effect":"Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789012:user/bucket-owner"
},
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::awsexamplebucket1",
"Condition" : {
"StringEquals" : {
"s3:prefix": "projects"
}
}
},
{
"Sid":"statement2",
"Effect":"Deny",
"Principal": {
"AWS": "arn:aws:iam::123456789012:user/bucket-owner"
},
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::awsexamplebucket1",
"Condition" : {
"StringNotEquals" : {
"s3:prefix": "projects"
}
}
}
]
}
Você pode testar a política usando o seguinte comando da CLI da AWS list-object. No comando,
você fornece as credenciais do usuário usando o parâmetro --profile. Para obter mais informações
sobre configuração e uso da AWS CLI, consulte Desenvolvimento com o Amazon S3 usando a AWS
CLI (p. 1033).
Se o bucket tiver o versionamento habilitado, para listar os objetos no bucket, você deverá conceder a
permissão s3:ListBucketVersions na política anterior, em vez da permissão s3:ListBucket. Essa
permissão também oferece suporte à chave de condição s3:prefix.
Você pode usar a chave de condição s3:max-keyspara definir o número máximo de chaves que o
solicitante pode retornar em uma solicitação GET Bucket (ListObjects) ou ListObjectVersions. Por padrão,
a API retorna até 1.000 chaves. Para obter uma lista de operadores de condição numérica que você pode
usar com s3:max-keys e exemplos associados, consulte Operadores de condição numérica no Guia do
usuário do IAM.
Referências:
Tópicos
• Ações definidas pelo Amazon S3 (p. 289)
• Tipos de recursos definidos pelo Amazon S3 (p. 373)
Você pode especificar as seguintes ações no elemento Action de uma declaração de política do IAM.
Use políticas para conceder permissões para executar uma operação na AWS. Quando usa uma ação em
uma política, você geralmente permite ou nega acesso à operação da API ou ao comando da CLI com o
mesmo nome. No entanto, em alguns casos, uma única ação controla o acesso a mais de uma operação.
Como alternativa, algumas operações exigem várias ações diferentes.
A coluna Resource types (Tipos de recursos) indica se cada ação é compatível com permissões no
nível do recurso. Se não houver valor para essa coluna, você deverá especificar todos os recursos ("*")
no elemento Resource de sua declaração de política. Se a coluna incluir um tipo de recurso, você
poderá especificar um ARN desse tipo em uma declaração com essa ação. Os recursos necessários são
indicados na tabela com um asterisco (*). Se você especificar um ARN de permissão no nível do recurso
em uma instrução que esteja usando essa ação, ele deverá ser desse tipo. Algumas ações oferecem
suporte a vários tipos de recursos. Se o tipo de recurso for opcional (não indicado como obrigatório), você
poderá optar por usar um, mas não o outro.
s3:DataAccessPointArn
(p. 374)
s3:DataAccessPointAccount
(p. 374)
s3:AccessPointNetworkOrigin
(p. 374)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:DataAccessPointAccount
(p. 374)
s3:DataAccessPointArn
(p. 374)
s3:AccessPointNetworkOrigin
(p. 374)
s3:RequestObjectTag/
<key>
(p. 375)
s3:RequestObjectTagKeys
(p. 375)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-
amz-acl
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:x-amz-
copy-
source
(p. 376)
s3:x-amz-
grant-full-
control
(p. 376)
s3:x-amz-
grant-read
(p. 376)
s3:x-amz-
grant-write
(p. 376)
s3:x-amz-
grant-
write-acp
(p. 376)
s3:x-amz-
metadata-
directive
(p. 376)
s3:x-amz-
server-
side-
encryption
(p. 376)
s3:x-amz-
server-
side-
encryption-
aws-kms-
key-id
(p. 376)
s3:x-amz-
storage-
class
(p. 376)
s3:x-amz-
website-
redirect-
location
(p. 376)
s3:object-
lock-mode
(p. 375)
s3:object-
lock-retain-
until-date
(p. 375)
s3:object-
lock-
s3:object-
lock-
legal-hold
(p. 375)
s3:DataAccessPointAccount
(p. 374)
s3:DataAccessPointArn
(p. 374)
s3:AccessPointNetworkOrigin
(p. 374)
s3:authType
(p. 375)
s3:locationconstraint
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-
amz-acl
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:DataAccessPointAccount
(p. 374)
s3:DataAccessPointArn
(p. 374)
s3:AccessPointNetworkOrigin
(p. 374)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:authType
(p. 375)
s3:locationconstraint
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-
amz-acl
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:x-amz-
grant-full-
control
(p. 376)
s3:x-amz-
grant-read
(p. 376)
s3:x-amz-
grant-
read-acp
(p. 376)
s3:x-amz-
grant-write
(p. 376)
s3:x-amz-
grant-
write-acp
(p. 376)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:RequestJobPriority
(p. 375)
s3:RequestJobOperation
(p. 374)
aws:TagKeys
(p. 374)
aws:RequestTag/
${TagKey}
(p. 374)
s3:DataAccessPointArn
(p. 374)
s3:DataAccessPointAccount
(p. 374)
s3:AccessPointNetworkOrigin
(p. 374)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:DataAccessPointArn
(p. 374)
s3:DataAccessPointAccount
(p. 374)
s3:AccessPointNetworkOrigin
(p. 374)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:DataAccessPointArn
(p. 374)
s3:DataAccessPointAccount
(p. 374)
s3:AccessPointNetworkOrigin
(p. 374)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:DataAccessPointArn
(p. 374)
s3:DataAccessPointAccount
(p. 374)
s3:AccessPointNetworkOrigin
(p. 374)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:ExistingJobPriority
(p. 374)
s3:ExistingJobOperation
(p. 374)
s3:DataAccessPointArn
(p. 374)
s3:AccessPointNetworkOrigin
(p. 374)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:DataAccessPointAccount
(p. 374)
s3:DataAccessPointArn
(p. 374)
s3:AccessPointNetworkOrigin
(p. 374)
s3:ExistingObjectTag/
<key>
(p. 374)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:DataAccessPointAccount
(p. 374)
s3:DataAccessPointArn
(p. 374)
s3:AccessPointNetworkOrigin
(p. 374)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:versionid
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:DataAccessPointAccount
(p. 374)
s3:DataAccessPointArn
(p. 374)
s3:AccessPointNetworkOrigin
(p. 374)
s3:ExistingObjectTag/
<key>
(p. 374)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:versionid
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:AccessPointNetworkOrigin
(p. 374)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:DataAccessPointArn
(p. 374)
s3:DataAccessPointAccount
(p. 374)
s3:AccessPointNetworkOrigin
(p. 374)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:DataAccessPointAccount
(p. 374)
s3:DataAccessPointArn
(p. 374)
s3:AccessPointNetworkOrigin
(p. 374)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:DataAccessPointAccount
(p. 374)
s3:DataAccessPointArn
(p. 374)
s3:AccessPointNetworkOrigin
(p. 374)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:DataAccessPointArn
(p. 374)
s3:AccessPointNetworkOrigin
(p. 374)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:DataAccessPointAccount
(p. 374)
s3:DataAccessPointArn
(p. 374)
s3:AccessPointNetworkOrigin
(p. 374)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:DataAccessPointAccount
(p. 374)
s3:DataAccessPointArn
(p. 374)
s3:AccessPointNetworkOrigin
(p. 374)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:signatureversion
(p. 375)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:DataAccessPointAccount
(p. 374)
s3:DataAccessPointArn
(p. 374)
s3:AccessPointNetworkOrigin
(p. 374)
s3:ExistingObjectTag/
<key>
(p. 374)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:DataAccessPointAccount
(p. 374)
s3:DataAccessPointArn
(p. 374)
s3:AccessPointNetworkOrigin
(p. 374)
s3:ExistingObjectTag/
<key>
(p. 374)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:DataAccessPointAccount
(p. 374)
s3:DataAccessPointArn
(p. 374)
s3:AccessPointNetworkOrigin
(p. 374)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:DataAccessPointAccount
(p. 374)
s3:DataAccessPointArn
(p. 374)
s3:AccessPointNetworkOrigin
(p. 374)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:DataAccessPointAccount
(p. 374)
s3:DataAccessPointArn
(p. 374)
s3:AccessPointNetworkOrigin
(p. 374)
s3:ExistingObjectTag/
<key>
(p. 374)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:DataAccessPointArn
(p. 374)
s3:AccessPointNetworkOrigin
(p. 374)
s3:ExistingObjectTag/
<key>
(p. 374)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:versionid
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:DataAccessPointAccount
(p. 374)
s3:DataAccessPointArn
(p. 374)
s3:AccessPointNetworkOrigin
(p. 374)
s3:ExistingObjectTag/
<key>
(p. 374)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:versionid
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:DataAccessPointAccount
(p. 374)
s3:DataAccessPointArn
(p. 374)
s3:AccessPointNetworkOrigin
(p. 374)
s3:ExistingObjectTag/
<key>
(p. 374)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:versionid
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:versionid
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:DataAccessPointAccount
(p. 374)
s3:DataAccessPointArn
(p. 374)
s3:AccessPointNetworkOrigin
(p. 374)
s3:authType
(p. 375)
s3:delimiter
(p. 375)
s3:max-
keys
(p. 375)
s3:prefix
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:DataAccessPointAccount
(p. 374)
s3:DataAccessPointArn
(p. 374)
s3:AccessPointNetworkOrigin
(p. 374)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:DataAccessPointAccount
(p. 374)
s3:DataAccessPointArn
(p. 374)
s3:AccessPointNetworkOrigin
(p. 374)
s3:authType
(p. 375)
s3:delimiter
(p. 375)
s3:max-
keys
(p. 375)
s3:prefix
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:DataAccessPointArn
(p. 374)
s3:AccessPointNetworkOrigin
(p. 374)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:DataAccessPointAccount
(p. 374)
s3:AccessPointNetworkOrigin
(p. 374)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:DataAccessPointArn
(p. 374)
s3:AccessPointNetworkOrigin
(p. 374)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:DataAccessPointArn
(p. 374)
s3:AccessPointNetworkOrigin
(p. 374)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-
amz-acl
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:x-amz-
grant-full-
control
(p. 376)
s3:x-amz-
grant-read
(p. 376)
s3:x-amz-
grant-
read-acp
(p. 376)
s3:x-amz-
grant-write
(p. 376)
s3:x-amz-
grant-
write-acp
(p. 376)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:TlsVersion
(p. 375)
s3:signatureversion
(p. 375)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:ExistingJobPriority
(p. 374)
s3:ExistingJobOperation
(p. 374)
aws:TagKeys
(p. 374)
aws:RequestTag/
${TagKey}
(p. 374)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:DataAccessPointAccount
(p. 374)
s3:DataAccessPointArn
(p. 374)
s3:AccessPointNetworkOrigin
(p. 374)
s3:RequestObjectTag/
<key>
(p. 375)
s3:RequestObjectTagKeys
(p. 375)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-
amz-acl
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:x-amz-
copy-
source
(p. 376)
s3:x-amz-
grant-full-
control
(p. 376)
s3:x-amz-
grant-read
(p. 376)
s3:x-amz-
grant-write
(p. 376)
s3:x-amz-
grant-
write-acp
(p. 376)
s3:x-amz-
metadata-
directive
(p. 376)
s3:x-amz-
server-
side-
encryption
(p. 376)
s3:x-amz-
server-
side-
encryption-
aws-kms-
key-id
(p. 376)
s3:x-amz-
storage-
class
(p. 376)
s3:x-amz-
website-
redirect-
location
(p. 376)
s3:object-
lock-mode
(p. 375)
s3:object-
lock-retain-
until-date
(p. 375)
s3:object-
lock-
s3:object-
lock-
legal-hold
(p. 375)
s3:DataAccessPointArn
(p. 374)
s3:AccessPointNetworkOrigin
(p. 374)
s3:ExistingObjectTag/
<key>
(p. 374)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-
amz-acl
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:x-amz-
grant-full-
control
(p. 376)
s3:x-amz-
grant-read
(p. 376)
s3:x-amz-
grant-
read-acp
(p. 376)
s3:x-amz-
grant-
write-acp
(p. 376)
s3:x-amz-
storage-
class
(p. 376)
s3:DataAccessPointArn
(p. 374)
s3:AccessPointNetworkOrigin
(p. 374)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:object-
lock-
legal-hold
(p. 375)
s3:DataAccessPointAccount
(p. 374)
s3:DataAccessPointArn
(p. 374)
s3:AccessPointNetworkOrigin
(p. 374)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:object-
lock-mode
(p. 375)
s3:object-
lock-retain-
until-date
(p. 375)
s3:object-
lock-
remaining-
retention-
days
(p. 375)
s3:DataAccessPointAccount
(p. 374)
s3:DataAccessPointArn
(p. 374)
s3:AccessPointNetworkOrigin
(p. 374)
s3:ExistingObjectTag/
<key>
(p. 374)
s3:RequestObjectTag/
<key>
(p. 375)
s3:RequestObjectTagKeys
(p. 375)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:DataAccessPointArn
(p. 374)
s3:AccessPointNetworkOrigin
(p. 374)
s3:ExistingObjectTag/
<key>
(p. 374)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:versionid
(p. 375)
s3:x-
amz-acl
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:x-amz-
grant-full-
control
(p. 376)
s3:x-amz-
grant-read
(p. 376)
s3:x-amz-
grant-
s3:x-amz-
grant-write
(p. 376)
s3:x-amz-
grant-
write-acp
(p. 376)
s3:x-amz-
storage-
class
(p. 376)
s3:DataAccessPointAccount
(p. 374)
s3:DataAccessPointArn
(p. 374)
s3:AccessPointNetworkOrigin
(p. 374)
s3:ExistingObjectTag/
<key>
(p. 374)
s3:RequestObjectTag/
<key>
(p. 375)
s3:RequestObjectTagKeys
(p. 375)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:versionid
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
aws:TagKeys
(p. 374)
aws:RequestTag/
${TagKey}
(p. 374)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
aws:TagKeys
(p. 374)
aws:RequestTag/
${TagKey}
(p. 374)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:x-amz-
server-
side-
encryption
(p. 376)
s3:x-amz-
server-
side-
encryption-
aws-kms-
key-id
(p. 376)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:DataAccessPointArn
(p. 374)
s3:AccessPointNetworkOrigin
(p. 374)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:RequestJobPriority
(p. 375)
s3:ExistingJobPriority
(p. 374)
s3:ExistingJobOperation
(p. 374)
s3:authType
(p. 375)
s3:ResourceAccount
(p. 375)
s3:signatureAge
(p. 375)
s3:signatureversion
(p. 375)
s3:TlsVersion
(p. 375)
s3:x-amz-
content-
sha256
(p. 375)
s3:ExistingJobPriority
(p. 374)
s3:ExistingJobOperation
(p. 374)
s3:JobSuspendedCause
(p. 374)
Os seguintes tipos de recursos são definidos por este serviço e podem ser usados no elemento Resource
de declarações de políticas de permissão do IAM. Cada ação na tabela de ações (p. 289) identifica os
tipos de recursos que podem ser especificados com essa ação. Um tipo de recurso também pode definir
quais chaves de condição você pode incluir em uma política. Essas chaves são exibidas na última coluna
da tabela.
accesspoint arn:${Partition}:s3:${Region}:
${Account}:accesspoint/${AccessPointName}
bucket arn:${Partition}:s3:::${BucketName}
object arn:${Partition}:s3:::${BucketName}/
${ObjectName}
job arn:${Partition}:s3:${Region}:
${Account}:job/${JobId}
arn:${Partition}:s3:${Region}: aws:ResourceTag/
storagelensconfiguration
${Account}:storage-lens/${ConfigId} ${TagKey} (p. 374)
arn:${Partition}:s3-object-lambda:${Region}:
objectlambdaaccesspoint
${Account}:accesspoint/${AccessPointName}
O Amazon S3 define as seguintes chaves de condição que podem ser usadas no elemento Condition
de uma política do IAM. É possível usar essas chaves para refinar ainda mais as condições sob as quais a
declaração de política se aplica.
Para visualizar as chaves de condição globais disponíveis para todos os serviços, consulte Chaves de
condição globais disponíveis.
aws:RequestTag/ Filtra ações com base nas tags transmitidas na solicitação String
${TagKey}
aws:TagKeys Filtra ações com base nas chaves de tag transmitidas na String
solicitação
s3:TlsVersion Filtra o acesso pela versão TLS usada pelo cliente Numeric
s3:x-amz-server- Filtra o acesso pela CMK gerenciada pelo cliente do AWS String
side-encryption- KMS para criptografia do lado do servidor
aws-kms-key-id
Os tópicos nesta seção fornecem exemplos e mostram como adicionar uma política de bucket no console
do S3. Para obter informações sobre as políticas de usuário do IAM, consulte Uso de políticas de usuário
do IAM (p. 387). Para obter informações sobre a linguagem da política de bucket, consulte Políticas e
permissões no Amazon S3 (p. 269)
Important
Tópicos
• Adicionar uma política de bucket usando o console do Amazon S3 (p. 377)
• Controlar o acesso a partir de VPC endpoints com políticas de bucket (p. 377)
• Exemplos de políticas de bucket (p. 379)
Para obter exemplos de políticas de bucket do Amazon S3, consulte Exemplos de políticas de
bucket (p. 379).
a. Na página gerador de políticas, selecione S3 Bucket Policy (Política de bucket do S3) no menu
Select Type of Policy (Selecionar tipo de política).
b. Adicione uma ou mais instruções preenchendo os campos apresentados e escolha Generate
Policy (Gerar política).
c. Copie o texto da política gerada e retorne à página Edit bucket policy (Editar política de bucket) no
console do Amazon S3.
6. Em Bucket policy (Política de bucket), escolha Edit (Editar).
7. No campo de texto Policy (Política) digite ou copie e cole uma nova política de bucket ou edite uma
política existente. A política de bucket é um arquivo JSON. O texto que você digita no editor deve ser
JSON válido.
Note
Por conveniência, o console exibe o nome de recurso da Amazon (ARN) do bucket atual
acima do campo de texto Policy (Política) . Você pode copiar este ARN para uso na política.
Para obter mais informações sobre ARNs, consulte Nomes de recurso da Amazon (ARNs) e
namespaces do serviço da AWS na Referência geral da Amazon Web Services.
8. (Opcional) Visualize como sua nova política afeta o acesso público e entre contas ao seu recurso.
Antes de salvar sua política, você pode verificar se ela introduz novas descobertas do IAM Access
Analyzer ou resolve as descobertas existentes. Se você não vir um analisador ativo, crie um
analisador de conta no IAM Access Analyzer. Para obter mais informações, consulte Visualizar acesso
no Guia do usuário do IAM.
9. Selecione Save changes.
usadas para controlar o acesso ao bucket do Amazon S3 de VPC endpoints. Para saber como configurar
VPC endpoints, consulte VPC Endpoints no Guia do usuário da VPC.
A VPC permite executar os recursos da AWS em uma rede virtual definida por você. Um VPC endpoint
permite que você crie uma conexão privada entre sua VPC e outro serviço da AWS sem exigir acesso pela
Internet, por meio de uma conexão VPN, de uma Instância NAT ou do AWS Direct Connect.
Um VPC endpoint for Amazon S3 é uma entidade lógica em uma VPC que oferece conectividade apenas
ao Amazon S3. O VPC endpoint roteia as solicitações para o Amazon S3 e roteia as respostas de rotas
de volta para a VPC. Os VPC endpoints alteram somente a forma como as solicitações são roteadas. Os
endpoints públicos do Amazon S3 e os nomes de DNS continuarão funcionando com VPC endpoints. Para
obter informações importantes sobre o uso de VPC endpoints com o Amazon S3, consulte VPC Endpoints
de gateway e Endpoints para Amazon S3 no Guia do usuário da VPC.
Os VPC endpoints para Amazon S3 fornecem duas maneiras de controlar o acesso aos dados do Amazon
S3:
Tópicos
• Restringir o acesso a um VPC endpoint específico (p. 378)
• Restringir o acesso a uma VPC específica (p. 379)
Important
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 VPC endpoint incorreto.
Como corrigir a política para que eu possa acessar o bucket? no Centro 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.
"Version": "2012-10-17",
"Id": "Policy1415115909152",
"Statement": [
{
"Sid": "Access-to-specific-VPCE-only",
"Principal": "*",
"Action": "s3:*",
"Effect": "Deny",
"Resource": ["arn:aws:s3:::awsexamplebucket1",
"arn:aws:s3:::awsexamplebucket1/*"],
"Condition": {
"StringNotEquals": {
"aws:SourceVpce": "vpce-1a2b3c4d"
}
}
}
]
}
{
"Version": "2012-10-17",
"Id": "Policy1415115909153",
"Statement": [
{
"Sid": "Access-to-specific-VPC-only",
"Principal": "*",
"Action": "s3:*",
"Effect": "Deny",
"Resource": ["arn:aws:s3:::awsexamplebucket1",
"arn:aws:s3:::awsexamplebucket1/*"],
"Condition": {
"StringNotEquals": {
"aws:SourceVpc": "vpc-111bbb22"
}
}
}
]
}
Note
Você pode usar o Gerador de politicas da AWS para criar uma política de bucket para o bucket do Amazon
S3. Depois, use o documento gerado para definir a política de bucket usando o console do Amazon S3, por
meio de várias ferramentas de terceiros ou pela sua aplicação.
Important
Tópicos
• Conceder permissões a várias contas com condições adicionadas (p. 380)
• Conceder permissão somente leitura para um usuário anônimo (p. 380)
• Limitar o acesso a endereços IP específicos (p. 381)
• Restringir o acesso a um indicador HTTP específico (p. 382)
• Conceder permissão para uma OAI do Amazon CloudFront (p. 383)
• Adicionar uma política de bucket para exigir MFA (p. 384)
• Conceder permissões entre contas para fazer upload de objetos garantindo que o proprietário do
bucket tenha controle total (p. 385)
• Conceder permissões para inventário e análise do Amazon S3 (p. 386)
• Conceder permissões para o Amazon S3 Storage Lens (p. 386)
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"AddCannedAcl",
"Effect":"Allow",
"Principal": {"AWS":
["arn:aws:iam::111122223333:root","arn:aws:iam::444455556666:root"]},
"Action":["s3:PutObject","s3:PutObjectAcl"],
"Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
"Condition":{"StringEquals":{"s3:x-amz-acl":["public-read"]}}
}
]
}
A política de exemplo a seguir concede a permissão s3:GetObject aos usuários anônimos públicos.
Para obter uma lista de permissões e as operações que elas permitem, consulte Ações do Amazon
S3 (p. 273) Essa permissão permite que qualquer pessoa leia os dados do objeto, o que é útil quando
você configura o bucket como um site e deseja que todos possam ler os objetos do bucket. Antes de usar
uma política de bucket para conceder permissão somente leitura a um usuário anônimo, é necessário
desabilitar as configurações de bloqueio de acesso público ao seu bucket. Para obter mais informações,
consulte Definir permissões para acesso ao site (p. 956).
Warning
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"PublicRead",
"Effect":"Allow",
"Principal": "*",
"Action":["s3:GetObject","s3:GetObjectVersion"],
"Resource":["arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"]
}
]
}
O exemplo a seguir nega permissões a qualquer usuário para executar quaisquer operações do Amazon
S3 em objetos no bucket do S3 especificado, a menos que a solicitação tenha origem no intervalo de
endereços IP especificados na condição.
Substitua o intervalo de endereços IP neste exemplo por um valor apropriado para o seu caso
de uso antes de usar esta política. Caso contrário, você perderá a capacidade de acessar seu
bucket.
{
"Version": "2012-10-17",
"Id": "S3PolicyId1",
"Statement": [
{
"Sid": "IPAllow",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::DOC-EXAMPLE-BUCKET",
"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
],
"Condition": {
"NotIpAddress": {"aws:SourceIp": "54.240.143.0/24"}
}
}
]
}
Ao começar a usar os endereços IPv6, recomendamos que você atualize todas as políticas da sua
organização com os intervalos de endereços IPv6 além dos intervalos de IPv4 existentes para garantir que
as políticas continuem a funcionar ao fazer a transição para o IPv6.
O exemplo da política de bucket a seguir mostra como misturar intervalos de endereços IPv4 e IPv6 para
cobrir todos os endereços IP válidos de sua organização. A política de exemplo permitirá acesso aos
endereços IP de exemplo 54.240.143.1 e 2001:DB8:1234:5678::1 e negará o acesso para os
endereços 54.240.143.129 e 2001:DB8:1234:5678:ABCD::1.
Os valores de IPv6 para aws:SourceIp devem estar em formato CIDR padrão. Para IPv6,
oferecemos suporte ao uso de :: para representar um intervalo de IPv6 (por exemplo
2032001:DB8:1234:5678::/64). Para obter mais informações, consulte Operadores de condição de
endereço IP no Guia do usuário do IAM.
Important
Substitua os intervalos de endereços IP neste exemplo por valores apropriados para o seu caso
de uso antes de usar esta política. Caso contrário, você pode perder a capacidade de acessar seu
bucket.
{
"Id":"PolicyId2",
"Version":"2012-10-17",
"Statement":[
{
"Sid":"AllowIPmix",
"Effect":"Allow",
"Principal":"*",
"Action":"s3:*",
"Resource": [
"arn:aws:s3:::DOC-EXAMPLE-BUCKET",
"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
],
"Condition": {
"IpAddress": {
"aws:SourceIp": [
"54.240.143.0/24",
"2001:DB8:1234:5678::/64"
]
},
"NotIpAddress": {
"aws:SourceIp": [
"54.240.143.128/30",
"2001:DB8:1234:5678:ABCD::/80"
]
}
}
}
]
}
Suponha que você tenha um site com nome de domínio (www.example.com ou example.com) com
links para fotos e vídeos armazenados em seu bucket do Amazon S3, DOC-EXAMPLE-BUCKET. Por
padrão, todos os recursos do Amazon S3 são privados, portanto, somente a conta da AWS que criou os
recursos pode acessá-los. Para permitir acesso de leitura a esses objetos em seu site, você pode adicionar
uma política de bucket que conceda a permissão s3:GetObject com uma condição, usando a chave
aws:Referer, de que a solicitação get deve se originar de páginas específicas da web. A política a seguir
especifica a condição StringLike com a chave de condição aws:Referer.
{
"Version":"2012-10-17",
"Id":"http referer policy example",
"Statement":[
{
"Sid":"Allow get requests originating from www.example.com and example.com.",
"Effect":"Allow",
"Principal":"*",
"Action":["s3:GetObject","s3:GetObjectVersion"],
"Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
"Condition":{
"StringLike":{"aws:Referer":["http://www.example.com/*","http://example.com/*"]}
}
}
]
}
Certifique-se de que os navegadores que você usa incluam o cabeçalho HTTP referer na solicitação.
A seguinte política de bucket de exemplo concede uma permissão de identidade de acesso de origem (OAI
– Origin Access Identity) do CloudFront para obter (ler) todos os objetos em seu bucket do Amazon S3.
Você pode usar uma OAI do CloudFront para permitir que os usuários acessem objetos em seu bucket
por meio do CloudFront, mas não diretamente pelo Amazon S3. Para obter mais informações, consulte
Restringir acesso ao conteúdo do Amazon S3 usando uma identidade de acesso de origem no Guia do
desenvolvedor do Amazon CloudFront.
A política a seguir usa o ID da OAI como Principal da política. Para obter mais informações sobre o uso
de políticas de bucket do S3 para conceder acesso a uma OAI do CloudFront, consulte Usar políticas de
bucket do Amazon S3 no Guia do desenvolvedor do Amazon CloudFront.
{
"Version": "2012-10-17",
"Id": "PolicyForCloudFrontPrivateContent",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access
Identity EH1HDMB1FH2TC"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
}
]
}
O Amazon S3 oferece suporte a acesso à API protegido por MFA, um recurso que pode impor a
autenticação multifator para acessar os recursos do Amazon S3. A autenticação multifator fornece um nível
extra de segurança que pode ser aplicado a seu ambiente da AWS. É um recurso de segurança que exige
que os usuários comprovem a posse física de um dispositivo MFA fornecendo um código válido de MFA.
Para obter mais informações, consulte AWS Multi-Factor Authentication. É possível exigir a autenticação
MFA para todas as solicitações de acesso a seus recursos do Amazon S3.
Você pode impor o requisito MFA usando a chave aws:MultiFactorAuthAge em uma política de
bucket. Os usuários do AWS Identity and Access Management (IAM) podem acessar os recursos do
Amazon S3 usando credenciais temporárias emitidas pelo AWS Security Token Service (AWS STS). Você
fornece o código da MFA no momento da solicitação do AWS STS.
{
"Version": "2012-10-17",
"Id": "123",
"Statement": [
{
"Sid": "",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/taxdocuments/*",
"Condition": { "Null": { "aws:MultiFactorAuthAge": true }}
}
]
}
A política de bucket a seguir é uma extensão da política de bucket anterior. A política inclui duas
declarações de política. Uma instrução concede a permissão s3:GetObject em um bucket (DOC-
EXAMPLE-BUCKET) a todos. Outra instrução restringe ainda mais o acesso à pasta DOC-EXAMPLE-
BUCKET/taxdocuments no bucket ao exigir MFA.
{
"Version": "2012-10-17",
"Id": "123",
"Statement": [
{
"Sid": "",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/taxdocuments/*",
"Condition": { "Null": { "aws:MultiFactorAuthAge": true } }
},
{
"Sid": "",
"Effect": "Allow",
"Principal": "*",
"Action": ["s3:GetObject"],
"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
}
]
}
Opcionalmente, você pode usar uma condição numérica para limitar a duração na qual a chave
aws:MultiFactorAuthAge é válida, independentemente do ciclo de vida da credencial de segurança
temporária usada para autenticar a solicitação. Por exemplo, a seguinte política de bucket, além de exigir
autenticação MFA, também verifica há quanto tempo a sessão temporária foi criada. A política negará
qualquer operação se o valor da chave aws:MultiFactorAuthAge indicar que a sessão temporária foi
criada há mais de uma hora (3.600 segundos).
{
"Version": "2012-10-17",
"Id": "123",
"Statement": [
{
"Sid": "",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/taxdocuments/*",
"Condition": {"Null": {"aws:MultiFactorAuthAge": true }}
},
{
"Sid": "",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/taxdocuments/*",
"Condition": {"NumericGreaterThan": {"aws:MultiFactorAuthAge": 3600 }}
},
{
"Sid": "",
"Effect": "Allow",
"Principal": "*",
"Action": ["s3:GetObject"],
"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
}
]
}
Conceder permissões entre contas para fazer upload de objetos garantindo que o proprietário do
bucket tenha controle total
O exemplo a seguir mostra como permitir que outra conta da AWS faça upload de objetos no bucket
enquanto assume o controle total dos objetos carregados. Essa política impõe que uma conta específica
da AWS (123456789012) receba a capacidade de fazer upload de objetos somente se essa conta incluir
a ACL padrão pelo proprietário do bucket no upload. A condição StringEquals na política especifica a
chave de condição s3:x-amz-acl para expressar o requisito (consulte Exemplos de chave de condição do
Amazon S3 (p. 278)).
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"PolicyForAllowUploadWithACL",
"Effect":"Allow",
"Principal":{"AWS":"123456789012"},
"Action":"s3:PutObject",
"Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
"Condition": {
"StringEquals": {"s3:x-amz-acl":"bucket-owner-full-control"}
}
}
]
}
O inventário do Amazon S3 cria listas dos objetos em um bucket do Amazon S3, e a exportação da análise
do Amazon S3 cria arquivos de saída dos dados usados na análise. O bucket para o qual o inventário
lista objetos é chamado de bucket de origem. O bucket onde o arquivo de inventário é gravado e o bucket
onde o arquivo de exportação da análise é gravado é chamado de bucket de destino. Você deve criar
uma política de bucket para o bucket de destino ao configurar o inventário de um bucket do Amazon S3
e ao configurar a exportação da análise. Para obter mais informações, consulte Inventário do Amazon
S3 (p. 605) e Análise do Amazon S3 – Análise de classe de armazenamento (p. 894).
O exemplo da política de bucket a seguir concede permissão ao Amazon S3 para gravar objetos (PUTs)
da conta do bucket de origem para o bucket de destino. Você usa uma política de bucket como essa no
bucket de destino ao configurar o inventário do Amazon S3 e a exportação da análise do Amazon S3.
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"InventoryAndAnalyticsExamplePolicy",
"Effect":"Allow",
"Principal": {"Service": "s3.amazonaws.com"},
"Action":"s3:PutObject",
"Resource":["arn:aws:s3:::destinationbucket/*"],
"Condition": {
"ArnLike": {
"aws:SourceArn": "arn:aws:s3:::sourcebucket"
},
"StringEquals": {
"aws:SourceAccount": "123456789012",
"s3:x-amz-acl": "bucket-owner-full-control"
}
}
}
]
}
O Amazon S3 Storage Lens agrega suas métricas de uso e atividade e exibe as informações em um painel
interativo no console do Amazon S3 ou por meio de uma exportação de dados de métricas que pode
ser obtida por download no formato CSV ou Parquet. Você pode usar o painel para visualizar insights e
tendências, sinalizar discrepâncias e fornecer recomendações para otimizar os custos de armazenamento
e aplicar as práticas recomendadas de proteção de dados. É possível usar o S3 Storage Lens por meio do
Console de Gerenciamento da AWS, da CLI da AWS, dos AWS SDKs ou da API REST.
O S3 Storage Lens pode agregar seu uso de armazenamento às exportações de métricas em um bucket
do Amazon S3 para análise posterior. O bucket em que o S3 Storage Lens coloca as exportações de
métricas dele é conhecido como bucket de destino. Você deve ter uma política de bucket para o bucket de
destino ao configurar a exportação de métricas do S3 Storage Lens. Para obter mais informações, consulte
Avaliação de sua atividade de armazenamento e uso com o Amazon S3 Storage Lens (p. 900).
O exemplo de política de bucket a seguir concede ao Amazon S3 permissão para gravar objetos (PUTs)
em um bucket de destino. Você usa uma política de bucket como essa no bucket de destino ao configurar
uma exportação de métricas do S3 Storage Lens.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "S3StorageLensExamplePolicy",
"Effect": "Allow",
"Principal": {
"Service": [
"storage-lens.s3.amazonaws.com"
]
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::destination-bucket/destination-prefix/
StorageLens/111122223333/*",
"Condition": {
"StringEquals": {
"s3:x-amz-acl": "bucket-owner-full-control"
},
"StringEquals": {
"aws:SourceAccount": "111122223333"
},
"StringEquals": {
"aws:SourceArn": "arn:aws:s3:your-region:111122223333:storage-
lens/your-dashboard-configuration-id"
}
}
}
]
}
{
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::destination-bucket/destination-prefix/
StorageLens/your-organization-id/*",
Esta seção mostra diversas políticas de usuário do IAM para controle de acesso de usuário ao Amazon S3.
Por exemplo, políticas de bucket, consulte Uso de políticas de bucket (p. 376). Para obter informações
sobre a linguagem de políticas de acesso, consulte Políticas e permissões no Amazon S3 (p. 269).
Tópicos
• Controlar o acesso a um bucket com políticas de usuário (p. 387)
• Exemplos de política de usuário (p. 405)
(IAM) em sua conta da AWS e concede a esses usuários permissões incrementais no bucket do Amazon
S3 e nas pastas nele.
Tópicos
• Elementos básicos de buckets e pastas (p. 388)
• Resumo da demonstração (p. 390)
• Preparar para a demonstração (p. 390)
• Etapa 1: Criar um bucket (p. 391)
• Etapa 2: criar usuários do IAM e um grupo (p. 391)
• Etapa 3: verificar se os usuários do IAM não têm nenhuma permissão (p. 392)
• Etapa 4: Conceder permissões no nível do grupo (p. 392)
• Etapa 5: conceder permissões específicas do usuário do IAM Alice (p. 399)
• Etapa 6: conceder permissões específicas do usuário do IAM Bob (p. 403)
• Etapa 7: Proteger a pasta Private (p. 403)
• Etapa 8: Limpar (p. 405)
• Recursos relacionados (p. 405)
O modelo de dados do Amazon S3 é uma estrutura plana: você cria um bucket e o bucket armazena
objetos. Não há hierarquia de buckets ou de subpastas, mas você pode emular uma hierarquia de pastas.
Ferramentas como o console do Amazon S3 podem apresentar uma exibição dessas pastas e subpastas
lógicas em seu bucket, como mostrado na imagem abaixo:
O console mostra que o bucket nomeado companybucket tem três pastas, Private, Development e
Finance, e um objeto, s3-dg.pdf. O console usa os nomes de objeto (chaves) para criar uma hierarquia
lógica com pastas e subpastas. Considere os seguintes exemplos:
• Ao criar a pasta Development, o console cria um objeto com a chave Development/. Observe
delimitador (/) no final.
• Quando você faz upload de um objeto chamado Projects1.xls na pasta Development, o console
sobe o objeto e concede a ele a chave Development/Projects1.xls.
Quando o console lista a pasta Development no bucket companybucket, ele envia uma solicitação
para o Amazon S3 na qual especifica o prefixo Development e o delimitador / na solicitação. A
resposta do console parece uma lista de pastas no sistema de arquivos de seu computador. O
exemplo anterior mostra que o bucket companybucket tem um objeto com a chave Development/
Projects1.xls.
O console está usando chaves de objeto para inferir uma hierarquia lógica. O Amazon S3 não tem
hierarquia física; ele só tem buckets que contêm objetos em uma estrutura de arquivos simples. Ao criar
objetos usando a API do Amazon S3, você pode usar chaves de objeto que implicam uma hierarquia
lógica. Ao criar uma hierarquia lógica de objetos, você pode gerenciar o acesso a pastas individuais, como
este passo a passo ensina.
Antes de começar, você precisa conhecer o conceito de conteúdo no nível raiz do bucket. Suponha que
seu bucket companybucket contenha os seguintes objetos:
• Private/privDoc1.txt
• Private/privDoc2.zip
• Development/project1.xls
• Development/project2.xls
• Finance/Tax2011/document1.pdf
• Finance/Tax2011/document2.pdf
• s3-dg.pdf
Essas chaves de objeto criam uma hierarquia lógica com Private, Development e Finance como
pastas no nível raiz, e s3-dg.pdf como objeto no nível raiz. Quando você escolhe o nome do bucket no
console do Amazon S3, os itens no nível raiz são exibidos como mostrado na imagem abaixo. O console
exibe os prefixos no nível superior (Private/, Development/ e Finance/) como pastas no nível raiz. A
chave de s3-dg.pdf não tem um prefixo, então, ela aparece como um item no nível raiz.
Resumo da demonstração
Neste passo a passo, você cria um bucket com três pastas (Private, Development e Finance).
Você tem dois usuários, Alice e Bob. Você quer que a Alice tenha acesso somente à pasta Development,
e Bob tenha acesso à Finance. Você quer manter o conteúdo da pasta Private privado. No passo a
passo, você gerencia o acesso criando usuários do IAM (o exemplo usa os mesmos nomes de usuário,
Alice e Bob) e concede as permissões necessárias.
O IAM também permite criar grupos de usuários e conceder permissões no nível do grupo que se aplicam
a todos os usuários no grupo. Isso ajuda a gerenciar melhor as permissões. Neste exercício, Alice e Bob
precisam ter algumas permissões comuns. Então, você também cria um grupo chamado Consultants e
adiciona Alice e Bob a ele. Primeiro, você concede permissões anexando uma política de grupo ao grupo.
Depois, adiciona permissões específicas do usuário anexando políticas a usuários específicos.
Note
O passo a passo usa companybucket como o nome do bucket, Alice e Bob como os usuários do
Consultants, e IAM como o nome do grupo. Como o Amazon S3 exige que os nomes de bucket
sejam globalmente exclusivos, você precisará substituir o nome do bucket pelo nome que criar.
Neste exemplo, use suas credenciais da conta da AWS para criar usuários do IAM. Inicialmente, esses
usuários não têm nenhuma permissão. Você concede gradualmente a esses usuários as permissões
para executar ações específicas do Amazon S3. Para testar essas permissões, você entra no console
com as credenciais de cada usuário. Conforme conceder gradualmente permissões como proprietário
da conta da AWS e testar permissões como um usuário do IAM, você precisará entrar e sair, sempre
usando credenciais diferentes. Você pode fazer o teste em apenas um navegador, mas o processo é
mais rápido se você usar dois navegadores diferentes. Use um navegador para se conectar ao Console
de Gerenciamento da AWS com as suas credenciais da conta da AWS e outro para se conectar com as
credenciais de usuário do IAM.
Para fazer login no Console de Gerenciamento da AWS com suas credenciais de conta da AWS, acesse
https://console.aws.amazon.com/. Um usuário do IAM não pode fazer login pelo mesmo link. Um usuário
do IAM deve usar uma página de login habilitada para o IAM. Como proprietário da conta, você pode
fornecer este link para seus usuários.
Para obter mais informações sobre o IAM, consulte A página de login do Console de Gerenciamento da
AWS no Guia do usuário do IAM.
Nesta etapa, você fará login no console do Amazon S3 com suas credenciais da conta da AWS, criará um
bucket, adicionará pastas (Development, Finance e Private) ao bucket e fará upload de um ou dois
documentos de exemplo em cada pasta.
Este exercício pressupõe que você tem o documento s3-dg.pdf no nível raiz desse bucket. Se você
carregar um documento diferente, substitua o nome de arquivo para s3-dg.pdf.
4. Adicione três pastas nomeadas Private, Finance e Development ao bucket.
Para obter instruções passo a passo para criar uma pasta, consulte Organizar objetos no console
do Amazon S3 usando pastas (p. 155)> no Guia do usuário do console do Amazon Simple Storage
Service.
5. Faça upload de um ou dois documentos em cada pasta.
Neste exercício, suponha que você tenha carregado alguns documentos em cada pasta, resultando
que o bucket tenha objetos com as seguintes chaves:
• Private/privDoc1.txt
• Private/privDoc2.zip
• Development/project1.xls
• Development/project2.xls
• Finance/Tax2011/document1.pdf
• Finance/Tax2011/document2.pdf
• s3-dg.pdf
Para obter instruções detalhadas, consulte Fazer upload de objetos (p. 71).
Agora use o console do IAM para adicionar dois usuários do IAM, Alice e Bob, à sua conta da AWS. Crie
também um grupo administrativo chamado Consultants e adicione os dois os usuários a ele.
Warning
Quando você adicionar usuários e um grupo, não anexe políticas que concedem permissões
a esses usuários. No início, esses usuários não terão permissões. Nas próximas seções, você
concederá permissões incrementalmente. Primeiro verifique se atribuiu senhas a esses usuários
do IAM. Você utilizará essas credenciais de usuário para testar as ações do Amazon S3 e verificar
se as permissões funcionam como esperado.
Para obter instruções passo a passo para criar um novo usuário do IAM, consulte Criar um usuário
do IAM em sua conta da AWS no Guia do usuário do IAM. Ao criar usuários seguindo este passo a
passo, selecione AWS Management Console access (Acesso ao Controle de Gerenciamento da AWS) e
desmarque Programmatic access (Acesso programático).
Para obter instruções passo a passo para criar um grupo administrativo, consulte Criar seu primeiro
usuário administrador e grupo do IAM no Guia do usuário do IAM.
Se você estiver usando dois navegadores, agora poderá usar o segundo navegador para entrar no console
usando uma das credenciais de usuário do IAM.
1. Usando o link de login de usuário do IAM (consulte Para fornecer um link de login para usuários do
IAM (p. 391)), entre no Console de Gerenciamento da AWS usando qualquer uma das credenciais
de usuário do IAM.
2. Abra o console do Amazon S3 em https://console.aws.amazon.com/s3/.
Verifique a seguinte mensagem de console que diz que o acesso foi negado.
Agora, você pode começar a conceder permissões incrementais aos usuários. Antes, você anexará uma
política de grupo concedendo as permissões de que os dois usuários precisam.
• Listar todos os buckets de propriedade da conta pai. Para fazer isso, Bob e Alice devem ter permissão
para a ação s3:ListAllMyBuckets.
• Listar itens, pastas e objetos no nível raiz no bucket companybucket. Para fazer isso, Bob e Alice
devem ter permissão para a ação s3:ListBucket no bucket companybucket.
Primeiro, você cria uma política que concede essas permissões e, depois, anexa-a ao grupo
Consultants.
Nesta etapa, você cria uma política gerenciada que concede aos usuários as permissões mínimas para
listar todos os buckets de propriedade da conta pai. Depois, anexa a política ao grupo Consultants. Ao
anexar a política gerenciada a um usuário ou um grupo, você concede ao usuário ou grupo a permissão
para obter uma lista de bucket na conta pai da AWS.
Como você está concedendo permissões de usuário, faça login com suas credenciais da
conta da AWS, e não como um usuário do IAM.
2. Crie a política gerenciada.
a. No painel de navegação à esquerda, escolha Policies (Políticas) e Create Policy (Criar política).
b. Selecione a guia JSON.
c. Copie a política de acesso a seguir e cole-a no campo de texto da política.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowGroupToSeeBucketListInTheConsole",
"Action": ["s3:ListAllMyBuckets"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::*"]
}
]
}
Uma política é um documento JSON. No documento, uma Statement é uma matriz de objetos,
cada uma descrevendo uma permissão usando uma coleção de pares de valores de nome. A
política anterior descreve uma permissão específica. A Action especifica o tipo de acesso. Na
política, s3:ListAllMyBuckets é uma ação do Amazon S3 predefinida. Esta ação abrange a
operação GET serviço do Amazon S3, que retorna uma lista de todos os buckets no remetente
autenticado. O valor do elemento Effect determina se a permissão específica é permitida ou
negada.
d. Escolha Review Policy (Revisar política). Na próxima página, insira
AllowGroupToSeeBucketListInTheConsole no campo Name (Nome) e escolha em Create
policy (Criar política).
Note
A entrada Summary (Resumo) exibe uma mensagem afirmando que a política não
concede permissão nenhuma. Para esta apresentação, você pode, de maneira segura,
ignorar essa mensagem.
3. Anexe a política gerenciada AllowGroupToSeeBucketListInTheConsole que você criou para o
grupo Consultants.
Para obter instruções passo a passo para anexar uma política gerenciada, consulte Adicionar e
remover permissões de identidade do IAM no Guia do usuário do IAM.
Anexe documentos de política a usuários e grupos do IAM no console do IAM. Como você quer que os
dois usuários possam listar os buckets, você anexa a política ao grupo.
4. Teste a permissão.
a. Usando o link de login de usuário do IAM (consulte Para fornecer um link de login para usuários
do IAM (p. 391)), entre no console usando qualquer uma das credenciais de usuário do IAM.
b. Abra o console do Amazon S3 em https://console.aws.amazon.com/s3/.
O console agora deve listar todos os buckets, mas não os objetos dos buckets.
Versão da API 2006-03-01
393
Amazon Simple Storage Service Guia do usuário
Políticas de bucket e políticas de usuário
Etapa 4.2: Permitir que os usuários listem o conteúdo do nível raiz de um bucket
Agora, você permite que todos os usuários no grupo Consultants listem itens no nível raiz do bucket
companybucket. Quando um usuário escolhe o bucket da empresa no console do Amazon S3, ele pode
visualizar os itens no nível raiz do bucket.
Note
Esse exemplo usa companybucket como ilustração. Use o nome do bucket que você criou.
Para entender a solicitação que o console envia ao Amazon S3 quando você escolhe o nome de um
bucket, a resposta que o Amazon S3 retorna e como o console a interpreta, é necessário entendê-la um
pouco mais.
Quando você clica no nome de um bucket, o console envia a solicitação GET Bucket ao Amazon S3. Essa
solicitação inclui os parâmetros a seguir:
<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Name>companybucket</Name>
<Prefix></Prefix>
<Delimiter>/</Delimiter>
...
<Contents>
<Key>s3-dg.pdf</Key>
...
</Contents>
<CommonPrefixes>
<Prefix>Development/</Prefix>
</CommonPrefixes>
<CommonPrefixes>
<Prefix>Finance/</Prefix>
</CommonPrefixes>
<CommonPrefixes>
<Prefix>Private/</Prefix>
</CommonPrefixes>
</ListBucketResult>
O objeto s3-dg.pdf da chave não contém o delimitador /, e o Amazon S3 retorna a chave no elemento
<Contents>. Contudo, todas as outras chaves no bucket de exemplo contêm o delimitador /. O Amazon
S3 agrupa essas chaves e retorna um elemento Development/ para cada um dos valores distintos de
prefixo Finance/, Private/ e /, isto é, uma substring desde o início dessas chaves até a primeira
ocorrência do delimitador <CommonPrefixes> especificado.
O console interpreta este resultado e exibe os itens no nível raiz como três pastas e uma chave de objeto.
Se Bob ou Alice abrirem a pasta Development (Desenvolvimento), o console enviará a solicitação GET
Bucket (Listar objetos) ao Amazon S3 com os parâmetros prefix e delimiter definidos como os
seguintes valores:
Em resposta, o Amazon S3 retorna as chaves de objeto que começam com o prefixo especificado.
<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Name>companybucket</Name>
<Prefix>Development</Prefix>
<Delimiter>/</Delimiter>
...
<Contents>
<Key>Project1.xls</Key>
...
</Contents>
<Contents>
<Key>Project2.xls</Key>
...
</Contents>
</ListBucketResult>
Agora, volte a conceder aos usuários a permissão para listar itens no nível raiz do bucket. Para listar
conteúdo de bucket, os usuários precisam de permissão para chamar a ação s3:ListBucket, conforme
exibido na seguinte declaração de política. Para garantir que eles vejam somente o conteúdo no nível raiz,
você adiciona uma condição de que os usuários devem especificar um prefix vazio na solicitação, isto é,
eles não podem clicar duas vezes em nenhuma das pastas no nível raiz. Finalmente, você adiciona uma
condição para solicitar o acesso de pasta exigindo que as solicitações de usuário incluam o parâmetro
delimiter com valor "/".
{
"Sid": "AllowRootLevelListingOfCompanyBucket",
"Action": ["s3:ListBucket"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::companybucket"],
"Condition":{
"StringEquals":{
"s3:prefix":[""], "s3:delimiter":["/"]
}
}
}
Ao escolher o bucket no console do Amazon S3, o console primeiro envia a solicitação GET Bucket
location para encontrar a região da AWS em que o bucket está implantado. Depois, o console usa o
endpoint específico da região para o bucket enviar a solicitação GET Bucket (listar objetos). Como
resultado, se os usuários forem usar o console, você deverá conceder permissão para a ação
s3:GetBucketLocation conforme exibido na seguinte declaração de política.
{
"Sid": "RequiredByS3Console",
"Action": ["s3:GetBucketLocation"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::*"]
}
Use suas credenciais de conta da AWS, não as credenciais de um usuário do IAM, para entrar no
console.
2. Substitua a política gerenciada existente AllowGroupToSeeBucketListInTheConsole
que está anexada ao grupo Consultants pela política a seguir, que também permite a ação
s3:ListBucket. Lembre-se de substituir companybucket na política Resource pelo nome do
bucket.
Para obter instruções detalhadas, consulte Editar políticas do IAM no Guia do usuário do IAM. Ao
seguir as instruções detalhadas, siga as etapas para aplicar as alterações em todas as entidades
principais às quais a política está anexada.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid":
"AllowGroupToSeeBucketListAndAlsoAllowGetBucketLocationRequiredForListBucket",
"Action": [ "s3:ListAllMyBuckets", "s3:GetBucketLocation" ],
"Effect": "Allow",
"Resource": [ "arn:aws:s3:::*" ]
},
{
"Sid": "AllowRootLevelListingOfCompanyBucket",
"Action": ["s3:ListBucket"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::companybucket"],
"Condition":{
"StringEquals":{
"s3:prefix":[""], "s3:delimiter":["/"]
}
}
}
]
}
a. Usando o link de login do usuário do IAM (consulte Para fornecer um link de login para usuários
do IAM (p. 391)), faça login no Console de Gerenciamento da AWS.
Esse teste é bem-sucedido quando os usuários usam o console do Amazon S3. Ao escolher um bucket
no console, a implementação do console envia uma solicitação que inclui o parâmetro prefix com uma
string vazia como seu valor e o parâmetro delimiter com "/" como valor.
O efeito final da política de grupo que você adicionou é conceder aos usuários do IAM Alice e Bob as
seguintes permissões mínimas:
Contudo, os usuários ainda não podem fazer muita coisa. Agora, conceda as permissões específicas do
usuário da seguinte maneira:
Para permissões específicas do usuário, anexe uma política ao usuário específico, não ao grupo. Na
próxima seção, conceda permissão para a Alice trabalhar na pasta Development. Você pode repetir as
etapas para conceder a Bob permissão semelhante para trabalhar na pasta Finance.
Agora você concede permissões adicionais a Alice para que ela possa ver o conteúdo da pasta
Development e obter e colocar objetos nela.
Etapa 5.1: conceder permissão do usuário do IAM Alice para listar o conteúdo da pasta
Development
Para que a Alice possa listar o conteúdo da pasta Development, você deve aplicar uma política ao
usuário Alice concedendo permissão para a ação s3:ListBucket no bucket companybucket, contanto
que a solicitação inclua o prefixo Development/. Você quer que essa política seja aplicada somente ao
usuário Alice, então, usa uma política em linha. Para obter mais informações sobre políticas em linha,
consulte Políticas gerenciadas e políticas em linha no Guia do usuário do IAM.
Use suas credenciais de conta da AWS, não as credenciais de um usuário do IAM, para entrar no
console.
2. Crie uma política em linha para conceder ao usuário Alice permissão para listar o conteúdo da pasta
Development.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowListBucketIfSpecificPrefixIsIncludedInRequest",
"Action": ["s3:ListBucket"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::companybucket"],
"Condition":{ "StringLike":{"s3:prefix":["Development/*"] }
}
}
]
}
f. Escolha Review Policy (Revisar política). Na próxima página, insira um nome no campo Name
(Nome) e escolha Create policy (Criar política).
3. Teste a alteração nas permissões de Alice:
a. Usando o link de login do usuário do IAM (consulte Para fornecer um link de login para usuários
do IAM (p. 391)), faça login no Console de Gerenciamento da AWS.
b. Abra o console do Amazon S3 em https://console.aws.amazon.com/s3/.
c. No console do Amazon S3, verifique se Alice pode visualizar a lista de objetos na pasta
Development/ no bucket.
Quando o usuário escolhe a pasta /Development para visualizar a lista de objetos nela,
o console do Amazon S3 envia a solicitação ListObjects ao Amazon S3 com o prefixo /
Development. Como o usuário recebe permissão para visualizar a lista de objetos com o prefixo
Development e o delimitador /, o Amazon S3 retorna a lista de objetos com o prefixo de chave
Development/, e o console exibe a lista.
Etapa 5.2: conceder permissões do usuário do IAM Alice para obter e colocar objetos na pasta
Development
Para que a Alice possa obter e colocar objetos na pasta Development, ela precisa de permissão para
chamar as ações s3:GetObject e s3:PutObject. As declarações de política a seguir concedem essas
permissões, contanto que a solicitação inclua o parâmetro prefix com um valor de Development/.
{
"Sid":"AllowUserToReadWriteObjectData",
"Action":["s3:GetObject", "s3:PutObject"],
"Effect":"Allow",
"Resource":["arn:aws:s3:::companybucket/Development/*"]
}
Use suas credenciais de conta da AWS, não as credenciais de um usuário do IAM, para entrar no
console.
2. Edite a política em linha que você criou na etapa anterior.
{
"Version": "2012-10-17",
"Statement":[
{
"Sid":"AllowListBucketIfSpecificPrefixIsIncludedInRequest",
"Action":["s3:ListBucket"],
"Effect":"Allow",
"Resource":["arn:aws:s3:::companybucket"],
"Condition":{
"StringLike":{"s3:prefix":["Development/*"]
}
}
},
{
"Sid":"AllowUserToReadWriteObjectDataInDevelopmentFolder",
"Action":["s3:GetObject", "s3:PutObject"],
"Effect":"Allow",
"Resource":["arn:aws:s3:::companybucket/Development/*"]
}
]
}
a. Usando o link de login do usuário do IAM (consulte Para fornecer um link de login para usuários
do IAM (p. 391)), faça login no Console de Gerenciamento da AWS.
b. Abra o console do Amazon S3 em https://console.aws.amazon.com/s3/.
c. No console do Amazon S3, verifique se Alice agora pode adicionar um objeto e fazer download de
um objeto na pasta Development.
Etapa 5.3: negar explicitamente permissões do usuário do IAM Alice a todas as outras pastas no
bucket
O usuário Alice agora pode listar o conteúdo do nível raiz no bucket companybucket. Ela também pode
obter e colocar objetos na pasta Development. Se você quiser realmente limitar as permissões de
acesso, poderá negar explicitamente o acesso de Alice a todas as outras pastas no bucket. Se houver
alguma outra política (política de bucket ou ACL) que concede a Alice acesso a outras pastas no bucket,
essa negação explícita cancelará essas permissões.
É possível adicionar a seguinte declaração à política de usuário Alice que exige que todas as solicitações
que Alice envia ao Amazon S3 incluam o parâmetro prefix, cujo valor pode ser Development/* ou uma
string vazia.
{
"Sid": "ExplicitlyDenyAnyRequestsForAllOtherFoldersExceptDevelopment",
"Action": ["s3:ListBucket"],
"Effect": "Deny",
"Resource": ["arn:aws:s3:::companybucket"],
"Condition":{ "StringNotLike": {"s3:prefix":["Development/*",""] },
"Null" : {"s3:prefix":false }
}
}
• A expressão condicional Null garante que as solicitações de Alice incluam o parâmetro prefix.
O parâmetro prefix requer acesso de pasta. Se você enviar uma solicitação sem o parâmetro prefix,
o Amazon S3 retornará todas as chaves de objeto.
Se a solicitação incluir o parâmetro prefix com um valor nulo, a expressão será classificada como
verdadeiro e, portanto, a Condition inteira será classificada como verdadeira. Você deve permitir uma
string vazia como o valor do parâmetro prefix. Com a discussão anterior, lembre-se que a string nula
permite que Alice recupere itens de bucket no nível raiz como o console faz na discussão anterior. Para
obter mais informações, consulte Etapa 4.2: Permitir que os usuários listem o conteúdo do nível raiz de
um bucket (p. 394).
• A expressão condicional StringNotLike garante que, se o valor do parâmetro prefix for
especificado e não for Development/*, a solicitação falhará.
Siga as etapas na seção anterior e atualize novamente a política em linha que você criou para o usuário
Alice.
Copie a política a seguir e cole no campo do texto de política para substituir a política existente:
{
"Version": "2012-10-17",
"Statement":[
{
"Sid":"AllowListBucketIfSpecificPrefixIsIncludedInRequest",
"Action":["s3:ListBucket"],
"Effect":"Allow",
"Resource":["arn:aws:s3:::companybucket"],
"Condition":{
"StringLike":{"s3:prefix":["Development/*"]
}
}
},
{
"Sid":"AllowUserToReadWriteObjectDataInDevelopmentFolder",
"Action":["s3:GetObject", "s3:PutObject"],
"Effect":"Allow",
"Resource":["arn:aws:s3:::companybucket/Development/*"]
},
{
"Sid": "ExplicitlyDenyAnyRequestsForAllOtherFoldersExceptDevelopment",
"Action": ["s3:ListBucket"],
"Effect": "Deny",
"Resource": ["arn:aws:s3:::companybucket"],
"Condition":{ "StringNotLike": {"s3:prefix":["Development/*",""] },
"Null" : {"s3:prefix":false }
}
}
]
}
Agora você quer conceder ao Bob permissão para a pasta Finance. Siga as etapas que você usou
anteriormente para conceder permissões a Alice, mas substitua a pasta Development pela pasta
Finance. Para obter instruções detalhadas, consulte Etapa 5: conceder permissões específicas do
usuário do IAM Alice (p. 399).
Neste exemplo, você tem apenas dois usuários. Você concedeu todas as permissões mínimas necessárias
no nível do grupo e concedeu permissões no nível do usuário somente quando realmente precisou de
permissões no nível do usuário individual. Essa abordagem ajuda a minimizar o esforço de gerenciamento
de permissões. Conforme o número de usuários aumenta, gerenciar permissões pode ser um problema.
Por exemplo, você não quer que nenhum dos usuários neste exemplo acesse o conteúdo da pasta
Private. Como garantir que você não vai conceder acidentalmente uma permissão ao usuário? Adicione
uma política que negue explicitamente acesso à pasta. Uma negação explícita substitui todas as outras
permissões.
Para garantir que a pasta Private permaneça privada, você pode adicionar as duas declarações de
negação a seguir à política de grupo:
• Adicione a seguinte declaração para negar explicitamente qualquer ação em recursos na pasta
Private (companybucket/Private/*).
{
"Sid": "ExplictDenyAccessToPrivateFolderToEveryoneInTheGroup",
"Action": ["s3:*"],
"Effect": "Deny",
"Resource":["arn:aws:s3:::companybucket/Private/*"]
}
• Você também nega permissão para a ação de listar objetos quando a solicitação especifica o prefixo
Private/. No console, se Bob ou Alice abrir a pasta Private, essa política fará o Amazon S3 retornar
uma resposta de erro.
{
"Sid": "DenyListBucketOnPrivateFolder",
"Action": ["s3:ListBucket"],
"Effect": "Deny",
"Resource": ["arn:aws:s3:::*"],
"Condition":{
"StringLike":{"s3:prefix":["Private/"]}
}
}
Substitua a política do grupo Consultants por uma política atualizada que inclua as declarações de
negação anteriores. Após a política atualizada ser aplicada, nenhum usuário no grupo poderá acessar a
pasta Private no seu bucket.
Use suas credenciais de conta da AWS, não as credenciais de um usuário do IAM, para entrar no
console.
2. Substitua a política gerenciada AllowGroupToSeeBucketListInTheConsole existente que está
anexada ao grupo Consultants pela política a seguir. Lembre-se de substituir companybucket na
política pelo nome do bucket.
Para obter instruções, consulte Editar políticas gerenciadas pelo cliente no Guia do usuário do IAM.
Ao seguir as instruções, não se esqueça de seguir as orientações para aplicar alterações em todas as
entidades principais às quais a política está anexada.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid":
"AllowGroupToSeeBucketListAndAlsoAllowGetBucketLocationRequiredForListBucket",
"Action": ["s3:ListAllMyBuckets", "s3:GetBucketLocation"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::*"]
},
{
"Sid": "AllowRootLevelListingOfCompanyBucket",
"Action": ["s3:ListBucket"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::companybucket"],
"Condition":{
"StringEquals":{"s3:prefix":[""]}
}
},
{
"Sid": "RequireFolderStyleList",
"Action": ["s3:ListBucket"],
"Effect": "Deny",
"Resource": ["arn:aws:s3:::*"],
"Condition":{
"StringNotEquals":{"s3:delimiter":"/"}
}
},
{
"Sid": "ExplictDenyAccessToPrivateFolderToEveryoneInTheGroup",
"Action": ["s3:*"],
"Effect": "Deny",
"Resource":["arn:aws:s3:::companybucket/Private/*"]
},
{
"Sid": "DenyListBucketOnPrivateFolder",
"Action": ["s3:ListBucket"],
"Effect": "Deny",
"Resource": ["arn:aws:s3:::*"],
"Condition":{
"StringLike":{"s3:prefix":["Private/"]}
}
}
]
}
Etapa 8: Limpar
Para limpar, abra o console do IAM e remova os usuários Alice e Bob. Para obter instruções passo a
passo, consulte Excluir um usuário do IAM no Guia do usuário do IAM.
Para garantir que você não seja mais cobrado pelo armazenamento, exclua também os objetos e o bucket
que criou neste exercício.
Recursos relacionados
Os exemplos de política a seguir funcionarão se você testá-los programaticamente. No entanto, para usá-
los com o console do Amazon S3, você precisará conceder permissões adicionais solicitadas pelo console.
Para obter informações sobre o uso de políticas como essas com o console do Amazon S3, consulte
Controlar o acesso a um bucket com políticas de usuário (p. 387).
Tópicos
• Permitir que um usuário do IAM acesse um dos seus buckets (p. 406)
• Permitir que cada usuário do IAM acesse uma pasta em um bucket (p. 406)
• Permitir que um grupo tenha uma pasta compartilhada no Amazon S3 (p. 409)
• Permitir que todos os seus usuários leiam objetos em uma parte do bucket corporativo (p. 409)
• Permitir que um parceiro solte arquivos em uma parte específica do bucket corporativo (p. 410)
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action": "s3:ListAllMyBuckets",
"Resource":"arn:aws:s3:::*"
},
{
"Effect":"Allow",
"Action":["s3:ListBucket","s3:GetBucketLocation"],
"Resource":"arn:aws:s3:::awsexamplebucket1"
},
{
"Effect":"Allow",
"Action":[
"s3:PutObject",
"s3:PutObjectAcl",
"s3:GetObject",
"s3:GetObjectAcl",
"s3:DeleteObject"
],
"Resource":"arn:aws:s3:::awsexamplebucket1/*"
}
]
}
awsexamplebucket1
Alice/
Bob/
Para conceder a cada usuário acesso à sua pasta, você pode escrever uma política para cada usuário
e anexá-la individualmente. Por exemplo, você pode anexar a seguinte política ao usuário Alice para
conceder a ela permissões específicas do Amazon S3 na pasta awsexamplebucket1/Alice.
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"s3:PutObject",
"s3:GetObject",
"s3:GetObjectVersion",
"s3:DeleteObject",
"s3:DeleteObjectVersion"
],
"Resource":"arn:aws:s3:::awsexamplebucket1/Alice/*"
}
]
}
Você anexa uma política similar ao usuário Bob, identificando a pasta Bob no valor Resource.
Em vez de anexar políticas a usuários individuais, você pode escrever uma única política que usa
uma variável da política e anexá-la a um grupo. Primeiro, você precisará criar um grupo e adicionar
os usuários Alice e Bob a ele. O exemplo de política a seguir concede um conjunto de permissões do
Amazon S3 na pasta awsexamplebucket1/${aws:username}. Quando a política é avaliada, a variável
${aws:username} é substituída pelo nome do usuário do solicitante. Por exemplo, se Alice enviar uma
solicitação para colocar um objeto, a operação será permitida apenas se Alice estiver fazendo upload do
objeto na pasta examplebucket/Alice.
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"s3:PutObject",
"s3:GetObject",
"s3:GetObjectVersion",
"s3:DeleteObject",
"s3:DeleteObjectVersion"
],
"Resource":"arn:aws:s3:::awsexamplebucket1/${aws:username}/*"
}
]
}
Note
Se você quiser testar a política anterior no console do Amazon S3, o console exigirá permissão para
permissões adicionais do Amazon S3, como exibido na política a seguir. Para obter informações sobre
como o console usa essas permissões, consulte Controlar o acesso a um bucket com políticas de
usuário (p. 387).
{
"Version":"2012-10-17",
"Statement": [
{
"Sid": "AllowGroupToSeeBucketListInTheConsole",
"Action": [
"s3:ListAllMyBuckets",
"s3:GetBucketLocation"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::*"
},
{
"Sid": "AllowRootLevelListingOfTheBucket",
"Action": "s3:ListBucket",
"Effect": "Allow",
"Resource": "arn:aws:s3:::awsexamplebucket1",
"Condition":{
"StringEquals":{
"s3:prefix":[""], "s3:delimiter":["/"]
}
}
},
{
"Sid": "AllowListBucketOfASpecificUserPrefix",
"Action": "s3:ListBucket",
"Effect": "Allow",
"Resource": "arn:aws:s3:::awsexamplebucket1",
"Condition":{ "StringLike":{"s3:prefix":["${aws:username}/*"] }
}
},
{
"Sid": "AllowUserSpecificActionsOnlyInTheSpecificUserPrefix",
"Effect":"Allow",
"Action":[
"s3:PutObject",
"s3:GetObject",
"s3:GetObjectVersion",
"s3:DeleteObject",
"s3:DeleteObjectVersion"
],
"Resource":"arn:aws:s3:::awsexamplebucket1/${aws:username}/*"
}
]
}
Note
Embora os nomes de usuário do IAM sejam identificadores amigáveis e legíveis, eles não devem ser
globalmente exclusivos. Por exemplo, se o usuário Bob deixar a empresa e outro Bob entrar, o novo
Bob poderá acessar as informações do antigo Bob. Em vez de usar nomes de usuário, você pode criar
pastas baseadas nos IDs de usuário. Cada ID de usuário é único. Neste caso, você deve modificar a
política anterior para usar a variável de política ${aws:userid}. Para obter mais informações sobre
identificadores de usuário, consulte Identificadores do IAM no Guia do usuário do IAM.
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"s3:PutObject",
"s3:GetObject",
"s3:GetObjectVersion",
"s3:DeleteObject",
"s3:DeleteObjectVersion"
],
"Resource":"arn:aws:s3:::mycorporatebucket/home/${aws:userid}/*"
}
]
}
Permitir que usuários que não são do IAM (usuários de aplicativos móveis) acessem pastas em
um bucket
Vamos supor que você queira desenvolver um aplicativo móvel, um jogo que armazena dados dos
usuários em um bucket do S3. Para cada usuário do aplicativo, você quer criar uma pasta em seu bucket.
Você também quer limitar o acesso de cada usuário à sua própria pasta. Mas você não pode criar pastas
antes que alguém baixe seu aplicativo e comece a jogar, porque não tem um ID de usuário.
Neste caso, você pode exigir que os usuários criem uma conta em seu aplicativo usando provedores
públicos de identidade, como Login with Amazon, Facebook ou Google. Depois que os usuários criarem
uma conta em seu aplicativo por meio de um desses provedores, eles terão um ID de usuário que você
poderá usar para criar pastas específicas de usuário no tempo de execução.
Você pode usar a federação de identidades da Web no AWS Security Token Service para integrar
informações do provedor de identidade com seu aplicativo e para obter credenciais de segurança
temporárias para cada usuário. Você pode criar políticas do IAM que permitem que o aplicativo acesse seu
bucket e execute operações como criação de pastas específicas de usuário e upload de dados. Para obter
mais informações sobre federação de identidades da Web, consulte Sobre federação de identidades da
Web no Guia do usuário do IAM.
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"s3:PutObject",
"s3:GetObject",
"s3:GetObjectVersion",
"s3:DeleteObject",
"s3:DeleteObjectVersion"
],
"Resource":"arn:aws:s3:::mycorporatebucket/share/marketing/*"
}
]
}
Permitir que todos os seus usuários leiam objetos em uma parte do bucket corporativo
Neste exemplo, você cria um grupo chamado AllUsers, que contém todos os usuários do IAM que
pertencem à conta da AWS. Em seguida, anexe uma política que concede ao grupo acesso a GetObject
e GetObjectVersion, mas somente para objetos na pasta mycorporatebucket/readonly.
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"s3:GetObject",
"s3:GetObjectVersion"
],
"Resource":"arn:aws:s3:::MyCorporateBucket/readonly/*"
}
]
}
Permitir que um parceiro solte arquivos em uma parte específica do bucket corporativo
Neste exemplo, crie um grupo chamado WidgetCo que representa uma empresa parceira. Crie um
usuário do IAM para a pessoa ou aplicação específica na empresa parceira que precisa de acesso.
Depois, coloque o usuário no grupo.
Depois, anexe uma política que concede ao grupo acesso PutObject à seguinte pasta no bucket
corporativo: mycorporatebucket/uploads/widgetco.
Impeça que o grupo WidgetCo faça qualquer outra coisa no bucket adicionando uma declaração que nega
explicitamente outras permissões do Amazon S3, exceto PutObject, em qualquer recurso do Amazon S3
na conta da AWS. Esta etapa será necessária apenas se houver uma política abrangente em uso em outro
lugar na sua conta da AWS que dá aos usuários amplo acesso a recursos do Amazon S3.
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":"s3:PutObject",
"Resource":"arn:aws:s3:::mycorporatebucket/uploads/widgetco/*"
},
{
"Effect":"Deny",
"NotAction":"s3:PutObject",
"Resource":"arn:aws:s3:::mycorporatebucket/uploads/widgetco/*"
},
{
"Effect":"Deny",
"Action":"s3:*",
"NotResource":"arn:aws:s3:::mycorporatebucket/uploads/widgetco/*"
}
]
}
• Exemplo 1: Proprietário do bucket que concede permissões do bucket aos usuários (p. 413)
Por padrão, os usuários do IAM criados na conta não têm permissões. Neste exercício, você concederá
uma permissão de usuário para realizar operações no bucket e no objeto.
• Exemplo 2: Proprietário do bucket concedendo permissões de bucket entre contas (p. 418)
Neste exercício, um proprietário do bucket, conta A, concede permissões de conta cruzada para outra
conta da AWS, conta B. Em seguida, a conta B delega essas permissões para os usuários em sua
conta.
Nesse caso, os cenários do exemplo são um proprietário de bucket que concede permissões de objeto
para outros, mas nem todos os objetos do bucket pertencem ao proprietário do bucket. De quais
permissões o proprietário do bucket precisa e como ele pode delegar essas permissões?
A conta da AWS que cria um bucket é chamada de proprietário do bucket. O proprietário pode conceder
permissões a outras contas da AWS para carregar objetos, e os proprietários desses objetos são as
contas da AWS que os criaram. O proprietário do bucket não tem permissões sobre esses objetos
criados por outras contas da AWS. Se o proprietário do bucket escreve uma política de bucket
concedendo acesso aos objetos, a política não se aplica aos objetos pertencentes a outras contas.
Nesse caso, o proprietário do objeto deve, primeiro, conceder permissões ao proprietário do bucket
usando uma ACL do objeto. Em seguida, o proprietário do bucket pode autorizar essas permissões de
objeto para outros, para usuários em sua própria conta ou para outra conta da AWS, conforme ilustrado
pelos exemplos a seguir.
• Exemplo 3: O proprietário do bucket concede permissões para objetos que não possui (p. 424)
Depois de receber as permissões do proprietário do objeto, o proprietário do bucket não pode delegar
permissões para outras contas da AWS já que não há suporte para a delegação de conta cruzada
(consulte Delegação de permissão (p. 261)). Em vez disso, o proprietário do bucket pode criar uma
função do IAM com permissões para realizar determinadas operações (como obter objeto) e permitir
que outra conta da AWS assuma essa função. Qualquer um que assumir a função pode, então,
acessar os objetos. Este exemplo mostra como um proprietário do bucket pode usar uma função do
IAM para habilitar essa delegação de conta cruzada.
Além disso, ao criar recursos esses exemplos não usam credenciais raiz de uma conta da AWS. Em vez
disso, crie um usuário administrador nessas contas para executar essas tarefas.
Todos as demonstrações com exemplos nesta seção usam as credenciais do usuário administrador. Caso
você não tenha criado um usuário administrador para sua conta da AWS, os tópicos mostram como fazê-
lo.
Observe que para fazer login no Console de Gerenciamento da AWS usando as credenciais de usuário,
você deverá usar o URL de login do usuário do IAM. O console do IAM fornece esse URL para a conta da
AWS. Os tópicos mostram como obter o URL.
1. Faça download e configure a AWS CLI. Para obter instruções, consulte os seguintes tópicos no Guia
do usuário da interface de linha de comando da AWS.
[default]
aws_access_key_id = access key ID
aws_secret_access_key = secret access key
region = us-west-2
aws help
• Use o aws s3 ls para obter uma lista dos buckets na conta configurada.
aws s3 ls
À medida que você avançar nas demonstrações, criará usuários e salvará credenciais de usuários nos
arquivos de configuração ao criar perfis, conforme mostra o exemplo a seguir. Observe que esses perfis
têm nomes (AccountAadmin e AccountBadmin):
[profile AccountAadmin]
aws_access_key_id = User AccountAadmin access key ID
aws_secret_access_key = User AccountAadmin secret access key
region = us-west-2
[profile AccountBadmin]
aws_access_key_id = Account B access key ID
aws_secret_access_key = Account B secret access key
region = us-east-1
Para executar um comando usando essas credenciais de usuário, adicione o parâmetro --profile
especificando o nome do perfil. O comando da CLI da AWS a seguir recupera uma lista de objetos em
examplebucket e especifica o perfil AccountBadmin.
Como alternativa, configure um conjunto de credenciais de usuário como perfil padrão alterando a variável
de ambiente AWS_DEFAULT_PROFILE no prompt de comando. Depois que fizer isso, sempre que você
executar comandos da CLI da AWS sem o parâmetro --profile, a CLI da AWS usará o perfil definido na
variável de ambiente como perfil padrão.
$ export AWS_DEFAULT_PROFILE=AccountAadmin
1. Faça o download e configure as ferramentas da AWS para Windows PowerShell. Para obter
instruções, acesse Baixar e instalar as ferramentas da AWS para Windows PowerShell no Guia do
usuário das ferramentas da AWS para Windows PowerShell.
Note
Para carregar as ferramentas da AWS para o módulo do Windows PowerShell, você
precisará habilitar a execução do script PowerShell. Para obter mais informações, acesse
Ativar execução de script no Guia do usuário das ferramentas da AWS para Windows
PowerShell.
2. Para esses exercícios, especifique credenciais da AWS por sessão usando o comando Set-
AWSCredentials. O comando salva as credenciais em um armazenamento persistente (-StoreAs
parâmetro).
3. Verifique a configuração.
• Execute Get-Command para recuperar uma lista de comandos disponíveis que podem ser usados
para operações do Amazon S3.
Para obter uma lista de comandos, acesse Cmdlets do Amazon Simple Storage Service.
Agora você está pronto testar os exercícios. Siga os links fornecidos no início da seção.
Neste exercício, uma conta da AWS tem um bucket e há um usuário do IAM na conta. Por padrão, o
usuário não tem nenhuma permissão. Para que o usuário realize execute qualquer tarefa, a conta pai deve
conceder permissão a ele. O proprietário do bucket e a conta pai são os mesmos. Portanto, para conceder
ao usuário permissões no bucket, a conta da AWS pode usar uma política de bucket, uma política de
usuário ou ambas. O proprietário da conta concederá algumas permissões usando uma política de bucket
e outras permissões usando uma política de usuário.
Para este exemplo, você precisará de uma conta da AWS. Em vez de usar as credenciais raiz da conta,
você criará um usuário administrador (consulte Sobre o uso de um usuário administrador para criar
recursos e conceder permissões (p. 411)). Nós nos referimos à conta da AWS e ao usuário administrador
como se segue:
Note
Todas as tarefas de criar usuários e conceder permissões são feitas no Console de Gerenciamento da
AWS. Para verificar permissões, a demonstração usa as ferramentas de linha de comando, a interface de
linha de comando (CLI) da AWS e as ferramentas da AWS para Windows PowerShell, portanto, você não
precisa gravar nenhum código para verificar as permissões.
1. Certifique-se de que você tem uma conta da AWS e de que ela tem um usuário com privilégios de
administrador.
a. Cadastre-se para obter uma conta, se necessário. Nós nos referimos a essa conta como conta A.
A AWS o notificará por e-mail quando sua conta estiver ativa e disponível para uso.
b. Na conta A, crie um usuário administrador AccountAadmin. Usando as credenciais da conta A,
faça login no console do IAM e faça o seguinte:
Para obter instruções, consulte Criação de um usuário do IAM em sua conta da AWS no Guia
do usuário do IAM.
ii. Conceda privilégios de administrador da AccountAadmin anexando uma política de usuário
com pleno acesso.
Para instruções, consulte Como trabalhar com políticas no Guia do usuário do IAM.
iii. Anote o IAM User Sign-In URL (URL de login de usuário do IAM) para AccountAadmin. Você
precisará usar esse URL ao fazer login no Console de Gerenciamento da AWS. Para obter
mais informações sobre onde encontrá-lo, consulte Como usuários fazem login na sua conta
no Guia do usuário do IAM. Anote o URL para cada uma das contas.
2. Configure a interface da linha de comando (CLI) da AWS ou as ferramentas da AWS para o Windows
PowerShell. Certifique-se de ter salvado as credenciais de usuário do administrador deste modo:
Etapa 1: Criar recursos (um bucket e um usuário do IAM) na Conta A e conceder permissões
Com as credenciais do usuário AccountAadmin na Conta A e o URL especial de login do usuário do IAM,
faça login no Console de Gerenciamento da AWS e faça o seguinte:
a. No console do Amazon S3, crie um bucket. Anote a região da AWS; na qual você o criou. Para
obter instruções, consulte Criação de um bucket (p. 31).
b. No console do IAM, faça o seguinte:
Como o proprietário do bucket e a conta pai a que o usuário pertence são um só, a conta da AWS
pode conceder permissões de usuário usando uma política do bucket, uma política de usuário, ou
ambas. Neste exemplo, você faz ambos. Se o objeto também for de propriedade da mesma conta, o
proprietário do bucket pode conceder permissões de objeto na política do bucket (ou em uma política
do IAM).
Na instrução Principal, Dave é identificado por seu ARN de usuário. Para obter mais
informações sobre elementos de política, consulte Políticas de bucket e políticas de
usuário (p. 268).
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "statement1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::AccountA-ID:user/Dave"
},
"Action": [
"s3:GetBucketLocation",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::awsexamplebucket1"
]
},
{
"Sid": "statement2",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::AccountA-ID:user/Dave"
},
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::awsexamplebucket1/*"
]
}
]
}
b. Crie uma política inline para o usuário Dave usando as seguintes políticas. A política concede a
Dave a permissão s3:PutObject. Você precisa atualizar a política, fornecendo o nome de seu
bucket.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PermissionForObjectOperations",
"Effect": "Allow",
"Action": [
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::awsexamplebucket1/*"
]
}
]
Para instruções, consulte Como trabalhar com políticas em linha no Guia do usuário do IAM.
Observe que você precisa fazer login no console usando as credenciais da Conta A.
Com as credenciais de Dave, verifique se as permissões funcionam. Você pode usar um dos dois
procedimentos a seguir.
[profile UserDaveAccountA]
aws_access_key_id = access-key
aws_secret_access_key = secret-access-key
region = us-east-1
2. Verifique se Dave pode executar as operações conforme concedido na política de usuário. Faça
upload de um objeto de exemplo usando o seguinte comando put-object da CLI da AWS.
O parâmetro --body no comando identifica o arquivo de origem para fazer upload. Por exemplo,
se o arquivo está na raiz da unidade C: de um computador Windows, você especifica c:
\HappyFace.jpg. O parâmetro --key fornece o nome de chave para o objeto.
1. Armazene as credenciais de Dave como AccountADave. Depois, você usa essas credenciais para
PUT e GET um objeto.
2. Fala upload de um objeto de exemplo usando as ferramentas da AWS para o comando Write-
S3Object do Windows PowerShell usando as credenciais armazenadas do usuário Dave.
Uma conta da AWS — por exemplo, a Conta A — pode conceder a outra conta da AWS, a Conta B,
permissão para acessar seus recursos, como buckets e objetos. A Conta B pode então delegar essas
permissões para usuários em sua conta. Neste cenário de exemplo, o proprietário do bucket concede a
permissão entre contas a outra conta para executar operações específicas no bucket.
Note
A Conta A também pode conceder diretamente a um usuário na Conta B permissões usando uma
política de bucket. Mas o usuário ainda precisará ter permissão da conta pai, a Conta B, à qual o
usuário pertence, mesmo que a Conta B não tenha permissões da Conta A. Desde que o usuário
tenha permissão do proprietário do recurso e da conta pai, o usuário poderá acessar o recurso.
1. O usuário administrador da Conta A anexa uma política de bucket concedendo permissões entre contas
à Conta B para executar operações específicas no bucket.
Para este exemplo, você precisará de duas contas. A tabela a seguir mostra como nos referimos a essas
contas e aos usuários administradores nessas contas. Conforme as diretrizes do IAM (veja Sobre o uso
de um usuário administrador para criar recursos e conceder permissões (p. 411)), não usamos as
credenciais raiz de conta nesta apresentação. Em vez disso, você cria um usuário administrador em cada
conta e usa essas credenciais para criar recursos e conceder permissões a eles.
Todas as tarefas de criar usuários e conceder permissões são feitas no Console de Gerenciamento da
AWS. Para verificar as permissões, o passo a passo usa as ferramentas da linha de comando, a interface
de linha de comando (CLI) da AWS e as ferramentas da AWS para Windows PowerShell, portanto, você
não precisa escrever nenhum código.
1. Verifique se você tem duas contas da AWS e se cada conta tem um usuário administrador, conforme
mostrado na tabela na seção anterior.
A AWS o notificará por e-mail quando sua conta estiver ativa e disponível para uso.
b. Usando as credenciais da Conta A, faça login no console do IAM para criar o usuário
administrador:
Para obter mais informações, consulte Como os usuários fazem login em sua conta no Guia do
usuário do IAM.
d. Repita a etapa anterior usando as credenciais da Conta B e crie um usuário administrador
AccountBadmin.
2. Configure a interface da linha de comando (CLI) da AWS ou as ferramentas da AWS para o Windows
PowerShell. Certifique-se de ter salvado as credenciais de usuário do administrador deste modo:
• Se estiver usando a CLI da AWS, crie dois perfis, AccountAadmin e AccountBadmin, no arquivo de
configuração.
• Se estiver usando as ferramentas da AWS para o Windows PowerShell, certifique-se de armazenar
as credenciais para a sessão como AccountAadmin e AccountBadmin.
a. Adicione perfis no arquivo de credenciais da AWS CLI para cada um dos usuários
administradores nas duas contas.
[AccountAadmin]
aws_access_key_id = access-key-ID
aws_secret_access_key = secret-access-key
region = us-east-1
[AccountBadmin]
aws_access_key_id = access-key-ID
aws_secret_access_key = secret-access-key
region = us-east-1
Usando o URL de login de usuário do IAM para a Conta A, primeiro faça login no Console de
Gerenciamento da AWS como usuário AccountAadmin. Esse usuário criará um bucket e anexará uma
política a ele.
1. No console do Amazon S3, crie um bucket. Este exercício supõe que o bucket é criado na região US
East (N. Virginia) e que o nome é DOC-EXAMPLE-BUCKET.
Para obter instruções, vá para Etapa 2: fazer upload de um objeto para o seu bucket (p. 15).
Etapa 1.3: anexar uma política de bucket para conceder permissões entre contas para a conta B
Para obter instruções, consulte Adicionar uma política de bucket usando o console do Amazon
S3 (p. 377).
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Example permissions",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::AccountB-ID:root"
},
"Action": [
"s3:GetBucketLocation",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::DOC-EXAMPLE-BUCKET"
]
}
]
}
Agora o administrador da Conta B cria um usuário, Dave, e delega as permissões recebidas da Conta A.
Usando o URL de login da Conta B do usuário do IAM, primeiro faça login no Console de Gerenciamento
da AWS como o usuário AccountBadmin.
Para obter instruções, consulte Criação de usuários do IAM (Console de Gerenciamento da AWS) no Guia
do usuário do IAM.
Crie uma política inline para o usuário Dave usando as seguintes políticas. Você precisará atualizar a
política fornecendo o nome do bucket.
Supõe-se que você está conectado no console usando as credenciais do usuário AccountBadmin.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Example",
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::DOC-EXAMPLE-BUCKET"
]
}
]
Para instruções, consulte Como trabalhar com políticas em linha no Guia do usuário do IAM.
1. Adicione o perfil UserDave ao arquivo de configuração da AWS CLI. Para obter mais informações
sobre o arquivo de configuração, consulte Configurar as ferramentas para as demonstrações de
exemplo (p. 412)
[profile UserDave]
aws_access_key_id = access-key
aws_secret_access_key = secret-access-key
region = us-east-1
2. No prompt de comando, digite o seguinte comando da AWS CLI para verificar se Dave agora pode
obter uma lista de objetos do DOC-EXAMPLE-BUCKET de propriedade da Conta A. Observe que o
comando especifica o perfil UserDave.
Dave não tem nenhuma outra permissão. Portanto, se ele tentar qualquer outra operação - por
exemplo, o seguinte get bucket location — o Amazon S3 retornará permissão negada.
Dave não tem nenhuma outra permissão. Portanto, se ele tentar qualquer outra operação - por
exemplo, o seguinte get bucket location — o Amazon S3 retornará permissão negada.
Você pode ter permissões concedidas por uma ACL, por uma política de bucket e por uma política de
usuário. Mas se houver uma negação explícita definida por uma política de bucket ou por uma política
de usuário, a negação explícita terá precedência sobre qualquer outra permissão. Para testar, vamos
atualizar a política de bucket e negar explicitamente a permissão s3:ListBucket para a conta B. A
Versão da API 2006-03-01
422
Amazon Simple Storage Service Guia do usuário
Políticas de bucket e políticas de usuário
política também concede a permissão s3:ListBucket, mas a negação explícita tem precedência, e a
Conta B ou os usuários da Conta B não poderão listar objetos no DOC-EXAMPLE-BUCKET.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Example permissions",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::AccountB-ID:root"
},
"Action": [
"s3:GetBucketLocation",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::DOC-EXAMPLE-BUCKET"
]
},
{
"Sid": "Deny permission",
"Effect": "Deny",
"Principal": {
"AWS": "arn:aws:iam::AccountB-ID:root"
},
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::DOC-EXAMPLE-BUCKET"
]
}
]
}
2. Agora, se você tentar obter uma lista de bucket usando as credenciais de AccountBadmin, você terá o
acesso negado.
• Usar a CLI da AWS:
Etapa 4: Limpeza
1. Depois de terminar os testes, você pode seguir uma das etapas a seguir para fazer a limpeza.
O cenário deste exemplo é que o proprietário do bucket deseja conceder permissão para acessar objetos,
mas nem todos os objetos no bucket são de propriedade do proprietário do bucket. Como um proprietário
de bucket pode conceder permissão para objetos que não possui? Para este exemplo, o proprietário do
bucket está tentando conceder permissão aos usuários em sua própria conta.
Um proprietário de bucket pode habilitar outras contas da AWS para fazer upload de objetos. Esses
objetos são de propriedade das contas que os criou. O proprietário do bucket não possui objetos que
ele não criou. Portanto, para o proprietário do bucket conceder acesso a esses objetos, o proprietário do
objeto deve primeiro conceder permissão ao proprietário do bucket usando um objeto da ACL. Para obter
mais informações, consulte Propriedade de bucket e objeto do Amazon S3 (p. 253).
Neste exemplo, o proprietário do bucket delega permissão aos usuários em sua própria conta. A seguir é
apresentado um resumo das etapas de demonstração:
1. O usuário administrador da Conta A anexa uma política de bucket com duas declarações.
• Habilitar permissão entre contas para a Conta B fazer upload de objetos.
• Permitir que um usuário em sua própria conta acesse objetos no bucket.
2. O usuário administrador da Conta B faz upload de objetos no bucket de propriedade da Conta A.
3. O administrador da Conta B atualiza a ACL do objeto adicionando uma concessão que dá ao
proprietário do bucket permissão de controle total sobre o objeto.
Para este exemplo, você precisará de duas contas. A tabela a seguir mostra como nos referimos a essas
contas e aos usuários administradores nessas contas. Nesta demonstração, você não usa as credenciais
raiz da conta, de acordo com as diretrizes recomendadas do IAM. Para obter mais informações, consulte
Sobre o uso de um usuário administrador para criar recursos e conceder permissões (p. 411). Em vez
disso, você cria um administrador em cada conta e usa essas credenciais para criar recursos e conceder
permissões a eles.
Todas as tarefas de criar usuários e conceder permissões são feitas no Console de Gerenciamento da
AWS. Para verificar as permissões, a demonstração usa as ferramentas da linha de comando, a Interface
de Linhas de Comando da AWS (AWS CLI) e as AWS Tools for Windows PowerShell, portanto, você não
precisa escrever nenhum código.
1. Verifique se você tem duas contas da AWS e se cada conta tem um administrador, conforme
mostrado na tabela na seção anterior.
i. Abra a página do Amazon S3 e selecione Create an AWS Account (Criar uma conta da
AWS).
ii. Siga as instruções da tela. A AWS o notificará por e-mail quando sua conta estiver ativa e
disponível para uso.
b. Usando as credenciais da Conta A, faça login no console do IAM e faça o seguinte para criar um
usuário administrador:
• Se estiver usando a AWS CLI, crie dois perfis AccountAadmin e AccountBadmin, no arquivo de
configuração.
• Se estiver usando o Tools for Windows PowerShell, armazene as credenciais da sessão como
AccountAadmin e AccountBadmin.
Etapa 1.2: Criar um bucket e um usuário e adicionar uma política de bucket para conceder
permissões ao usuário
1. No console do Amazon S3, crie um bucket. Este exercício supõe que o bucket foi criado na região
Leste dos EUA (Norte da Virgínia) e que o nome é DOC-EXAMPLE-BUCKET1.
Para obter instruções, consulte Criação de usuários do IAM (console) no Guia do usuário do IAM.
3. Anote as credenciais de Dave.
4. No console do Amazon S3, anexe a seguinte política do bucket ao bucket DOC-EXAMPLE-BUCKET1.
Para obter instruções, consulte Adicionar uma política de bucket usando o console do Amazon
S3 (p. 377). Siga as etapas para adicionar uma política de bucket. Para obter informações sobre
como encontrar IDs de conta, consulte Como encontrar o ID da conta da AWS.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Statement1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::AccountB-ID:root"
},
"Action": [
"s3:PutObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/*",
"arn:aws:s3:::DOC-EXAMPLE-BUCKET1"
]
},
{
"Sid": "Statement3",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::AccountA-ID:user/Dave"
},
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/*"
]
}
]
}
Agora que a Conta B tem permissões para executar operações no bucket da Conta A, o administrador da
Conta B fará o seguinte:
1. Usando o comando da CLI put-object, faça upload de um objeto. O parâmetro --body no comando
identifica o arquivo de origem para fazer upload. Por exemplo, se o arquivo estiver na unidade C: de
um computador Windows, você especificará c:\HappyFace.jpg. O parâmetro --key fornece o
nome de chave para o objeto.
2. Adicionar uma concessão à ACL do objeto para permitir controle total do objeto ao proprietário do
bucket. Para obter informações sobre como encontrar um ID de usuário canônico, consulte Como
encontrar o ID de usuário canônico da conta da AWS (p. 446).
1. Usando o comando Write-S3Object do Tools for Windows PowerShell, faça upload de um objeto.
2. Adicionar uma concessão à ACL do objeto para permitir controle total do objeto ao proprietário do
bucket.
Agora verifique se o usuário Dave na conta A pode acessar o objeto de propriedade da conta B.
1. Adicione as credenciais do usuário Dave ao arquivo config da AWS CLI e crie um novo perfil,
UserDaveAccountA. Para obter mais informações, consulte Configurar as ferramentas para as
demonstrações de exemplo (p. 412).
[profile UserDaveAccountA]
aws_access_key_id = access-key
aws_secret_access_key = secret-access-key
region = us-east-1
2. Execute o comando get-object da CLI para fazer download do arquivo HappyFace.jpg e salve-o
localmente. Você fornece credenciais ao usuário Dave adicionando o parâmetro --profile.
Etapa 4: Limpeza
1. Depois de terminar os testes, você pode seguir uma das etapas a seguir para fazer a limpeza.
Neste cenário de exemplo, você possui um bucket e habilitou outras contas da AWS para fazer upload de
objetos. Ou seja, seu bucket pode ter objetos de propriedade de outras contas da AWS.
Agora, suponha que, como proprietário do bucket, você precise conceder permissão entre contas aos
objetos, independentemente de quem seja o proprietário, a um usuário em outra conta. Por exemplo,
esse usuário pode ser um aplicativo de faturamento que precise acessar metadados de objeto. Há dois
problemas principais:
• O proprietário do bucket não tem permissões sobre esses objetos criados por outras contas da AWS.
Então para que o proprietário do bucket possa conceder permissões sobre objetos que não possui,
o proprietário do objeto, a conta da AWS que criou os objetos, deve primeiro conceder permissão ao
proprietário do bucket. Depois, o proprietário do bucket pode delegar essas permissões.
• A conta do proprietário do bucket pode delegar permissões a usuários em sua própria conta (veja
Exemplo 3: O proprietário do bucket concede permissões para objetos que não possui (p. 424)), mas
não pode delegar permissões para outras contas da AWS, porque não há suporte para a delegação
entre contas.
Neste cenário, o proprietário do bucket pode criar uma função do AWS Identity and Access Management
(IAM) com permissão para acessar objetos e conceder permissão a outra conta da AWS para assumir a
função temporariamente, permitindo que ela acesse objetos no bucket.
As funções do IAM permitem vários cenários para delegar acesso a seus recursos, e o acesso entre
contas é um dos cenários principais. Neste exemplo, o proprietário do bucket, a Conta A, usa uma função
do IAM para delegar temporariamente acessos a objetos entre contas a usuários em outra conta da AWS,
Conta C. Cada função do IAM que você criar tem duas políticas anexadas a ela:
• Uma política de confiança que identifica outra conta da AWS que pode assumir a função.
• Uma política de acesso que define quais permissões - por exemplo, s3:GetObject - são permitidas
quando alguém assume a função. Para obter uma lista de permissões que você pode especificar em
uma política, consulte Ações do Amazon S3 (p. 273).
A conta da AWS identificada na política de confiança então concede sua permissão de usuário para
assumir a função. O usuário pode então fazer o seguinte para acessar os objetos:
Para obter mais informações sobre as funções do IAM, acesse Funções do IAM no Guia do usuário do
IAM.
1. O usuário administrador da Conta A anexa a política do bucket que concede à Conta B uma permissão
condicional para fazer upload de objetos.
2. O administrador da Conta A cria uma função do IAM, estabelecendo a confiança com a Conta C, e
assim os usuários dessa conta podem acessar a Conta. A. A política de acesso anexada à função limita
o que o usuário na Conta C pode fazer quando acessa a Conta A.
3. O administrador da Conta B faz upload de um objeto no bucket de propriedade da Conta A, concedendo
permissão de controle total ao proprietário do bucket.
4. O administrador da Conta C cria um usuário e anexa uma política de usuário que permite que o usuário
assuma a função.
5. O usuário na Conta C primeiro assume a função, que retorna as credenciais de segurança temporárias
ao usuário. Usando essas credenciais de segurança temporárias, o usuário então acessa os objetos no
bucket.
Para este exemplo, você precisará de três contas. A tabela a seguir mostra como nos referimos a essas
contas e aos usuários administradores nessas contas. Conforme as diretrizes do IAM (veja Sobre o uso
de um usuário administrador para criar recursos e conceder permissões (p. 411)), não usamos as
credenciais raiz de conta nesta apresentação. Em vez disso, você cria um usuário administrador em cada
conta e usa essas credenciais para criar recursos e conceder permissões a eles.
É aconselhável abrir um editor de texto e escrever algumas informações enquanto você passa
pelas etapas. Especificamente, você vai precisar dos IDs de conta, IDs de usuários canônicos,
URLs de login de usuário do IAM de cada conta para se conectar ao console, e Nomes de recurso
da Amazon (ARN) dos usuários do IAM e funções.
1. Certifique-se de ter três contas da AWS e de que cada conta tenha um usuário administrador
conforme exibido na tabela na seção anterior.
a. Cadastre-se para contas da AWS, se necessário. Nós nos referimos a essas contas como Conta
A, Conta B e Conta C.
A AWS o notificará por e-mail quando sua conta estiver ativa e disponível para uso.
b. Usando as credenciais da Conta A, faça login no console do IAM e faça o seguinte para criar um
usuário administrador:
Quando criar uma função do IAM na Conta A, a política de confiança concederá à Conta C a
permissão para assumir a função especificando o ID da conta. Você pode localizar as informações da
conta da seguinte forma:
a. Use o ID ou o alias da conta da AWS, o nome de usuário do IAM, e a senha para fazer login no
console do Amazon S3.
b. Selecione o nome de um bucket do Amazon S3 para visualizar os detalhes sobre esse bucket.
c. Selecione a guia Permissions (Permissões) e selecione Access Control List (Lista de controle de
acesso).
d. Na seção Access for your AWS account (Acesso à sua conta da
AWS), na coluna Account (Conta) está um longo identificador, como
c1daexampleaaf850ea79cf0430f33d72579fd1611c97f7ded193374c0b163b6. Esse é
seu ID de usuário canônico.
3. Ao criar uma política do bucket, você precisará das seguintes informações. Anote esses valores:
selecionar o usuário e encontrar o Nome de recurso da Amazon (ARN) de usuário na guia Summary
(Resumo).
Na política do bucket, você concede ao AccountBadmin permissão para fazer upload de objetos e
especifica o usuário usando o Nome de recurso da Amazon (ARN). Aqui está um exemplo de valor
do Nome de recurso da Amazon (ARN):
arn:aws:iam::AccountB-ID:user/AccountBadmin
4. Configure a interface da linha de comando (CLI) da AWS ou as ferramentas da AWS para o Windows
PowerShell. Certifique-se de ter salvado as credenciais de usuário do administrador deste modo:
• Se estiver usando a CLI da AWS, crie perfis, AccountAadmin e AccountBadmin, no arquivo config.
• Se estiver usando as ferramentas da AWS para o Windows PowerShell, certifique-se de armazenar
as credenciais para a sessão como AccountAadmin e AccountBadmin.
Neste exemplo, a Conta A é o proprietário do bucket. Então o usuário AccountAadmin na Conta A vai criar
um bucket, anexar uma política do bucket concedendo ao administrador da Conta B permissão para fazer
upload de objetos, criar uma função do IAM que concede permissão à Conta C para assumir a função de
maneira que ela possa acessar objetos no bucket.
Usando o URL de login de usuário do IAM para a Conta A, primeiro faça login no Console de
Gerenciamento da AWS como usuário AccountAadmin. Esse usuário criará um bucket e anexará uma
política a ele.
Você precisa atualizar a política fornecendo seus próprios valores para examplebucket, AccountB-
ID, e CanonicalUserId-of-AWSaccountA-BucketOwner.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "111",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::AccountB-ID:user/AccountBadmin"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::awsexamplebucket1/*"
},
{
"Sid": "112",
"Effect": "Deny",
"Principal": {
"AWS": "arn:aws:iam::AccountB-ID:user/AccountBadmin"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::awsexamplebucket1/*",
"Condition": {
"StringNotEquals": {
"s3:x-amz-grant-full-control": "id=CanonicalUserId-of-AWSaccountA-
BucketOwner"
}
}
}
]
}
Etapa 1.3: Criar uma função do IAM para conceder à Conta C acesso entre contas à Conta A
No console do IAM, crie uma função do IAM (“examplerole”) que conceda à Conta C permissão para
assumir a função. Certifique-se que você ainda está conectado como administrador da Conta A porque a
função deve ser criada na Conta A.
1. Antes de criar a função, prepare as políticas gerenciadas que definem as permissões necessárias à
função. Em uma etapa posterior, você anexará essa política à função.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::awsexamplebucket1/*"
}
]
}
Para esta demonstração, não é necessário exigir que os usuários tenham autenticação multifator
(MFA) para assumirem a função, portanto, deixe essa opção desmarcada.
5. Clique em Next Step (Próxima etapa) para definir as permissões que serão associadas à função.
6.
Selecione a caixa ao lado da política access-accountA-bucket que você criou e, em seguida,
clique em Next Step (Próxima etapa).
A página Revisar será exibida para que você possa confirmar as configurações para a função antes
de criá-la. Um item muito importante a observar nesta página é o link que você pode enviar aos
usuários que precisem usar essa função. Os usuários que clicarem no link irão diretamente para a
página Mudança de função com os campos ID da conta e Nome da função já preenchidos. Você
também pode ver esse link mais tarde na página Resumo da função de qualquer função entre contas.
7. Insira examplerole para o nome da função e, em seguida, clique em Next Step (Próxima etapa).
8. Depois de revisar a função, clique em Create Role (Criar função).
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::AccountC-ID:root"
},
"Action": "sts:AssumeRole"
}
]
}
12. Anote o Nome de recurso da Amazon (ARN) da função examplerole que você criou.
Depois, nas etapas a seguir, você anexará um política de usuário para permitir que um usuário do IAM
assuma essa função e identificará a função com o valor de Nome de recurso da Amazon (ARN).
• Usando o comando de CLI da AWS put-object, faça upload de um objeto para examplebucket.
Observe o seguinte:
• O parâmetro --body identifica o arquivo de origem para fazer upload. Por exemplo, se o arquivo
está na unidade C: de um computador Windows, você especifica c:\HappyFace.jpg.
Etapa 3.1: Criar um usuário na Conta C e delegar a permissão para assumir examplerole
1. Usando o URL de login de usuário do IAM para a Conta C, primeiro faça login no Console de
Gerenciamento da AWS como usuário AccountCadmin.
Para obter instruções, consulte Criação de usuários do IAM (Console de Gerenciamento da AWS) no
Guia do usuário do IAM.
3. Anote as credenciais de Dave. Dave precisará dessas credenciais para assumir a função
examplerole.
4. Crie uma política inline para o usuário Dave do IAM para delegar a Dave a permissão
sts:AssumeRole na função examplerole da conta A.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["sts:AssumeRole"],
"Resource": "arn:aws:iam::AccountA-ID:role/examplerole"
}
]
}
[profile AccountCDave]
aws_access_key_id = UserDaveAccessKeyID
aws_secret_access_key = UserDaveSecretAccessKey
region = us-west-2
Agora Dave pode acessar objetos no bucket de propriedade da Conta A, desta forma:
• Dave primeiro assume a examplerole usando suas próprias credenciais. Isso retornará credenciais
temporárias.
• Usando as credenciais temporárias, Dave então acessará os objetos no bucket da Conta A.
1. No prompt de comando, execute o seguinte comando assume-role da CLI da AWS, usando o perfil
AccountCDave.
Você terá de atualizar o valor de Nome de recurso da Amazon (ARN) no comando, fornecendo o ID da
Conta A onde examplerole foi definido.
Em resposta, o AWS Security Token Service (STS) retorna credenciais de segurança temporárias (ID
da chave de acesso, chave de acesso secreta e um token de sessão).
2. Salve as credenciais de segurança temporárias no arquivo config da CLI da AWS no perfil TempCred.
[profile TempCred]
aws_access_key_id = temp-access-key-ID
aws_secret_access_key = temp-secret-access-key
aws_session_token = session-token
region = us-west-2
3. No prompt de comando, execute o comando a seguir da CLI da AWS para acessar objetos usando as
credenciais temporárias. Por exemplo, o comando especifica a API do objeto head para recuperar os
metadados do objeto para o objeto HappyFace.jpg.
Se tentar qualquer outra ação – por exemplo, get-object-acl –, você terá a permissão negada
porque a função não tem permissão para essa ação.
Usamos o usuário Dave para assumir a função e acessar o objeto usando credenciais temporárias.
Também poderia ser um aplicativo na Conta C que acessa objetos em examplebucket. O aplicativo
pode obter credenciais de segurança temporárias, e a Conta C pode delegar permissão de aplicativo
para assumir examplerole.
Etapa 4: Limpeza
1. Depois de terminar os testes, você pode seguir uma das etapas a seguir para fazer a limpeza.
Recursos relacionados
• Criação de uma função para delegar permissões a um usuário do IAM no Guia do usuário do IAM.
• Tutorial: Delegar acesso em contas da AWS usando funções do IAM no Guia do usuário do IAM.
• Como trabalhar com políticas no Guia do usuário do IAM.
O Amazon S3 Storage Lens usa funções vinculadas a serviços do AWS Identity and Access Management
(IAM). Uma função vinculada a serviços é um tipo exclusivo de função do IAM vinculada diretamente ao S3
Storage Lens. As funções vinculadas a serviços são predefinidas pelo S3 Storage Lens e incluem todas as
permissões que o serviço requer para chamar outros serviços da AWS em seu nome.
Uma função vinculada a serviços facilita a configuração do S3 Storage Lens porque você não precisa
adicionar as permissões necessárias manualmente. O S3 Storage Lens define as permissões da função
vinculada a serviços e, salvo outra definição, somente o S3 Storage Lens pode assumir suas funções. As
permissões definidas incluem a política de confiança e a política de permissões, e essa política não pode
ser anexada a nenhuma outra entidade do IAM.
Você pode excluir essa função vinculada a serviços somente após a exclusão dos recursos relacionados.
Isso protege seus recursos do S3 Storage Lens, porque você não consegue remover por engano a
permissão para acessar os recursos.
Para obter informações sobre outros serviços que oferecem suporte às funções vinculadas ao serviço,
consulte Serviços da AWS que funcionam com o IAM e procure os serviços com Sim na coluna Função
vinculada ao serviço. Escolha um Sim com um link para exibir a documentação da função vinculada a
serviço desse serviço.
A função vinculada a serviços do S3 Storage Lens confia no seguinte serviço no armazenamento da sua
organização:
• storage-lens.s3.amazonaws.com
A política de permissões da função permite que o S3 Storage Lens execute as seguintes ações:
• organizations:DescribeOrganization
organizations:ListAccounts
organizations:ListAWSServiceAccessForOrganization
organizations:ListDelegatedAdministrators
Você deve configurar permissões para que uma entidade do IAM (por exemplo, um usuário, grupo ou
função) crie, edite ou exclua uma função vinculada ao serviço. Para obter mais informações, consulte
Permissões de função vinculada ao serviço no Guia do usuário do IAM.
• Crie uma configuração de painel do S3 Storage Lens para sua organização no console do Amazon S3.
• PUT uma configuração do S3 Storage Lens para sua organização usando a API REST, CLI da AWS e
SDKs.
Note
Se você excluir essa função vinculada a serviços, as ações anteriores a recriarão conforme necessário.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AwsOrgsAccess",
"Effect": "Allow",
"Action": [
"organizations:DescribeOrganization",
"organizations:ListAccounts",
"organizations:ListAWSServiceAccessForOrganization",
"organizations:ListDelegatedAdministrators"
],
"Resource": [
"*"
]
}
]
}
Se o serviço Amazon S3 Storage Lens estiver usando a função quando você tentar excluir os
recursos, a exclusão poderá falhar. Se isso acontecer, espere alguns minutos e tente a operação
novamente.
Os recursos são configurações do S3 Storage Lens no nível da organização. Use o S3 Storage Lens para
limpar os recursos e, em seguida, use o console do IAM, a CLI, a API REST ou o AWS SDK para excluir a
função.
Na API REST, na CLI da AWS e nos SDKs, as configurações do S3 Storage Lens podem ser descobertas
usando ListStorageLensConfigurations em todas as regiões onde sua organização criou
configurações do S3 Storage Lens. Use a ação DeleteStorageLensConfiguration a fim de excluir
essas configurações para que você possa excluir a função.
Note
Para excluir a função vinculada a serviços, você deve excluir todas as configurações do S3
Storage Lens no nível da organização em todas as regiões em que elas existem.
Por exemplo, é possível conceder permissões apenas para outras contas da AWS; você não pode
conceder permissões para usuários da sua conta. Não é possível conceder permissões condicionais, nem
negar permissões explicitamente. As ACLs são adequadas para cenários específicos. Por exemplo, se um
proprietário do bucket permite que outras contas da AWS carreguem objetos, as permissões para esses
objetos só podem ser gerenciadas com a ACL do objeto pela conta da AWS que detém o objeto.
Para obter mais informações sobre as opções de política de acesso, consulte Diretrizes para políticas de
acesso (p. 258). Para obter mais informações sobre ACLs, consulte os tópicos a seguir.
Tópicos
• Visão geral da lista de controle de acesso (ACL) (p. 440)
• Como encontrar o ID de usuário canônico da conta da AWS (p. 446)
• Configurar ACLs (p. 448)
Quando você cria um bucket ou um objeto, o Amazon S3 cria uma ACL padrão que concede ao
proprietário do recurso controle total sobre o recurso. Isso é exibido no seguinte exemplo de ACL de
bucket (a ACL de objeto padrão tem a mesma estrutura):
Example
A ACL de exemplo inclui um elemento Owner que identifica o proprietário pelo ID de usuário canônico da
conta da AWS. Para obter instruções sobre como localizar seu ID canônico do usuário, consulte Encontrar
um ID de usuário canônico da conta da AWS (p. 442). O elemento Grant identifica o favorecido (uma
conta da AWS ou um grupo predefinido) e a permissão concedida. Esta ACL padrão tem um elemento
Grant para o proprietário. Conceda permissões adicionando elementos Grant, com cada concessão
identificando o favorecido e a permissão.
Note
Tópicos
• Quem é o favorecido? (p. 441)
• Quais permissões posso conceder? (p. 443)
• Amostra de ACL (p. 445)
• ACL pré-configurada (p. 446)
Quem é o favorecido?
O favorecido pode ser uma conta da AWS ou um dos grupos predefinidos do Amazon S3. Você concede
permissão a uma conta da AWS usando o endereço de e-mail ou o ID de usuário canônico. No entanto,
se você fornecer um endereço de e-mail na solicitação de concessão, o Amazon S3 encontrará o ID de
usuário canônico para essa conta e o adicionará à ACL. As ACLs resultantes sempre conterão o ID de
usuário canônico para a conta da AWS, e não o endereço de e-mail da conta.
Ao conceder direitos de acesso, você especifica cada favorecido como um par de tipo=valor, em que o tipo
é um dos seguintes:
Important
O uso de endereços de e-mail para especificar um favorecido tem suporte somente nas seguintes
regiões da AWS:
Para obter uma lista de todas as regiões e endpoints em que o Amazon S3 tem suporte, consulte
Regiões e endpoints na Referência geral da AWS.
Por exemplo, o cabeçalho x-amz-grant-read a seguir concede às contas da AWS identificadas por
endereços de e-mail permissões para ler dados de objetos e seus metadados:
Warning
Ao conceder acesso aos recursos para outras contas da AWS, esteja ciente de que as contas
da AWS podem delegar as permissões para usuários das suas contas. Isso é conhecido como
acesso entre contas. Para obter informações sobre como usar o acesso entre contas, consulte
Criar uma função para delegar permissões a um usuário do IAM no Guia do usuário do IAM.
O ID de usuário canônico está associado à conta da AWS. Este ID é uma longa string de caracteres,
como 79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be. Para obter
informações sobre como encontrar o ID de usuário canônico da sua conta, consulte Como encontrar o ID
de usuário canônico da conta da AWS (p. 446).
Você também pode pesquisar o ID de usuário canônico de uma conta da AWS lendo a ACL de um bucket
ou objeto para o qual a conta da AWS tem permissões de acesso. Quando uma conta individual da AWS
recebe permissões por meio de uma solicitação de concessão, um registro de concessão é adicionado à
ACL com o ID de usuário canônico da conta.
Note
Se você tornar seu bucket público (não recomendado) qualquer usuário não autenticado pode
carregar objetos para o bucket. Esses usuários anônimos não têm uma conta AWS. Quando
um usuário anônimo carrega um objeto em seu bucket, Amazon S3 adiciona um ID de usuário
canônico especial (65a011a29cdf8ec533ec3d1ccaae921c) como o dono do objeto no ACL.
Para obter mais informações, consulte Propriedade de bucket e objeto do Amazon S3 (p. 253).
Este grupo representa todas as contas da AWS. A permissão de acesso a esse grupo permite que
qualquer conta da AWS acesse o recurso. No entanto, todas as solicitações devem estar assinadas
(autenticadas).
Warning
Quando você concede acesso ao grupo Authenticated Users, qualquer usuário autenticado da
AWS em todo o mundo pode acessar seu recurso.
• Grupo Todos os usuários: representado por http://acs.amazonaws.com/groups/global/
AllUsers.
A permissão de acesso a esse grupo permite que qualquer um acesse o recurso. As solicitações podem
estar assinadas (autenticadas) ou não (anônimas). As solicitações não assinadas omitem o cabeçalho
Autenticação na solicitação.
Warning
Recomendamos fortemente que você nunca conceda ao grupo All Users permissões WRITE,
WRITE_ACP ou FULL_CONTROL. Por exemplo, embora as permissões WRITE não permitam
que não proprietários substituam ou excluam objetos existentes, as permissões WRITE ainda
permitem que qualquer pessoa armazene objetos em seu bucket, pelo qual você é cobrado.
Para obter mais informações sobre essas permissões, consulte a seguinte seção Quais
permissões posso conceder? (p. 443).
• Grupo Entrega de logs: representado por http://acs.amazonaws.com/groups/s3/LogDelivery.
A permissão WRITE em um bucket permite que esse grupo grave logs de acesso ao servidor (consulte
Registrar em log as solicitações com registro em log de acesso ao servidor (p. 833)) no bucket.
Note
Ao usar ACLs, um favorecido pode ser uma conta da AWS ou um dos grupos predefinidos
do Amazon S3. No entanto, o favorecido não pode ser um usuário do IAM. Para obter mais
informações sobre os usuários e as permissões da AWS no IAM, acesse Usar o AWS Identity and
Access Management.
Para obter mais informações sobre permissões da ACL no console do Amazon S3, consulte Configurar
ACLs (p. 448).
Permissões de ACL
READ_ACP Permite ao favorecido ler a ACL do bucket Permite ao favorecido ler a ACL do objeto
WRITE_ACP Permite ao favorecido gravar a ACL para o Permite ao favorecido gravar a ACL para o
bucket aplicável objeto aplicável
Warning
Tenha cuidado ao conceder permissões de acesso a buckets e objetos do S3. Por exemplo,
conceder acesso de WRITE a um bucket permite que o favorecido crie objetos no bucket. É
altamente recomendável que você leia esta seção Visão geral da lista de controle de acesso
(ACL) (p. 440) inteira antes da concessão de permissões.
Conforme mostrado na tabela anterior, uma ACL concede apenas um conjunto finito de permissões, em
comparação com o número de permissões que pode ser definido em uma política de acesso (consulte
Ações do Amazon S3 (p. 273)). Cada uma dessas permissões permite uma ou mais operações do
Amazon S3.
A tabela a seguir mostra como cada uma das permissões da ACL se correlaciona com as permissões de
política de acesso correspondentes. Como você pode ver, a política de acesso permite mais permissões
que uma ACL. Use ACLs principalmente para conceder permissões básicas de leitura/gravação, similares
às permissões de sistema de arquivos. Para obter mais informações sobre quando usar uma ACL,
consulte Diretrizes para políticas de acesso (p. 258).
Para obter mais informações sobre permissões da ACL no console do Amazon S3, consulte Configurar
ACLs (p. 448).
Chaves de condição
Ao conceder permissões de política de acesso, você pode usar chaves de condição para restringir o
valor da ACL em um objeto usando uma política de bucket. As chaves de contexto abaixo correspondem
a ACLs. Você pode usar essas chaves de contexto para obrigar a usar uma ACL específica em uma
solicitação:
Para obter exemplos de políticas que envolvem cabeçalhos específicos de ACL, consulte Exemplo 1:
Concessão da permissão s3:PutObject com uma condição que exige que o proprietário do bucket obtenha
controle total (p. 278). Para obter uma lista completa de chaves de condição específicas do Amazon S3,
consulte Ações, recursos e chaves de condição do Amazon S3 (p. 288).
Amostra de ACL
A seguir, a amostra de ACL em um bucket identifica o proprietário do recurso e um conjunto de
concessões. O formato é a representação XML de uma ACL na API REST do Amazon S3. O proprietário
do bucket tem FULL_CONTROL sobre o recurso. Além disso, a ACL mostra como as permissões são
concedidas em um recurso para duas contas da AWS, identificadas pelo ID de usuário canônico, e para
dois grupos predefinidos do Amazon S3 discutidos na seção anterior.
Example
<Grant>
<Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:type="CanonicalUser">
<ID>user1-canonical-user-ID</ID>
<DisplayName>display-name</DisplayName>
</Grantee>
<Permission>WRITE</Permission>
</Grant>
<Grant>
<Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:type="CanonicalUser">
<ID>user2-canonical-user-ID</ID>
<DisplayName>display-name</DisplayName>
</Grantee>
<Permission>READ</Permission>
</Grant>
<Grant>
<Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group">
<URI>http://acs.amazonaws.com/groups/global/AllUsers</URI>
</Grantee>
<Permission>READ</Permission>
</Grant>
<Grant>
<Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group">
<URI>http://acs.amazonaws.com/groups/s3/LogDelivery</URI>
</Grantee>
<Permission>WRITE</Permission>
</Grant>
</AccessControlList>
</AccessControlPolicy>
ACL pré-configurada
O Amazon S3 oferece suporte a um conjunto de concessões predefinidas, conhecidas como ACLs pré-
configuradas. Cada ACL pré-configurada tem um conjunto predefinido de concessões e permissões. A
tabela a seguir lista o conjunto de ACLs pré-configuradas e as concessões predefinidas associadas.
Note
Você pode especificar apenas uma dessas ACLs pré-configuradas na solicitação.
oculta do ID da conta da AWS. Você pode usar esse ID para identificar uma conta da AWS ao conceder
acesso entre contas a buckets e objetos usando o Amazon S3. Você pode recuperar o ID de usuário
canônico da sua conta da AWS como o usuário raiz ou um usuário do IAM.
Você pode encontrar o ID de usuário canônico da sua conta da AWS usando o Console de Gerenciamento
da AWS ou a AWS CLI. O ID de usuário canônico de uma conta da AWS é específico dessa conta. Você
pode recuperar o ID de usuário canônico da sua conta como o usuário raiz, um usuário federado ou um
usuário do IAM.
Pré-requisitos
Se você for um usuário federado ou estiver acessando as informações programaticamente, como por meio
da AWS CLI, você deve ter permissão para listar e exibir um bucket do Amazon S3.
Siga estas etapas para encontrar o ID de usuário canônico da sua conta da AWS quando você estiver
conectado ao console como usuário raiz ou um usuário do IAM. Para obter mais informações sobre
o usuário raiz e os usuários do IAM, consulte Visão geral do gerenciamento de identidades da AWS:
usuários no Guia do usuário do IAM.
Para obter mais informações, consulte Fazer login no Console de Gerenciamento da AWS no Guia do
usuário do IAM.
2. Na barra de navegação no canto superior direito, escolha o nome ou número da sua conta e escolha
My Security Credentials (Minhas credenciais de segurança).
3. Encontre o ID canônico da conta:
• Se você for o usuário raiz, expanda Account identifiers (Identificadores de conta) e encontre
Canonical User ID (ID de usuário canônico).
• Se você for um usuário do IAM, em Account details (Detalhes da conta), encontre Account
canonical user ID (ID de usuário canônico da conta).
Siga estas etapas para encontrar o ID de usuário canônico da sua conta quando estiver conectado ao
Console de Gerenciamento da AWS como usuário federado. Para obter mais informações sobre usuários
federados, consulte Federação de usuários existentes no Guia do usuário do IAM.
Para obter mais informações, consulte Fazer login no Console de Gerenciamento da AWS no Guia do
usuário do IAM.
2. No console do Amazon S3, escolha um nome de bucket para exibir os detalhes do bucket.
3. Selecione Permissions (Permissões) e selecione Access Control List (Lista de controle de acesso).
Na parte superior da página, em Access for bucket owner (Acesso para o proprietário do bucket), é
exibido o ID de usuário canônico da conta da AWS.
Use o comando list-buckets da seguinte forma para encontrar o ID de usuário canônico usando a AWS
CLI.
Configurar ACLs
Esta seção explica como gerenciar permissões de acesso para buckets do S3 e objetos usando listas de
controle de acesso (ACLs). Você pode adicionar concessões ao seu recurso AC usando o Console de
Gerenciamento da AWS, a CLI da AWS, a API REST ou os SDKs da AWS.
As permissões do bucket e de objeto são independentes uma da outra. Um objeto não herda as
permissões de seu bucket. Por exemplo, se criar um bucket e conceder acesso de gravação a outro
usuário, você não poderá acessar os objetos desse usuário, a menos que ele conceda o acesso
explicitamente.
Você pode conceder permissões para outros usuários da conta da AWS ou para grupos predefinidos. O
usuário ou o grupo para o qual você concede permissões é chamado de usuário favorecido. Por padrão, o
proprietário, que é a conta da AWS que o criou bucket, tem permissões totais.
Cada permissão concedida a um usuário ou a um grupo adiciona uma entrada na ACL associada ao
bucket. A ACL lista concessões, o que identifica o usuário favorecido e a permissão concedida.
Warning
Recomendamos que você evite conceder acesso de gravação aos grupos Todos (acesso
público) ou Usuários autenticados (todos os usuários autenticados da AWS). Para obter mais
informações sobre os efeitos da concessão de acesso de gravação a esses grupos, consulte
Grupos predefinidos do Amazon S3 (p. 442).
A tabela a seguir mostra as permissões da ACL que você pode configurar para buckets no console do
Amazon S3.
Objetos - WRITE Permite que o favorecido crie novos objetos no bucket. Para os
gravar proprietários de bucket e objeto de objetos existentes, também
permite exclusões e substituições desses objetos.
ACL do bucket WRITE_ACP Permite ao favorecido gravar a ACL para o bucket aplicável
- gravar
Todos (acesso READ Concede acesso público de leitura para os objetos no bucket.
público): Quando você concede acesso à lista a Todos (acesso público),
Objetos - listar qualquer pessoa no mundo pode acessar os objetos no bucket.
Todos (acesso READ_ACP Concede acesso de leitura pública para a ACL do bucket. Quando
público): ACL você concede acesso de leitura a Todos (acesso público), qualquer
do bucket - ler pessoa no mundo pode acessar a ACL do bucket.
Para obter mais informações sobre permissões da ACL, consulte Visão geral da lista de controle de acesso
(ACL) (p. 440).
Objetos
No console do S3, você só pode conceder acesso de gravação ao grupo de entrega de log do S3 e
ao proprietário do bucket (sua conta da AWS). É recomendável não conceder acesso de gravação a
outros favorecidos. No entanto, se você precisar conceder acesso de gravação,,poderá usar a AWS
CLI, AWS SDKs ou a API REST.
Bucket ACL
O proprietário se refere ao usuário raiz da conta da AWS, não a um usuário do AWS Identity and
Access Management (IAM). Para obter mais informações sobre o usuário raiz, consulte O usuário raiz
da conta da AWS no Guia do usuário do IAM.
6. Para conceder ou desfazer permissões para o público em geral (todos na Internet), ao lado de
Everyone (public access) (Todos (acesso público)), limpe ou selecione uma das seguintes permissões
da ACL:
• Objetos: listar
• ACL de bucket: ler
Warning
Tenha cuidado ao conceder ao grupo Everyone (Todos) acesso público ao seu bucket do S3.
Quando você concede acesso a esse grupo, qualquer pessoa no mundo pode acessar seu
bucket. É altamente recomendável que você nunca conceda nenhum tipo de acesso público
de gravação ao seu bucket do S3.
7. Para conceder ou desfazer permissões para qualquer pessoa com uma conta da AWS, ao lado de
Authenticated Users group (anyone with an AWS account) (Grupo de usuários autenticados (qualquer
pessoa com uma conta da AWS)), limpe ou selecione uma das seguintes permissões de ACL:
• Objetos: listar
Versão da API 2006-03-01
449
Amazon Simple Storage Service Guia do usuário
Gerenciar o acesso com ACLs
Se um bucket for configurado como o bucket de destino para receber logs de acesso, as permissões
do bucket devem permitir ao grupo Log Delivery (Entrega de logs) acesso de gravação ao bucket.
Quando você ativa o registro em log do acesso ao servidor em um bucket, o console do Amazon S3
concede acesso de gravação ao grupo Log Delivery (Entrega de logs) para o bucket de destino do
qual você opta por receber os logs. Para obter mais informações sobre o registro em log de acesso
ao servidor, consulte Habilitar registro em log de acesso ao servidor do Amazon S3 (p. 835).
9. Para conceder acesso a outra conta da AWS, faça o seguinte:
Warning
Ao conceder acesso aos recursos para outras contas da AWS, esteja ciente de que as contas
da AWS podem delegar as permissões para usuários das suas contas. Isso é conhecido
como acesso entre contas. Para obter informações sobre como usar o acesso entre contas,
consulte Criar uma função para delegar permissões a um usuário do IAM no Guia do usuário
do IAM.
10. Para remover o acesso a outra conta da AWS, em Access for other AWS accounts (Acesso a outras
contas da AWS), escolha Remove (Remover).
11. Para salvar suas alterações, escolha Save changes (Salvar alterações).
A tabela a seguir mostra as permissões da ACL que você pode configurar para objetos no console do
Amazon S3.
Objeto - ler READ Permite ao favorecido ler os dados do objeto e seus metadados.
ACL do objeto - WRITE_ACP Permite ao favorecido gravar a ACL para o objeto aplicável
gravar
Para obter mais informações sobre permissões da ACL, consulte Visão geral da lista de controle de acesso
(ACL) (p. 440).
Objeto
ACL do objeto
O proprietário se refere ao usuário raiz da conta da AWS e não a um usuário do AWS Identity and
Access Management (IAM). Para obter mais informações sobre o usuário raiz, consulte O usuário
raiz da conta da AWS no Guia do usuário do IAM.
Para alterar as permissões de acesso ao objeto do proprietário, em Access for object owner
(Acesso para o proprietário do objeto), escolha Your AWS Account (owner) (Sua conta da AWS
(proprietário)).
Marque as caixas de seleção das permissões que você deseja alterar e escolha Save (Salvar).
b. Acesso para outras contas da AWS
Para conceder permissões para um usuário da AWS de uma conta diferente da AWS, em Access
for other AWS accounts (Acesso para outras contas da AWS), escolha Add account (Adicionar
conta). No campo Enter an ID (Inserir um ID), digite o ID canônico do usuário da AWS ao qual
você deseja conceder permissões para o objeto. Para obter informações sobre como encontrar
um ID canônico, consulte Identificadores de conta da AWS na Referência geral da Amazon Web
Services. Você pode adicionar até 99 usuários.
Marque as caixas de seleção das permissões que você deseja conceder ao usuário e escolha
Save (Salvar). Para exibir informações sobre as permissões, escolha os ícones da Ajuda.
c. Acesso público
Para conceder acesso ao seu objeto para o público geral (todos no mundo), em Public access
(Acesso público), escolha Everyone (Todos). Conceder permissões de acesso público significa
que todos no mundo podem acessar o objeto.
Marque as caixas de seleção das permissões que você deseja conceder e escolha Save (Salvar).
Versão da API 2006-03-01
451
Amazon Simple Storage Service Guia do usuário
Gerenciar o acesso com ACLs
Warning
• Tenha cuidado ao conceder ao grupo Everyone (Todos) acesso anônimo aos seus
objetos do Amazon S3. Quando você concede acesso a esse grupo, qualquer pessoa
no mundo pode acessar seu objeto. Se você precisar conceder acesso a todos, é
altamente recomendável que só conceda permissões para Read objects (Ler objetos).
• Recomendamos fortemente que você não conceda ao grupo Everyone (Todos)
permissões de gravação no objeto. Isso permite que qualquer pessoa substitua as
permissões da ACL para o objeto.
Esta seção fornece exemplos de como configurar concessões na lista de controle de acesso (ACL) em
buckets e objetos.
Java
Esta seção fornece exemplos de como configurar concessões na lista de controle de acesso (ACL)
em buckets e objetos. O primeiro exemplo cria um bucket com uma ACL padrão (consulte ACL pré-
configurada (p. 446)), cria uma lista de concessões de permissão personalizadas e, em seguida,
substitui a ACL padrão por uma ACL que contém concessões personalizadas. O segundo exemplo
mostra como modificar uma ACL usando o método AccessControlList.grantPermission().
Example Crie um bucket e especifique uma ACL pré-configurada que conceda permissão ao
grupo de entrega de logs do S3
Este exemplo cria um bucket. Na solicitação, o exemplo especifica uma ACL padrão que concede
permissão ao grupo de Entrega de logs para gravar logs no bucket.
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.*;
import java.io.IOException;
import java.util.ArrayList;
try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withRegion(clientRegion)
.build();
// Create a bucket with a canned ACL. This ACL will be replaced by the
setBucketAcl()
// calls below. It is included here for demonstration purposes.
CreateBucketRequest createBucketRequest = new
CreateBucketRequest(bucketName, clientRegion.getName())
.withCannedAcl(CannedAccessControlList.LogDeliveryWrite);
s3Client.createBucket(createBucketRequest);
// Save grants by replacing all current ACL grants with the two we just
created.
AccessControlList bucketAcl = new AccessControlList();
bucketAcl.grantAllPermissions(grantCollection.toArray(new Grant[0]));
s3Client.setBucketAcl(bucketName, bucketAcl);
// Retrieve the bucket's ACL, add another grant, and then save the new ACL.
AccessControlList newBucketAcl = s3Client.getBucketAcl(bucketName);
Grant grant3 = new Grant(new
EmailAddressGrantee(userEmailForReadPermission), Permission.Read);
newBucketAcl.grantAllPermissions(grant3);
s3Client.setBucketAcl(bucketName, newBucketAcl);
} catch (AmazonServiceException e) {
// The call was transmitted successfully, but Amazon S3 couldn't process
// it and returned an error response.
e.printStackTrace();
} catch (SdkClientException e) {
// Amazon S3 couldn't be contacted for a response, or the client
// couldn't parse the response from Amazon S3.
e.printStackTrace();
}
}
}
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.AccessControlList;
import com.amazonaws.services.s3.model.CanonicalGrantee;
import com.amazonaws.services.s3.model.EmailAddressGrantee;
import com.amazonaws.services.s3.model.Permission;
import java.io.IOException;
try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();
// Grant a sample set of permissions, using the existing ACL owner for Full
Control permissions.
acl.grantPermission(new CanonicalGrantee(acl.getOwner().getId()),
Permission.FullControl);
acl.grantPermission(new EmailAddressGrantee(emailGrantee),
Permission.WriteAcp);
.NET
Example Crie um bucket e especifique uma ACL pré-configurada que conceda permissão ao
grupo de entrega de logs do S3
Este exemplo do C# cria um bucket. Na solicitação, o código também especifica uma ACL padrão que
concede permissões ao grupo de Entrega de logs para gravar os logs no bucket.
Para obter instruções sobre criar e testar um exemplo funcional, consulte Executar os exemplos de
código do Amazon S3 .NET (p. 1044).
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class ManagingBucketACLTest
{
private const string newBucketName = "*** bucket name ***";
Este exemplo do C# atualiza a ACL em um objeto existente. O exemplo realiza as seguintes tarefas:
Para obter instruções sobre criar e testar um exemplo funcional, consulte Executar os exemplos de
código do Amazon S3 .NET (p. 1044).
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class ManagingObjectACLTest
{
private const string bucketName = "*** bucket name ***";
private const string keyName = "*** object key name ***";
private const string emailAddress = "*** email address ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 client;
public static void Main()
{
client = new AmazonS3Client(bucketRegion);
TestObjectACLTestAsync().Wait();
}
private static async Task TestObjectACLTestAsync()
{
try
{
// Retrieve the ACL for the object.
GetACLResponse aclResponse = await client.GetACLAsync(new
GetACLRequest
{
BucketName = bucketName,
Key = keyName
});
};
}
catch (AmazonS3Exception amazonS3Exception)
{
Console.WriteLine("An AmazonS3Exception was thrown. Exception: " +
amazonS3Exception.ToString());
}
catch (Exception e)
{
Console.WriteLine("Exception: " + e.ToString());
}
}
}
}
As APIs do Amazon S3 permitem a definição de uma ACL quando você cria um bucket ou um objeto. O
Amazon S3 também fornece API para definir uma ACL em um bucket ou objeto existente. Estas APIs
oferecem os seguintes métodos para definir uma ACL:
• Definir ACL usando cabeçalhos de solicitação: ao enviar uma solicitação para criar um recurso (bucket
ou objeto), defina uma ACL usando os cabeçalhos de solicitação. Com esses cabeçalhos, você
pode especificar uma ACL pré-configurada ou especificar concessões explicitamente (identificando o
favorecido e as permissões de maneira explícita).
• Definir ACL usando o corpo da solicitação: ao enviar uma solicitação para definir uma ACL em um
recurso existente, defina a ACL no cabeçalho da solicitação ou no corpo.
Para obter informações sobre o suporte à API REST para gerenciar ACLs, consulte as seções a seguir na
Referência da API do Amazon Simple Storage Service:
Lista de controle de acesso (ACL - Access Control List) - Cabeçalhos específicos de solicitação
Você pode usar cabeçalhos para conceder permissões baseadas em lista de controle de acesso (ACL).
Por padrão, todos os objetos são privados. Somente o proprietário tem controle total de acesso. Ao
adicionar um novo objeto, você pode conceder permissões a contas individuais da AWS ou a grupos
predefinidos definidos pelo Amazon S3. Depois essas permissões são adicionadas à lista de controle de
acesso (ACL) no objeto. Para obter mais informações, consulte Visão geral da lista de controle de acesso
(ACL) (p. 440).
Com esta operação, você pode conceder permissões de acesso usando um destes dois métodos:
Para obter mais informações sobre como gerenciar ACLs usando a CLI da AWS, consulte put-bucket-acl
na Referência de comando da CLI da AWS.
Esta seção fornece uma visão geral do CORS. Os subtópicos descrevem como você pode ativar o CORS
usando o console do Amazon S3 ou, programaticamente, usando a API REST do Amazon S3 e os AWS
SDKs.
Cenário 1
Suponha que você esteja hospedando um site em um bucket do Amazon S3 chamado website como
descrito em Hospedagem de um site estático usando o Amazon S3 (p. 945). Os usuários carregam o
endpoint de site.
http://website.s3-website.us-east-1.amazonaws.com
Agora você quer usar JavaScript nas páginas da web armazenadas nesse bucket para fazer solicitações
GET e PUT autenticadas no mesmo bucket usando o endpoint da API do Amazon S3 para o bucket
website.s3.us-east-1.amazonaws.com. Um navegador normalmente impediria que o JavaScript
permitisse essas solicitações. No entanto, com CORS, é possível configurar seu bucket para permitir
explicitamente solicitações de origem cruzada de website.s3-website.us-east-1.amazonaws.com.
Cenário 2
Suponha que você queira hospedar uma fonte web de seu bucket do S3. Mais uma vez, os navegadores
exigem uma verificação de CORS (também chamada de verificação de simulação) para carregar fontes
web. Assim, é preciso configurar o bucket que está hospedando a fonte web para permitir que qualquer
origem faça essas solicitações.
Note
As ACLs e políticas continuam sendo aplicadas quando você ativa o CORS no bucket.
Para obter mais informações sobre como usar o CORS, consulte os tópicos a seguir.
Tópicos
• Configuração de CORS (p. 459)
• Configurar o compartilhamento de recursos de origem cruzada (CORS) (p. 463)
• Solução de problemas do CORS (p. 469)
Configuração de CORS
Para configurar seu bucket para permitir solicitações de origem cruzada, crie uma configuração CORS.
Uma configuração CORS é um documento com regras que identificam as origens que você permitirá que
acessem seu bucket, as operações (métodos HTTP) compatíveis com cada origem e outras informações
específicas da operação. Você pode adicionar até 100 regras à configuração. Você pode adicionar a
configuração CORS como o sub-recurso cors ao bucket.
Se você estiver configurando o CORS no console do S3, use o JSON para criar uma configuração CORS.
O novo console do S3 oferece suporte somente a configurações JSON CORS.
Para obter mais informações sobre a configuração de CORS e os elementos nele, consulte os tópicos a
seguir. Para obter instruções sobre como adicionar uma configuração de CORS, consulte Configurar o
compartilhamento de recursos de origem cruzada (CORS) (p. 463).
Important
Tópicos
• Exemplo 1 (p. 460)
• Exemplo 2 (p. 461)
• Elemento AllowedMethod (p. 462)
• Elemento AllowedOrigin (p. 462)
• Elemento AllowedHeader (p. 462)
Exemplo 1
Em vez de acessar um site usando um endpoint do Amazon S3, você pode usar seu próprio domínio,
como example1.com para distribuir seu conteúdo. Para obter informações sobre como usar seu próprio
domínio, consulte Configurar um site estático usando um domínio personalizado registrado no Route
53 (p. 973).
A configuração de exemplo cors a seguir tem três regras especificadas como elementos CORSRule:
• A primeira regra permite solicitações PUT, POST e DELETE de origem cruzada da origem http://
www.example1.com. A regra também permite todos os cabeçalhos em uma solicitação OPTIONS de
simulação por meio do cabeçalho Access-Control-Request-Headers. Em resposta a solicitações
OPTIONS de simulação, o Amazon S3 retorna cabeçalhos solicitados.
• A segunda regra permite as mesmas solicitações de origem cruzada da primeira regra, mas a regra se
aplica a outra origem, http://www.example2.com.
• A terceira regra permite solicitações GET de origem cruzada de todas as origens. O caractere curinga *
refere-se a todas as origens.
JSON
[
{
"AllowedHeaders": [
"*"
],
"AllowedMethods": [
"PUT",
"POST",
"DELETE"
],
"AllowedOrigins": [
"http://www.example1.com"
],
"ExposeHeaders": []
},
{
"AllowedHeaders": [
"*"
],
"AllowedMethods": [
"PUT",
"POST",
"DELETE"
],
"AllowedOrigins": [
"http://www.example2.com"
],
"ExposeHeaders": []
},
{
"AllowedHeaders": [],
"AllowedMethods": [
"GET"
],
"AllowedOrigins": [
"*"
],
"ExposeHeaders": []
}
]
XML
<CORSConfiguration>
<CORSRule>
<AllowedOrigin>http://www.example1.com</AllowedOrigin>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>DELETE</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
<CORSRule>
<AllowedOrigin>http://www.example2.com</AllowedOrigin>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>DELETE</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
</CORSRule>
</CORSConfiguration>
Exemplo 2
A configuração de CORS também permite parâmetros de configuração opcionais, conforme exibido na
configuração de CORS a seguir. Neste exemplo, a configuração de CORS permite solicitações PUT, POST
e DELETE de origem cruzada da origem http://www.example.com.
JSON
[
{
"AllowedHeaders": [
"*"
],
"AllowedMethods": [
"PUT",
"POST",
"DELETE"
],
"AllowedOrigins": [
"http://www.example.com"
],
"ExposeHeaders": [
"x-amz-server-side-encryption",
"x-amz-request-id",
"x-amz-id-2"
],
"MaxAgeSeconds": 3000
}
]
XML
<CORSConfiguration>
<CORSRule>
<AllowedOrigin>http://www.example.com</AllowedOrigin>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>DELETE</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<ExposeHeader>x-amz-server-side-encryption</
ExposeHeader>
<ExposeHeader>x-amz-request-id</
ExposeHeader>
<ExposeHeader>x-amz-id-2</ExposeHeader>
</CORSRule>
</CORSConfiguration>
• MaxAgeSeconds: Especifica o tempo em segundos (neste exemplo, 3000) que o navegador armazena
em cache uma resposta do Amazon S3 a uma solicitação OPTIONS de simulação para o recurso
especificado. Armazenando a resposta em cache, o navegador não precisará enviar solicitações de
simulação ao Amazon S3, caso a solicitação original seja repetida.
• ExposeHeader — Identifica os cabeçalhos de resposta (neste exemplo, x-amz-server-side-
encryption, x-amz-request-id e x-amz-id-2) que os clientes podem acessar de seus aplicativos
(por exemplo, de um objeto JavaScript XMLHttpRequest).
Elemento AllowedMethod
Na configuração de CORS, você pode especificar os seguintes valores para o elemento AllowedMethod.
• GET
• PUT
• POST
• DELETE
• HEAD
Elemento AllowedOrigin
No elemento AllowedOrigin, você especifica as origens das quais deseja permitir solicitações de
domínio cruzado, por exemplo, http://www.example.com. A string de origem pode conter somente
um caractere curinga *, como http://*.example.com. É possível especificar * como a origem para
permitir que todas as origens enviem solicitações de origem cruzada. Você também pode especificar
https para permitir somente origens confiáveis.
Elemento AllowedHeader
O elemento AllowedHeader especifica quais cabeçalhos são permitidos em uma solicitação de
simulação por meio do cabeçalho Access-Control-Request-Headers. Cada nome no cabeçalho
Access-Control-Request-Headers deve coincidir com uma entrada correspondente na regra. O
Amazon S3 enviará somente os cabeçalhos permitidos que foram solicitados em uma resposta. Para obter
uma lista de exemplos de cabeçalhos que podem ser usados em solicitações para o Amazon S3, acesse
Cabeçalhos de solicitação comuns no guia de Referência da API do Amazon Simple Storage Service.
Cada string de AllowedHeader na regra pode conter no máximo um caractere curinga *. Por exemplo,
<AllowedHeader>x-amz-*</AllowedHeader> permitirá todos os cabeçalhos específicos da Amazon.
Elemento ExposeHeader
Cada elemento ExposeHeader identifica um cabeçalho na resposta que você deseja que os clientes
acessem de seus aplicativos (por exemplo, de um objeto JavaScript XMLHttpRequest). Para obter uma
lista de cabeçalhos de resposta comuns do Amazon S3, acesse Cabeçalhos de resposta comuns no guia
de Referência da API do Amazon Simple Storage Service .
Elemento MaxAgeSeconds
O elemento MaxAgeSeconds especifica o tempo em segundos que seu navegador pode armazenar em
cache a resposta para uma solicitação de simulação conforme identificado pelo recurso, pelo método
HTTP e pela origem.
Esta seção mostra como habilitar o CORS usando o console do Amazon S3, a API REST do Amazon
S3 e os AWS SDKs. Para configurar seu bucket para permitir solicitações de origem cruzada, adicione
uma configuração de CORS ao bucket. Uma configuração CORS é um documento que define regras
que identificam as origens que você permitirá que acessem seu bucket, as operações (métodos HTTP)
compatíveis para cada origem e outras informações específicas da operação. No console do S3, a
configuração CORS deve ser um documento JSON.
Usar o console do S3
Esta seção explica como usar o console do Amazon S3 para adicionar uma configuração de
compartilhamento de recursos de origem cruzada (CORS) para um bucket do S3.
Quando você permitir o CORS no bucket, as listas de controle de acesso (ACLs) e outras políticas de
permissão de acesso continuarão sendo aplicadas.
Important
No novo console do S3, a configuração CORS deve ser JSON. Para obter exemplos de
configurações de CORS em JSON e XML, consulte Configuração de CORS (p. 459).
A configuração de CORS é um arquivo JSON. O texto que você digita no editor deve ser um JSON
válido. Para obter mais informações, consulte Configuração de CORS (p. 459).
6. Selecione Save changes.
Note
O Amazon S3 exibe o Nome de recurso da Amazon (ARN) para o bucket próximo ao título
CORS configuration editor (Editor de configuração CORS). Para obter mais informações
sobre ARNs, consulte Nomes de recurso da Amazon (ARNs) e namespaces do serviço da
AWS na Referência geral da Amazon Web Services.
Java
Example
Example
Para obter instruções sobre como criar e testar um exemplo funcional, consulte Testar exemplos de
código Java no Amazon S3 (p. 1042).
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.BucketCrossOriginConfiguration;
import com.amazonaws.services.s3.model.CORSRule;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();
rules = configuration.getRules();
rules.add(rule3);
configuration.setRules(rules);
s3Client.setBucketCrossOriginConfiguration(bucketName, configuration);
// Verify that the new rule was added by checking the number of rules in
the configuration.
configuration = s3Client.getBucketCrossOriginConfiguration(bucketName);
System.out.println("Expected # of rules = 3, found " +
configuration.getRules().size());
e.printStackTrace();
}
}
.NET
Example
Para obter informações sobre como criar e testar um exemplo funcional, consulte Executar os
exemplos de código do Amazon S3 .NET (p. 1044).
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class CORSTest
{
private const string bucketName = "*** bucket name ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 s3Client;
{
Id = "CORSRule1",
AllowedMethods = new List<string> {"PUT", "POST",
"DELETE"},
AllowedOrigins = new List<string> {"http://*.example.com"}
},
new CORSRule
{
Id = "CORSRule2",
AllowedMethods = new List<string> {"GET"},
AllowedOrigins = new List<string> {"*"},
MaxAgeSeconds = 3000,
ExposeHeaders = new List<string> {"x-amz-server-side-
encryption"}
}
}
};
};
var response = await s3Client.GetCORSConfigurationAsync(request);
var configuration = response.Configuration;
PrintCORSRules(configuration);
return configuration;
}
if (configuration == null)
{
Console.WriteLine("\nConfiguration is null");
return;
}
Referência da API do Amazon Simple Storage Service descrevem as ações da API REST relacionadas à
configuração CORS:
• PutBucketCors
• GetBucketCors
• DeleteBucketCors
• Objeto OPTIONS
Se a configuração CORS estiver definida, o console exibirá um link Edit CORS Configuration (Editar
configuração CORS) na seção Permissions (Permissões) do bucket Properties (Propriedades).
2. Capture a solicitação e a resposta completas usando uma ferramenta de sua escolha. Para cada
solicitação que o Amazon S3 recebe, deve existir uma regra CORS que corresponda aos dados na
solicitação, da seguinte maneira:
a. Verifique se a solicitação tem o cabeçalho de origem.
Se o cabeçalho estiver ausente, o Amazon S3 não tratará a solicitação como uma solicitação de
origem cruzada e não enviará cabeçalhos de resposta de CORS na resposta.
b. Verifique se o cabeçalho de origem na solicitação corresponde a pelo menos um dos elementos
AllowedOrigin na CORSRule especificada.
Com o Bloqueio de acesso público do S3, os administradores de conta e os proprietários de bucket podem
configurar facilmente os controles centralizados impostos para limitar o acesso público aos recursos do
Amazon S3, independentemente de como os recursos são criados.
Versão da API 2006-03-01
469
Amazon Simple Storage Service Guia do usuário
Bloquear o acesso público
Ao receber uma solicitação para acessar um bucket ou um objeto, o Amazon S3 determina se o bucket
ou a conta do proprietário do bucket tem uma configuração do Bloqueio de acesso público aplicada. Se a
solicitação foi feita por meio de um ponto de acesso, o Amazon S3 também verificará se há configurações
do Bloqueio de acesso público para o ponto de acesso. Caso haja uma configuração do Bloqueio de
acesso público que proíba o acesso solicitado, o Amazon S3 rejeitará a solicitação.
O Bloqueio de acesso público do Amazon S3 fornece quatro configurações. Essas configurações são
independentes e podem ser usadas em qualquer combinação. Cada configuração pode ser aplicada a um
ponto de acesso, a um bucket ou a uma conta inteira da AWS. Se as configurações do Bloqueio de acesso
público para o ponto de acesso, o bucket ou a conta forem diferentes, o Amazon S3 aplicará a combinação
mais restritiva das configurações de ponto de acesso, bucket e conta.
Quando o Amazon S3 avalia se uma operação é proibida por uma configuração do Bloqueio de acesso
público, ela rejeita qualquer solicitação que viole uma configuração de ponto de acesso, bucket ou conta.
Warning
O acesso público aos buckets e objetos é concedido através de listas de controle de acesso
(ACLs), políticas de ponto de acesso, políticas de bucket ou todos. Para garantir que todos os
seus pontos de acesso, buckets e objetos do Amazon S3 tenham o acesso público bloqueado,
recomendamos ativar as quatro configurações de bloqueio de acesso público na sua conta.
Estas configurações bloqueiam o acesso público a todos os buckets e pontos de acesso atuais e
futuros.
Antes de aplicar estas configurações, verifique se seus aplicativos funcionarão corretamente
sem acesso público. Se você precisa de um certo nível de acesso público aos seus buckets ou
objetos, por exemplo, para hospedar um site estático como descrito em Hospedagem de um site
estático usando o Amazon S3 (p. 945), é possível personalizar as configurações individualmente
conforme cada caso de uso de armazenamento.
Note
• Você pode habilitar as configurações de bloqueio de acesso público somente para pontos de
acesso, buckets e contas da AWS. O Amazon S3 não oferece suporte a configurações de
bloqueio de acesso público por objeto.
• Quando você aplica configurações do Bloqueio de acesso público a uma conta, as
configurações se aplicam a todas as regiões da AWS globalmente. As configurações talvez
não entrem em vigor em todas as regiões imediata ou simultaneamente, mas acabam se
propagando para todas as regiões.
Tópicos
• Configurações do bloqueio de acesso público (p. 470)
• Executar operações de bloqueio de acesso público em um ponto de acesso (p. 472)
• O significado de "público" (p. 473)
• Usar o Analisador de acesso para S3 para revisar buckets públicos (p. 475)
• Permissões (p. 475)
• Configurar o bloqueio de acesso público (p. 476)
• Configurar o bloqueio de acesso público para sua conta (p. 476)
• Configurar o bloqueio de acesso público para seus buckets do S3 (p. 478)
propriedade dessa conta. Da mesma forma, se você aplicar uma configuração a um bucket, ela se aplicará
a todos os pontos de acesso associados a esse bucket.
Nome Descrição
• As chamadas PUT Bucket acl e PUT Object falharão se a Access Control List
(ACL – Lista de controle de acesso) especificada for pública.
• As chamadas PUT Object falharão se a solicitação incluir uma ACL pública.
• Se essa configuração for aplicada a uma conta, as chamadas PUT Bucket
falharão se a solicitação incluir uma ACL pública.
IgnorePublicAcls A definição dessa opção como TRUE faz o Amazon S3 ignorar todas as ACLs
públicas em um bucket e todos os objetos contidos. Essa configuração permite
bloquear com segurança acesso público concedido por ACLs ao mesmo tempo
em que permite chamadas PUT Object que incluam uma ACL pública (ao
contrário de BlockPublicAcls, que rejeita chamadas PUT Object que incluam
uma ACL pública). A habilitação dessa configuração não afeta a persistência de
ACLs existentes nem evita a definição de novas ACLs públicas.
Note
BlockPublicPolicy Definir esta opção como TRUE para um bucket faz com que o Amazon S3 rejeite
chamadas para a política PUT de bucket, se a política de bucket especificada
permitir acesso público, e rejeite chamadas para a política PUT de ponto de
acesso para todos os pontos de acesso do bucket, se a política especificada
permitir acesso público. Definir esta opção como TRUE para um ponto de acesso
faz com que o Amazon S3 rejeite chamadas para a política PUT de ponto de
acesso e a política PUT de bucket que são feitas por meio do ponto de acesso,
Nome Descrição
se a política especificada (para o ponto de acesso ou para o bucket subjacente)
for pública.
Important
• As chamadas para GET Bucket acl e GET Object acl sempre retornam as permissões efetivas
implantadas para o bucket ou o objeto especificado. Por exemplo, suponhamos que um bucket
tenha uma ACL que conceda acesso público, mas o bucket também tenha a configuração
IgnorePublicAcls habilitada. Nesse caso, GET Bucket acl retorna uma ACL refletindo as
permissões de acesso que o Amazon S3 está impondo, em vez da ACL real associada ao
bucket.
• As configurações do Bloqueio de acesso público não alteram as políticas ou ACLs existentes.
Portanto, a remoção de uma configuração do Bloqueio de acesso público disponibiliza
novamente um bucket ou um objeto com uma política pública ou uma ACL.
O significado de "público"
Buckets
ACLs
O Amazon S3 considerará uma ACL de bucket de objeto pública se ela conceder alguma permissão
a membros dos grupos AllUsers ou AuthenticatedUsers predefinidos. Para obter mais
informações sobre grupos predefinidos, consulte Grupos predefinidos do Amazon S3 (p. 442).
Políticas
Ao avaliar uma política de bucket, o Amazon S3 começa presumindo que a política é pública.
Em seguida, ele avalia a política para determinar se ela se qualifica como não pública. Para ser
considerada não pública, uma política de bucket só deve conceder acesso a valores fixos (valores que
não contenham um curinga) de um ou mais dos seguintes:
• Um conjunto de Classless Inter-Domain Routings (CIDRs – Roteamentos sem classe entre
domínios) que use aws:SourceIp. Para obter mais informações sobre o CIDR, consulte RFC 4632
no site RFC Editor.
• Um principal, um usuário, uma função ou um principal do serviço da AWS (por exemplo,
aws:PrincipalOrgID)
• aws:SourceArn
• aws:SourceVpc
• aws:SourceVpce
• aws:SourceOwner
• aws:SourceAccount
• s3:x-amz-server-side-encryption-aws-kms-key-id
• aws:userid, fora do padrão "AROLEID:*"
• s3:DataAccessPointArn
Note
Quando usado em uma política de bucket, esse valor pode conter um curinga
para o nome do ponto de acesso sem tornar a política pública, desde que o
ID da conta seja corrigido. Por exemplo, permitir acesso a arn:aws:s3:us-
west-2:123456789012:accesspoint/* permitiria o acesso a qualquer ponto de
acesso associado à conta 123456789012 na região us-west-2, sem tornar pública a
política de bucket. Observe que esse comportamento é diferente para políticas de ponto de
acesso. Para obter mais informações, consulte Pontos de acesso (p. 475).
• s3:DataAccessPointAccount
Nessas regras, as políticas de exemplo a seguir são consideradas públicas.
{
"Principal": { "Federated": "graph.facebook.com" },
"Resource": "*",
"Action": "s3:PutObject",
"Effect": "Allow"
}
{
"Principal": "*",
"Resource": "*",
"Action": "s3:PutObject",
"Effect": "Allow"
}
Versão da API 2006-03-01
473
Amazon Simple Storage Service Guia do usuário
Bloquear o acesso público
{
"Principal": "*",
"Resource": "*",
"Action": "s3:PutObject",
"Effect": "Allow",
"Condition": { "StringLike": {"aws:SourceVpc": "vpc-*"}}
}
É possível tornar essas políticas não públicas com a inclusão de alguma das chaves de condição
listadas anteriormente usando-se um valor fixo. Por exemplo, a última política acima pode se tornar
não pública com a definição de aws:SourceVpc como um valor fixo como o seguinte.
{
"Principal": "*",
"Resource": "*",
"Action": "s3:PutObject",
"Effect": "Allow",
"Condition": {"StringEquals": {"aws:SourceVpc": "vpc-91237329"}}
}
Para obter mais informações sobre políticas de bucket, consulte Políticas de bucket e políticas de
usuário (p. 268).
Exemplo
Este exemplo mostra como o Amazon S3 avalia uma política de bucket que contém concessões de acesso
público e não público.
Suponhamos que um bucket tenha uma política que conceda acesso a um conjunto de entidades
principais fixas. Segundo as regras descritas anteriormente, essa política não é pública. Por isso, se
você habilitar a configuração RestrictPublicBuckets, a política permanecerá em vigor como escrita,
porque RestrictPublicBuckets só se aplica a buckets que tenham políticas públicas. No entanto, se
você adicionar uma instrução pública à política, o RestrictPublicBuckets será ativado no bucket.
Isso permite que somente principais de serviço da AWS e usuários autorizados da conta do proprietário do
bucket acessem o bucket.
Como exemplo, suponhamos que um bucket de propriedade de "Account-1" tenha uma política que
contenha o seguinte:
1. Uma instrução que concede acesso ao AWS CloudTrail (que é uma entidade principal de serviço da
AWS)
2. Uma instrução que conceda acesso à conta "Account-2"
3. Uma instrução que conceda acesso ao público, por exemplo, especificando "Principal": "*" sem
limitação de Condition
Essa política é qualificada como pública por causa da terceira instrução. Com essa política implementada
e RestrictPublicBuckets ativado, o Amazon S3 permite o acesso somente pelo CloudTrail. Embora
a instrução 2 não seja pública, o Amazon S3 desabilita o acesso de "Account-2". Isso porque a instrução
3 renderiza toda a política pública. Assim, RestrictPublicBuckets se aplica. Dessa forma, o Amazon
S3 desabilita o acesso entre contas, mesmo que a política delegue acesso a uma conta específica,
"Account-2". Porém, se você remover a instrução 3 da política, esta não se qualificará como pública e
RestrictPublicBuckets deixará de se aplicar. Por isso, "Account-2" retoma o acesso ao bucket,
mesmo caso você deixe RestrictPublicBuckets habilitado.
Pontos de acesso
O Amazon S3 avalia as configurações do Bloqueio de acesso público de maneira um pouco diferente para
os pontos de acesso em comparação com os buckets. As regras que o Amazon S3 aplica para determinar
quando uma política de ponto de acesso é pública são geralmente as mesmas para pontos de acesso e
para buckets, exceto nas seguintes situações:
• Um ponto de acesso que tenha uma origem de rede da VPC é sempre considerado não público,
independentemente do conteúdo da política de ponto de acesso.
• Uma política de ponto de acesso que concede acesso a um conjunto de pontos de acesso
usando s3:DataAccessPointArn é considerada pública. Observe que esse comportamento
é diferente para políticas de bucket. Por exemplo, uma política de bucket que concede
acesso a valores de s3:DataAccessPointArn que correspondem a arn:aws:s3:us-
west-2:123456789012:accesspoint/* não é considerada pública. No entanto, a mesma instrução
em uma política de ponto de acesso tornaria o ponto de acesso público.
Com o conhecimento apresentado nas descobertas, você pode tomar medidas corretivas imediatas e
precisas. No Analisador de acesso para S3, você pode bloquear todo o acesso público a um bucket com
um único clique. Você também pode detalhar as configurações de permissão no nível do bucket para
definir níveis granulares de acesso. Para casos de uso específicos e verificados que exigem acesso
público ou compartilhado, você pode confirmar e registrar sua intenção de que o bucket permaneça público
ou compartilhado arquivando as descobertas do bucket.
Em eventos raros, o Analisador de acesso para S3 pode relatar nenhuma descoberta para um bucket que
uma análise de bloqueio de acesso público do Amazon S3 relata como público. Isso acontece porque
o bloqueio de acesso público do Amazon S3 analisa as políticas de ações atuais e quaisquer ações
potenciais que possam ser adicionadas no futuro, fazendo com que um bucket se torne público. Por outro
lado, o Analisador de acesso para S3 analisa somente as ações atuais especificadas para o serviço do
Amazon S3 na avaliação do status do acesso.
Para obter mais informações sobre o Access Analyzer for S3, consulte Revisar o acesso de bucket usando
o Access Analyzer for S3 (p. 496).
Permissões
Para usar os recursos do Bloqueio de acesso público do Amazon S3, você deve ter as permissões a
seguir.
Note
As operações DELETE exigem as mesmas permissões das operações PUT. Não há permissões
separadas para as operações DELETE.
Para obter mais informações, consulte Bloquear o acesso público ao armazenamento do Amazon
S3 (p. 469).
Você pode usar o console do S3, a CLI da AWS, os SDKs da AWS e a API REST para configurar o
bloqueio de acesso público para todos os buckets da sua conta. Para obter mais informações, consulte as
seções abaixo.
Para definir as configurações do bloqueio de acesso público para os buckets, consulte Configurar o
bloqueio de acesso público para seus buckets do S3 (p. 478). Para obter mais informações sobre pontos
de acesso, consulte Executar operações de bloqueio de acesso público em um ponto de acesso (p. 472).
Usar o console do S3
O bloqueio de acesso público do Amazon S3 evita a aplicação de todas as configurações que permitem
acesso público a dados dentro de buckets do S3. Esta seção descreve como editar configurações de
acesso público de bloqueio para todos os buckets do S3 na conta da AWS. Para obter mais informações
sobre como bloquear o acesso público, consulte Bloquear o acesso público ao armazenamento do
Amazon S3 (p. 469).
Para editar configurações de acesso público de bloqueio para todos os buckets do S3 em uma
conta da AWS
Você pode usar o Bloqueio de acesso público do Amazon S3 por meio da CLI da AWS. Para obter
mais informações sobre como configurar e usar a CLI da AWS, consulte O que é a interface de linha de
comando da AWS?
Conta
Para realizar operações do Bloqueio de acesso público em uma conta, use o serviço s3control da CLI
da AWS. As operações no nível da conta que usam esse serviço são:
• PUT PublicAccessBlock (para uma conta)
• GET PublicAccessBlock (para uma conta)
• DELETE PublicAccessBlock (para uma conta)
Java
Os exemplos a seguir mostram como usar o Amazon S3 Block Public Access com o AWS SDK para
Java para colocar uma configuração de bloqueio de acesso público em uma conta do Amazon S3.
Para obter instruções sobre como criar e testar um exemplo funcional, consulte Usar o AWS SDK para
Java (p. 1041).
Important
Este exemplo pertence apenas a operações no nível da conta, que usam a classe cliente
AWSS3Control. Para operações no nível do bucket, consulte o exemplo anterior.
Other SDKs
Para obter informações sobre como usar os outros AWS SDKs, consulte Desenvolvimento com o
Amazon S3 usando os AWS SDKs e exploradores (p. 1034).
Para obter informações sobre o uso do Bloqueio de acesso público do Amazon S3 por meio das APIs
REST, consulte os tópicos a seguir na Referência da API do Amazon Simple Storage Service.
Para obter mais informações, consulte Bloquear o acesso público ao armazenamento do Amazon
S3 (p. 469).
Você pode usar o console do S3, a CLI da AWS, os SDKs da AWS e a API REST para definir as
configurações de bloqueio de acesso público para o bucket. Para obter mais informações, consulte as
seções abaixo.
Para definir as configurações de bloqueio de acesso público para todos os buckets da sua conta, consulte
Configurar o bloqueio de acesso público para sua conta (p. 476). Para obter informações sobre como
configurar o bloqueio de acesso público para pontos de acesso, consulte Executar operações de bloqueio
de acesso público em um ponto de acesso (p. 472).
Usar o console do S3
O bloqueio de acesso público do Amazon S3 evita a aplicação de todas as configurações que permitem
acesso público a dados dentro de buckets do S3. Esta seção descreve como editar configurações de
acesso público de bloqueio para um ou mais buckets do S3. Para obter informações sobre como bloquear
o acesso público usando a CLI da AWS CLI, os SDKs da AWS e as APIs REST do Amazon S3, consulte
Bloquear o acesso público ao armazenamento do Amazon S3 (p. 469).
Você pode ver se seu bucket está acessível publicamente na lista Buckets. Na coluna Access (Acessar), o
Amazon S3 rotula as permissões para um bucket da seguinte forma:
• Público – Todos têm acesso a um ou mais dos seguintes: listagem de objetos, gravação de objetos,
permissões de leitura e gravação.
• Objetos podem ser públicos – O bucket não é público, mas qualquer pessoa com as permissões
apropriadas pode conceder acesso público a objetos.
• Buckets e objetos não públicos – O bucket e os objetos não têm acesso público.
• Somente usuários autorizados desta conta: O acesso é isolado a usuários e funções do IAM nesta conta
e nas entidades principais do serviço da AWS porque há uma política que concede acesso público.
Também é possível filtrar pesquisas de bucket por tipo de acesso. Escolha um tipo de acesso na lista
suspensa próxima da barra Search for buckets (Procurar buckets).
Siga essas etapas caso você precise alterar as configurações de acesso público para um único bucket do
S3.
É possível alterar as configurações de bloqueio de acesso público do Amazon S3 ao criar um bucket. Para
obter mais informações, consulte Criação de um bucket (p. 31).
Para realizar operações do Bloqueio de acesso público em um bucket, use o serviço s3api da CLI da
AWS. As operações no nível do bucket que usam esse serviço são:
Para obter mais informações e exemplos, consulte put-public-access-block na Referência da AWS CLI.
Java
client.setPublicAccessBlock(new SetPublicAccessBlockRequest()
.withBucketName(<bucket-name>)
.withPublicAccessBlockConfiguration(new PublicAccessBlockConfiguration()
.withBlockPublicAcls(<value>)
.withIgnorePublicAcls(<value>)
.withBlockPublicPolicy(<value>)
.withRestrictPublicBuckets(<value>)));
Important
Este exemplo pertence apenas a operações no nível do bucket, que usam a classe cliente
AmazonS3. Para operações no nível da conta, consulte o exemplo a seguir.
Other SDKs
Para obter informações sobre como usar os outros AWS SDKs, consulte Desenvolvimento com o
Amazon S3 usando os AWS SDKs e exploradores (p. 1034).
Para obter informações sobre o uso do Bloqueio de acesso público do Amazon S3 por meio das APIs
REST, consulte os tópicos a seguir na Referência da API do Amazon Simple Storage Service.
• Você só pode usar pontos de acesso para executar operações em objetos. Não é possível usar
pontos de acesso para executar outras operações do Amazon S3, como modificar ou excluir
buckets. Para obter uma lista completa das operações do S3 que oferecem suporte a pontos
de acesso, consulte Compatibilidade de ponto de acesso com operações do S3 e serviços da
AWS (p. 493).
• Os pontos de acesso funcionam com alguns serviços e recursos da AWS, mas não todos.
Por exemplo, você não pode configurar a replicação entre regiões para operar por meio de
um ponto de acesso. Para obter uma lista completa de serviços da AWS compatíveis com
pontos de acesso do S3, consulte Compatibilidade de ponto de acesso com operações do S3 e
serviços da AWS (p. 493).
Esta seção explica como trabalhar com pontos de acesso do Amazon S3. Para obter informações sobre
como trabalhar com buckets, consulte Visão geral dos buckets (p. 26). Para obter mais informações sobre
como trabalhar com objetos, consulte Visão geral de objetos Amazon S3 (p. 62).
Tópicos
• Configurar políticas do IAM para uso de pontos de acesso (p. 481)
• Criar pontos de acesso (p. 485)
• Usar pontos de acesso (p. 489)
• Restrições e limitações de pontos de acesso (p. 495)
Chaves de condição
Os pontos de acesso do S3 apresentam três novas chaves de condição que podem ser usadas em
políticas do IAM para controlar o acesso aos recursos:
s3:DataAccessPointArn
Esta é uma string que você pode usar para corresponder um ARN de ponto de acesso. O exemplo
a seguir corresponde a todos os pontos de acesso da conta da AWS 123456789012 na região us-
west-2:
"Condition" : {
"StringLike": {
"s3:DataAccessPointArn": "arn:aws:s3:us-west-2:123456789012:accesspoint/*"
}
}
s3:DataAccessPointAccount
Este é um operador de string que você pode utilizar para corresponder o ID da conta do proprietário
de um ponto de acesso. O exemplo a seguir corresponde a todos os pontos de acesso de propriedade
da conta da AWS 123456789012.
"Condition" : {
"StringEquals": {
"s3:DataAccessPointAccount": "123456789012"
}
}
s3:AccessPointNetworkOrigin
Este é um operador de string que você pode utilizar para corresponder a origem da rede, Internet
ou VPC. O exemplo a seguir corresponde apenas a pontos de acesso com uma origem de VPC.
"Condition" : {
"StringEquals": {
"s3:AccessPointNetworkOrigin": "VPC"
}
}
Para obter mais informações sobre o uso de chaves de condição com o Amazon S3, consulte Ações,
recursos e chaves de condição do Amazon S3 (p. 288).
{
"Version": "2012-10-17",
"Statement" : [
{
"Effect": "Allow",
"Principal" : { "AWS": "*" },
"Action" : "*",
"Resource" : [ "Bucket ARN", "Bucket ARN/*"],
"Condition": {
"StringEquals" : { "s3:DataAccessPointAccount" : "Bucket owner's account ID" }
}
}]
}
A política de ponto de acesso a seguir concede ao usuário do IAM Alice na conta 123456789012
permissões para objetos GET e PUT com o prefixo Alice/ por meio do ponto de acesso my-access-
point em uma conta 123456789012.
{
"Version":"2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789012:user/Alice"
},
"Action": ["s3:GetObject", "s3:PutObject"],
"Resource": "arn:aws:s3:us-west-2:123456789012:accesspoint/my-access-point/object/
Alice/*"
}]
}
Note
Para que a política de ponto de acesso conceda efetivamente acesso ao usuário Alice, o bucket
subjacente também deve permitir o mesmo acesso a Alice. É possível delegar o controle de
acesso do bucket para o ponto de acesso conforme descrito em Delegar controle de acesso a
pontos de acesso (p. 482). Ou é possível adicionar a seguinte política ao bucket subjacente
para conceder as permissões necessárias à Alice. Observe que a entrada Resource é diferente
entre as políticas de ponto de acesso e bucket.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789012:user/Alice"
},
"Action": ["s3:GetObject", "s3:PutObject"],
"Resource": "arn:aws:s3:::awsexamplebucket1/Alice/*"
}]
}
A política de ponto de acesso a seguir concede ao usuário do IAM Bob na conta 123456789012
permissões para objetos GET por meio do ponto de acesso my-access-point na conta 123456789012
que possui a chave de tag data definida com um valor finance.
{
"Version":"2012-10-17",
"Statement": [
{
"Effect":"Allow",
"Principal" : {
"AWS": "arn:aws:iam::123456789012:user/Bob"
},
"Action":"s3:GetObject",
"Resource" : "arn:aws:s3:us-west-2:123456789012:accesspoint/my-access-point/object/
*",
"Condition" : {
"StringEquals": {
"s3:ExistingObjectTag/data": "finance"
}
}
}]
}
A política de ponto de acesso a seguir permite que o usuário do IAM Charles na conta 123456789012
visualize os objetos contidos no ponto de acesso subjacente do bucket my-access-point na conta
123456789012.
{
"Version":"2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789012:user/Charles"
},
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:us-west-2:123456789012:accesspoint/my-access-point"
}]
}
A política de controle de serviço a seguir requer que todos os novos pontos de acesso sejam criados com
uma origem de rede da VPC. Com essa política em vigor, os usuários da sua organização não podem criar
novos pontos de acesso acessíveis da Internet.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Principal": "*",
"Action": "s3:CreateAccessPoint",
"Resource": "*",
"Condition": {
"StringNotEquals": {
"s3:AccessPointNetworkOrigin": "VPC"
}
}
}]
}
A política de bucket a seguir limita o acesso a todas as operações de objeto do S3 para o bucket
examplebucket para pontos de acesso com uma origem de rede da VPC.
Important
Antes de usar uma instrução como este exemplo, certifique-se de que você não precisa usar
recursos que não são compatíveis com pontos de acesso, como replicação entre regiões.
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Principal": "*",
"Action": [
"s3:AbortMultipartUpload",
"s3:BypassGovernanceRetention",
"s3:DeleteObject",
"s3:DeleteObjectTagging",
"s3:DeleteObjectVersion",
"s3:DeleteObjectVersionTagging",
"s3:GetObject",
"s3:GetObjectAcl",
"s3:GetObjectLegalHold",
"s3:GetObjectRetention",
"s3:GetObjectTagging",
"s3:GetObjectVersion",
"s3:GetObjectVersionAcl",
"s3:GetObjectVersionTagging",
"s3:ListMultipartUploadParts",
"s3:PutObject",
"s3:PutObjectAcl",
"s3:PutObjectLegalHold",
"s3:PutObjectRetention",
"s3:PutObjectTagging",
"s3:PutObjectVersionAcl",
"s3:PutObjectVersionTagging",
"s3:RestoreObject"
],
"Resource": "arn:aws:s3:::examplebucket/*",
"Condition": {
"StringNotEquals": {
"s3:AccessPointNetworkOrigin": "VPC"
}
}
}
]
}
Por padrão, você pode criar até 1.000 pontos de acesso por região para cada uma das suas contas da
AWS. Se você precisar de mais de 1.000 pontos de acesso para uma única conta em uma única região,
poderá solicitar um aumento de cota de serviço. Para obter mais informações sobre cotas de serviço e
solicitar um aumento, consulte AWS Service Quotas na Referência geral da AWS.
Note
Como talvez você queira divulgar o nome do ponto de acesso para permitir que os usuários usem
o ponto de acesso, recomendamos que evite incluir informações confidenciais no nome do ponto
de acesso.
Tópicos
• Criar um ponto de acesso (p. 486)
• Criar pontos de acesso restritos a uma nuvem privada virtual (p. 487)
• Gerenciar o acesso público a pontos de acesso (p. 489)
Por padrão, você pode criar até 1.000 pontos de acesso por região para cada uma das suas contas da
AWS. Se você precisar de mais de 1.000 pontos de acesso para uma única conta em uma única região,
poderá solicitar um aumento de cota de serviço. Para obter mais informações sobre cotas de serviço e
solicitar um aumento, consulte Cotas de serviço da AWS na Referência geral da AWS.
Os exemplos a seguir demonstram como criar um ponto de acesso com a CLI da AWS e o console do S3.
Para obter mais informações sobre como criar pontos de acesso usando a API REST, consulte Criar ponto
de acesso na Referência da API do Amazon Simple Storage Service.
Usar o console do S3
Para obter mais informações sobre origens de rede para pontos de acesso, consulte Criar pontos de
acesso restritos a uma nuvem privada virtual (p. 487).
8. Em Block Public Access settings for this Access Point (Configurações de bloqueio de acesso
público para este ponto de acesso), selecione as configurações de bloqueio de acesso público que
você deseja aplicar ao ponto de acesso. Todas as configurações de bloqueio de acesso público
são ativadas por padrão para novos pontos de acesso; recomendamos que você deixe todas as
configurações ativadas, a menos que você saiba que tem uma necessidade específica de desabilitar
qualquer uma delas. Atualmente, o Amazon S3 não oferece suporte à alteração das configurações do
bloqueio de acesso público após à criação de um ponto de acesso.
Para obter mais informações sobre como usar o Bloqueio de acesso público do Amazon S3 com
pontos de acesso, consulte Gerenciar o acesso público a pontos de acesso (p. 489).
9. (Opcional) Em Access point policy - optional (Política de ponto de acesso - opcional), especifique a
política de ponto de acesso. Para obter mais informações sobre como especificar uma política de
ponto de acesso, consulte Exemplos de política de ponto de acesso (p. 482).
10. Selecione Criar ponto de acesso.
O exemplo a seguir cria um ponto de acesso chamado example-ap para o bucket example-bucket
na conta 123456789012. Para criar o ponto de acesso, envie uma solicitação para o Amazon S3,
especificando o nome do ponto de acesso, o nome do bucket ao qual você deseja associar o ponto de
acesso e o ID da conta da AWS que possui o bucket. Para obter informações sobre regras de nomeação,
consulte the section called “Regras para nomear pontos de acesso do Amazon S3” (p. 485).
Você só pode especificar a origem da rede de um ponto de acesso ao criá-lo. Depois de criar o
ponto de acesso, não é possível alterar a origem da rede.
Para restringir um ponto de acesso ao acesso somente VPC, inclua o parâmetro VpcConfiguration
com a solicitação para criar o ponto de acesso. No parâmetro VpcConfiguration, você especifica o ID
da VPC que deseja usar o ponto de acesso. O Amazon S3, então, rejeita solicitações feitas por meio do
ponto de acesso, a menos que elas sejam originadas dessa VPC.
Você pode recuperar a origem da rede de um ponto de acesso usando a AWS CLI, os AWS SDKs ou as
APIs REST. Se um ponto de acesso tiver uma configuração de VPC especificada, sua origem de rede será
VPC. Caso contrário, a origem da rede do ponto de acesso será Internet.
Example
O exemplo a seguir cria um ponto de acesso chamado example-vpc-ap para o bucket example-
bucket na conta 123456789012 que permite acesso somente da VPC vpc-1a2b3c. O exemplo verifica
se o novo ponto de acesso tem uma origem de rede da VPC.
AWS CLI
{
"Name": "example-vpc-ap",
"Bucket": "example-bucket",
"NetworkOrigin": "VPC",
"VpcConfiguration": {
"VpcId": "vpc-1a2b3c"
},
"PublicAccessBlockConfiguration": {
"BlockPublicAcls": true,
"IgnorePublicAcls": true,
"BlockPublicPolicy": true,
"RestrictPublicBuckets": true
},
"CreationDate": "2019-11-27T00:00:00Z"
}
Para usar um ponto de acesso com uma VPC, é necessário modificar a política de acesso do VPC
endpoint. Os VPC endpoints permitem que o tráfego flua da VPC para o Amazon S3. Eles têm políticas
de controle de acesso que controlam como os recursos dentro da VPC podem interagir com o S3. As
solicitações da VPC para o S3 somente serão bem-sucedidas por meio de um ponto de acesso se a
política do VPC endpoint conceder acesso ao ponto de acesso e ao bucket subjacente.
O exemplo de instrução de política a seguir configura um VPC endpoint para permitir chamadas ao
GetObject de um bucket denominado awsexamplebucket1 e um ponto de acesso chamado example-
vpc-ap.
{
"Version": "2012-10-17",
"Statement": [
{
"Principal": "*",
"Action": [
"s3:GetObject"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::awsexamplebucket1/*",
"arn:aws:s3:us-west-2:123456789012:accesspoint/example-vpc-ap/object/*"
]
}]
}
Note
A declaração "Resource" neste exemplo usa um nome de recurso da Amazon (ARN) para
especificar o ponto de acesso. Para obter mais informações sobre ARNs de ponto de acesso,
consulte Usar pontos de acesso (p. 489).
Para obter mais informações sobre políticas de VPC endpoint, consulte Usar políticas de endpoint para o
Amazon S3 no Guia do usuário da Virtual Private Cloud (VPC).
Para obter mais informações sobre o recurso de bloqueio de acesso público do S3, consulte Bloquear o
acesso público ao armazenamento do Amazon S3 (p. 469).
Important
• Todas as configurações do Bloqueio de acesso público são habilitadas por padrão para pontos
de acesso. Você deve desativar explicitamente todas as configurações que não deseja aplicar a
um ponto de acesso.
• Atualmente, o Amazon S3 não oferece suporte à alteração das configurações do bloqueio de
acesso público após à criação de um ponto de acesso.
Example
Exemplo: Criar um ponto de acesso com configurações personalizadas do bloqueio de acesso público
Este exemplo cria um ponto de acesso chamado example-ap para o bucket example-bucket na conta
123456789012 com configurações não padrão do Bloqueio de acesso público. O exemplo recupera a
configuração do novo ponto de acesso para verificar as configurações do Bloqueio de acesso público.
AWS CLI
{
"Name": "example-ap",
"Bucket": "example-bucket",
"NetworkOrigin": "Internet",
"PublicAccessBlockConfiguration": {
"BlockPublicAcls": false,
"IgnorePublicAcls": false,
"BlockPublicPolicy": true,
"RestrictPublicBuckets": true
},
"CreationDate": "2019-11-27T00:00:00Z"
}
Os pontos de acesso têm nomes de recurso da Amazon (ARNS). Os ARNs do ponto de acesso são
semelhantes aos ARNs de bucket, mas são explicitamente digitados e codificam a região do ponto de
acesso e o ID da conta da AWS do proprietário do ponto de acesso. Para obter mais informações sobre
ARNs, consulte Nomes de recurso da Amazon (ARNs) na Referência geral da AWS.
Os ARNs para objetos acessados por meio de um ponto de acesso usam o formato
arn:aws:s3:region:account-id:accesspoint/access-point-name/object/resource. Por
exemplo:
Tópicos
• Monitorar e registrar de pontos de acesso (p. 490)
• Usar pontos de acesso do Amazon S3 com o console do Amazon S3 (p. 491)
• Usar pontos de acesso com operações compatíveis com o Amazon S3 (p. 493)
As entradas de log do CloudTrail para solicitações feitas por meio de pontos de acesso incluirão o ARN do
ponto de acesso na seção resources do log.
"resources": [
{
"type": "AWS::S3::Object",
"ARN": "arn:aws:s3:::DOC-EXAMPLE-BUCKET1/my-image.jpg"
},
{
"accountId": "123456789012",
"type": "AWS::S3::Bucket",
"ARN": "arn:aws:s3:::DOC-EXAMPLE-BUCKET1"
},
{
"accountId": "DOC-EXAMPLE-BUCKET1",
"type": "AWS::S3::AccessPoint",
"ARN": "arn:aws:s3:us-west-2:DOC-EXAMPLE-BUCKET1:accesspoint/my-bucket-ap"
}
]
Para obter mais informações sobre logs de acesso do servidor do S3, consulte Registrar em log as
solicitações com registro em log de acesso ao servidor (p. 833). Para obter mais informações sobre o
AWS CloudTrail, consulte O que é o AWS CloudTrail? no Guia do usuário do AWS CloudTrail.
Note
Tópicos
• Listar pontos de acesso para sua conta (p. 491)
• Listar pontos de acesso para um bucket (p. 491)
• Visualizar detalhes de configuração de um ponto de acesso (p. 492)
• Usar um ponto de acesso (p. 492)
• Visualizar configurações de bloqueio de acesso público para um ponto de acesso (p. 492)
• Editar uma política de ponto de acesso (p. 492)
• Excluir um ponto de acesso (p. 492)
1. Navegue até a página de detalhes do ponto de acesso cujos detalhes deseja ver, conforme descrito
em Listar pontos de acesso para sua conta (p. 491).
2. Em access point overview (visão geral do ponto de acesso), exiba os detalhes de configuração e as
propriedades para o ponto de acesso selecionado.
1. Navegue até a página de detalhes do ponto de acesso cujos detalhes deseja usar, conforme descrito
em Listar pontos de acesso para sua conta (p. 491).
2. Na guia Objects (Objetos) escolha o nome de um objeto ou objetos que deseja acessar por meio do
ponto de acesso. Nas páginas de operação do objeto, o console exibe um rótulo acima do nome do
bucket que mostra o ponto de acesso que você está usando no momento. Enquanto estiver usando
o ponto de acesso, você só pode executar as operações de objeto permitidas pelas permissões do
ponto de acesso.
Note
1. Navegue até a página de detalhes do ponto de acesso para o ponto de acesso cujas configurações
deseja exibir, conforme descrito em Listar pontos de acesso para sua conta (p. 491).
2. Escolha Permissions (Permissões).
3. Em access point policy (política de ponto de acesso), revise as configurações de bloqueio de acesso
público do ponto de acesso.
Note
Você não pode alterar as configurações de bloqueio de acesso público para um ponto de
acesso após a criação do ponto de acesso.
1. Navegue até a página de detalhes do ponto de acesso cujas políticas deseja editar, conforme descrito
em Listar pontos de acesso para sua conta (p. 491).
2. Escolha Permissions (Permissões).
3. Em access point policy (política do ponto de acesso), escolha Edit (Editar).
4. Insira a política do ponto de acesso no campo de texto. O console exibe automaticamente o nome de
recurso da Amazon (ARN) do ponto de acesso, que você pode usar na política.
1. Navegue até a lista de pontos de acesso para sua conta ou para um bucket específico, conforme
descrito em Listar pontos de acesso para sua conta (p. 491).
2. Selecione o botão de opção ao lado do nome do ponto de acesso que você deseja excluir.
Tópicos
• Compatibilidade de ponto de acesso com operações do S3 e serviços da AWS (p. 493)
• Solicitar um objeto por meio de um ponto de acesso (p. 494)
• Fazer upload de um objeto por meio de um ponto de acesso (p. 494)
• Excluir um objeto por meio de um ponto de acesso (p. 494)
• Listar objetos por meio de um ponto de acesso (p. 494)
• Adicionar um conjunto de tags a um objeto por meio de um ponto de acesso (p. 495)
• Conceder permissões de acesso por meio de um ponto de acesso usando uma ACL (p. 495)
Serviços da AWS
Para obter mais informações sobre o AWS CloudFormation, consulte O que é o AWS CloudFormation? no
Guia do usuário do AWS CloudFormation.
Operações do S3
Você pode usar pontos de acesso para acessar um bucket usando o seguinte subconjunto de APIs do
Amazon S3:
• AbortMultipartUpload
• CompleteMultipartUpload
• CopyObject (somente cópias da mesma região)
• CreateMultipartUpload
• DeleteObject
• DeleteObjectTagging
• GetObject
• GetObjectAcl
• GetObjectLegalHold
• GetObjectRetention
• GetObjectTagging
• HeadObject
• ListMultipartUploads
• ListObjectsV2
• ListParts
• PutObject
• PutObjectLegalHold
• PutObjectRetention
• PutObjectAcl
• PutObjectTagging
• RestoreObject
• UploadPart
• UploadPartCopy (somente cópias da mesma região)
O exemplo a seguir solicita o objeto my-image.jpg por meio do ponto de acesso prod pertencente
ao ID de conta 123456789012 na região us-west-2 e salva o arquivo obtido por download como
download.jpg.
AWS CLI
O exemplo a seguir faz upload do objeto my-image.jpg por meio do ponto de acesso prod pertencente
ao ID de conta 123456789012 na região us-west-2.
AWS CLI
O exemplo a seguir exclui o objeto my-image.jpg por meio do ponto de acesso prod pertencente ao ID
de conta 123456789012 na região us-west-2.
AWS CLI
O exemplo a seguir lista objetos por meio do ponto de acesso prod pertencente ao ID de conta
123456789012 na região us-west-2.
AWS CLI
O exemplo a seguir adiciona um conjunto de tags ao objeto existente my-image.jpg por meio do ponto
de acesso prod pertencente ao ID de conta 123456789012 na região us-west-2.
AWS CLI
Conceder permissões de acesso por meio de um ponto de acesso usando uma ACL
O exemplo a seguir aplica uma ACL a um objeto existente my-image.jpg por meio do ponto de acesso
prod pertencente ao ID de conta 123456789012 na região us-west-2.
AWS CLI
Ao revisar um bucket em risco no Analisador de acesso para S3, você pode bloquear todo o acesso
público ao bucket com um único clique. Recomendamos que você bloqueie todo o acesso aos buckets,
a menos que exija acesso público para dar suporte a um caso de uso específico. Antes de bloquear todo
o acesso público, certifique-se de que os aplicativos continuarão funcionando corretamente sem acesso
público. Para obter mais informações, consulte Bloquear o acesso público ao armazenamento do Amazon
S3 (p. 469).
Você também pode detalhar as configurações de permissão no nível do bucket para definir níveis
granulares de acesso. Para casos de uso específicos e verificados que exigem acesso público, como
hospedagem estática de sites, downloads públicos ou compartilhamento entre contas, você pode
reconhecer e registrar sua intenção de que o bucket permaneça público ou compartilhado arquivando
as descobertas do bucket. Você pode acessar novamente e modificar essas configurações de bucket a
qualquer momento. Você também pode fazer download das descobertas como um relatório CSV para fins
de auditoria.
O Analisador de acesso para S3 está disponível sem custo adicional no console do Amazon S3. O
Analisador de acesso para S3 é desenvolvido pelo Analisador de acesso do AWS Identity and Access
Management (IAM). Para usar o Analisador de acesso para S3 no console do Amazon S3, visite o console
do IAM e habilite o IAM Analisador de acesso por região.
Para obter mais informações sobre o IAM Analisador de acesso, consulte O que é o Analisador de acesso?
no Guia do Usuário do IAM. Para obter mais informações sobre o Analisador de acesso para S3, consulte
as seções a seguir.
Important
• O Analisador de acesso para S3 requer um analisador de nível de conta. Para usar o
Analisador de acesso para S3, acesse Analisador de acesso do IAM e crie um analisador que
tenha uma conta como a zona de confiança. Para obter mais informações, consulte Habilitar o
Analisador de acesso no Guia do usuário do IAM.
• Quando uma política de bucket ou a ACL do bucket é adicionada ou modificada, o Analisador
de acesso gera e atualiza descobertas com base na alteração dentro de 30 minutos. As
descobertas relacionadas às configurações do Bloqueio de acesso público na conta podem não
ser geradas ou atualizadas por até 6 horas após a alteração das configurações.
Tópicos
• Quais informações o Analisador de acesso para S3 fornece? (p. 497)
• Habilitar o Analisador de acesso para S3 (p. 497)
• Bloquear todo o acesso público (p. 497)
• Revisar e alterar o acesso ao bucket (p. 498)
• Arquivar descobertas de bucket (p. 499)
• Ativar uma descoberta de bucket arquivada (p. 499)
• Visualizar detalhes de descobertas (p. 500)
• Fazer download de um relatório do Analisador de acesso para S3 (p. 500)
• Bucket name
• Descoberto pelo Analisador de acesso – Quando o Analisador de acesso para S3 descobriu o acesso a
bucket público ou compartilhado.
• Compartilhado por — como o bucket é compartilhado — por meio de uma política de bucket, uma ACL
de bucket ou uma política de ponto de acesso. Um bucket pode ser compartilhado por meio de políticas
e ACLs. Se você quiser descobrir e analisar a origem do acesso ao bucket, poderá usar as informações
nesta coluna como um ponto de partida para tomar medidas corretivas imediatas e precisas.
• Status – O status da descoberta do bucket. O Analisador de acesso para S3 exibe descobertas para
todos os buckets públicos e compartilhados.
• Ativa – a descoberta não foi analisada.
• Arquivada – a descoberta foi analisada e confirmada conforme pretendido.
• Todas – todas as descobertas de buckets que são públicos ou compartilhados com outras contas da
AWS, incluindo contas da AWS fora da sua organização.
• Nível de acesso — permissões de acesso concedidas para o bucket:
• Lista – lista de recursos.
• Leitura – ler, mas não editar o conteúdo e os atributos do recurso.
• Gravação – criar, excluir ou modificar recursos.
• Permissões – conceder ou modificar permissões de recursos.
• Atribuição de tags – atualizar as tags associadas ao recurso.
Para obter mais informações, consulte Permissões necessárias para usar o Analisador de acesso no
Guia do Usuário do IAM.
2. Acesse o IAM para criar um analisador de nível de conta para cada região onde você deseja usar o
Analisador de acesso.
O Analisador de acesso para S3 requer um analisador de nível de conta. Para usar o Analisador de
acesso para S3, você deve criar um analisador que tenha uma conta como a zona de confiança. Para
obter mais informações, consulte Habilitar o Analisador de acesso no Guia do usuário do IAM.
todo o acesso público a um bucket, nenhum acesso público será concedido. Recomendamos que você
bloqueie todo o acesso público aos buckets, a menos que exija acesso público para dar suporte a um caso
de uso específico e verificado. Antes de bloquear todo o acesso público, certifique-se de que os aplicativos
continuarão funcionando corretamente sem acesso público.
Se não quiser bloquear todo o acesso público ao bucket, você pode editar as configurações de bloqueio de
acesso público no console do Amazon S3 para configurar níveis granulares de acesso aos buckets. Para
obter mais informações, consulte Bloquear o acesso público ao armazenamento do Amazon S3 (p. 469).
Em eventos raros, o Analisador de acesso para S3 pode relatar nenhuma descoberta para um bucket que
uma análise de bloqueio de acesso público do Amazon S3 relata como público. Isso acontece porque
o bloqueio de acesso público do Amazon S3 analisa as políticas de ações atuais e quaisquer ações
potenciais que possam ser adicionadas no futuro, fazendo com que um bucket se torne público. Por outro
lado, o Analisador de acesso para S3 analisa somente as ações atuais especificadas para o serviço do
Amazon S3 na avaliação do status do acesso.
Para bloquear todo o acesso público a um bucket usando o Analisador de acesso para S3
Como revisar e alterar uma política de bucket, uma ACL de bucket ou uma política de ponto de
acesso
a. Escolha Permissions.
b. Escolha Access Control List.
c. Revise a ACL de bucket e faça as alterações conforme necessário.
Para obter mais informações, consulte Adicionar uma política de bucket usando o console do
Amazon S3 (p. 377)
7. Se você quiser revisar ou alterar uma política de ponto de acesso:
Para obter mais informações, consulte Usar pontos de acesso do Amazon S3 com o console do
Amazon S3 (p. 491).
Se você editar ou remover uma ACL de bucket, uma política de bucket ou uma política de ponto de
acesso para remover o acesso público ou compartilhado, o status das descobertas do bucket será
atualizado para resolved (resolvido). As descobertas de bucket resolvidas desaparecem da lista do
Analisador de acesso para S3, mas você pode visualizá-las no Analisador de acesso do IAM.
Você pode criar armazenamentos de dados compartilhados nos quais vários usuários e equipes em
diferentes contas podem gravar e ler e padronizar a propriedade de novos objetos no bucket. Como
proprietário do bucket, você pode compartilhar e gerenciar o acesso a esses objetos por meio de políticas
baseadas em recursos, como uma política de bucket. A Propriedade de objetos do S3 não afeta os objetos
existentes.
• Object writer (Gravador de objetos): a conta que fez upload será proprietária do objeto.
• Bucket owner preferred (Proprietário do bucket preferencial): o proprietário do bucket será proprietário
do objeto se o objeto for carregado com a ACL padrão bucket-owner-full-control. Sem essa
configuração e a ACL padrão, o objeto é carregado e permanece como propriedade da conta de que
fez upload. Para obter informações sobre como aplicar a propriedade do objeto, consulte Como posso
garantir que assumo a propriedade de novos objetos? (p. 501).
Tópicos
• Como posso garantir que assumo a propriedade de novos objetos? (p. 501)
• Usar a Propriedade de objetos do S3 com Replicação do Amazon S3 (p. 502)
• Definir a Propriedade de objetos do S3 (p. 502)
A política de bucket a seguir especifica que a conta 111122223333 pode fazer upload de objetos DOC-
EXAMPLE-BUCKET somente quando a ACL do objeto estiver definida como bucket-owner-full-
control. Substitua 111122223333 por uma conta real e DOC-EXAMPLE-BUCKET com o nome de um
bucket real.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Only allow writes to my bucket with bucket owner full control",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::111122223333:user/ExampleUser"
]
},
"Action": [
"s3:PutObject"
],
"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
"Condition": {
"StringEquals": {
"s3:x-amz-acl": "bucket-owner-full-control"
}
}
}
]
}
Veja a seguir um exemplo de operação de cópia que inclui a ACL padrão bucket-owner-full-
control usando a interface de linha de comando da AWS (CLI da AWS).
An error occurred (AccessDenied) when calling the PutObject operation: Access Denied (Ocorreu um erro
(AccessDenied) ao chamar a operação PutObject: acesso negado).
Note
Para transferir a propriedade de objetos replicados para o proprietário do bucket de destino, você pode
usar a opção de substituição do proprietário da Replicação do Amazon S3. Para obter mais informações
sobre como transferir a propriedade de réplicas, consulte Alterar o proprietário da réplica (p. 670).
Com as etapas acima, a propriedade do objeto assumirá a propriedade de qualquer objeto novo escrito
por outras contas com a ACL padrão bucket-owner-full-control. Para obter informações sobre
como aplicar a Propriedade de objetos, consulte Como posso garantir que assumo a propriedade de novos
objetos? (p. 501).
A maioria das operações do S3 lê ou grava em buckets específicos do S3. Essas operações incluem fazer
upload, cópia e download de objetos, recuperar ou modificar as configurações de bucket e recuperar ou
modificar as configurações de objeto. Ao executar essas operações, você especifica o bucket que deseja
usar, incluindo seu nome com a solicitação. Por exemplo, para recuperar um objeto do S3, você faz uma
solicitação que especifica o nome de um bucket e a chave de objeto a ser recuperada desse bucket.
Como o Amazon S3 identifica buckets com base em seus nomes, uma aplicação que usa um nome de
bucket incorreto em uma solicitação pode executar operações inadvertidamente em um bucket diferente do
esperado. Para ajudar a evitar interações não intencionais de bucket em situações como essa, você pode
usar a condição do proprietário do bucket. A condição de proprietário do bucket permite que você verifique
se o bucket de destino pertence à conta esperada da AWS, fornecendo uma camada adicional de garantia
de que suas operações do S3 estão tendo os efeitos que você pretende.
Tópicos
• Quando usar a condição do proprietário do bucket (p. 503)
• Verificar um proprietário do bucket (p. 503)
• Exemplos (p. 504)
• Restrições e limitações (p. 506)
Para ver o benefício de usar a condição de proprietário do bucket, considere o seguinte cenário
envolvendo a cliente da AWS, Bea:
1. Bea desenvolve uma aplicação que usa o Amazon S3. Durante o desenvolvimento, Bea usa sua
conta da AWS somente para testes para criar um bucket chamado bea-data-test e configura sua
aplicação para fazer solicitações bea-data-test.
2. Bea implanta sua aplicação, mas esquece de reconfigurar a aplicação para usar um bucket em sua
conta da AWS de produção.
3. Na produção, a aplicação de Bea faz solicitações para bea-data-test, que são bem-sucedidas. Isso
resulta na gravação de dados de produção no bucket na conta de teste da Bea.
Bea pode ajudar a evitar situações como esta usando a condição de proprietário do bucket. Com a
condição de proprietário do bucket, Bea pode incluir o ID da conta da AWS do proprietário do bucket
esperado em suas solicitações. O Amazon S3, então, verifica o ID da conta do proprietário do bucket antes
de processar cada solicitação. Se o proprietário real do bucket não corresponder ao proprietário do bucket
esperado, a solicitação falhará.
Se Bea usar a condição de proprietário do bucket, o cenário descrito anteriormente não resultará na
gravação inadvertida da aplicação de Bea em um bucket de teste. Em vez disso, as solicitações que sua
aplicação fizer na etapa 3 falharão e apresentarão uma mensagem de erro descritiva. Ao usar a condição
de proprietário do bucket, Bea ajuda a eliminar o risco de interagir acidentalmente com buckets na conta
errada da AWS.
operações CopyObject, esse primeiro parâmetro especifica o proprietário esperado do bucket de destino
e você inclui um segundo parâmetro para especificar o proprietário esperado do bucket de origem.
Quando você faz uma solicitação que inclui um parâmetro de condição do proprietário do bucket, o S3
verifica o ID da conta do proprietário do bucket em relação ao parâmetro especificado antes de processar
a solicitação. Se o parâmetro corresponder ao ID da conta do proprietário do bucket, o S3 processará
a solicitação. Se o parâmetro não corresponder ao ID da conta do proprietário do bucket, a solicitação
falhará e apresentará uma mensagem de erro descritiva.
Você pode usar a condição de proprietário do bucket com a Interface da linha de comando da AWS (CLI
da AWS), AWS SDKs e APIs REST do Amazon S3. Ao usar a condição de proprietário do bucket com a
AWS CLI e as APIs REST do Amazon S3, use os seguintes nomes de parâmetros.
Os nomes de parâmetros necessários para usar a condição de proprietário do bucket com os AWS SDKs
variam dependendo do idioma. Para determinar os parâmetros necessários, consulte a documentação do
SDK para o idioma desejado. Você pode encontrar a documentação do SDK em Tools to Build on AWS.
Exemplos
Os exemplos a seguir mostram como você pode implementar a condição de proprietário do bucket no
Amazon S3 usando a AWS CLI ou o AWS SDK para Java 2.x.
Example
Exemplo: fazer upload de um objeto
AWS CLI
Example
Exemplo: copiar um objeto
DOC-EXAMPLE-BUCKET1 111122223333
DOC-EXAMPLE-BUCKET2 444455556666
AWS CLI
Example
Exemplo: recuperar uma política de bucket
AWS CLI
.expectedBucketOwner("111122223333")
.build();
try {
GetBucketPolicyResponse response = s3Client.getBucketPolicy(request);
}
catch (S3Exception e) {
// The call was transmitted successfully, but Amazon S3 couldn't process
// it, so it returned an error response.
e.printStackTrace();
}
}
Restrições e limitações
A condição de proprietário do bucket do Amazon S3 tem as seguintes restrições e limitações:
• O valor do parâmetro de condição do proprietário do bucket deve ser um ID de conta da AWS (string
alfanumérica de 12 dígitos). Não há compatibilidade com os principais de serviço.
• A condição do proprietário do bucket não está disponível para CreateBucket, ListBuckets, ou qualquer
uma das operações incluídas no AWS S3 Control. O Amazon S3 ignora todos os parâmetros de
condição do proprietário do bucket incluídos nas solicitações para essas operações.
• A condição do proprietário do bucket verifica apenas se a conta especificada no parâmetro de
verificação é proprietária do bucket. A condição do proprietário do bucket não verifica a configuração do
bucket. Também não garante que a configuração do bucket atenda a quaisquer condições específicas
ou corresponda a qualquer estado passado.
Ao usar alarmes do Amazon CloudWatch, você observa uma única métrica durante um período
especificado. Se a métrica exceder determinado limite, uma notificação será enviada para um tópico
do Amazon SNS ou para uma política do AWS Auto Scaling. Os alarmes do CloudWatch não invocam
ações só porque estão em um determinado estado. O estado deve ter sido alterado e mantido por
uma quantidade especificada de períodos. Para obter mais informações, consulte Monitoramento de
métricas com o Amazon CloudWatch (p. 855).
Logs do AWS CloudTrail
O CloudTrail fornece um registro de ações executadas por um usuário, uma função ou um serviço
da AWS no Amazon S3. Usando as informações coletadas pelo CloudTrail, é possível determinar
a solicitação feita para o Amazon S3, o endereço IP do qual a solicitação foi feita, quem fez a
solicitação, quando ela foi feita e detalhes adicionais. Para obter mais informações, consulte Registrar
em log chamadas de API do Amazon S3 usando o AWS CloudTrail (p. 815).
Logs de acesso do Amazon S3
Os logs de acesso ao servidor fornecem registros detalhados das solicitações feitas a um bucket. Os
logs de acesso ao servidor são úteis para muitos aplicativos. Por exemplo, as informações do log de
acesso podem ser úteis em auditorias de segurança e acesso. Para obter mais informações, consulte
Registrar em log as solicitações com registro em log de acesso ao servidor (p. 833).
AWS Trusted Advisor
O Trusted Advisor baseia-se nas práticas recomendadas aprendidas ao atender centenas de milhares
de clientes da AWS. O Trusted Advisor inspeciona seu ambiente da AWS e faz recomendações
quando há oportunidades para economizar dinheiro, melhorar a performance do sistema ou ajuda a
corrigir falhas de segurança. Todos os clientes da AWS têm acesso a cinco verificações do Trusted
Advisor. Os clientes com um plano de suporte Business ou Enterprise podem ver todas as verificações
do Trusted Advisor.
Para obter mais informações, consulte AWS Trusted Advisor no Guia do usuário do AWS Support.
A AWS fornece uma lista atualizada com frequência de serviços da AWS no escopo de programas de
conformidade específicos em Serviços da AWS no escopo do programa de conformidade.
Os relatórios de auditoria de terceiros estão disponíveis para download no AWS Artifact. Para obter mais
informações, consulte Download de relatórios no AWS Artifact.
Para obter mais informações sobre programas de conformidade da AWS, consulte Programas de
conformidade da AWS.
Resiliência no Amazon S3
A infraestrutura global da AWS é criada com base em regiões e zonas de disponibilidade. As regiões da
AWS fornecem várias zonas de disponibilidade separadas e isoladas fisicamente, que são conectadas
com baixa latência, alta taxa de transferência e redes altamente redundantes. As zonas de disponibilidade
oferecem a você uma forma eficiente para criar e operar aplicativos e bancos de dados. Elas são mais
altamente disponíveis, tolerantes a falhas e escaláveis que infraestruturas com único data center ou
infraestruturas com vários datacenters tradicionais. Se for necessário replicar seus dados especificamente
em distâncias geográficas maiores, você poderá usar o Replicação de objetos (p. 617), que permite a
cópia automática e assíncrona de objetos entre buckets de diferentes regiões da AWS.
Cada região da AWS tem várias zonas de disponibilidade. Você pode implantar suas aplicações em
diversas zonas de disponibilidade na mesma região para tolerância de falha e baixa latência. As zonas
de disponibilidade são conectadas umas as outras com redes de fibra ótica rápidas e privadas, que
permitem o desenvolvimento de aplicações submetidas a failover automaticamente entre as zonas de
disponibilidade, sem interrupções.
Para obter mais informações sobre regiões da AWS e zonas de disponibilidade, consulte Infraestrutura
global da AWS.
Além da infraestrutura global da AWS, o Amazon S3 oferece vários recursos para oferecer suporte às suas
necessidades de resiliência e backup de dados.
Uma configuração de ciclo de vida é um conjunto de regras que definem as ações aplicadas pelo
Amazon S3 a um grupo de objetos. Com regras de configuração de ciclo de vida, é possível solicitar
que o Amazon S3 faça a transição de objetos para classes de armazenamento menos caras,
arquive-os ou exclua-os. Para obter mais informações, consulte Gerenciando seu ciclo de vida de
armazenamento (p. 569).
Versionamento
Bloqueio de objetos do S3
Você pode usar o bloqueio de objetos do S3 para armazenar objetos usando um modelo gravar uma
vez, ler muitas (WORM, write once read many). Ao usar o bloqueio de objetos do S3, você pode evitar
que um objeto seja excluído ou substituído por um período fixo ou indefinidamente. O bloqueio de
objetos do S3 permite atender aos requisitos regulamentares que exigem armazenamento WORM,
ou simplesmente adicionar uma camada extra de proteção contra alterações e exclusões de objetos.
Para obter mais informações, consulte Usar o S3 Object Lock (p. 554).
Classes de armazenamento
O Amazon S3 oferece uma variedade de classes de armazenamento para os objetos que você
armazena. Duas dessas classes de armazenamento (STANDARD_IA e ONEZONE_IA) foram
desenvolvidas para dados duradouros e acessados com pouca frequência, como backups. Também é
possível usar a classe de armazenamento do S3 Glacier para arquivar objetos que você não precisa
acessar em tempo real. Para obter mais informações, consulte Uso de classes de armazenamento do
Amazon S3 (p. 563).
• Habilitar o versionamento
• Considerar replicação entre regiões do Amazon S3
• Identificar e auditar todos os buckets do Amazon S3
Para obter mais informações sobre versionamento e bloqueio de objetos, consulte os seguintes tópicos:
Usando o controle de versão em buckets do S3 (p. 516) Usar o S3 Object Lock (p. 554)
O acesso ao Amazon S3 pela rede acontece por meio de APIs publicadas pela AWS. Os clientes devem
ter suporte ao Transport Layer Security (TLS) 1.0. Recomendamos TLS 1.2. Os clientes também devem
ter suporte a pacotes de criptografia com sigilo de encaminhamento perfeito (PFS) como Ephemeral Diffie-
Hellman (DHE) ou Elliptic Curve Diffie-Hellman Encaminhamento (ECDHE). Além disso, as solicitações
devem ser assinadas usando AWS Signature V4 ou AWS Signature V2, necessitando de credenciais
válidas para o fornecimento.
Essas APIs podem ser chamadas de qualquer local da rede. No entanto, o Amazon S3 não oferece
suporte a políticas de acesso com base em recursos, que podem incluir restrições com base no endereço
IP de origem. Você também pode usar políticas de bucket do Amazon S3 para controlar o acesso a
buckets de endpoints específicos da Virtual Private Cloud (VPC) ou VPCs específicas. Efetivamente, isso
isola o acesso à rede para um determinado bucket do Amazon S3 somente da VPC específica dentro da
rede da AWS. Para obter mais informações, consulte Controlar o acesso a partir de VPC endpoints com
políticas de bucket (p. 377).
Tópicos
• Melhores práticas de segurança preventivas do Amazon S3 (p. 510)
• Melhores práticas de auditoria e monitoramento do Amazon S3 (p. 513)
Garantir que seus buckets do Amazon S3 utilizem as políticas corretas e não sejam acessados
publicamente
A não ser que seja absolutamente necessário que alguém na internet possa ler ou escrever no seu
bucket do S3, o bucket do S3 não deve ser público. Você pode seguir algumas das etapas abaixo:
• Use o bloqueio de acesso público do Amazon S3. Com o Bloqueio de acesso público do Amazon
S3, os administradores de conta e os proprietários de bucket podem configurar facilmente os
controles centralizados impostos para limitar o acesso público aos recursos do Amazon S3,
independentemente de como os recursos são criados. Para obter mais informações, consulte
Bloquear o acesso público ao armazenamento do Amazon S3 (p. 469).
• Identifique as políticas de bucket do Amazon S3 que permitem uma identidade curinga, como
entidade principal “*” (que efetivamente significa “qualquer pessoa”), ou que permitem uma ação
curinga “*” (que efetivamente permite que o usuário realize qualquer ação no bucket do Amazon
S3).
• Da mesma forma, observe as listas de controle de acesso (ACLs) do bucket do Amazon S3 que
fornecem acesso de leitura, gravação, ou total a “Todos” ou a “Qualquer usuário autenticado da
AWS”.
• Use a API ListBuckets para verificar todos os buckets do Amazon S3. Depois, use
GetBucketAcl, GetBucketWebsite e GetBucketPolicy para determinar se o bucket tem
controles de acesso e configuração dentro da conformidade.
• Use o AWS Trusted Advisor para inspecionar sua implementação do Amazon S3.
• Considere implementar os controles de detecção contínuos usando as regras s3-bucket-public-read-
prohibited e s3-bucket-public-write-prohibited gerenciadas pelo AWS Config.
Para obter mais informações, consulte Identity and Access Management no Amazon S3 (p. 252).
Implementar o privilégio de acesso mínimo
Ao conceder permissões, você decide quem receberá quais permissões para quais recursos do
Amazon S3. Você habilita ações específicas que quer permitir nesses recursos. Portanto, você
deve conceder somente as permissões necessárias para executar uma tarefa. A implementação do
privilégio de acesso mínimo é fundamental para reduzir o risco de segurança e o impacto que pode
resultar de erros ou usuários mal-intencionados.
Para obter orientação sobre o que considerar ao escolher um ou mais mecanismos precedentes,
consulte Diretrizes para políticas de acesso (p. 258).
Usar funções do IAM para aplicações e serviços da AWS que exigem acesso ao Amazon S3
Para que aplicações no Amazon EC2 ou outros serviços da AWS acessem recursos do Amazon S3,
eles devem incluir credenciais válidas da AWS em suas solicitações de API da AWS. Você não deve
armazenar credenciais da AWS diretamente na aplicação ou na instância do Amazon EC2. Essas
são credenciais de longo prazo que não são automaticamente alternadas e podem ter um impacto
comercial significativo se forem comprometidas.
Em vez disso, você deve usar uma função do IAM para gerenciar credenciais temporárias para
aplicações ou serviços que precisam de acesso ao Amazon S3. Quando você usa uma função, não é
necessário distribuir credenciais de longo prazo (como um nome de usuário e uma senha ou chaves
de acesso) para uma instância do Amazon EC2 ou serviço da AWS como o AWS Lambda. A função
fornece permissões temporárias que os aplicativos podem usar ao fazer chamadas para outros
recursos da AWS.
Para obter mais informações, consulte os seguintes tópicos no Guia do usuário do IAM:
• Funções do IAM
• Cenários comuns para funções: usuários, aplicativos e serviços
A exclusão da MFA pode ajudar a evitar exclusões acidentais de buckets. Se a exclusão de MFA não
estiver habilitada, qualquer usuário com a senha de uma raiz com privilégio suficiente ou usuário do
IAM poderá excluir um objeto do Amazon S3.
A exclusão de MFA requer autenticação adicional para uma das seguintes operações:
• Alterar o estado de versionamento de seu bucket
• Excluir, permanentemente, uma versão de objeto
Para obter mais informações, consulte Configurando a exclusão de MFA (p. 524).
Considerar a criptografia de dados em repouso
Para obter mais informações, consulte Proteção de dados usando criptografia no lado do
servidor (p. 195).
• Criptografia no lado do cliente: criptografe dados no lado do cliente e faça upload dos dados
criptografados no Amazon S3. Nesse caso, você gerencia o processo de criptografia, as chaves
de criptografia e as ferramentas relacionadas. Assim como na criptografia no lado do servidor, a
criptografia no lado do cliente pode ajudar a reduzir o risco criptografando os dados com uma chave
armazenada em um mecanismo diferente do mecanismo que armazena os próprios dados.
O Amazon S3 fornece muitas opções de criptografia no lado do cliente. Para obter mais
informações, consulte Proteger dados usando a criptografia no lado do cliente (p. 239).
Aplicar a criptografia de dados em trânsito
Você pode usar HTTPS (TLS) para ajudar a evitar que invasores espionem ou manipulem tráfego de
rede usando ataques person-in-the-middle (intermediários) ou similares. Você deve permitir apenas
conexões criptografadas por HTTPS (TLS) que usam a condição aws:SecureTransport em políticas de
bucket do Amazon S3.
Considere também implementar controles de detecção contínuos usando a regra gerenciada s3-
bucket-ssl-requests-only do AWS Config.
Considerar o bloqueio de objetos do S3
O Usar o S3 Object Lock (p. 554) permite que você armazene objetos usando um modelo “Write-
Once-Read-Man” (WORM gravação única e várias leituras)". O bloqueio de objetos do S3 pode ajudar
a evitar a exclusão acidental ou inadequada de dados. Por exemplo, você pode usar o bloqueio de
objetos do S3 para ajudar a proteger seus logs do AWS CloudTrail.
Habilitar o versionamento
Considere também implementar controles de detecção em andamento usando a regra gerenciada s3-
bucket-versioning-enabled do AWS Config.
Para obter mais informações, consulte Usando o controle de versão em buckets do S3 (p. 516).
Considerar replicação entre regiões do Amazon S3
A CRR requer que tanto o bucket de origem quanto o de destino tenham o versionamento
habilitado.
Considere também implementar controles de detecção em andamento usando a regra gerenciada s3-
bucket-replication-enabled do AWS Config.
Considerar VPC endpoints para acesso ao Amazon S3
Um VPC endpoint para o Amazon S3 é uma entidade lógica dentro de uma VPC que permite a
conectividade somente com o Amazon S3. Você pode usar políticas de bucket do Amazon S3 para
controlar o acesso a buckets de VPC endpoints específicos ou VPCs específicas. Um VPC endpoint
também pode ajudar a evitar que o tráfego potencialmente atravesse a internet aberta e esteja sujeito
ao ambiente da internet aberta.
Os VPC endpoints para Amazon S3 fornecem várias maneiras de controlar o acesso aos dados do
Amazon S3:
• É possível controlar as solicitações, os usuários ou os grupos permitidos por um VPC endpoint
específico.
• Você pode controlar quais VPCs ou VPC endpoints têm acesso a seus buckets do S3 usando as
políticas de bucket do S3.
• Você pode ajudar a evitar a exfiltração de dados usando uma VPC que não tenha um internet
gateway.
Para obter mais informações, consulte Controlar o acesso a partir de VPC endpoints com políticas de
bucket (p. 377).
Use o Tag Editor para identificar recursos sensíveis quanto a segurança ou auditoria, depois use
essas tags quando precisar procurar por esses recursos. Para obter mais informações, consulte
Pesquisa de recursos para marcar com tags.
Você pode usar o inventário do Amazon S3 para auditar e gerar relatórios sobre o status da replicação
e criptografia de seus objetos para os negócios, a conformidade e as necessidades normativas. Para
obter mais informações, consulte Inventário do Amazon S3 (p. 605).
Crie grupos de recursos para seus recursos do Amazon S3. Para obter mais informações, consulte O
que são grupos de recursos da AWS?
Implementar o monitoramento usando ferramentas de monitoramento da AWS
Para obter um segundo exemplo, consulte, Exemplo: atividade do bucket do Amazon S3. Este
exemplo descreve como criar um alarme do Amazon CloudWatch que é ativado quando uma chamada
API do Amazon S3 é feita para a política PUT ou DELETE do bucket, ciclo de vida do bucket, ou
replicação do bucket ou para implementar um ACL do bucket.
Ativar registro em log de acesso ao servidor do Amazon S3
O registro em log de acesso ao servidor fornece detalhes sobre as solicitações que são feitas a um
bucket. Os logs de acesso ao servidor podem ajudar na auditoria de segurança e acesso, a saber
mais sobre a base de clientes e entender sua fatura do Amazon S3. Para obter informações sobre
como habilitar o registro em log de acesso ao servidor, consulte Registrar em log as solicitações com
registro em log de acesso ao servidor (p. 833).
Considere também implementar controles de detecção em andamento usando a regra gerenciada s3-
bucket-logging-enabled do AWS Config.
Usar o AWS CloudTrail
O AWS CloudTrail fornece um registro de ações executadas por um usuário, uma função ou um
serviço da AWS no Amazon S3. Você pode usar as informações coletadas pelo CloudTrail para
determinar a solicitação feita para o Amazon S3, o endereço IP do qual a solicitação foi feita, quem
fez a solicitação, quando ela foi feita e detalhes adicionais. Por exemplo, você pode identificar
entradas do CloudTrail para ações Put que afetam o acesso a dados, em particular, PutBucketAcl,
PutObjectAcl, PutBucketPolicy e PutBucketWebsite. Quando você configura sua conta
da AWS, o CloudTrail é ativado por padrão. Você pode visualizar eventos recentes no console do
CloudTrail. Para criar um registro contínuo de atividades e eventos para os buckets do Amazon S3,
você pode criar uma trilha no console do CloudTrail. Para obter mais informações, consulte Registrar
em log eventos de dados para trilhas no Guia do usuário do AWS CloudTrail.
Ao criar uma trilha, você pode configurar o CloudTrail para registrar eventos de dados. Eventos
de dados são registros de operações de recurso executadas no recurso ou dentro de um recurso.
No Amazon S3, os eventos de dados registram a atividade da API no nível do objeto para buckets
individuais. O CloudTrail oferece suporte a um subconjunto de operações de API no nível do objeto
do Amazon S3 como GetObject, DeleteObject e PutObject. Para obter mais informações
sobre como o CloudTrail funciona com o Amazon S3, consulte Registrar em log chamadas de API
do Amazon S3 usando o AWS CloudTrail (p. 815). No console do Amazon S3, você também pode
configurar seus buckets do S3 para Habilitar o log de eventos do CloudTrail para buckets e objetos do
S3 (p. 825).
Várias melhores práticas listadas neste tópico sugerem a criação de regras do AWS Config. O AWS
Config permite avaliar, auditar e verificar as configurações dos recursos da AWS. O AWS Config
monitora as configurações de recursos, permitindo que você avalie as configurações gravadas em
relação às configurações seguras desejadas. Com o AWS Config, você pode analisar alterações
feitas nas configurações e relacionamentos entre os recursos da AWS, examinar os detalhes do
histórico de configuração de recursos e determinar a conformidade geral em relação às configurações
especificadas em diretrizes internas. Isso pode ajudar a simplificar a auditoria de conformidade, a
análise de segurança, o gerenciamento de alterações e a solução de problemas operacionais. Para
obter mais informações, consulte Configurar o AWS Config com o console no Guia do desenvolvedor
do AWS Config. Ao especificar os tipos de recurso que devem ser registrados, inclua os recursos do
Amazon S3.
Para obter um exemplo de como usar o AWS Config para monitorar e responder a buckets do Amazon
S3 que permitem acesso público, consulte Como usar o AWS Config para monitorar e responder a
buckets do Amazon S3 que permitem acesso público no AWS Security Blog.
Considere usar o Amazon Macie com o Amazon S3
O Macie usa machine learning para descobrir, classificar e proteger automaticamente dados
confidenciais na AWS. O Macie reconhece dados confidenciais, como informações de identificação
pessoal (PII) ou propriedade intelectual. Ele fornece painéis e alertas que dão visibilidade ao acesso e
à movimentação desses dados. Para obter mais informações, consulte O que é o Amazon Macie?
Monitorar os aconselhamentos de segurança da AWS
Você deve verificar regularmente os avisos de segurança publicados no Trusted Advisor para sua
conta da AWS. Especificamente, observe avisos sobre buckets do Amazon S3 com “permissões de
acesso em aberto”. Você pode fazer isso programaticamente usando describe-trusted-advisor-checks.
Além disso, monitore ativamente o endereço de e-mail principal registrado em cada uma das suas
contas da AWS. A AWS entrará em contato com você, usando esse endereço de e-mail, sobre
problemas de segurança emergentes que podem afetar você.
Problemas operacionais da AWS com grande impacto são publicados no AWS Service Health
Dashboard. Problemas operacionais também são publicados em contas individuais por meio do
Personal Health Dashboard. Para obter mais informações, consulte a Documentação do AWS Health.
Tópicos
• Usando o controle de versão em buckets do S3 (p. 516)
• Usar o S3 Object Lock (p. 554)
• Uso de classes de armazenamento do Amazon S3 (p. 563)
• Gerenciando seu ciclo de vida de armazenamento (p. 569)
• Inventário do Amazon S3 (p. 605)
• Replicação de objetos (p. 617)
• Categorizando seu armazenamento usando tags (p. 683)
• Usar tags de alocação de custos para buckets do S3 (p. 693)
• Filtragem e recuperação de dados usando o Amazon S3 Select (p. 710)
• Executar operações em lote do S3 (p. 739)
Buckets com versionamento habilitado podem ajudar a recuperar objetos de uma exclusão ou substituição
acidental. Por exemplo, se você excluir um objeto, o Amazon S3 inserirá um marcador de exclusão em
vez de remover o objeto permanentemente. O marcador de exclusão se torna a versão atual do objeto. Se
você substituir um objeto, isso criará uma nova versão do objeto no bucket. Você sempre pode restaurar
a versão anterior. Para obter mais informações, consulte Excluir versões de objetos de um bucket com
versionamento habilitado (p. 534).
Por padrão, o Versionamento do S3 está desativado em buckets e você deve ativá-lo explicitamente. Para
obter mais informações, consulte Habilitar o controle de versão em buckets (p. 521).
Note
A API SOAP não é compatível com o versionamento do S3. O suporte de SOAP via HTTP
está obsoleto, mas continua disponível via HTTPS. Os novos recursos do Amazon S3 não são
compatíveis com SOAP.
Você habilita e suspende o controle de versão no nível do bucket. Depois que um bucket é habilitado
para versionamento, ele nunca pode voltar a um estado sem versionamento. Mas você pode suspender o
versionamento nesse bucket.
O estado de versionamento aplica-se a todos (nunca alguns) os objetos nesse bucket. Quando você
habilita o versionamento em um bucket, todos os novos objetos são versionados e recebem um ID
de versão exclusivo. Os objetos que já existiam no bucket no momento em que o versionamento foi
ativado serão sempre versionados e receberão um ID de versão exclusivo quando forem modificados por
solicitações futuras. Observe o seguinte:
• Os objetos que são armazenados em seu bucket antes da habilitação do versionamento têm um ID
de versão null. Quando você habilita o versionamento, os objetos existentes em seu bucket não são
alterados. O que muda é como o Amazon S3 trata os objetos em solicitações futuras. Para obter mais
informações, consulte Trabalhar com objetos em um bucket com versionamento habilitado (p. 525).
• O proprietário do bucket (ou qualquer usuário com as devidas permissões) pode suspender o
versionamento para interromper o acúmulo de versões de objetos. Quando você suspende o
versionamento, os objetos existentes em seu bucket não são alterados. O que muda é como o Amazon
S3 trata os objetos em solicitações futuras. Para obter mais informações, consulte Trabalhar com objetos
em um bucket com versionamento suspenso (p. 541).
Se você tem uma política de ciclo de vida de expiração do objeto em seu bucket sem
versionamento e quer manter o mesmo comportamento de exclusão permanente quando ativar
o controle de versão, precisará adicionar uma política de expiração de versão desatualizada. A
política de expiração do ciclo de vida gerencia as exclusões de versões desatualizadas de objeto
no bucket habilitado para versionamento. (Um bucket habilitado para versionamento mantém uma
versão atual e zero ou mais versões desatualizadas de objetos.) Para obter mais informações,
consulte Definir a configuração do ciclo de vida em um bucket (p. 575).
Para obter informações sobre como trabalhar com o Versionamento do S3, consulte os tópicos a seguir.
Tópicos
• Como funciona o Versionamento do S3 (p. 518)
• Habilitar o controle de versão em buckets (p. 521)
• Configurando a exclusão de MFA (p. 524)
• Trabalhar com objetos em um bucket com versionamento habilitado (p. 525)
• Trabalhar com objetos em um bucket com versionamento suspenso (p. 541)
• Trabalhando com objetos arquivados (p. 544)
Cada bucket do S3 que você cria tem um sub-recurso de versionamento associado a ele. (Para obter
mais informações, consulte Opções de configuração do bucket (p. 28).) Por padrão, seu bucket não está
habilitado para versionamento e o sub-recurso de versionamento armazena uma configuração vazia de
versionamento, como mostrado a seguir.
<VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
</VersioningConfiguration>
Para habilitar o versionamento, você pode enviar uma solicitação ao Amazon S3 com uma configuração de
versionamento que inclui um status.
<VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Status>Enabled</Status>
</VersioningConfiguration>
O proprietário do bucket e todos os usuários autorizados do IAM podem habilitar o controle de versão. O
proprietário do bucket é a conta da AWS que criou o bucket (a conta raiz). Para obter mais informações
sobre permissões, consulte Identity and Access Management no Amazon S3 (p. 252).
Para obter mais informações sobre como ativar e desativar o controle de versão do S3 usando o Console
de Gerenciamento da AWS, a AWS Command Line Interface (AWS CLI) ou a API REST, consulte the
section called “Habilitar o controle de versão em buckets” (p. 521).
Tópicos
• IDs de versão (p. 518)
• Fluxos de trabalho de versionamento (p. 519)
IDs de versão
Se o versionamento estiver habilitado para um bucket, o Amazon S3 gerará um ID de versão exclusivo
automaticamente para o objeto que está sendo armazenado. Em um bucket, por exemplo, você pode ter
dois objetos com a mesma chave, mas diferentes IDs de versão, como photo.gif (versão 111111) e
photo.gif (versão 121212).
Independentemente de você ter habilitado o versionamento, cada objeto em seu bucket terá um ID de
versão. Se o S3 Versioning não for habilitado, o Amazon S3 definirá o valor do ID da versão como nulo. Se
o S3 Versioning for habilitado, o Amazon S3 atribuirá um valor de ID de versão para o objeto. Esse valor o
distingue de outras versões da mesma chave.
Quando você habilita o S3 Versioning em um bucket existente, os objetos que já estão armazenados no
bucket permanecem inalterados. Os IDs de versão (nulos), o conteúdo e as permissões continuarão os
mesmos. Depois que habilitar o versionamento do S3 para um bucket, cada objeto adicionado ao bucket
obterá um ID de versão, que o distinguirá de outras versões da mesma chave.
Somente o Amazon S3 gera IDs de versão, e eles não podem ser editados. Os IDs de versão são strings
opacas Unicode, com codificação UTF-8 e prontas para URL que não têm mais de 1.024 bytes de
comprimento. Veja um exemplo a seguir:
3sL4kqtJlcpXroDTDmJ+rmSpXd3dIbrHY+MTRCxf3vjVBH40Nr8X8gdRQBpUMLUo
Note
Por simplicidade, os outros exemplos neste tópico usam IDs muito mais curtos.
Essa funcionalidade impede que você substitua ou exclua objetos acidentalmente e permite que você
recupere uma versão anterior de um objeto.
Quando você DELETE um objeto, todas as versões permanecem no bucket e o Amazon S3 insere um
marcador de exclusão, conforme exibido na figura a seguir.
O marcador de exclusão torna-se a versão atual de objeto. Por padrão, o GET requisita a recuperação da
versão armazenada mais recente. A execução de uma solicitação GET Object simples quando a versão
atual é um marcador de exclusão retorna um erro 404 Not Found, conforme exibido na figura a seguir.
Você pode, contudo, fazer uma solicitação GET de uma versão desatualizada de um objeto por especificar
seu ID de versão. Na figura a seguir, você faz uma solicitação GET de uma versão específica de objeto,
111111. O Amazon S3 retorna a versão desse objeto, apesar de não ser a versão atual.
Para obter mais informações, consulte Recuperando versões de objeto de um bucket habilitado para
versionamento (p. 531).
Você pode excluir permanentemente um objeto, especificando a versão que você deseja excluir. Somente
o proprietário de um bucket do Amazon S3 pode excluir uma versão permanentemente. A figura a seguir
mostra como DELETE versionId exclui, permanentemente, um objeto de um bucket e o Amazon S3 não
insere um marcador de exclusão.
Você pode obter segurança adicional configurando um bucket para habilitar a exclusão de MFA
(autenticação multifator). Quando você faz isso, o proprietário do bucket precisa incluir dois formulários de
autenticação em qualquer solicitação para excluir uma versão ou modificar o estado de versionamento do
bucket. Para obter mais informações, consulte Configurando a exclusão de MFA (p. 524).
Novas versões são criadas somente quando você PUT um novo objeto. Esteja ciente de que certas ações
como COPY funcionam implementando PUT. Tomar ações que modifiquem o objeto atual não criará uma
nova versão porque elas não PUT um novo objeto. Isso inclui ações como alterar as tags em um objeto.
Important
Para obter mais informações sobre o S3 Versioning, consulte Usando o controle de versão em buckets do
S3 (p. 516). Para obter informações sobre como trabalhar com objetos que estão em buckets habilitados
para versão, consulte Trabalhar com objetos em um bucket com versionamento habilitado (p. 525).
Cada bucket do S3 que você cria tem um sub-recurso de versionamento associado a ele. (Para obter
mais informações, consulte Opções de configuração do bucket (p. 28).) Por padrão, seu bucket não está
habilitado para versionamento e o sub-recurso de versionamento armazena uma configuração vazia de
versionamento, como mostrado a seguir.
<VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
</VersioningConfiguration>
Para habilitar o versionamento, você pode enviar uma solicitação ao Amazon S3 com uma configuração de
versionamento que inclui um status.
<VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Status>Enabled</Status>
</VersioningConfiguration>
O proprietário do bucket e todos os usuários autorizados do IAM podem habilitar o controle de versão. O
proprietário do bucket é a conta da AWS que criou o bucket (a conta raiz). Para obter mais informações
sobre permissões, consulte Identity and Access Management no Amazon S3 (p. 252).
As seções a seguir fornecem mais detalhes sobre como ativar o controle de versão do S3 usando o
console, a AWS CLI e os SDKs da AWS.
Usar o console do S3
Siga estas etapas para usar o Console de Gerenciamento da AWS para habilitar o controle de versão em
um bucket do S3.
Note
Você pode usar a AWS Multi-Factor Authentication (MFA) com versionamento. Ao usar a MFA
com versionamento, você deve fornecer as chaves de acesso da sua conta da AWS e um código
válido do dispositivo MFA da conta para excluir permanentemente uma versão de objeto ou
suspender ou reativar o versionamento.
Para usar a MFA com versionamento, você habilita MFA Delete. No entanto, você não
pode habilitar MFA Delete usando o Console de Gerenciamento da AWS. Você deve usar
a AWS Command Line Interface (AWS CLI) ou a API. Para obter mais informações, consulte
Configurando a exclusão de MFA (p. 524).
Note
O uso da exclusão de MFA requer um dispositivo de autenticação física ou virtual aprovado. Para
obter mais informações sobre como usar exclusão de MFA no Amazon S3, consulte Configurando
a exclusão de MFA (p. 524).
Para obter mais informações sobre como ativar o controle de versão usando a AWS CLI, consulte put-
bucket-versioning na AWS CLI Command Reference.
Java
Para obter instruções sobre como criar e testar um exemplo funcional, consulte Testar exemplos de
código Java no Amazon S3 (p. 1042).
import java.io.IOException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Region;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.model.AmazonS3Exception;
import com.amazonaws.services.s3.model.BucketVersioningConfiguration;
import com.amazonaws.services.s3.model.SetBucketVersioningConfigurationRequest;
SetBucketVersioningConfigurationRequest setBucketVersioningConfigurationRequest =
new SetBucketVersioningConfigurationRequest(bucketName,configuration);
s3Client.setBucketVersioningConfiguration(setBucketVersioningConfigurationRequest);
.NET
Para obter informações sobre como criar e testar um exemplo funcional, consulte Executar os
exemplos de código do Amazon S3 .NET (p. 1044).
using System;
using Amazon.S3;
using Amazon.S3.Model;
namespace s3.amazon.com.docsamples
{
class BucketVersioningConfiguration
{
static string bucketName = "*** bucket name ***";
{
Console.WriteLine(
"Error occurred. Message:'{0}' when listing objects",
amazonS3Exception.Message);
}
}
}
PutBucketVersioningResponse response =
client.PutBucketVersioning(request);
}
GetBucketVersioningResponse response =
client.GetBucketVersioning(request);
return response.VersioningConfig.Status;
}
}
}
A exclusão de MFA requer autenticação adicional para uma das seguintes operações:
A exclusão de MFA oferece segurança adicional se, por exemplo, suas credenciais de segurança forem
comprometidas. A exclusão de MFA pode ajudar a evitar exclusões acidentais de bucket exigindo que o
usuário que inicia a ação de exclusão para provar a posse física de um dispositivo MFA com um código
MFA e adicionando uma camada extra de atrito e segurança à ação de exclusão.
O proprietário do bucket, a conta da AWS que criou o bucket (conta raiz) e todos os usuários autorizados
do IAM podem habilitar o controle de versão. No entanto, somente o proprietário do bucket (conta raiz)
pode habilitar a exclusão de MFA. Para obter mais informações, consulte a publicação Securing Access to
AWS Using MFA no Blog de segurança da AWS.
Note
Para usar a exclusão de MFA com versionamento, habilite MFA Delete. No entanto, você não
pode habilitar MFA Delete usando o Console de Gerenciamento da AWS. Você deve usar a
AWS Command Line Interface (AWS CLI) ou a API.
Para obter exemplos de como usar a exclusão de MFA com versionamento, consulte a seção de
exemplos no tópico Habilitar o controle de versão em buckets (p. 521).
Para ativar ou desativar a exclusão de MFA, use a mesma API usada para configurar o versionamento
em um bucket. O Amazon S3 armazena a configuração de exclusão de MFA no mesmo sub-recurso de
versionamento que armazena o status de versionamento do bucket.
<VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Status>VersioningState</Status>
<MfaDelete>MfaDeleteState</MfaDelete>
</VersioningConfiguration>
Para usar a exclusão de MFA, você pode usar um dispositivo de hardware ou MFA virtual para gerar um
código de autenticação. O exemplo a seguir mostra um código de autenticação gerado exibido em um
dispositivo de hardware.
A exclusão de MFA e o acesso à API protegido por MFA são recursos que visam fornecer proteção para
diferentes cenários. Você configura a exclusão de MFA em um bucket para ajudar a garantir que os dados
em seu bucket não sejam excluídos acidentalmente. O acesso à API protegido por MFA é usado para
impor outro fator de autenticação (código MFA) ao acessar recursos confidenciais do Amazon S3. Você
pode exigir que qualquer operação nesses recursos do Amazon S3 seja feita com credenciais temporárias
criadas usando a MFA. Para ver um exemplo, consulte Adicionar uma política de bucket para exigir
MFA (p. 384).
Para obter mais informações sobre como comprar e ativar um dispositivo de autenticação, consulte
Autenticação multifator.
Você pode definir as regras de configuração de ciclo de vida de objetos que têm ciclo de vida bem definido
para fazer a transição de versões de objeto para a classe de armazenamento S3 Glacier em um
momento específico no ciclo de vida do objeto. Para obter mais informações, consulte Gerenciando seu
ciclo de vida de armazenamento (p. 569).
Os tópicos nesta seção explicam várias operações de objeto em um bucket com versionamento ativado.
Para obter mais informações sobre controle de versão, consulte Usando o controle de versão em buckets
do S3 (p. 516).
Tópicos
• Adicionar objetos a buckets com versionamento habilitado (p. 526)
• Listar objetos em um bucket com versionamento habilitado (p. 527)
• Recuperando versões de objeto de um bucket habilitado para versionamento (p. 531)
• Excluir versões de objetos de um bucket com versionamento habilitado (p. 534)
• Configurando permissões de objeto com versão (p. 540)
A figura a seguir mostra que o Amazon S3 adiciona um ID de versão exclusivo a um objeto quando ele é
adicionado a um bucket com versionamento habilitado.
Note
Você pode adicionar versões de objeto a um bucket habilitado para versão usando o console, os AWS
SDKs e a API REST.
Uso do console
Para ver exemplos de upload de objetos usando os AWS SDKs para Java, .NET e PHP, consulte Fazer
upload de objetos (p. 71). Os exemplos de upload de objetos em buckets com e sem versionamento
habilitado são os mesmos, embora o Amazon S3 atribua um número de versão para buckets com
versionamento habilitado. Caso contrário, o número de versão é nulo.
Para obter informações sobre o uso de outros AWS SDKs, consulte o Centro do desenvolvedor da AWS.
Para obter mais informações, consulte PutBucketVersioning na Referência da API do Amazon Simple
Storage Service.
2. Envie uma solicitação PUT, POST ou COPY para armazenar um objeto no bucket.
Quando você adiciona um objeto a um bucket habilitado para versionamento, o Amazon S3 retorna o ID da
versão do objeto no cabeçalho de resposta x-amz-version-id, como mostrado no exemplo a seguir.
x-amz-version-id: 3/L4kqtJlcpXroDTDmJ+rmSpXd3dIbrHY
Usar o console do S3
Siga estas etapas para usar o console do Amazon S3 para ver as diferentes versões de um objeto.
Para cada versão do objeto, o console exibe um ID de versão exclusivo, a data e a hora em que a
versão do objeto foi criada e outras propriedades. (Os objetos armazenados em seu bucket antes da
habilitação do versionamento têm um ID de versão null [nulo].)
Para listar os objetos sem as versões, escolha a opção List versions (Listar versões) .
Você também pode visualizar, fazer download e excluir versões do objeto no painel de visão geral do
objeto no console. Para obter mais informações, consulte Exibir uma visão geral do objeto no console do
Amazon S3 (p. 157).
Important
Você pode cancelar a exclusão de um objeto somente se ele foi excluído como a versão mais
recente (atual). Não é possível cancelar a exclusão de uma versão anterior de um objeto que
foi excluído. Para obter mais informações, consulte Usando o controle de versão em buckets do
S3 (p. 516).
Os exemplos nesta seção mostram como recuperar uma listagem de objetos de um bucket com
versionamento ativado. Cada solicitação retorna até 1.000 versões, a menos que você especifique um
número menor. Se o bucket contiver mais versões que esse limite, envie uma série de solicitações para
recuperar a lista de todas as versões. Esse processo de retornar resultados em “páginas” é chamado
paginação.
Para mostrar como a paginação funciona, os exemplos limitam cada resposta a duas versões de objeto.
Depois de recuperar a primeira página de resultados, cada exemplo verifica se a lista de versões foi
truncada. Em caso afirmativo, o exemplo continua a recuperar páginas até que todas as versões tenham
sido recuperadas.
Note
Os exemplos a seguir também funcionam com bucket sem versionamento, ou para objetos sem
versões individuais. Nesses casos, o Amazon S3 retorna a listagem de objetos com um ID de
versão null.
Para obter informações sobre o uso de outros AWS SDKs, consulte o Centro do desenvolvedor da AWS.
Java
Para obter instruções sobre criar e testar um exemplo funcional, consulte Testar exemplos de código
Java no Amazon S3 (p. 1042).
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.ListVersionsRequest;
import com.amazonaws.services.s3.model.S3VersionSummary;
import com.amazonaws.services.s3.model.VersionListing;
try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();
}
}
System.out.println(numVersions + " object versions retrieved in " +
numPages + " pages");
} catch (AmazonServiceException e) {
// The call was transmitted successfully, but Amazon S3 couldn't process
// it, so it returned an error response.
e.printStackTrace();
} catch (SdkClientException e) {
// Amazon S3 couldn't be contacted for a response, or the client
// couldn't parse the response from Amazon S3.
e.printStackTrace();
}
}
}
.NET
Para obter informações sobre como criar e testar um exemplo funcional, consulte Executar os
exemplos de código do Amazon S3 .NET (p. 1044).
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class ListObjectsVersioningEnabledBucketTest
{
static string bucketName = "*** bucket name ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 s3Client;
Para listar todas as versões de todos os objetos em um bucket, você usa o sub-recurso versions em
uma solicitação GET Bucket. O Amazon S3 pode recuperar no máximo 1.000 objetos, e cada versão
de objeto conta como um objeto completo. Portanto, se um bucket contiver duas chaves (por exemplo,
photo.gif e picture.jpg) e a primeira chave tiver 990 versões e a segunda chave tiver 400 versões,
uma solicitação única recuperará as 990 versões de photo.gif e apenas as 10 versões mais recentes de
picture.jpg.
O Amazon S3 retorna as versões de objetos na ordem em que foram armazenadas, com as armazenadas
mais recentemente sendo retornadas primeiro.
Para recuperar um subconjunto de versões de objeto, você usa os parâmetros de solicitação para GET
Bucket. Para obter mais informações, consulte GET Bucket.
1. Defina o parâmetro prefix como a chave do objeto que você deseja recuperar.
2. Envie uma solicitação GET Bucket usando o sub-recurso versions e prefix.
Você pode usar os outros parâmetros de solicitação para recuperar um subconjunto de todas as versões
do objeto. Para obter mais informações, consulte GET Bucket na Referência da API do Amazon Simple
Storage Service.
Use o seguinte processo para recuperar os objetos adicionais que satisfazem a solicitação GET Bucket
versions original de um bucket. Para obter mais informações sobre key-marker, version-id-
marker, NextKeyMarker e NextVersionIdMarker, consulte GET Bucket na Referência da API do
Amazon Simple Storage Service.
Para recuperar uma versão específica, você tem que especificar seu ID de versão. A figura a seguir mostra
que a solicitação GET versionId recupera a versão especificada do objeto (não necessariamente a
versão atual).
Você pode recuperar versões de objeto no Amazon S3 usando o console, os AWS SDKs ou a API REST.
Usar o console do S3
Você também pode visualizar, fazer download e excluir versões do objeto no painel de visão geral do
objeto. Para obter mais informações, consulte Exibir uma visão geral do objeto no console do Amazon
S3 (p. 157).
Important
Você pode cancelar a exclusão de um objeto somente se ele foi excluído como a versão mais
recente (atual). Não é possível cancelar a exclusão de uma versão anterior de um objeto que
foi excluído. Para obter mais informações, consulte Usando o controle de versão em buckets do
S3 (p. 516).
Os exemplos para carregar objetos em buckets não versionados e habilitados para versionamento são os
mesmos. No entanto, para buckets habilitados para versionamento, o Amazon S3 atribui um número de
versão. Caso contrário, o número de versão é nulo.
Para obter exemplos de download de objetos usando AWS SDKs para Java, .NET e PHP, consulte
Download de objetos.
Você pode recuperar apenas os metadados de um objeto (não o conteúdo). Para obter mais informações,
consulte the section called “Recuperação de metadados de versão” (p. 533).
Para obter informações sobre como restaurar uma versão de objeto anterior, consulte the section called
“Restaurar versões anteriores” (p. 533).
1. Defina versionId como o ID da versão do objeto cujos metadados você deseja recuperar.
2. Envie uma solicitação HEAD Object versionId.
HTTP/1.1 200 OK
x-amz-id-2: ef8yU9AS1ed4OpIszj7UDNEHGran
x-amz-request-id: 318BC8BC143432E5
x-amz-version-id: 3HL4kqtJlcpXroDTDmjVBH40Nrjfkd
Date: Wed, 28 Oct 2009 22:32:00 GMT
Last-Modified: Sun, 1 Jan 2006 12:00:00 GMT
ETag: "fba9dede5f27731c9771645a39863328"
Content-Length: 434234
Content-Type: text/plain
Connection: close
Server: AmazonS3
O objeto copiado torna-se a versão atual desse objeto e todas as versões são preservadas.
• Exclua permanentemente a versão atual do objeto.
Quando você exclui a versão atual do objeto, torna a versão anterior a versão atual desse objeto.
Como todas as versões do objeto são preservadas, você pode fazer de qualquer versão anterior a versão
atual copiando uma versão específica do objeto para o mesmo bucket. Na figura a seguir, o objeto de
origem (ID = 111111) é copiado para o mesmo bucket. O Amazon S3 fornece um novo ID (88778877) e
ele se torna a versão atual do objeto. Assim, o bucket tem tanto a versão original (111111) quanto a cópia
(88778877) do objeto. Para obter mais informações sobre como obter uma versão anterior e carregá-la
para torná-la a versão atual, consulte Recuperação de versões de objeto de um bucket habilitado para
versionamento e Upload de objetos.
A figura a seguir mostra como excluir a versão atual (121212) de um objeto deixa a versão anterior
(111111) como a atual do objeto. Para obter mais informações sobre como excluir um objeto, consulte
Excluir um único objeto.
• A Expiration ação se aplica à versão atual do objeto. Em vez de excluir a versão atual do objeto, o
Amazon S3 a retém como uma versão desatualizada adicionando um marcador de exclusão, que se
torna a versão atual.
• A ação NoncurrentVersionExpiration aplica-se a versões antigas do objeto, e o Amazon S3
remove permanentemente essas versões do objeto. Você não pode recuperar objetos removidos
permanentemente.
Para obter mais informações, consulte Gerenciando seu ciclo de vida de armazenamento (p. 569).
• Quando o versionamento está habilitado, um DELETE simples não pode excluir permanentemente um
objeto. Em vez disso, o Amazon S3 insere um marcador de exclusão no bucket, que se torna a versão
atual do objeto com um novo ID.
Quando você tenta um GET de um objeto cuja versão atual é um marcador de exclusão, o Amazon S3
se comporta como se o objeto tivesse sido excluído (mesmo que não tenha sido apagado) e retorna um
erro 404. Para obter mais informações, consulte Trabalhar com marcadores de exclusão (p. 536).
A figura a seguir mostra que uma simples solicitação DELETE não remove de fato o objeto especificado.
Em vez disso, o Amazon S3 insere um marcador de exclusão.
• Para excluir objetos com versões permanentemente, você deve usar DELETE Object versionId.
A figura a seguir mostra que excluir uma versão do objeto especificada remove permanentemente esse
objeto.
Usar o console do S3
Quando você exclui permanentemente uma versão de objeto, a ação não pode ser desfeita.
8. Escolha Delete objects (Excluir objetos).
Para ver exemplos de exclusão de objetos usando os AWS SDKs para Java, o .NET e o PHP, consulte
Excluir objetos do Amazon S3 (p. 128). Os exemplos para excluir objetos em buckets não versionados e
habilitados para versionamento são os mesmos. No entanto, para buckets habilitados para versionamento,
o Amazon S3 atribui um número de versão. Caso contrário, o número de versão é nulo.
Para obter informações sobre o uso de outros AWS SDKs, consulte o Centro do desenvolvedor da AWS.
Para obter mais informações sobre como excluir versões de objetos, consulte os seguintes tópicos:
Um marcador de exclusão tem um nome de chave (ou chave) e um ID de versão como qualquer outro
objeto. Contudo, um marcador de exclusão difere de outros objetos nas seguintes maneiras:
Os marcadores de exclusão acumulam uma cobrança nominal para armazenamento no Amazon S3. O
tamanho de armazenamento de um marcador de exclusão é igual ao tamanho do nome da chave do
marcador de exclusão. Um nome de chave é uma sequência de caracteres Unicode. A codificação UTF-8
adiciona de 1 a 4 bytes de armazenamento ao seu bucket para cada caractere no nome.
Para obter mais informações sobre nomes de chave, consulte Criar nomes de chave de objeto (p. 64).
Para obter mais informações sobre exclusão de um marcador de exclusão, consulte Remover marcadores
de exclusão (p. 538).
Somente o Amazon S3 pode criar e excluir um marcador de exclusão, e ele faz isso sempre que você
envia uma solicitação DELETE Object em um objeto em um bucket com versionamento habilitado ou
suspenso. O objeto nomeado na solicitação DELETE não é de fato excluído. Em vez disso, o marcador de
exclusão torna-se a versão atual do objeto. O nome de chave (ou chave) do objeto torna-se a chave do
marcador de exclusão. Se você tentar obter um objeto e sua versão atual for um marcador de exclusão, o
Amazon S3 responderá com:
O cabeçalho de resposta mostra que o objeto acessado era um marcador de exclusão. Este cabeçalho
de resposta nunca retorna false. Se o valor for false, o Amazon S3 não incluirá esse cabeçalho de
resposta na resposta.
A figura a seguir mostra como um GET simples em um objeto, cuja versão atual é um marcador de
exclusão, retorna um erro 404 Nenhum objeto encontrado.
O único modo de listar marcadores de exclusão (e outras versões de um objeto) é usando o versions
sub-recurso em uma solicitação GET Bucket versions. Um GET simples não recupera objetos com
marcadores de exclusão. A figura a seguir mostra que uma solicitação GET Bucket não retorna objetos
cuja versão atual é um marcador de exclusão.
Se você quiser excluir um marcador de exclusão, ele deve ter um ID de versão e você deve especificar
esse ID em uma solicitação DELETE Object versionId. Se você usar uma solicitação DELETE para
excluir um marcador de exclusão (sem especificar o ID da versão do marcador de exclusão), o Amazon S3
não excluirá o marcador de exclusão, mas, em vez disso, inserirá outro marcador de exclusão.
A figura a seguir mostra como um DELETE simples em um marcador de exclusão não remove nada, mas
adiciona um novo marcador de exclusão a um bucket.
Em um bucket com versionamento ativado, esse novo marcador de exclusão deve ter um ID de versão
único. Assim, é possível ter vários marcadores de exclusão do mesmo objeto em um bucket.
Se a versão atual do objeto for a única versão do objeto e também for um marcador de exclusão
(conhecido como marcador de exclusão de objeto expirado, onde todas as versões de objeto são
excluídas e apenas um marcador de exclusão permanece), o Amazon S3 removerá o marcador de
exclusão de objeto expirado quando a política de ciclo de vida for definida para excluir versões atuais, ou o
ExpiredObjectDeleteMarker for explicitamente definido. Você também pode usar a ação de expiração para
instruir o Amazon S3 a remover os marcadores de exclusão do objeto expirado. Para ver um exemplo,
consulte Exemplo 7: Remover marcadores de exclusão de objetos expirados (p. 602).
Para excluir permanentemente um marcador de exclusão, inclua seu respectivo ID de versão em uma
solicitação DELETE Object versionId. A figura a seguir mostra como uma solicitação DELETE
O efeito da remoção do marcador de exclusão é que uma simples solicitação GET não irá recuperar a
versão atual (121212) do objeto.
Usar o console do S3
Use as etapas a seguir para recuperar objetos excluídos que não são pastas do seu bucket do S3,
incluindo objetos que estão dentro dessas pastas.
4. Para cancelar a exclusão de um objeto, você deve excluir o marcador de exclusão. Marque a caixa de
seleção ao lado do delete marker (marcador de exclusão) do objeto a ser recuperado e escolha Delete
(excluir).
5. Confirme a exclusão na página Delete objects (Excluir objetos).
Note
Você não pode usar o console do Amazon S3 para cancelar a exclusão de pastas. Você deve
usar a CLI da AWS ou o SDK. Para ver exemplos, consulte Como faço para recuperar um objeto
do Amazon S3 que foi excluído em um bucket habilitado para versionamento? no Centro de
conhecimento da AWS.
1. Defina versionId como o ID da versão do marcador de exclusão que você deseja remover.
2. Envie uma solicitação DELETE Object versionId.
204 NoContent
x-amz-version-id: versionID
x-amz-delete-marker: true
Para obter mais informações sobre dispositivos de autenticação, consulte Autenticação multifator.
Para obter mais informações sobre ativação de exclusão de MFA, consulte Configurando a exclusão de
MFA (p. 524).
Content-Length: 124
<AccessControlPolicy>
<Owner>
<ID>75cc57f09aa0c8caeab4f8c24e99d10f8e7faeebf76c078efc7c6caea54ba06a</ID>
<DisplayName>[email protected]</DisplayName>
</Owner>
<AccessControlList>
<Grant>
<Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:type="CanonicalUser">
<ID>a9a7b886d6fd24a52fe8ca5bef65f89a64e0193f23000e241bf9b1c61be666e9</ID>
<DisplayName>[email protected]</DisplayName>
</Grantee>
<Permission>FULL_CONTROL</Permission>
</Grant>
</AccessControlList>
</AccessControlPolicy>
Da mesma forma, para obter permissões para uma versão específica do objeto, você deve especificar
seu ID de versão em uma solicitação GET Object versionId acl. Você precisa incluir o ID da versão
porque, por padrão, o GET Object acl retorna as permissões da versão atual do objeto.
Para obter mais informações, consulte GetObjectAcl na Referência da API do Amazon Simple Storage
Service.
Quando você suspende o versionamento, os objetos existentes em seu bucket não são alterados. O que
muda é como o Amazon S3 trata os objetos em solicitações futuras. Os tópicos nesta seção explicam
várias operações de objeto em um bucket suspenso de versão, incluindo adição, recuperação e exclusão
de objetos.
Tópicos
• Adicionar objetos a buckets com versionamento suspenso (p. 541)
• Recuperar objetos de buckets com versionamento suspenso (p. 542)
• Excluir objetos de buckets com versionamento suspenso (p. 543)
A figura a seguir mostra como o Amazon S3 adiciona um ID de versão null a cada objeto quando ele é
adicionado a um bucket com versionamento suspenso.
Se um versão nula já existir no bucket e você adicionar outro objeto com a mesma chave, o objeto
adicionado substituirá a versão original nula.
Se existirem objetos com versões no bucket, a versão que você usa no PUT torna-se a versão atual do
objeto. A figura a seguir mostra como a adição de um objeto a um bucket que contém objetos com versões
não substitui o objeto já existente no bucket.
Neste caso, a versão 111111 já estava no bucket. O Amazon S3 anexa o ID de versão nula ao objeto que
está sendo adicionado e armazena o objeto no bucket. A versão 111111 não é substituída.
Se uma versão nula já existir em um bucket, a versão nula será substituída, como mostrado na figura a
seguir.
Embora a chave e o ID (null) da versão nula sejam iguais antes e após o PUT, o conteúdo da versão nula
originalmente armazenada no bucket é substituído pelo conteúdo do objeto PUT no bucket.
A figura a seguir mostra como um simples DELETE remove uma versão nula. O Amazon S3 insere um
marcador de exclusão em seu lugar com um ID de versão do null.
Lembre-se de que um marcador de exclusão não tem conteúdo, de modo que você perde o conteúdo da
versão nula quando um marcador de exclusão a substitui.
A figura a seguir mostra um bucket que não tem uma versão nula. Nesse caso, o DELETE não remove
nada; o Amazon S3 apenas insere o marcador de exclusão.
• Para objetos nos níveis Archive Access e Deep Archive Access, você deve iniciar a solicitação de
restauração e aguardar até que o objeto seja movido para o nível Frequent Access.
• Para objetos nas classes de armazenamento S3 Glacier e S3 Glacier Deep Archive, você deve iniciar a
solicitação de restauração e aguardar até que uma cópia temporária do objeto esteja disponível.
Para obter mais informações sobre como todas as classes de armazenamento do Amazon S3 se
comparam, consulte Uso de classes de armazenamento do Amazon S3 (p. 563).
Quando você usa o S3 Glacier ou o S3 Glacier Deep Archive, o Amazon S3 restaura uma cópia temporária
do objeto somente durante a duração especificada. Depois disso, ele exclui a cópia restaurada do objeto.
Você pode modificar o período de expiração de uma cópia restaurada reeditando uma restauração. Nesse
caso, o Amazon S3 atualiza o período de expiração relativo à hora atual.
Note
Ao restaurar um arquivo do S3 Glacier ou S3 Glacier Deep Archive, , você paga tanto pelo arquivo
como pela cópia restaurada temporariamente (Reduced Redundancy Storage (RRS) ou Standard,
qual tiver o armazenamento de custo mais baixo na região). Para obter mais informações sobre
definição de preços, consulte Definição de preços do Amazon S3.
O Amazon S3 calcula o tempo de expiração da cópia do objeto restaurado adicionando o número de dias
especificado na solicitação de restauração à hora atual. Depois, ele arredonda a hora resultante para o
próximo dia à meia-noite do Tempo Universal Coordenado (UTC). Por exemplo, suponha que um objeto
seja criado em 15 de outubro de 2012, às 10h30 UTC e o período de restauração tenha sido especificado
como três dias. Nesse caso, a cópia restaurada expira em 19 de outubro de 2012, à 00h00 UTC, hora em
que o Amazon S3 vai excluir a cópia do objeto.
Se uma cópia temporária do objeto restaurado for criada, a classe de armazenamento do objeto
permanecerá a mesma. (Uma solicitação de operações da API HEAD Object ou GetObject retornará S3
Glacier ou S3 Glacier Deep Archive como a classe de armazenamento.)
Você pode ser notificado quando sua restauração for concluída usando as notificações de eventos do
Amazon S3. Para obter mais informações, consulte Notificações de eventos do Amazon S3 (p. 869).
Quando necessário, é possível restaurar grandes segmentos dos dados armazenados para uma cópia
secundária. No entanto, lembre-se de que as classes de armazenamento S3 Glacier e S3 Glacier Deep
Archive e os níveis Archive Access e Deep Archive Access foram projetados para 35 solicitações de
restauração aleatórias por pebibyte (PiB) armazenadas por dia.
Para restaurar mais de um objeto do Amazon S3 com uma única solicitação, é possível usar operações
em lote do S3. Você fornece às operações em lote do S3 uma lista de objetos nos quais operar. O S3
Batch Operations chama a respectiva API para executar a operação especificada. Um único trabalho de
operações em lote pode realizar a operação especificada em bilhões de objetos contendo exabytes de
dados.
Tópicos
• Opções de recuperação de arquivamento (p. 545)
• Restaurar um objeto arquivado (p. 547)
• Consultar objetos arquivados (p. 551)
• Standard: permite acessar qualquer um dos objetos arquivados em algumas horas. Esta é a
opção padrão para solicitações de recuperação que não especificam a opção de recuperação. As
recuperações padrão geralmente terminam dentro de 3 a 5 horas para objetos armazenados na classe
de armazenamento S3 Glacier ou no nível S3 Intelligent-Tiering Archive Access. Normalmente, eles
terminam dentro de 12 horas para objetos armazenados na classe de armazenamento S3 Glacier Deep
Archive ou S3 Intelligent-Tiering Deep Archive Access. As recuperações padrão são gratuitas para
objetos armazenados no S3 Intelligent-Tiering.
• Bulk: as recuperações em massa são a opção de recuperação de menor custo do Amazon S3 Glacier,
permitindo recuperar grandes quantidades de dados, até mesmo petabytes, com um custo baixo. As
recuperações em massa geralmente terminam dentro de 5 a 12 horas para objetos armazenados na
classe de armazenamento S3 Glacier ou no nível S3 Intelligent-Tiering Archive Access. Normalmente,
eles terminam dentro de 48 horas para objetos armazenados na classe de armazenamento S3 Glacier
Deep Archive ou no nível S3 Intelligent-Tiering Deep Archive Access. As recuperações em massa são
gratuitas para objetos armazenados no S3 Intelligent-Tiering.
A tabela a seguir resume as opções de recuperação de arquivos. Para obter informações completas sobre
a definição de preço, consulte Definição de preço do Amazon S3.
Para fazer uma recuperação Expedited, Standard ou Bulk, defina o elemento de solicitação Tier na
solicitação da API REST Restauração do objeto POST para a opção que você deseja, ou o equivalente
na CLI da AWS ou nos AWS SDKs. Se você adquiriu a capacidade provisionada, todas as recuperações
expressas serão automaticamente fornecidas por meio de sua capacidade provisionada.
É possível restaurar um objeto arquivado de forma programática ou usando o console do Amazon S3. O
Amazon S3 só processa uma solicitação de restauração por vez por objeto. é possível usar o console e a
API do Amazon S3 para verificar o status de restauração e descobrir quando o Amazon S3 excluirá a cópia
restaurada.
Para obter mais informações, consulte Restaurar um objeto arquivado (p. 547).
Capacidade provisionada
A capacidade provisionada ajuda a garantir que sua capacidade de recuperação para recuperações
expressas esteja disponível quando você precisar dela. Cada unidade de capacidade garante que pelo
menos três recuperações expressas possam ser realizadas a cada cinco minutos e fornece até 150 MB/s
de taxa de transferência de recuperação.
Se sua carga de trabalho exigir acesso altamente confiável e previsível a um subconjunto de seus dados
em minutos, será necessário adquirir a capacidade de recuperação provisionada. Sem capacidade
provisionada, as recuperações expressas podem não ser aceitas durante períodos de alta demanda.
Se precisar de acesso a recuperações expressas em qualquer circunstâncias, recomendamos que você
compre a capacidade de recuperação provisionada.
É possível comprar a capacidade provisionada usando o console do Amazon S3, o console do Amazon
S3 Glacier, a API REST Comprar capacidade provisionada, os AWS SDKs ou a CLI da AWS. Para obter
informações sobre a definição de preços da capacidade provisionada, consulte Definição de preço do
Amazon S3.
Para atualizar a velocidade de uma restauração em andamento, faça outra solicitação de restauração para
o mesmo objeto definindo um novo elemento de solicitação Tier na API REST Restauração do objeto
POST ou o equivalente na CLI da AWS ou nos AWS SDKs. Ao emitir uma solicitação para atualizar o nível
de restauração, você deve escolher um nível mais rápido do que o nível de restauração do andamento.
Você não deve alterar outros parâmetros, como o elemento de solicitação Days.
Note
Você pode ser notificado quando sua restauração for concluída usando as notificações de eventos do
Amazon S3. Para obter mais informações, consulte Notificações de eventos do Amazon S3 (p. 869).
As restaurações são cobradas pelo preço do nível atualizado. Para obter informações sobre preços de
restauração, consulte Preços do Amazon S3
Objetos restaurados do S3 Glacier ou S3 Glacier Deep Archive são armazenados apenas pelo número
de dias que você especificar. Para obter uma cópia permanente do objeto, crie uma cópia dele no bucket
do Amazon S3. A menos que você faça uma cópia, o objeto ainda será armazenado nas classes de
armazenamento do S3 Glacier ou S3 Glacier Deep Archive.
Para calcular a data de expiração, o Amazon S3 adiciona o número de dias que você especifica à hora
em que você solicita a restauração do objeto e, em seguida, arredonda para o dia seguinte à meia-noite
UTC. Este cálculo se aplica à restauração inicial do objeto e a qualquer extensão na disponibilidade que
você solicitar. Por exemplo, se um objeto foi restaurado em 15 de outubro de 2012 às 10h30 UTC e você
especificou o número de dias como 3, o objeto estará disponível até 19 de outubro de 2012 às 00h00
UTC. Se em 16 de outubro de 2012 às 11h UTC você alterar o número de dias que deseja que ele esteja
acessível para 1, o Amazon S3 manterá o objeto restaurado disponível até 18 de outubro de 2012 às
00h00 UTC.
Ao restaurar um objeto arquivado, você está pagando pelo arquivo e por uma cópia restaurada
temporariamente. Para obter mais informações sobre definição de preços, consulte Definição de preços do
Amazon S3.
Você pode restaurar um objeto arquivado usando o console do Amazon S3, a API REST, AWS SDKs e a
Interface de Linhas de Comando da AWS (AWS CLI).
Usar o console do S3
Use as etapas a seguir para restaurar um objeto que foi arquivado nas classes de armazenamento
S3 Glacier ou S3 Glacier Deep Archive, para verificar o status e fazer upgrade de uma restauração
em andamento. (O console usa os nomes Glacier e Glacier Deep Archive para essas classes de
armazenamento.)
4. Se você estiver restaurando a partir do S3 Glacier ou S3 Glacier Deep Archive, insira o número
de dias em que deseja que seus dados arquivados sejam acessíveis na caixa de diálogo Iniciar
restauração .
5. Em Opções de recuperação, siga um destes procedimentos:
Se você tiver a capacidade provisionada, todas as recuperações expressas serão atendidas pela
capacidade provisionada. Para obter mais informações, consulte Capacidade provisionada (p. 546).
• Se você não tiver a capacidade provisionada e não desejar comprá-la, escolha Restore (Restaurar).
• Se você não tiver a capacidade provisionada, mas quiser comprá-la, escolha Add capacity unit
(Adicionar unidade de capacidade) e, em seguida, escolha Buy (Comprar). Quando receber a
mensagem Purchase succeeded (Compra bem-sucedida), escolha Restore (Restaurar) para iniciar
a recuperação provisionada.
Para obter informações sobre como fazer upgrade para um nível de restauração mais rápido, consulte
Atualizar a velocidade de uma restauração em andamento (p. 546).
Note
Você pode verificar o andamento da restauração na página Object overview (Visão geral do objeto). Para
obter mais informações, consulte Exibir uma visão geral do objeto no console do Amazon S3 (p. 157). Esta
página mostrará que a restauração está In progress (Em andamento).
Se você estiver restaurando a partir do S3 Glacier ou S3 Glacier Deep Archive, a cópia temporária da visão
geral do Objeto mostra a data de expiração da Restauração. O Amazon S3 removerá a cópia restaurada
do arquivamento nessa data.
Objetos restaurados do S3 Glacier ou S3 Glacier Deep Archive são armazenados apenas pelo número de
dias que você especificar. Para obter uma cópia permanente do objeto, crie uma cópia dele no bucket do
Amazon S3.
Depois de restaurar um objeto, você pode baixá-lo na página Overview (Visão geral). Para obter mais
informações, consulte Exibir uma visão geral do objeto no console do Amazon S3 (p. 157).
Java
O exemplo a seguir restaura uma cópia de um objeto que foi arquivado usando o AWS SDK para
Java. O exemplo inicia uma solicitação de restauração para o objeto arquivado especificado e verifica
seu status de restauração.
Para obter instruções sobre criar e testar um exemplo funcional, consulte Testar exemplos de código
Java no Amazon S3 (p. 1042).
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.ObjectMetadata;
import com.amazonaws.services.s3.model.RestoreObjectRequest;
import java.io.IOException;
try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();
// Create and submit a request to restore an object from Glacier for two
days.
RestoreObjectRequest requestRestore = new RestoreObjectRequest(bucketName,
keyName, 2);
s3Client.restoreObjectV2(requestRestore);
.NET
O exemplo de C# a seguir inicia uma solicitação para restaurar um objeto arquivado por 2 dias. O
Amazon S3 mantém o status de restauração nos metadados do objeto. Após iniciar a solicitação, o
exemplo recupera os metadados do objeto e verifica o valor da propriedade RestoreInProgress.
Para obter instruções sobre criar e testar um exemplo funcional, consulte Executar os exemplos de
código do Amazon S3 .NET (p. 1044).
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class RestoreArchivedObjectTest
{
private const string bucketName = "*** bucket name ***";
private const string objectKey = "** archived object key name ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 client;
Key = objectKey
};
GetObjectMetadataResponse response = await
client.GetObjectMetadataAsync(metadataRequest);
Console.WriteLine("restoration status: {0}", response.RestoreInProgress ?
"in-progress" : "finished or failed");
}
}
}
O Amazon S3 fornece uma API para que você inicie uma restauração de arquivos. Para obter mais
informações, consulte RestoreObject na Referência da API do Amazon Simple Storage Service.
Se a sintaxe JSON usada no exemplo resultar em um erro em um cliente Windows, substitua a solicitação
de restauração pela seguinte sintaxe:
--restore-request Days=25,GlacierJobParameters={"Tier"="Standard"}
Você pode usar o seguinte comando para monitorar o status de sua solicitação restore-object:
Para obter mais informações, consulte restore-object na Referência de comandos da CLI da AWS.
Ao executar consultas de seleção, o S3 Glacier oferece três níveis de acesso aos dados: expresso,
padrão e em massa. Todos esses níveis fornecem diferentes tempos de acesso a dados e custos, e
você pode escolher qualquer um deles dependendo da rapidez com que deseja que seus dados sejam
disponibilizados. Para obter mais informações, consulte Níveis de acesso aos dados (p. 554).
É possível usar o tipo selecionado de restauração com os AWS SDKs, a API REST do S3 Glacier e a
Interface de linha de comando da AWS (CLI da AWS).
Tópicos
• Requisitos e limites ao usar select (p. 552)
• Consulta de dados usando select (p. 552)
• Os objetos de arquivo consultados pela seleção devem ser formatados como valores separados por
vírgulas (CSV) descompactados.
• Você precisa de um bucket do S3 para saída. A conta da AWS usada para iniciar um trabalho de
seleção do S3 Glacier deve ter permissões para gravação no bucket do S3. O bucket deve estar na
mesma região da AWS que o bucket que contém o objeto arquivado que está sendo consultado.
• A conta da AWS solicitante deve ter permissões para realizar as ações s3:RestoreObject e
s3:GetObject. Para obter mais informações sobre essas permissões, consulte Exemplo: operações
de sub-recursos de bucket (p. 274).
• O arquivo não deve usar criptografia no lado do servidor com chaves fornecidas pelo cliente (SSE-C) ou
criptografia no lado do cliente.
• Não há limite para o número de registros que a seleção pode processar. Um registro de entrada ou
de saída não deve exceder 1 MB. Caso contrário, a consulta reporta uma falha. Existe um limite de
1.048.576 colunas por registro.
• Não há limite para o tamanho do resultado final. No entanto, os resultados são divididos em várias
partes.
• Uma expressão SQL limita-se a 128 KB.
Para consultar os dados do S3 Glacier, crie uma solicitação de seleção usando a operação Restauração
do objeto POST. Ao iniciar uma solicitação de seleção, insira a expressão SQL, o arquivo a ser consultado
e o local em que serão armazenados os resultados.
O S3 Glacier Select é compatível com um subconjunto da linguagem SQL ANSI. Ele é compatível com
os filtros comuns de cláusulas SQL, como SELECT, FROM e WHERE. Não oferece suporte a SUM, COUNT,
GROUP BY, JOINS, DISTINCT, UNION, ORDER BY e LIMIT. Para obter mais informações sobre suporte
para SQL, consulte Referência SQL para Amazon S3 Select e S3 Glacier Select. (p. 714).
Saída de seleção
Ao iniciar uma solicitação de seleção, defina um local de saída para os resultados de consulta da seleção.
Esse local deve ser um bucket do S3; na mesma região da AWS que o bucket que contém o objeto
arquivado que está sendo consultado. A conta da AWS que inicia o trabalho deve ter permissões para
gravação no bucket.
Você pode especificar a classe de armazenamento e a criptografia do Amazon S3 nos objetos de saída
armazenados nele. O Select é compatível com a criptografia do AWS Key Management Service (SSE-
KMS) e do Amazon S3 (SSE-S3). Ela não oferece suporte às criptografias SSE-C e no lado do cliente.
Para obter mais informações sobre classes de armazenamento e criptografias do Amazon S3, consulte
Uso de classes de armazenamento do Amazon S3 (p. 563) e Proteção de dados usando criptografia no
lado do servidor (p. 195).
Os resultados do S3 Glacier Select são armazenados no bucket do S3 usando o prefixo fornecido no local
de saída especificado em Restauração do objeto POST. A partir dessas informações, a seleção cria um
prefixo exclusivo em referência ao ID do trabalho. (Os prefixos são usados para agrupar os objetos do
Amazon S3 iniciando os nomes de objeto com uma string comum.) Nesse prefixo exclusivo, há dois novos
prefixos criados, results para resultados e errors para logs e erros. Quando o trabalho é concluído, um
manifesto de resultado é gravado que contém a localização de todos os resultados.
Há também um arquivo de espaço reservado chamado job.txt gravado no local de saída. Esse arquivo
é gravado, mas nunca é atualizado. O arquivo de espaço reservado é usado para:
• A validação da permissão para gravação e a maioria dos erros de sintaxe SQL de maneira síncrona.
• Fornecer uma saída estática sobre a solicitação de seleção que você pode facilmente referenciar
sempre que quiser.
Vamos supor, por exemplo, que você inicie uma solicitação de seleção com o local de saída dos resultados
especificado como s3://example-bucket/my-prefix e a resposta do trabalho retorne o ID do
trabalho como examplekne1209ualkdjh812elkassdu9012e. Após a conclusão do trabalho de
seleção, é possível visualizar os seguintes objetos do Amazon S3 no bucket:
s3://example-bucket/my-prefix/examplekne1209ualkdjh812elkassdu9012e/job.txt
s3://example-bucket/my-prefix/examplekne1209ualkdjh812elkassdu9012e/results/abc
s3://example-bucket/my-prefix/examplekne1209ualkdjh812elkassdu9012e/results/def
s3://example-bucket/my-prefix/examplekne1209ualkdjh812elkassdu9012e/results/ghi
s3://example-bucket/my-prefix/examplekne1209ualkdjh812elkassdu9012e/result_manifest.txt
Os resultados da consulta de seleção são divididos em várias partes. No exemplo, a seleção usa o prefixo
especificado ao definir o local de saída e acrescenta o ID do trabalho e o prefixo results. Em seguida,
ela grava os resultados em três partes, com abc, def e ghi no final dos nomes de objeto. O manifesto de
resultados contém os três arquivos para permitir a recuperação de maneira programática. Se o trabalho
reportar falha com qualquer tipo de erro, um arquivo ficará visível com o prefixo de erro e um arquivo
error_manifest.txt será gerado.
O tamanho de um nome de objeto do Amazon S3 também conhecido como chave, não pode
ter mais do que 1.024 bytes. O S3 Glacier Select reserva 128 bytes para prefixos. Além disso,
o tamanho do caminho do local do Amazon S3 não pode ser maior do que 512 bytes. Uma
solicitação superior a 512 bytes retornará uma exceção, e a solicitação não será aceita.
Tratamento de erros
A seleção envia notificações de dois tipos de erros. O primeiro conjunto de erros é enviado de maneira
síncrona quando você envia a consulta em Restauração do objeto POST. Esses erros são enviados
como parte da resposta HTTP. Outro conjunto de erros pode ocorrer após a consulta ter sido aceita,
mas eles ocorrem durante a execução da consulta. Nesse caso, os erros são gravados no local de saída
especificado com o prefixo errors.
A Select interrompe a execução da consulta após a detecção de um erro. Para executar a consulta com
êxito, é necessário resolver todos os erros. Verifique os logs para identificar quais registros causaram a
falha.
Como as consultas são executadas paralelamente em vários nós de computação, os erros obtidos não
estão em ordem sequencial. Por exemplo, se a consulta falhar com um erro na linha 6.234, isso não
significa que todas as linhas anteriores a ela foram processadas com êxito. A próxima execução da
consulta pode mostrar um erro em outra linha.
• Expedited permite que você acesse rapidamente os dados quando um subconjunto de arquivos for
solicitado com urgência. Exceto para os arquivos maiores (mais de 250 MB), os dados acessados
usando recuperações Expedited costumam ser disponibilizados dentro de 1 a 5 minutos. Existem dois
tipos de acesso de dados Expedited: sob demanda e provisionado. As solicitações sob demandas
são semelhantes às instâncias sob demanda do EC2 e estão disponíveis na maior parte do tempo. As
solicitações provisionadas estarão disponíveis garantidamente quando você precisar delas. Para obter
mais informações, consulte Capacidade provisionada (p. 554).
• Standard: permite acessar qualquer um dos objetos arquivados em algumas horas. As recuperações
Standard normalmente são concluídas dentro de 3 a 5 horas. Esse é o nível padrão.
• Bulk: a opção de acesso aos dados de menor custo do S3 Glacier, permitindo recuperar grandes
quantidades de dados, até mesmo petabytes, em um dia. O acesso Bulk em geral termina em 5 a 12
horas.
Para fazer uma solicitação Expedited, Standard ou Bulk, defina o elemento de solicitação Tier na
solicitação da API REST de Restauração do objeto POST para a opção que você deseja, ou o equivalente
na CLI da AWS ou nos AWS SDKs. Para acesso Expedited, não há necessidade de definir se a
recuperação expressa é sob demanda ou provisionada. Se você adquiriu a capacidade provisionada,
todas as recuperações Expedited serão automaticamente fornecidas por meio de sua capacidade
provisionada. Para obter informações sobre a definição de preço por nível, consulte Definição de preços do
S3 Glacier.
Capacidade provisionada
A capacidade provisionada ajuda a garantir que sua capacidade de recuperação para recuperações
expressas esteja disponível quando você precisar dela. Cada unidade de capacidade garante que pelo
menos três recuperações expressas possam ser realizadas a cada cinco minutos e fornece até 150 MB/
s de taxa de transferência de recuperação. Para obter mais informações, consulte the section called
“Capacidade provisionada” (p. 546).
O bloqueio de objetos do S3 foi avaliado pela Cohasset Associates para uso em ambientes sujeitos aos
regulamentos SEC 17a-4, CFTC e FINRA. Para obter mais informações sobre como o bloqueio de objetos
está relacionado a essas regulamentações, consulte o Cohasset Associates Compliance Assessment.
O bloqueio de objetos fornece duas maneiras de gerenciar a retenção de objetos: períodos de retenção e
retenções legais.
• Período de retenção: especifica um período fixo durante o qual um objeto permanece bloqueado.
Durante esse período, o objeto será protegido por WORM e não poderá ser substituído nem excluído.
Para obter mais informações, consulte Períodos de retenção (p. 557)
• Retenção legal: oferece a mesma proteção de um período de retenção, mas sem data de expiração. Em
vez disso, uma retenção legal permanecerá em vigor até você removê-la explicitamente. As retenções
legais independem dos períodos de retenção. Para obter mais informações, consulte Retenções
legais (p. 557).
Uma versão do objeto pode ter um período de retenção e uma retenção legal, um, mas não o outro
ou nenhum dos dois. Para obter mais informações, consulte Como o bloquei de objetos do S3
funciona (p. 555).
Se você colocar um objeto em um bucket que tenha o mesmo nome da chave de um objeto existente
protegido, o Amazon S3 criará uma nova versão desse objeto, armazenará ela no bucket conforme
solicitado e relatará a solicitação como concluída com êxito. A versão protegida existente do objeto
permanece bloqueada de acordo com a configuração da retenção.
Para obter informações sobre como configurar e gerenciar o bloqueio de objetos do S3, consulte as
seguintes seções:
Tópicos
• Como o bloquei de objetos do S3 funciona (p. 555)
• Configurar o bloqueio de objetos do S3 usando o console (p. 559)
• Gerenciar o bloqueio de objetos (p. 560)
Para obter informações sobre como gerenciar o status de bloqueio de objetos do Amazon S3, consulte the
section called “Gerenciar o bloqueio de objetos ” (p. 560).
Note
Os buckets do S3 com bloqueio de objeto do S3 não podem ser usados como buckets de destino
para logs de acesso ao servidor. Para obter mais informações, consulte the section called
“Registrando acesso ao servidor” (p. 833).
Tópicos
• Modos de retenção (p. 556)
• Períodos de retenção (p. 557)
• Retenções legais (p. 557)
• Configuração do bucket (p. 558)
• Permissões obrigatórias (p. 559)
Modos de retenção
O bloqueio de objetos do S3 fornece dois modos de retenção:
• Modo de governança
• Modo de conformidade
Esses modos de retenção aplicam níveis diferentes de proteção aos objetos. Aplique um dos modos de
retenção a qualquer versão de objeto protegida pelo bloqueio de objetos.
No modo de governança, os usuários não podem substituir nem excluir uma versão do objeto ou alterar as
configurações de bloqueio, a menos que tenham permissões especiais. Com o modo de governança, você
protege objetos contra a exclusão da maioria dos usuários, mas ainda pode conceder a alguns usuários
permissão para alterar as configurações de retenção ou excluir o objeto, caso necessário. Também é
possível usar o modo de governança para testar as configurações do período de retenção antes de criar
um período de retenção do modo de conformidade.
Para substituir ou remover as configurações de retenção do modo de governança, um usuário deve ter a
permissão s3:BypassGovernanceRetention e incluir explicitamente x-amz-bypass-governance-
retention:true como um cabeçalho de solicitação com qualquer solicitação que exija a substituição do
modo de governança.
Note
No modo de conformidade, uma versão do objeto protegida não pode ser substituída nem excluída por
qualquer usuário, inclusive o usuário raiz na conta da AWS. Quando um objeto estiver bloqueado no modo
de conformidade, o modo de retenção não poderá ser alterado nem o período de retenção poderá ser
encurtado. O modo de conformidade ajuda a garantir que uma versão do objeto não possa ser substituída
nem excluída durante o período de retenção.
Note
A atualização dos metadados de uma versão do objeto, ocorrida quando você faz ou altera um
bloqueio de objeto, não substitui a versão do objeto nem redefine o timestamp Last-Modified.
Períodos de retenção
Um período de retenção protege uma versão do objeto por um período fixo. Quando você coloca um
período de retenção em uma versão do objeto, o Amazon S3 armazena um timestamp nos metadados
da versão do objeto para indicar quando o período de retenção expira. Depois que o período de retenção
expirar, a versão do objeto não poderá ser substituída nem excluída, a menos que você tenha feito uma
retenção legal na versão do objeto.
É possível colocar um período de retenção em uma versão do objeto explicitamente ou por meio de uma
configuração padrão do bucket. Ao aplicar um período de retenção a uma versão de objeto explicitamente,
especifique a opção de Retain Until Date (Reter até uma determinada data) para a versão do objeto.
O Amazon S3 armazena a configuração Retain Until Date nos metadados da versão do objeto e
protege a versão do objeto até que o período de retenção expire.
Ao usar as configurações padrão do bucket, você não especifica uma Retain Until Date. Em vez
disso, especifique uma duração, em dias ou anos, pela qual a versão do objeto colocada no bucket deve
ser protegida. Quando você coloca um objeto no bucket, o Amazon S3 calcula uma Retain Until
Date para a versão do objeto adicionando a duração especificada ao timestamp da criação da versão do
objeto. Ele armazena a Retain Until Date nos metadados da versão do objeto. A versão do objeto
acaba sendo protegida exatamente, ainda que você tenha colocado explicitamente um bloqueio com esse
período de retenção na versão do objeto.
Note
Caso a solicitação para colocar uma versão do objeto em um bucket contenha um modo de
retenção explícito e um período, essas configurações substituem todas as padrão do bucket
dessa versão do objeto.
Assim como acontece com todas as outras configurações de bloqueio de objetos, os períodos de retenção
se aplicam a versões de objetos individuais. As versões diferentes de um único objeto podem ter modos e
períodos de retenção diferentes.
Por exemplo, suponha que você tenha um objeto de 15 dias em um período de retenção de 30 dias e você
PUT um objeto no Amazon S3 com o mesmo nome e um período de retenção de 60 dias. Nesse caso, o
PUT será bem-sucedido, e o Amazon S3 criará uma nova versão do objeto com um período de retenção de
60 dias. A versão anterior mantém o período de retenção original e se torna excluível em 15 dias.
Prolongue um período de retenção depois que você tiver aplicado uma configuração de retenção a uma
versão do objeto. Para fazer isso, envie uma nova solicitação de bloqueio para a versão do objeto com
uma Retain Until Date que seja posterior à configurada atualmente para a versão do objeto. O
Amazon S3 substitui o período de retenção existente pelo novo período mais longo. Qualquer usuário com
permissões para colocar um período de retenção do objeto pode prolongar um período de retenção para
uma versão do objeto bloqueada em qualquer modo.
Retenções legais
Com o bloqueio de objetos, você também pode colocar uma retenção legal em uma versão de objeto.
Assim como um período de retenção, uma retenção legal evita que uma versão do objeto seja substituída
ou excluída. Porém, uma retenção legal não tem um período de retenção associado e permanecerá em
vigor até ser removida. As retenções legais podem ser feitas e removidas livremente por qualquer usuário
com a permissão s3:PutObjectLegalHold. Para obter uma lista completa das permissões do Amazon
S3, consulte Ações, recursos e chaves de condição do Amazon S3 (p. 288).
As retenções legais independem dos períodos de retenção. Desde que o bucket que contém o objeto
tenha o bloqueio de objetos habilitado, é possível colocar e remover retenções legais, independentemente
da versão do objeto especificado ter ou não um período de retenção definido. Fazer uma retenção legal em
uma versão do objeto não afeta o modo de retenção ou o período de retenção dessa versão do objeto.
Por exemplo, suponha que você coloque uma retenção legal em uma versão do objeto enquanto essa
versão também está protegida por um período de retenção. Se o período de retenção expirar, o objeto não
perderá a proteção WORM. Em vez disso, a retenção legal continuará protegendo o objeto até um usuário
autorizado removê-la explicitamente. Da mesma maneira, se você remover uma retenção legal enquanto
uma versão do objeto tiver um período de retenção em vigor, a versão do objeto continuará protegida até o
período de retenção expirar.
Para usar o bloqueio de objetos, habilite-o para um bucket. Também é possível configurar um modo e
um período de retenção padrão que se aplicam a novos objetos colocados no bucket. Para obter mais
informações, consulte Configurar o bloqueio de objetos do S3 usando o console (p. 559).
Configuração do bucket
Para usar o bloqueio de objetos, habilite-o para um bucket. Também é possível configurar um modo e um
período de retenção padrão que se aplicam a novos objetos colocados no bucket.
• Só é possível habilitar o bloqueio de objetos para novos buckets. Para habilitar o bloqueio de
objetos para um bucket existente, entre em contato com o AWS Support.
• Ao criar um bucket com o bloqueio de objetos habilitado, o Amazon S3 habilita
automaticamente o versionamento para o bucket.
• Se você criar um bucket com o bloqueio de objetos habilitado, não poderá desabilitá-lo nem
suspender o versionamento para o bucket.
Para obter informações sobre como ativar o Object Lock no console, consulte Configurar o bloqueio de
objetos do S3 usando o console (p. 559).
Para impor o modo de retenção padrão do bucket e o período para todas as novas versões de
objetos colocados em um bucket, defina os padrões do bucket e negue permissão aos usuários
para configurarem as configurações de retenção de objetos. O Amazon S3 aplica o modo e o
período de retenção padrão a novas versões de objeto colocados no bucket e rejeita qualquer
solicitação para colocar um objeto que inclua um modo de retenção e configuração.
Um período de retenção padrão é descrito não como um time stamp, mas como um período em dias ou
em anos. Quando você coloca uma versão do objeto em um bucket com um período de retenção padrão,
o bloqueio de objetos calcula uma retenção até uma determinada data. Ele faz isso adicionando o período
de retenção padrão ao timestamp de criação da versão do objeto. O Amazon S3 armazena o timestamp
resultante como a opção de Retain Until Date, como se você mesmo tivesse calculado o timestamp
manualmente e colocado-o na versão do objeto.
Os bloqueios de objeto se aplicam apenas a versões de objeto individuais. Caso você coloque um
objeto em um bucket que tenha um período de retenção padrão e não especifique explicitamente
um período de retenção para esse objeto, o Amazon S3 criará o objeto com um período de
retenção correspondente ao padrão do bucket. Depois que o objeto for criado, o período de
retenção será independente do período de retenção padrão do bucket. A alteração do período de
retenção padrão de um bucket não altera o período de retenção existente para nenhum objeto
nesse bucket.
Note
Permissões obrigatórias
As operações do bloqueio de objetos exigem permissões específicas. Para obter mais informações sobre
as permissões necessárias, consulte Exemplo: operações de objeto (p. 273). Para obter informações sobre
como usar condições com permissões, consulte Exemplos de chave de condição do Amazon S3 (p. 278).
Antes de bloquear qualquer objeto, você precisa habilitar um bucket para usar o bloqueio de objetos do
S3. Você habilita o bloqueio de objetos ao criar um bucket. Depois de habilitar um bloqueio de objeto do
em um bucket, você poderá bloquear objetos nesse bucket. Assim que criar um bucket com bloqueio de
objetos habilitado, você não poderá desabilitá-lo nem suspender o versionamento para o bucket.
Para obter informações sobre como criar um bucket com o S3 Object Lock habilitado, consulte Criação de
um bucket (p. 31).
A Object overview (Visão geral do objeto) será exibida, mostrando as propriedades do objeto.
4. Em Object Lock legal hold (Retenção legal do Object Lock), escolha Edit (Editar).
5. Em Legal hold (Retenção legal), escolha Enable (Habilitar) ou Disable (Desabilitar).
6. Selecione Save changes.
1. Na lista Objects (Objetos), escolha o nome do objeto para o qual você deseja editar as configurações
de retenção do Object Lock.
A Object overview (Visão geral do objeto) será exibida, mostrando as propriedades do objeto.
2. Em Object Lock retention (Retenção do Object Lock), escolha Edit (Editar).
3. Em Retention (Retenção), escolha Enable (Habilitar) ou Disable (Desabilitar).
4. Em Retention mode (Modo de retenção), escolha Governance mode (Modo de governança) ou
Compliance mode (Modo de conformidade).
5. Na caixa Retain until date (Reter até a data), insira a data em que o objeto não estará mais protegido
pelo modo de retenção escolhido.
6. Selecione Save changes.
Para obter mais informações sobre as configurações de retenção e retenção legal, consulte Como o
bloquei de objetos do S3 funciona (p. 555).
Para obter informações sobre como gerenciar o bloqueio de objetos usando a AWS CLI, os AWS SDKs e
as APIs REST do Amazon S3, consulte (p. 560).
Tópicos
• Visualizar as informações de bloqueio de um objeto (p. 560)
• Ignorar modo de governança (p. 561)
• Configurar eventos e notificações (p. 561)
• Definir limites de retenção (p. 561)
• Gerenciar marcadores de exclusão e ciclos de vida de objetos (p. 562)
• Usar o bloqueio de objetos do S3 com replicação (p. 562)
Para exibir o modo e o período de retenção de uma versão do objeto, você deve ter a permissão
s3:GetObjectRetention. Para exibir o status de retenção legal de uma versão do objeto, você deve
ter a permissão s3:GetObjectLegalHold. Se você GET ou HEAD uma versão do objeto, mas não tiver
as permissões necessárias para ver o status de bloqueio, a solicitação será bem-sucedida. No entanto, as
informações que você não tem permissão para ver não são retornadas.
Você pode configurar os relatórios de inventário do Amazon S3 nos buckets para incluírem as opções
Retain Until Date, object lock Mode e Legal Hold Status para todos os objetos em um
bucket. Para obter mais informações, consulte Inventário do Amazon S3 (p. 605).
Para ignorar o modo de governança, você deve indicar explicitamente na solicitação que você deseja
ignorar esse modo. Para fazer isso, inclua o cabeçalho x-amz-bypass-governance-retention:true
com a sua solicitação ou use o parâmetro equivalente com solicitações feitas por meio da CLI da AWS
ou os AWS SDKs. O Console de Gerenciamento da AWS aplicará automaticamente esse cabeçalho às
solicitações feitas por meio do console, se você tiver a permissão necessária para ignorar o modo de
governança.
Note
Ignorar o modo de governança não afeta o status de retenção legal de uma versão do objeto.
Caso uma versão do objeto tenha uma retenção legal habilitada, esta permanece em vigência e
evita que solicitações substituam ou excluam a versão do objeto.
Para obter mais informações sobre eventos do Amazon S3, consulte Notificações de eventos do Amazon
S3 (p. 869).
Use notificações de eventos do Amazon S3 para rastrear o acesso e as alterações feitas nas
configurações do bloqueio de objetos e nos dados que usam o AWS CloudTrail. Para obter informações
sobre o CloudTrail, consulte a Documentação do AWS CloudTrail.
Você também pode usar o Amazon CloudWatch para gerar alertas com base nesses dados. Para obter
mais informações sobre o CloudWatch, consulte a Documentação do Amazon CloudWatch.
O exemplo a seguir mostra uma política de bucket que usa a chave de condição s3:object-lock-
remaining-retention-days para definir um período de retenção máximo de 10 dias.
{
"Version": "2012-10-17",
"Id": "<SetRetentionLimits",
"Statement": [
{
"Sid": "<SetRetentionPeriod",
"Effect": "Deny",
"Principal": "*",
"Action": [
"s3:PutObjectRetention"
],
"Resource": "arn:aws:s3:::<awsexamplebucket1>/*",
"Condition": {
"NumericGreaterThan": {
"s3:object-lock-remaining-retention-days": "10"
}
}
}
]
}
Note
Se seu bucket for o bucket de destino de uma política de replicação e você quiser definir períodos
de retenção mínimos e máximos permitidos para as réplicas de objetos que foram criados usando
a replicação, você deverá incluir a ação s3:ReplicateObject em sua política de bucket.
regiões da AWS. Ao usar a replicação, os objetos em um bucket de origem são replicados para um bucket
de destino. Para obter mais informações, consulte Replicação de objetos (p. 617).
Para definir um bloqueio de objetos do S3 com replicação, escolha uma das opções a seguir.
Ao ativar o Object Lock nas opções anteriores, isso deve ser feito no momento da criação do bucket ou
você deve entrar em contato com o AWS Support se estiver usando um bucket existente. Isso é necessário
para assegurar que a replicação seja configurada corretamente.
Antes de entrar em contato com o AWS Support, revise os seguintes requisitos para configurar o bloqueio
de objetos com replicação:
Para obter mais informações sobre bloqueio de objetos do S3, consulte Como o bloquei de objetos do S3
funciona (p. 555).
As seções a seguir fornecem detalhes das várias classes de armazenamento e como definir a classe de
armazenamento para seus objetos.
Tópicos
• Classes de armazenamento de objetos acessados com frequência (p. 564)
• Classe de armazenamento para otimizar automaticamente dados com padrões de acesso alterados ou
desconhecidos (p. 564)
• Classes de armazenamento de objetos acessados com pouca frequência (p. 565)
• Classes de armazenamento para arquivamento de objetos (p. 566)
• Classe de armazenamento para o Amazon S3 no Outposts (p. 567)
• Comparar as classes de armazenamento do Amazon S3 (p. 567)
Para durabilidade, os objetos RRS têm uma perda anual média prevista de 0,01%. Se um objeto de RRS
for perdido, quando forem feitas solicitações a ele, o Amazon S3 retornará um erro 405.
Para acessar objetos arquivados posteriormente, primeiro você precisa restaurá-los. Para obter mais
informações, consulte Trabalhando com objetos arquivados (p. 544).
Note
Por exemplo, é possível escolher as classes de armazenamento S3 Standard-IA e S3 One Zone-IA para
fazer o seguinte:
Para obter mais informações sobre gerenciamento de ciclo de vida, consulte Gerenciando seu ciclo de
vida de armazenamento (p. 569).
Note
• S3 Standard – IA: o Amazon S3 armazena dados de objeto de maneira redundante em várias zonas de
disponibilidade separadas geograficamente (de maneira semelhante à classe de armazenamento S3
Standard). Os objetos S3 Standard – IA são resistentes à perda de uma zona de disponibilidade. Essa
classe de armazenamento oferece maior disponibilidade e resiliência que a classe S3 One Zone – IA.
• S3 One Zone – IA: o Amazon S3 armazena dados de objeto em apenas uma zona de disponibilidade,
e isso a torna menos cara que a classe S3 Standard – IA. No entanto, os dados não são resilientes
à perda física da zona de disponibilidade resultante de desastres, como terremotos e inundações.
A classe de armazenamento S3 One Zone – IA é tão durável quanto a classe Standard – IA, mas é
menos disponível e resistente. Para uma comparação de durabilidade e disponibilidade das classes
de armazenamento, consulte Comparar as classes de armazenamento do Amazon S3 (p. 567) no
fim desta seção. Para obter informações sobre a definição de preços, consulte Definição de preços do
Amazon S3.
Recomendamos o seguinte:
• S3 Standard-IA: use para a cópia principal ou única de dados, que não pode ser recriada.
• S3 One Zone-IA: use se você puder recriar os dados em caso de falha da zona de disponibilidade, e
para réplicas de objeto ao configurar a replicação entre regiões (CRR) do S3.
• S3 Glacier: use para arquivos nos quais partes dos dados podem precisar ser recuperadas em
minutos. Os dados armazenados na classe de armazenamento S3 Glacier têm um período mínimo de
duração do armazenamento de 90 dias e podem ser acessados em apenas 1 a 5 minutos usando a
recuperação expressa. Se você excluiu, substituiu ou fez a transição de um objeto para outra classe
de armazenamento antes do período mínimo de 90 dias, será cobrado pelos 90 dias. Para obter
informações sobre a definição de preços, consulte Definição de preços do Amazon S3.
• S3 Glacier Deep Archive: use para arquivar dados que raramente precisam ser acessados. Os dados
armazenados na classe de armazenamento S3 Glacier Deep Archive têm um período mínimo de
duração do armazenamento de 180 dias e um tempo de recuperação padrão de 12 horas. Se você
excluiu, substituiu ou fez a transição de um objeto para outra classe de armazenamento antes do
período mínimo de 180 dias, será cobrado pelos 180 dias. Para obter informações sobre a definição de
preços, consulte Definição de preços do Amazon S3.
S3 Glacier Deep Archive é a opção de armazenamento com o menor custo na AWS. Os custos de
armazenamento para o S3 Glacier Deep Archive são mais baratos que os da classe de armazenamento
S3 Glacier. É possível reduzir os custos de recuperação do S3 Glacier Deep Archive usando a
recuperação em lote, o que retorna dados em até 48 horas.
Para saber mais sobre o serviço Amazon S3 Glacier, consulte o Guia do desenvolvedor do Amazon S3
Glacier.
Você também pode optar explicitamente por criptografar objetos armazenados na classe de
armazenamento S3 Outposts usando criptografia no lado do servidor com chaves de criptografia
fornecidas pelo cliente (SSE-C). Para obter mais informações, consulte Proteger dados usando a
criptografia de servidor com chaves de criptografia fornecidas pelo cliente (SSE-C) (p. 225).
Para obter mais informações sobre o S3 no Outposts, consulte Usar o Amazon S3 no Outposts (p. 1093).
Todas as classes de armazenamento, exceto a S3 One Zone – IA, são desenvolvidas para serem
resistentes à perda simultânea de dados completos em uma única zona de disponibilidade e à perda
parcial em outra zona de disponibilidade.
Considere os custos, além dos requisitos de desempenho do cenário da sua aplicação. Para obter
informações sobre os preços das classes de armazenamento, consulte Definição de preços do Amazon
S3.
• Ao criar um objeto, é possível especificar a classe de armazenamento dele. Por exemplo, ao criar
objetos usando as APIs PUT Object, POST Object e Iniciar multipart upload, adicione o cabeçalho
de solicitação x-amz-storage-class para especificar uma classe de armazenamento. Se esse
cabeçalho não for adicionado, o Amazon S3 usará a classe de armazenamento padrão, Standard.
• Também é possível alterar a classe de armazenamento de um objeto que já está armazenado no
Amazon S3 para qualquer outra classe de armazenamento fazendo uma cópia desse objeto usando
a API PUT Object - Copy. No entanto, não é possível usar PUT Object - Copy para copiar objetos que
estão armazenados nas classes de armazenamento S3 Glacier ou S3 Glacier Deep Archive.
Copie o objeto no mesmo bucket usando o mesmo nome de chave e especifique os cabeçalhos de
solicitação da seguinte forma:
• Defina o cabeçalho x-amz-metadata-directive como COPY.
• Defina x-amz-storage-class como a classe de armazenamento desejada.
Em um bucket com versionamento habilitado, não é possível alterar a classe de armazenamento de uma
versão específica de um objeto. Quando você o copia, o Amazon S3 fornece um novo ID de versão.
• É possível direcionar o Amazon S3 para alterar a classe de armazenamento de objetos adicionando a
configuração do ciclo de vida do S3 em um bucket. Para obter mais informações, consulte Gerenciando
seu ciclo de vida de armazenamento (p. 569).
• Ao definir uma configuração de replicação, você poderá definir a classe de armazenamento para objetos
replicados como qualquer outra classe de armazenamento. No entanto, não é possível replicar objetos
que estão armazenados nas classes de armazenamento S3 Glacier ou S3 Glacier Deep Archive Para
obter mais informações, consulte Configuração de replicação (p. 622).
Para obter mais informações sobre como usar condições em políticas e uma lista completa de chaves de
condição do Amazon S3, consulte o seguinte:
• Ações de transição: definem quando os objetos fazem a transição para outra Uso de classes de
armazenamento do Amazon S3 (p. 563). Por exemplo, você pode optar por fazer a transição de
objetos para a classe de armazenamento do S3 Standard – IA 30 dias após a criação deles ou arquivar
objetos para a classe de armazenamento do S3 Glacier um ano após a sua criação.
Há custos associados às solicitações de transição do ciclo de vida. Para obter informações sobre a
definição de preços, consulte Definição de preços do Amazon S3.
• Ações de expiração: definem quando os objetos expiram. O Amazon S3 exclui os objetos expirados em
seu nome.
Os custos de expiração do ciclo de vida dependem de quando você escolhe tornar objetos expirados.
Para obter mais informações, consulte Expirando objetos (p. 575).
Para obter mais informações sobre regras de ciclo de vida do S3, consulte Elementos de configuração do
ciclo de vida (p. 588).
• Se você fizer upload periódico de logs em um bucket, é possível que seu aplicativo precise deles por
uma semana ou um mês. Depois disso, você pode excluí-los.
• Alguns documentos são acessados frequentemente por um período limitado. Depois disso, eles serão
acessados com pouca frequência. Em algum ponto, você pode não precisar de acesso em tempo real a
esses objetos, mas sua organização ou as regulamentações podem exigir que você os arquive por um
período específico. Depois disso, é possível excluí-los.
• É possível fazer upload de alguns tipos de dados no Amazon S3 para fins de arquivamento. Por
exemplo, é possível arquivar mídias digitais, registros financeiros e de saúde, dados não processados de
sequência genômica, backups de banco de dados de longo prazo e dados que devem ser retidos para
conformidade regulamentar.
Com regras de configuração de ciclo de vida do S3, é possível solicitar que o Amazon S3 faça a transição
de objetos para classes de armazenamento menos caras, arquive-os ou exclua-os.
Você também pode configurar o ciclo de vida usando o console do Amazon S3, a API REST, os SDKs da
AWS e a AWS CLI. Para obter mais informações, consulte Definir a configuração do ciclo de vida em um
bucket (p. 575).
Para obter mais informações sobre como criar uma configuração de ciclo de vida, consulte os seguintes
tópicos:
Tópicos
• Transição de objetos usando o ciclo de vida do Amazon S3 (p. 570)
• Expirando objetos (p. 575)
• Definir a configuração do ciclo de vida em um bucket (p. 575)
• Ciclo de vida e outras configurações de bucket (p. 586)
• Elementos de configuração do ciclo de vida (p. 588)
• Exemplos de configuração de ciclo de vida (p. 594)
• Quando você sabe que os objetos são acessados com pouca frequência, você pode fazer a transição
para a classe de armazenamento S3 Standard – IA.
• É possível arquivar objetos que não precisam de acesso em tempo real à classe de armazenamento S3
Glacier.
As seções a seguir descrevem transições com suporte, limitações relacionadas e a transição para a classe
de armazenamento S3 Glacier.
Restrições
As transições da classe de armazenamento do ciclo de vida têm as seguintes restrições:
Quando você faz a transição de objetos das classes de armazenamento S3 Standard ou S3 Standard – IA
para S3 Intelligent-Tiering, S3 Standard – IA ou S3 One Zone – IA, as seguintes restrições de tamanho de
objeto se aplicam:
• Objetos maiores: para as transições a seguir, há um benefício de custo para a transição de objetos
maiores:
• Das classes de armazenamento S3 Standard ou S3 Standard – IA para S3 Intelligent-Tiering.
• Da classe de armazenamento S3 Standard para S3 Standard – IA ou S3 One Zone – IA.
• Objetos menores que 128 KB: para as transições a seguir, o Amazon S3 não faz transição de objetos
menores que 128 KB pois não tem uma boa relação custo-benefício:
• Das classes de armazenamento S3 Standard ou S3 Standard – IA para S3 Intelligent-Tiering.
• Da classe de armazenamento S3 Standard para S3 Standard – IA ou S3 One Zone – IA.
Dias mínimos para transição de S3 Standard ou S3 Standard – IA para S3 Standard – IA ou S3 One Zone –
IA
Da mesma forma, se você estiver fazendo a transição de objetos não atuais (em buckets com versões),
poderá fazer a transição somente de objetos que não são atuais pelo menos 30 dias para armazenamento
S3 Standard – IA ou S3 One Zone – IA.
O mesmo mínimo de 30 dias se aplica quando você especifica uma transição do armazenamento S3
Standard – IA para o armazenamento S3 One Zone – IA ou S3 Intelligent-Tiering. É possível especificar
duas regras para realizar isso, mas é necessário pagar as cobranças mínimas de armazenamento. Para
obter mais informações sobre considerações de custo, consulte Definição de preço do Amazon S3.
Nesse cenário, você pode criar uma regra de ciclo de vida do S3 na qual especifica a ação de transição
inicial para armazenamento S3 Intelligent-Tiering, S3 Standard – IA ou S3 One Zone – IA, outra ação
de transição para o armazenamento S3 Glacier para arquivamento e uma ação de expiração. Ao mover
objetos de uma classe de armazenamento para outra, você economiza no custo de armazenamento. Para
obter mais informações sobre considerações de custo, consulte Definição de preço do Amazon S3.
Para que você arquive objetos, reveja as seguintes seções para considerações relevantes.
Considerações gerais
Veja a seguir as considerações gerais que você deve fazer antes de arquivar objetos:
Os objetos arquivados são objetos do Amazon S3, mas para acessar um objeto arquivado, primeiro você
deve restaurar uma cópia temporária dele. A cópia restaurada do objeto fica disponível somente pelo
tempo que você especifica na solicitação de restauração. Depois disso, o Amazon S3 exclui a cópia
temporária e o objeto permanece arquivado no Amazon S3 Glacier.
Você pode restaurar um objeto usando o console do Amazon S3 ou, programaticamente, usando
bibliotecas wrapper dos SDKs da AWS ou a API REST do Amazon S3 em seu código. Para obter mais
informações, consulte Restaurar um objeto arquivado (p. 547).
• Os objetos armazenados na classe de armazenamento S3 Glacier só podem ser transferidos para a
classe de armazenamento S3 Glacier Deep Archive.
Você pode usar uma regra de configuração do ciclo de vida do S3 para converter a classe de
armazenamento de um objeto do S3 Glacier para a classe de armazenamento S3 Glacier Deep
Archive somente. Se você quiser alterar a classe de armazenamento de um objeto armazenado no S3
Glacier para uma classe de armazenamento diferente do S3 Glacier Deep Archive, use a operação de
restauração para fazer uma cópia temporária do objeto primeiro. Depois, use a operação de cópia para
substituir o objeto especificando S3 Standard, S3 Intelligent-Tiering, S3 Standard – IA, S3 One Zone – IA
ou Reduced Redundancy como a classe de armazenamento.
• A transição de objetos para a classe de armazenamento S3 Glacier Deep Archive é apenas
unidirecional.
Não é possível usar uma regra de configuração do ciclo de vida do S3 para converter a classe
de armazenamento de um objeto do S3 Glacier Deep Archive para qualquer outra classe de
armazenamento. Se você quiser mudar a classe de armazenamento de um objeto arquivado em
outra classe de armazenamento, deverá usar a operação de restauração para fazer primeiro uma
cópia temporária do objeto. Depois, use a operação de cópia para substituir o objeto especificando
S3 Standard, S3 Intelligent-Tiering, S3 Standard – IA, S3 One Zone – IA, S3 Glacier ou Reduced
Redundancy como a classe de armazenamento.
• Os objetos armazenados nas classes de armazenamento S3 Glacier e S3 Glacier Deep Archive são
visíveis e disponíveis somente por meio do Amazon S3. Eles não estão disponíveis por meio do serviço
separado do Amazon S3 Glacier.
Versão da API 2006-03-01
573
Amazon Simple Storage Service Guia do usuário
Fazer a transição de objetos
Esses são objetos do Amazon S3 e você só pode acessá-los usando o console do Amazon S3 ou a
API do Amazon S3. Você não pode acessar os objetos arquivados por meio do console separado do
Amazon S3 Glacier ou da API do Amazon S3 Glacier.
• Cobranças extras de armazenamento: quando você faz a transição de objetos para a classe de
armazenamento S3 Glacier ou S3 Glacier Deep Archive, uma quantidade fixa de armazenamento é
adicionada a cada objeto para acomodar metadados para gerenciar o objeto.
• Para cada objeto arquivado no S3 Glacier ou S3 Glacier Deep Archive, o Amazon S3 usa 8 KB
de armazenamento para o nome do objeto e outros metadados. O Amazon S3 armazena esses
metadados de modo que você possa obter uma lista em tempo real de seus objetos arquivados
usando a API do Amazon S3. Para obter mais informações, consulte GET bucket (listar objetos). Você
é cobrado pelas taxas de Amazon S3 Standard nesse armazenamento adicional.
• Para cada objeto arquivado no S3 Glacier ou no S3 Glacier Deep Archive, o Amazon S3 adiciona
32 KB de armazenamento para indexação e metadados relacionados. Esses dados extras são
necessários para identificar e recuperar seu objeto. As taxas do S3 Glacier ou S3 Glacier Deep
Archive são cobradas por esse armazenamento adicional.
Se você estiver arquivando objetos pequenos, considere esses encargos de armazenamento. Considere
também a possibilidade de agregar vários objetos pequenos em um número menor de objetos grandes
para reduzir os gastos adicionais.
• Número de dias que você pretende manter objetos arquivados: S3 Glacier e S3 Glacier Deep Archive
são soluções de arquivamento de longo prazo. O período mínimo de duração de armazenamento é
de 90 dias para a classe de armazenamento S3 Glacier e 180 dias para o S3 Glacier Deep Archive.
A exclusão de dados arquivados no Amazon S3 Glacier será gratuita se os objetos que você excluir
estiverem arquivados por mais do que o período mínimo de duração do armazenamento. Se você excluir
ou substituir um objeto arquivado dentro do período mínimo de duração do arquivamento, o Amazon S3
cobrará uma taxa pro rata pela exclusão antecipada. Para obter informações sobre a taxa de exclusão
antecipada, consulte a pergunta "Como sou cobrado pela exclusão de objetos do Amazon S3 Glacier
com menos de 90 dias?" nas Perguntas frequentes sobre o Amazon S3.
• Cobranças de solicitações de transição do S3 Glacier e S3 Glacier Deep Archive: cada objeto que
você transitar para a classe de armazenamento S3 Glacier ou S3 Glacier Deep Archive constitui
uma solicitação de transição. Há um custo para cada solicitação desse tipo. Se você pretende fazer
a transição de um grande número de objetos, considere os custos de solicitação. Se você estiver
arquivando objetos pequenos, considere a possibilidade de agregar vários objetos pequenos em um
número menor de objetos grandes para reduzir o custo da solicitação de transição.
• Cobranças de restauração de dados do S3 Glacier e S3 Glacier Deep Archive: o S3 Glacier e o S3
Glacier Deep Archive foram projetados para arquivamento de dados a longo prazo que você acessa com
pouca frequência. Para obter informações sobre cobranças de restauração de dados, consulte “Quanto
custa recuperar dados do Amazon S3 Glacier?” nas Perguntas frequentes sobre o Amazon S3. Para
obter informações sobre como restaurar dados do Amazon S3 Glacier, consulte Restaurar um objeto
arquivado (p. 547).
Quando você arquiva objetos no Amazon S3 Glacier usando o gerenciamento do ciclo de vida do S3, o
Amazon S3 faz a transição desses objetos de forma assíncrona. Pode haver um atraso entre a data de
transição na regra de configuração de ciclo de vida e a data de transição física. Você é cobrado pelos
preços do Amazon S3 Glacier com base na data de transição especificada na regra. Para obter mais
informações, consulte a seção Amazon S3 Glacier das Perguntas frequentes sobre o Amazon S3.
A página de detalhes de produto do Amazon S3 fornece informações sobre preços e exemplos de cálculo
para arquivamento de objetos no Amazon S3. Para obter mais informações, consulte os tópicos a seguir:
Quando restaura um arquivo, você está pagando pelo arquivo (taxa do S3 Glacier ou S3 Glacier
Deep Archive) e por uma cópia que você restaurou temporariamente (taxa de armazenamento
de redundância reduzida). Para obter mais informações sobre definição de preços, consulte
Definição de preços do Amazon S3.
Você pode restaurar uma cópia do objeto programaticamente ou usando o console do Amazon S3. O
Amazon S3 só processa uma solicitação de restauração por vez por objeto. Para obter mais informações,
consulte Restaurar um objeto arquivado (p. 547).
Expirando objetos
Quando um objeto atinge o fim de seu ciclo de vida, com base em sua política de ciclo de vida, o Amazon
S3 o coloca em uma fila para remoção e o remove assincronamente. Pode haver um atraso entre a data
de expiração e a data em que o Amazon S3 remove um objeto. Você não será cobrado pelo tempo de
armazenamento associado a um objeto que expirou.
Para descobrir quando um objeto está programado para expirar, use as operações de API HEAD Object
ou GET Object. Essas operações de API retornam os cabeçalhos de resposta que fornecem essas
informações.
Se você criar uma regra de expiração do ciclo de vida do S3 que fará com que os objetos que estiveram no
armazenamento S3 Intelligent-Tiering, S3 Standard – IA ou S3 One Zone – IA por menos de 30 dias para
expirar, você será cobrado por 30 dias. Se criar uma regra de expiração de ciclo de vida que resulte na
expiração de objetos armazenados na classe S3 Glacier por pelo menos 90 dias, você será cobrado por
90 dias. Se você criar uma regra de expiração do ciclo de vida que faça com que os objetos que estiveram
no armazenamento do S3 Glacier Deep Archive por menos de 180 dias expirem, será cobrado por 180
dias. Para obter mais informações, consulte a Definição de preço do Amazon S3 e Usar o console do
S3 (p. 576).
É possível usar regras de ciclo de vida para definir ações que você deseja que o Amazon S3 realize
durante o ciclo de vida de um objeto (por exemplo, fazer a transição de objetos para outra classe de
armazenamento, arquivá-los, ou excluí-los após um período especificado).
Atraso de propagação
Quando você adiciona uma configuração do ciclo de vida do S3 a um bucket, costuma haver algum atraso
antes que uma configuração nova ou atualizada do ciclo de vida seja totalmente propagada para todos
os sistemas do Amazon S3. Considere um atraso de alguns minutos antes que a configuração entre
totalmente em vigor. Esse atraso também pode ocorrer quando você exclui uma configuração do ciclo de
vida do S3.
Quando você desabilita ou exclui regras do ciclo de vida, depois de um pequeno atraso o Amazon S3 para
de agendar a exclusão ou transição de novos objetos. Todos os objetos que já foram agendados não são
agendados e não são excluídos ou transicionados.
Quando você adiciona uma configuração do ciclo de vida a um bucket, as regras de configuração se
aplicam aos objetos existentes e aos objetos que serão adicionados no futuro. Por exemplo, se você
adicionar uma regra de configuração do ciclo de vida hoje com uma ação de expiração que faz com que
os objetos com um prefixo específico expirem 30 dias após sua criação, o Amazon S3 organizará para
exclusão todos os objetos existentes com mais de 30 dias.
Alterações no faturamento
Pode haver um atraso entre o momento em que as regras de configuração do ciclo de vida são satisfeitas
e o momento em que a ação, ativada pela satisfação da regra, é tomada. No entanto, as alterações na
cobrança acontecem assim que a regra de configuração do ciclo de vida é satisfeita, mesmo que a ação
ainda não tenha sido tomada.
Por exemplo, você não será cobrado pelo armazenamento após o tempo de expiração do objeto, mesmo
que o objeto não seja excluído imediatamente. Outro exemplo é a cobrança das taxas de armazenamento
do Amazon S3 Glacier assim que o tempo de transição do objeto termina, mesmo que não seja feita a
transição do objeto para a classe de armazenamento S3 Glacier imediatamente. As transições do ciclo de
vida para a classe de armazenamento S3 Intelligent-Tiering são a exceção. As alterações no faturamento
não acontecem até que o objeto tenha transitado para a classe de armazenamento S3 Intelligent-Tiering.
Usar o console do S3
É possível definir uma regra de ciclo de vida para todos os objetos ou para um subconjunto de objetos no
bucket usando um prefixo compartilhado (nomes de objetos que começam com uma string comum) ou
uma tag. Usando uma regra de ciclo de vida, é possível definir ações específicas para versões atuais e
anteriores do objeto. Para obter mais informações, consulte:
3. Escolha a guia Management (Gerenciamento) e escolha Create lifecycle rule (Criar regra de ciclo de
vida).
4. Em Lifecycle rule name (Nome da regra do ciclo de vida), insira um nome para sua regra.
• Para aplicar essa regra de ciclo de vida a todos os objetos com um prefixo ou uma tag específica,
escolha Limitar o escopo a prefixos ou tags específicos.
• Para limitar o escopo por prefixo, em Prefix (Prefixo), insira o prefixo.
• Para limitar o escopo por tag, escolha Add tag (Adicionar tag) e insira a chave e o valor da tag.
Para obter mais informações sobre prefixos de nome de objeto, consulte Criar nomes de chave
de objeto (p. 64). Para obter mais informações sobre tags de objetos, consulte Categorizando seu
armazenamento usando tags (p. 683).
• Para aplicar essa regra de ciclo de vida a todos os objetos no bucket, escolha This rule applies to
all objects in the bucket e escolha I acknowledge that this rule applies to all objects in the bucket (Eu
reconheço que essa regra se aplica a todos os objetos no bucket).
6. Em Lifecycle rule actions (Ações de regra do ciclo de vida), escolha as ações que você deseja que sua
regra de ciclo de vida execute:
Dependendo das ações que você escolher, diferentes opções serão exibidas.
7. Para fazer a transição de versões atuais de objetos entre classes de armazenamento, em Transition
current versions of objects between storage classes (Transição de versões atuais de objetos entre
classes de armazenamento):
• Standard-IA
• Intelligent-Tiering
• One Zone-IA
• Glacier
• Glacier Deep Archive
b. Em Days after object creation (Dias após a criação do objeto), insira o número de dias após a
criação para fazer a transição do objeto.
Para obter mais informações sobre classes de armazenamento, consulte Uso de classes de
armazenamento do Amazon S3 (p. 563). É possível definir transições para a versão atual ou as
versões anteriores do objeto, ou para ambas. O versionamento permite que você mantenha várias
versões de um objeto em um bucket. Para obter mais informações sobre versionamento, consulte
Usar o console do S3 (p. 521).
Important
serviço separado do Amazon S3 Glacier. Para obter mais informações, consulte Transição de
objetos usando o ciclo de vida do Amazon S3 (p. 570).
8. Para fazer a transição de versões não atuais de objetos entre classes de armazenamento, em
Transition non-current versions of objects between storage classes (Transição de versões não atuais
de objetos entre classes de armazenamento):
• Standard-IA
• Intelligent-Tiering
• One Zone-IA
• Glacier
• Glacier Deep Archive
b. Em Days after object becomes non-current (Dias após o objeto se tornar não atual), insira o
número de dias após a criação para fazer a transição do objeto.
9. Para expirar as versões atuais dos objetos, em Expire previous versions of objects (Expirar versões
anteriores de objetos), em Number of days after object creation (Número de dias após a criação do
objeto), insira o número de dias.
Important
Em um bucket sem versionamento, a ação de expiração faz com que o Amazon S3 remova
permanente o objeto. Para obter mais informações sobre ações de ciclo de vida, consulte
Elementos para descrever ações de ciclo de vida (p. 591).
10. Para excluir permanentemente versões anteriores de objetos, em Permanently delete previous
versions of objects (Excluir permanentemente versões anteriores de objetos), em Number of days after
objects become previous versions (Número de dias após os objetos se tornarem versões anteriores),
insira o número de dias.
11. Em Delete expired delete markers or incomplete multipart uploads (Excluir marcadores de exclusão
expirados ou multipart uploads incompletos), escolha Delete expired object delete markers (Excluir
marcadores de exclusão de objetos expirados) e Delete incomplete multipart uploads (Excluir multipart
uploads incompletos). Depois, insira o número de dias após o início do multipart upload que você
deseja encerrar e limpar multipart uploads incompletos.
Para obter mais informações sobre multipart uploads, consulte Carregar e copiar objetos usando
multipart upload (p. 80).
12. Selecione Criar regra.
Se a regra não contiver erros, o Amazon S3 a habilitará e você poderá vê-la na guia Management
(Gerenciamento) em Lifecycle rules (Regras de ciclo de vida).
Para obter informações sobre modelos e exemplos do CloudFormation, consulte Trabalhando com
modelos do AWS CloudFormation e AWS::S3::Bucket no Guia do usuário do AWS CloudFormation.
• put-bucket-lifecycle-configuration
• get-bucket-lifecycle-configuration
• delete-bucket-lifecycle
Para obter instruções de configuração da AWS CLI, consulte Desenvolvimento com o Amazon S3 usando
a AWS CLI (p. 1033).
A configuração do ciclo de vida do Amazon S3 é um arquivo XML. Mas ao usar a CLI da AWS, você
não pode especificar o XML. Você deve especificar o JSON em vez disso. Veja a seguir exemplos de
configurações do ciclo de vida em XML e o JSON equivalente que pode ser especificado em um comando
da CLI da AWS.
Example Exemplo 1
JSON
{
"Rules": [
{
"Filter": {
"Prefix": "documents/"
},
"Status": "Enabled",
"Transitions": [
{
"Days": 365,
"StorageClass": "GLACIER"
}
],
"Expiration": {
"Days": 3650
},
"ID": "ExampleRule"
}
]
}
XML
<LifecycleConfiguration>
<Rule>
<ID>ExampleRule</ID>
<Filter>
<Prefix>documents/</Prefix>
</Filter>
<Status>Enabled</Status>
<Transition>
<Days>365</Days>
<StorageClass>GLACIER</StorageClass>
</Transition>
<Expiration>
<Days>3650</Days>
</Expiration>
</Rule>
</LifecycleConfiguration>
Example Exemplo 2
JSON
{
"Rules": [
{
"ID": "id-1",
"Filter": {
"And": {
"Prefix": "myprefix",
"Tags": [
{
"Value": "mytagvalue1",
"Key": "mytagkey1"
},
{
"Value": "mytagvalue2",
"Key": "mytagkey2"
}
]
}
},
"Status": "Enabled",
"Expiration": {
"Days": 1
}
}
]
}
XML
<LifecycleConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Rule>
<ID>id-1</ID>
<Expiration>
<Days>1</Days>
</Expiration>
<Filter>
<And>
<Prefix>myprefix</Prefix>
<Tag>
<Key>mytagkey1</Key>
<Value>mytagvalue1</Value>
</Tag>
<Tag>
<Key>mytagkey2</Key>
<Value>mytagvalue2</Value>
</Tag>
</And>
</Filter>
<Status>Enabled</Status>
</Rule>
</LifecycleConfiguration>
Você pode usar o AWS SDK para Java para gerenciar a configuração do ciclo de vida do S3 de um
bucket. Para obter mais informações sobre o gerenciamento da configuração do ciclo de vida do S3,
consulte Gerenciando seu ciclo de vida de armazenamento (p. 569).
Note
O exemplo a seguir mostra como usar o AWS SDK para Java para adicionar, atualizar e excluir a
configuração do ciclo de vida de um bucket. O exemplo faz o seguinte:
Para obter instruções sobre criar e testar um exemplo funcional, consulte Testar exemplos de código
Java no Amazon S3 (p. 1042).
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.BucketLifecycleConfiguration;
import com.amazonaws.services.s3.model.BucketLifecycleConfiguration.Transition;
import com.amazonaws.services.s3.model.StorageClass;
import com.amazonaws.services.s3.model.Tag;
import com.amazonaws.services.s3.model.lifecycle.LifecycleAndOperator;
import com.amazonaws.services.s3.model.lifecycle.LifecycleFilter;
import com.amazonaws.services.s3.model.lifecycle.LifecyclePrefixPredicate;
import com.amazonaws.services.s3.model.lifecycle.LifecycleTagPredicate;
import java.io.IOException;
import java.util.Arrays;
try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();
// Add a new rule with both a prefix predicate and a tag predicate.
configuration.getRules().add(new
BucketLifecycleConfiguration.Rule().withId("NewRule")
.withFilter(new LifecycleFilter(new LifecycleAndOperator(
Arrays.asList(new
LifecyclePrefixPredicate("YearlyDocuments/"),
new LifecycleTagPredicate(new Tag("expire_after",
"ten_years"))))))
.withExpirationInDays(3650)
.withStatus(BucketLifecycleConfiguration.ENABLED));
configuration = s3Client.getBucketLifecycleConfiguration(bucketName);
.NET
Você pode usar o AWS SDK para .NET para gerenciar a configuração do ciclo de vida do S3 em um
bucket. Para obter mais informações sobre o gerenciamento da configuração do ciclo de vida, consulte
Gerenciando seu ciclo de vida de armazenamento (p. 569).
Note
O exemplo a seguir mostra como usar o AWS SDK para .NET para adicionar, atualizar e excluir uma
configuração do ciclo de vida de um bucket. O exemplo de código faz o seguinte:
Para obter instruções sobre como criar e testar um exemplo funcional, consulte Executar os exemplos
de código do Amazon S3 .NET (p. 1044).
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class LifecycleTest
{
private const string bucketName = "*** bucket name ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 client;
public static void Main()
{
client = new AmazonS3Client(bucketRegion);
AddUpdateDeleteLifecycleConfigAsync().Wait();
}
new LifecycleTransition
{
Days = 365,
StorageClass = S3StorageClass.Glacier
}
},
Expiration = new LifecycleRuleExpiration()
{
Days = 3650
}
}
}
};
}
catch (AmazonS3Exception e)
{
Console.WriteLine("Error encountered ***. Message:'{0}' when writing an
object", e.Message);
}
catch (Exception e)
{
Console.WriteLine("Unknown encountered on server. Message:'{0}' when
writing an object", e.Message);
}
}
Ruby
Você pode usar o AWS SDK para Ruby para gerenciar a configuração do ciclo de vida do S3 em um
bucket usando a classe AWS#S3#BucketLifecycleConfiguration. Para obter mais informações sobre
como usar o AWS SDK para Ruby com o Amazon S3, consulte Usar o AWS SDK para Ruby versão
3 (p. 1045). Para obter mais informações sobre o gerenciamento da configuração do ciclo de vida,
consulte Gerenciando seu ciclo de vida de armazenamento (p. 569).
Um bucket com versionamento habilitado mantém uma versão atual do objeto e versões desatualizadas
do objeto (se disponíveis). Você pode definir regras separadas de ciclo de vida para versões atuais e não
atuais do objeto.
Para obter mais informações, consulte Elementos de configuração do ciclo de vida (p. 588).
Se o registro em logs estiver ativado em seu bucket, os logs de acesso do servidor do Amazon S3
relatarão os resultados das seguintes operações.
Note
Mais informações
• Elementos de configuração do ciclo de vida (p. 588)
• Transição para as classes de armazenamento S3 Glacier e S3 Glacier Deep Archive (arquivamento de
objetos) (p. 573)
• Definir a configuração do ciclo de vida em um bucket (p. 575)
Especifique uma configuração de ciclo de vida do S3 como XML, consistindo em uma ou mais regras de
ciclo de vida.
<LifecycleConfiguration>
<Rule>
...
</Rule>
<Rule>
...
</Rule>
</LifecycleConfiguration>
• Metadados de regra que incluem um ID de regra e o status que indica se a regra está ativada ou
desativada. Se uma regra estiver desativada, o Amazon S3 não executará as ações especificadas nela.
• Filtro que identifica os objetos aos quais a regra se aplica. Você pode especificar um filtro usando um
prefixo de chaves de objeto, uma ou mais tags de objeto ou ambos.
• Uma ou mais ações de transição ou expiração com uma data ou um período no ciclo de vida do objeto
quando você deseja que o Amazon S3 realize a ação especificada.
As seções a seguir descrevem os elementos XML em uma configuração de ciclo de vida do S3. Para obter
configurações de exemplo, consulte Exemplos de configuração de ciclo de vida (p. 594).
Elemento ID
Uma configuração do ciclo de vida do S3 pode ter até 1.000 regras. O elemento <ID> identifica uma regra
com exclusividade. O tamanho do ID está limitado a 255 caracteres.
Elemento Status
O valor de elemento <Status> pode ser Ativado ou Desativado. Se uma regra estiver desativada, o
Amazon S3 não executará as ações definidas nela.
Elemento Filter
Uma regra de ciclo de vida pode ser aplicada a todos os objetos ou a um subconjunto de objetos em um
bucket com base no elemento <Filter> que você especifica na regra de ciclo de vida.
É possível filtrar objetos por prefixo de chaves, por tag de objeto ou por uma combinação dos dois. Nesse
último caso, o Amazon S3 usa um E lógico para combinar os filtros. Considere os seguintes exemplos:
• Especificação de um filtro usando prefixos de chaves: este exemplo mostra uma regra de ciclo de vida
do S3 que se aplica a um subconjunto de objetos com base no prefixo de nome de chave (logs/). Por
exemplo, a regra de ciclo de vida se aplica aos objetos logs/mylog.txt, logs/temp1.txt e logs/
test.txt. A regra não se aplica ao objeto example.jpg.
<LifecycleConfiguration>
<Rule>
<Filter>
<Prefix>logs/</Prefix>
</Filter>
transition/expiration actions.
...
</Rule>
...
</LifecycleConfiguration>
Caso queira aplicar uma ação de ciclo de vida a um subconjunto de objetos com base em prefixos de
nome de chave diferentes, especifique regras separadas. Em cada regra, especifique um filtro com base
em prefixo. Por exemplo, para descrever uma ação de ciclo de vida para objetos com prefixos de chaves
projectA/ e projectB/, especifique duas regras da seguinte forma.
<LifecycleConfiguration>
<Rule>
<Filter>
<Prefix>projectA/</Prefix>
</Filter>
transition/expiration actions.
...
</Rule>
<Rule>
<Filter>
<Prefix>projectB/</Prefix>
</Filter>
transition/expiration actions.
...
</Rule>
</LifecycleConfiguration>
Para obter mais informações sobre chaves de objeto, consulte Criar nomes de chave de objeto (p. 64).
• Especificação um filtro com base em tags de objeto: no exemplo a seguir, a regra de ciclo de vida
especifica um filtro com base em uma tag (chave) e valor (valor). A regra aplica-se somente a um
subconjunto de objetos com a tag específica.
<LifecycleConfiguration>
<Rule>
<Filter>
<Tag>
<Key>key</Key>
<Value>value</Value>
</Tag>
</Filter>
transition/expiration actions.
...
</Rule>
</LifecycleConfiguration>
Você pode especificar um filtro com base em várias tags. Você deve envolver as tags no elemento
<AND> mostrado no exemplo a seguir. A regra instrui o Amazon S3 a executar ações de ciclo de vida
em objetos com duas tags (com a chave e o valor específicos da tag).
<LifecycleConfiguration>
<Rule>
<Filter>
<And>
<Tag>
<Key>key1</Key>
<Value>value1</Value>
</Tag>
<Tag>
<Key>key2</Key>
<Value>value2</Value>
</Tag>
...
</And>
</Filter>
transition/expiration actions.
</Rule>
</Lifecycle>
A regra de ciclo de vida se aplica a objetos que têm ambas as tags especificadas. O Amazon S3 realiza
uma operação E lógica. Observe o seguinte:
• Cada tag deve corresponder exatamente à chave e ao valor.
• A regra se aplica a um subconjunto de objetos que tenha todas as tags especificadas na regra. Se um
objeto tiver tags adicionais especificadas, a regra ainda será aplicada.
Note
Quando você especifica várias tags em um filtro, cada chave de tag deve ser exclusiva.
• Especificação de um filtro com base no prefixo e em uma ou mais tags: em uma regra de ciclo de vida,
você pode especificar um filtro com base no prefixo de chaves e em uma ou mais tags. Além disso, você
deve encapsular tudo isso no elemento <And> como mostrado a seguir.
<LifecycleConfiguration>
<Rule>
<Filter>
<And>
<Prefix>key-prefix</Prefix>
<Tag>
<Key>key1</Key>
<Value>value1</Value>
</Tag>
<Tag>
<Key>key2</Key>
<Value>value2</Value>
</Tag>
Versão da API 2006-03-01
590
Amazon Simple Storage Service Guia do usuário
Elementos de configuração do ciclo de vida
...
</And>
</Filter>
<Status>Enabled</Status>
transition/expiration actions.
</Rule>
</LifecycleConfiguration>
O Amazon S3 combina esses filtros usando um E lógico. Isto é, a regra aplica-se ao subconjunto de
objetos com o prefixo de chaves específico e as tags específicas. Um filtro pode ter somente um prefixo
e zero ou mais tags.
• Você pode especificar um filtro vazio e, nesse caso, a regra se aplica a todos os objetos no bucket.
<LifecycleConfiguration>
<Rule>
<Filter>
</Filter>
<Status>Enabled</Status>
transition/expiration actions.
</Rule>
</LifecycleConfiguration>
• Elemento da ação Transição: você especifica a ação Transition para fazer a transição de objetos
de uma classe de armazenamento para outra. Para obter mais informações sobre transição de objetos,
consulte Transições com suporte e limitações relacionadas (p. 570). Quando uma data ou um período
especificado no ciclo de vida do objeto é atingido, o Amazon S3 executa a transição.
Para um bucket com versões (versionamento ativado ou suspenso no bucket), a ação Transition
aplica-se à versão do objeto atual. Para gerenciar versões não atuais, o Amazon S3 define a ação
NoncurrentVersionTransition (descrita abaixo).
• Elemento de ação de expiração: a ação Expiration expira objetos identificados na regra e se aplica a
objetos qualificados em qualquer uma das classes de armazenamento do Amazon S3. Para obter mais
informações sobre classes de armazenamento, consulte Uso de classes de armazenamento do Amazon
S3 (p. 563). O Amazon S3 deixa todos os objetos expirados indisponíveis. A remoção permanente dos
objetos depende do estado de versionamento do bucket.
Important
• O Amazon S3 não realizará ações se houver uma ou mais versões de objeto e se o marcador de
exclusão estiver na versão atual.
• Se a versão atual do objeto for a única versão do objeto e também houver um marcador de exclusão
(também chamado de marcador de exclusão de objeto expirado, onde todas as versões do objeto
são excluídas e você tem somente um marcador de exclusão restante), o Amazon S3 removerá
o marcador de exclusão de objeto expirado. Você também pode usar a ação de expiração para
instruir o Amazon S3 a remover os marcadores de exclusão do objeto expirado. Para ver um
exemplo, consulte Exemplo 7: Remover marcadores de exclusão de objetos expirados (p. 602).
Se a versão atual do objeto não for um marcador de exclusão, o Amazon S3 adicionará um com um
ID exclusivo de versão. Isso torna a versão atual desatualizada, e o marcador de exclusão se torna
a versão atual.
• Bucket com versionamento suspenso
Em um bucket com versionamento suspenso, a ação de expiração faz com que o Amazon S3 crie
um marcador de exclusão com ID de versão nulo. Esse marcador de exclusão substitui qualquer
versão de objeto por um ID de versão nulo na hierarquia de versões, que exclui o objeto.
Além disso, o Amazon S3 fornece as seguintes ações que você pode usar para gerenciar versões de
objeto não atuais em um bucket com versão (isto é, buckets com versionamento ativado e suspenso).
• Elemento de ação NoncurrentVersionTransition: use essa ação para especificar quanto tempo
(desde quando os objetos passam a ser não atuais) você deseja que os objetos permaneçam na
classe de armazenamento atual antes que o Amazon S3 fizesse a transição deles para a classe de
armazenamento especificada. Para obter mais informações sobre transição de objetos, consulte
Transições com suporte e limitações relacionadas (p. 570).
• Elemento de ação NoncurrentVersionExpiration: use essa ação para especificar quanto tempo (desde
quando os objetos passam a ser não atuais) você deseja manter as versões não atuais do objeto antes
que o Amazon S3 as remova permanentemente. O objeto excluído não pode ser recuperado.
Essa remoção retardada de objetos não atuais pode ser útil quando você precisa corrigir exclusões
ou substituições acidentais. Por exemplo, você pode configurar uma regra de expiração para excluir
versões não atuais cinco dias após ficarem nesse estado. Por exemplo, imagine que, em 1/1/2014 10:30
AM UTC, você crie um objeto denominado photo.gif (ID de versão 111111). Em 1/2/2014 11:30
AM UTC, você exclui acidentalmente photo.gif (ID de versão 111111), o que cria um marcador de
exclusão com um novo ID de versão (como ID de versão 4857693). Agora você tem cinco dias para
recuperar a versão original de photo.gif (ID de versão 111111) até que a exclusão seja permanente.
Em 1/8/2014 00:00 UTC, a regra de ciclo de vida para expiração executa e exclui permanentemente
photo.gif (ID de versão 111111), cinco dias depois que ele passa a ser uma versão não atual.
Important
Além das ações de transição e expiração, você pode usar a ação de configuração de ciclo de vida a seguir
para instruir o Amazon S3 a parar multipart uploads incompletos.
• Elemento de ação AbortIncompleteMultipartUpload: use esse elemento para definir o tempo máximo (em
dias) que você deseja permitir que os multipart uploads permaneçam em andamento. Se os multipart
uploads aplicáveis (determinados pelo nome de chave prefix especificado na regra de ciclo de vida)
Versão da API 2006-03-01
592
Amazon Simple Storage Service Guia do usuário
Elementos de configuração do ciclo de vida
não forem concluídos no período predefinido, o Amazon S3 parará os multipart uploads incompletos.
Para obter mais informações, consulte Abortar um multipart upload (p. 106).
Note
Você não pode especificar essa ação de ciclo de vida em uma regra que especifica um filtro
com base em tags de objeto.
Você não pode especificar essa ação de ciclo de vida em uma regra que especifica um filtro
com base em tags de objeto.
Como explicado em detalhes no tópico Restaurar versões anteriores (p. 533), você pode usar
qualquer um dos dois métodos seguintes para recuperar versões anteriores de um objeto:
1. Copiando uma versão não atual do objeto no mesmo bucket. O objeto copiado torna-se a
versão atual desse objeto e todas as versões são preservadas.
2. Excluindo permanentemente a versão atual do objeto. Ao excluir a versão atual do objeto, você
acaba transformando a versão não atual na versão atual do objeto.
Quando você estiver usando regras de configuração do ciclo de vida do S3 com buckets
habilitados para versionamento, recomendamos como prática recomendada que você use o
primeiro método.
O ciclo de vida opera sob um modelo eventualmente consistente. Uma versão atual que você
excluiu permanentemente pode não desaparecer até que as alterações sejam propagadas
(o Amazon S3 pode não estar ciente dessa exclusão). Entretanto, a regra de ciclo de vida
configurada para expirar objetos não atuais pode remover, permanentemente, objetos não atuais,
incluindo aquele que você deseja restaurar. Assim, copiar a versão antiga, como recomendado no
primeiro método, é uma alternativa mais confiável.
Quando você especificar o número de dias nas ações Transition e Expiration em uma configuração
de ciclo de vida do S3, observe o seguinte:
Note
O Amazon S3 mantém apenas a data da última modificação para cada objeto. Por exemplo, o
console do Amazon S3 mostra a data Last Modified (Última modificação) no painel Properties
(Propriedades) do objeto. Quando você cria inicialmente um novo objeto, essa data reflete a data
em que o objeto é criado. Se você substituir o objeto, a data será alterada conforme necessário.
Assim, o termo data de criação é sinônimo do termo data da última modificação.
• É o número de dias a partir do momento em que a versão do objeto se torna desatualizada (ou seja,
quando o objeto é sobrescrito ou excluído) que o Amazon S3 executará a ação no objeto ou objetos
especificados.
• O Amazon S3 calcula o tempo, adicionando o número de dias especificado na regra ao momento em
que a nova versão sucessora do objeto é criada e arredondando o tempo resultante para a meia-noite
UTC do próximo dia. Por exemplo, no seu bucket, suponha que a versão atual de um objeto foi criada
em 01/01/2014, 10:30 AM UTC. Se a nova versão do objeto que substitui a atual tiver sido criada em
15/01/2014, 10:30 AM UTC, e você especificar uma regra de transição de três dias, a data de transição
do objeto será calculada como 19/01/2014, 00:00 UTC.
Se você especificar uma ação de ciclo de vida do S3 com uma data no passado, todos os objetos
qualificados estarão imediatamente qualificados para essa ação de ciclo de vida.
Important
A ação com base em data não é uma ação única. O Amazon S3 continuará aplicando a ação com
base em data mesmo após a data ter passado, contanto que o status da regra seja Enabled.
Por exemplo, imagine que você especifique uma ação de Expiration com base em data
para excluir todos os objetos (supondo que nenhum filtro seja especificado na regra). Na data
especificada, o Amazon S3 expira todos os objetos no bucket. O S3 também continuará expirando
todos os objetos novos que você criar no bucket. Para parar a ação de ciclo de vida, você
deve remover a ação da configuração de ciclo de vida, desabilitar a regra ou excluir a regra da
configuração de ciclo de vida.
O valor de data deve estar em conformidade com o formato ISO 8601. A hora é sempre meia-noite (UTC).
Note
Você não pode criar regras de ciclo de vida com base em data usando o console do Amazon S3,
mas pode visualizar, desativar ou excluir essas regras.
Tópicos
• Exemplo 1: Especificar um filtro (p. 595)
• Exemplo 2: Desabilitar uma regra de ciclo de vida (p. 597)
• Exemplo 3: Rebaixar uma classe de armazenamento pela duração do ciclo de vida de um objeto
(p. 597)
• Exemplo 4: Especificar várias regras (p. 598)
• Exemplo 5: sobreposição de filtros, ações de ciclo de vida conflitantes e o que o Amazon S3; faz
(p. 599)
• Exemplo 6: Especificar uma regra de ciclo de vida para um bucket com versionamento habilitado
(p. 602)
• Exemplo 7: Remover marcadores de exclusão de objetos expirados (p. 602)
• Exemplo 8: Configuração de ciclo de vida para anular multipart uploads (p. 604)
• Nesta regra de configuração de ciclo de vida, o filtro especifica um prefixo de chave (tax/). Portanto,
a regra aplica-se a objetos com o prefixo de nome de chave tax/, como tax/doc1.txt e tax/
doc2.txt.
<LifecycleConfiguration>
<Rule>
<ID>Transition and Expiration Rule</ID>
<Filter>
<Prefix>tax/</Prefix>
</Filter>
<Status>Enabled</Status>
<Transition>
<Days>365</Days>
<StorageClass>S3 Glacier</StorageClass>
</Transition>
<Expiration>
<Days>3650</Days>
</Expiration>
</Rule>
</LifecycleConfiguration>
Em vez de especificar a idade do objeto em termos de dias após a criação, você pode especificar uma
data para cada ação. No entanto, você não pode usar Date e Days na mesma regra.
• Se você quiser que a regra de ciclo de vida se aplique a todos os objetos no bucket, especifique
um prefixo vazio. Na configuração a seguir, a regra especifica uma ação Transition levando o
Amazon S3 a fazer a transição de objetos para a classe de armazenamento S3 Glacier 0 dias após a
criação e, nesse caso, os objetos são qualificados para arquivamento no Amazon S3 Glacier à meia-
noite UTC após a criação. Para obter mais informações sobre restrições de ciclo de vida, consulte
Restrições (p. 571).
<LifecycleConfiguration>
<Rule>
<ID>Archive all object same-day upon creation</ID>
<Filter>
<Prefix></Prefix>
</Filter>
<Status>Enabled</Status>
<Transition>
<Days>0</Days>
<StorageClass>S3 Glacier</StorageClass>
</Transition>
</Rule>
</LifecycleConfiguration>
• Você pode especificar zero ou um prefixo de nome de chave ou zero ou mais tags de objeto em um filtro.
O exemplo de código a seguir aplica a regra de ciclo de vida a um subconjunto de objetos com prefixo
de chave tax/ e a objetos que têm duas tags com uma chave e valor específicos. Observe que, ao
especificar mais de um filtro, você deve incluir AND conforme mostrado (o Amazon S3 aplica um AND
lógico para combinar as condições de filtro especificadas).
...
<Filter>
<And>
<Prefix>tax/</Prefix>
<Tag>
<Key>key1</Key>
<Value>value1</Value>
</Tag>
<Tag>
<Key>key2</Key>
<Value>value2</Value>
</Tag>
</And>
</Filter>
...
• Você pode filtrar objetos com base apenas nas tags. Por exemplo, a regra de ciclo de vida a seguir
aplica-se a objetos que tenham duas tags especificadas (não especifica nenhum prefixo).
...
<Filter>
<And>
<Tag>
<Key>key1</Key>
<Value>value1</Value>
</Tag>
<Tag>
<Key>key2</Key>
<Value>value2</Value>
</Tag>
</And>
</Filter>
...
Important
Quando você tem várias regras em uma configuração de ciclo de vida, um objeto pode se tornar
qualificado para várias ações de ciclo de vida. Nesses casos, o Amazon S3 segue estas regras
gerais:
Versão da API 2006-03-01
596
Amazon Simple Storage Service Guia do usuário
Exemplos de configuração de ciclo de vida
Para ver exemplos, consulte Exemplo 5: sobreposição de filtros, ações de ciclo de vida
conflitantes e o que o Amazon S3; faz (p. 599).
• Na regra 1, o Amazon S3 faz a transição de objetos com o prefixo logs/ para a classe de
armazenamento S3 Glacier logo após a criação.
• Na regra 2, o Amazon S3 faz a transição de objetos com o prefixo documents/ para a classe de
armazenamento S3 Glacier logo após a criação.
Na política, a regra 1 é habilitada e a regra 2 é desabilitada. O Amazon S3 não realiza nenhuma ação em
regras desativadas.
<LifecycleConfiguration>
<Rule>
<ID>Rule1</ID>
<Filter>
<Prefix>logs/</Prefix>
</Filter>
<Status>Enabled</Status>
<Transition>
<Days>0</Days>
<StorageClass>S3 Glacier</StorageClass>
</Transition>
</Rule>
<Rule>
<ID>Rule2</ID>
<Prefix>documents/</Prefix>
<Status>Disabled</Status>
<Transition>
<Days>0</Days>
<StorageClass>S3 Glacier</StorageClass>
</Transition>
</Rule>
</LifecycleConfiguration>
A configuração de ciclo de vida do S3 a seguir especifica uma regra que se aplica a objetos com o prefixo
de nome de chave logs/. A regra especifica as seguintes ações:
<LifecycleConfiguration>
<Rule>
<ID>example-id</ID>
<Filter>
<Prefix>logs/</Prefix>
</Filter>
<Status>Enabled</Status>
<Transition>
<Days>30</Days>
<StorageClass>STANDARD_IA</StorageClass>
</Transition>
<Transition>
<Days>90</Days>
<StorageClass>GLACIER</StorageClass>
</Transition>
<Expiration>
<Days>365</Days>
</Expiration>
</Rule>
</LifecycleConfiguration>
Note
Você pode usar uma regra para descrever todas as ações de ciclo de vida se todas as ações
se aplicarem ao mesmo conjunto de objetos (identificados pelo filtro). Caso contrário, você pode
adicionar várias regras com cada uma especificando um filtro diferente.
Você pode especificar várias regras se quiser diferentes ações de ciclo de vida de diferentes objetos. A
configuração de ciclo de vida a seguir tem duas regras:
• A regra 1 se aplica a objetos com prefixo de nome de chave classA/. Com ela, o Amazon S3 faz a
transição de objetos para a classe de armazenamento S3 Glacier um ano após a criação e expira esses
objetos 10 anos após a criação.
• A regra 2 se aplica a objetos com prefixo de nome de chave classB/. Ela direciona o Amazon S3 para
fazer a transição de objetos para a classe de armazenamento S3 Standard – IA 90 dias após a criação e
excluí-los um ano após a criação.
<LifecycleConfiguration>
<Rule>
<ID>ClassADocRule</ID>
<Filter>
<Prefix>classA/</Prefix>
</Filter>
<Status>Enabled</Status>
<Transition>
<Days>365</Days>
<StorageClass>GLACIER</StorageClass>
</Transition>
<Expiration>
<Days>3650</Days>
</Expiration>
</Rule>
<Rule>
<ID>ClassBDocRule</ID>
<Filter>
<Prefix>classB/</Prefix>
</Filter>
<Status>Enabled</Status>
<Transition>
<Days>90</Days>
<StorageClass>STANDARD_IA</StorageClass>
</Transition>
<Expiration>
<Days>365</Days>
</Expiration>
</Rule>
</LifecycleConfiguration>
Geralmente, o ciclo de vida do Amazon S3 otimiza o custo. Por exemplo, se duas políticas de expiração se
sobrepuserem, a mais curta será honrada para que os dados não sejam armazenados por mais tempo do
que o esperado.
Do mesmo modo, se duas políticas de transição se sobrepuserem, o ciclo de vida do S3 irá fazer a
transição dos seus objetos para a classe de armazenamento de menor custo. Nos dois casos, o ciclo de
vida do S3 tenta escolher o caminho com menos custo para você. Uma exceção a essa regra geral é com
a classe de armazenamento S3 Intelligent-Tiering. O S3 Intelligent-Tiering é favorecido pelo ciclo de vida
do S3 em qualquer classe de armazenamento, além das classes de armazenamento S3 Glacier e S3
Glacier Deep Archive.
O exemplo de configuração a seguir tem duas regras especificando prefixos sobrepostos da seguinte
maneira:
A Regra 1 solicita que o Amazon S3 exclua todos os objetos um ano após a criação. A Regra 2 solicita
que o Amazon S3 faça a transição de um subconjunto de objetos para a classe de armazenamento do S3
Standard – IA 30 dias após a criação.
<LifecycleConfiguration>
<Rule>
<ID>Rule 1</ID>
<Filter>
</Filter>
<Status>Enabled</Status>
<Expiration>
<Days>365</Days>
</Expiration>
</Rule>
<Rule>
<ID>Rule 2</ID>
<Filter>
<Prefix>logs/</Prefix>
</Filter>
<Status>Enabled</Status>
<Transition>
<StorageClass>STANDARD_IA<StorageClass>
<Days>30</Days>
</Transition>
</Rule>
</LifecycleConfiguration>
Nessa configuração de exemplo, há duas regras que levam o Amazon S3 a executar ao mesmo tempo
duas diferentes ações no mesmo conjunto de objetos na vida útil do objeto:
• Ambas as regras especificam o mesmo prefixo de nome de chave, de modo que ambas as regras se
aplicam ao mesmo conjunto de objetos.
• Ambas as regras especificam os mesmos 365 dias após a criação de objeto quando as regras se
aplicam.
• Uma regra leva o Amazon S3 a fazer a transição de objetos para a classe de armazenamento S3
Standard – IA e outra regra quer que o Amazon S3 expire os objetos ao mesmo tempo.
<LifecycleConfiguration>
<Rule>
<ID>Rule 1</ID>
<Filter>
<Prefix>logs/</Prefix>
</Filter>
<Status>Enabled</Status>
<Expiration>
<Days>365</Days>
</Expiration>
</Rule>
<Rule>
<ID>Rule 2</ID>
<Filter>
<Prefix>logs/</Prefix>
</Filter>
<Status>Enabled</Status>
<Transition>
<StorageClass>STANDARD_IA<StorageClass>
<Days>365</Days>
</Transition>
</Rule>
</LifecycleConfiguration>
Nesse caso, como você deseja que os objetos sejam expirados (removidos), não faz sentido mudar a
classe de armazenamento, e o Amazon S3 simplesmente escolhe a ação de expiração desses objetos.
Neste exemplo, a configuração tem duas regras, que especificam prefixos sobrepostos da seguinte
maneira:
Para o subconjunto de objetos com o prefixo de nome de chave logs/, as ações de ciclo de vida em
ambas as regras se aplicam. Uma regra levando o Amazon S3 a fazer a transição de objetos 10 dias após
a criação e outra regra em que o Amazon S3 faz a transição de objetos 365 dias após a criação.
<LifecycleConfiguration>
<Rule>
<ID>Rule 1</ID>
<Filter>
<Prefix></Prefix>
</Filter>
<Status>Enabled</Status>
<Transition>
<StorageClass>STANDARD_IA<StorageClass>
<Days>10</Days>
</Transition>
</Rule>
<Rule>
<ID>Rule 2</ID>
<Filter>
<Prefix>logs/</Prefix>
</Filter>
<Status>Enabled</Status>
<Transition>
<StorageClass>STANDARD_IA<StorageClass>
<Days>365</Days>
</Transition>
</Rule>
</LifecycleConfiguration>
Nesse caso, o Amazon S3 escolhe fazer a transição dos objetos 10 dias após a criação.
Suponha que você tenha a seguinte política de ciclo de vida do S3 que tem duas regras, cada uma
especificando um filtro de tag:
• A regra 1 especifica um filtro baseado em tag (tag1/value1). Essa regra direciona o Amazon S3 para
fazer a transição de objetos para a classe de armazenamento do S3 Glacier 365 dias após a criação.
• A regra 2 especifica um filtro baseado em tag (tag2/value2). Essa regra leva o Amazon S3 a expirar
objetos 14 dias após a criação.
<LifecycleConfiguration>
<Rule>
<ID>Rule 1</ID>
<Filter>
<Tag>
<Key>tag1</Key>
<Value>value1</Value>
</Tag>
</Filter>
<Status>Enabled</Status>
<Transition>
<StorageClass>GLACIER<StorageClass>
<Days>365</Days>
</Transition>
</Rule>
<Rule>
<ID>Rule 2</ID>
<Filter>
<Tag>
<Key>tag2</Key>
<Value>value1</Value>
</Tag>
</Filter>
<Status>Enabled</Status>
<Expiration>
<Days>14</Days>
</Expiration>
</Rule>
</LifecycleConfiguration>
A política está correta, mas se houver um objeto com ambas as tags, o S3 precisará decidir o que fazer.
Em outras palavras, as duas regras se aplicam a um objeto e, na realidade, você está levando o Amazon
S3 a executar ações conflitantes. Nesse caso, o Amazon S3 expira o objeto 14 dias após a criação. O
objeto é removido e, portanto, a ação de transição não acontece.
Além disso, você deseja economizar os custos de armazenamento movendo as versões desatualizadas
para S3 Glacier 30 dias depois de se tornarem desatualizadas (supondo que são dados antigos que você
não precisa acessar em tempo real). Além disso, você também espera que a frequência de acesso das
versões atuais diminua 90 dias após a criação, para que você possa optar por mover esses objetos para a
classe de armazenamento S3 Standard – IA.
<LifecycleConfiguration>
<Rule>
<ID>sample-rule</ID>
<Filter>
<Prefix></Prefix>
</Filter>
<Status>Enabled</Status>
<Transition>
<Days>90</Days>
<StorageClass>STANDARD_IA</StorageClass>
</Transition>
<NoncurrentVersionTransition>
<NoncurrentDays>30</NoncurrentDays>
<StorageClass>S3 Glacier</StorageClass>
</NoncurrentVersionTransition>
<NoncurrentVersionExpiration>
<NoncurrentDays>365</NoncurrentDays>
</NoncurrentVersionExpiration>
</Rule>
</LifecycleConfiguration>
Este exemplo mostra um cenário que pode criar marcadores de exclusão de objetos expirados em seu
bucket e como você pode usar a configuração de ciclo de vida do S3 para que o Amazon S3 remova os
marcadores de exclusão de objetos expirados.
Suponha que você elabore uma política de ciclo de vida que especifique a ação
NoncurrentVersionExpiration para remover as versões desatualizadas 30 dias após se tornarem
desatualizadas como mostrado a seguir.
<LifecycleConfiguration>
<Rule>
...
<NoncurrentVersionExpiration>
<NoncurrentDays>30</NoncurrentDays>
</NoncurrentVersionExpiration>
</Rule>
</LifecycleConfiguration>
A ação NoncurrentVersionExpiration não se aplica às versões de objeto atuais. Ela apenas remove
versões desatualizadas.
Para versões atuais do objeto, você tem as opções abaixo para gerenciar o ciclo de vida. Tudo vai
depender de as versões atuais seguirem um ciclo de vida bem definido.
Neste caso, você pode usar a política de ciclo de vida com a ação Expiration para que o Amazon S3
remova as versões atuais, conforme exibido no seguinte exemplo:
<LifecycleConfiguration>
<Rule>
...
<Expiration>
<Days>60</Days>
</Expiration>
<NoncurrentVersionExpiration>
<NoncurrentDays>30</NoncurrentDays>
</NoncurrentVersionExpiration>
</Rule>
</LifecycleConfiguration>
O Amazon S3 remove as versões atuais 60 dias após serem criadas adicionando um marcador de
exclusão para cada uma das versões atuais do objeto. Isso torna a versão atual do objeto desatualizada
e o marcador de exclusão se torna a versão atual. Para obter mais informações, consulte Usando o
controle de versão em buckets do S3 (p. 516).
Note
satisfazer os critérios de idade. Você pode criar uma regra separada com apenas a
ExpiredObjectDeleteMarker tag para limpar marcadores de exclusão assim que eles se
tornarem a única versão.
Neste caso, você pode remover os objetos manualmente quando não forem mais necessários criando
um marcador de exclusão com uma ou mais versões desatualizadas. Se a configuração de ciclo de vida
com a ação NoncurrentVersionExpiration remover todas as versões desatualizadas, agora você
terá marcadores de exclusão de objetos expirados.
Especificamente para este cenário, a configuração de ciclo de vida do Amazon S3 fornece uma ação
Expiration em que você pode solicitar que o Amazon S3 remova os marcadores de exclusão de
objetos expirados:
<LifecycleConfiguration>
<Rule>
<ID>Rule 1</ID>
<Filter>
<Prefix>logs/</Prefix>
</Filter>
<Status>Enabled</Status>
<Expiration>
<ExpiredObjectDeleteMarker>true</ExpiredObjectDeleteMarker>
</Expiration>
<NoncurrentVersionExpiration>
<NoncurrentDays>30</NoncurrentDays>
</NoncurrentVersionExpiration>
</Rule>
</LifecycleConfiguration>
Usando a configuração de ciclo de vida do S3, você pode levar o Amazon S3 a interromper multipart
uploads incompletos (identificados pelo prefixo de nome de chave especificado na regra) se eles não
forem concluídos dentro de um número especificado de dias após a inicialização. Quando o Amazon S3
interrompe um multipart upload, ele exclui todas as partes associadas ao multipart upload. Isso garante
que você não tenha multipart uploads incompletos com partes que estão armazenadas no Amazon S3 e,
portanto, você não tem que pagar nada por custo de armazenamento para essas partes.
Note
Veja a seguir um exemplo de configuração de ciclo de vida do S3 que especifica uma regra com a ação
AbortIncompleteMultipartUpload. Essa ação solicita que o Amazon S3 interrompa multipart
uploads incompletos sete dias após a inicialização.
<LifecycleConfiguration>
<Rule>
<ID>sample-rule</ID>
<Filter>
<Prefix>SomeKeyPrefix/</Prefix>
</Filter>
<Status>rule-status</Status>
<AbortIncompleteMultipartUpload>
<DaysAfterInitiation>7</DaysAfterInitiation>
</AbortIncompleteMultipartUpload>
</Rule>
</LifecycleConfiguration>
Inventário do Amazon S3
O inventário do Amazon S3 é uma das ferramentas que o Amazon S3 fornece para ajudar a gerenciar
seu armazenamento. Você pode usá-lo para auditar e gerar relatórios sobre o status da replicação e
criptografia de seus objetos para os negócios, a conformidade e as necessidades normativas. Também
é possível simplificar e acelerar os fluxos de trabalho de negócios e as trabalhos de big data usando o
inventário do Amazon S3, que fornece uma alternativa programada para a operação síncrona da API List
do Amazon S3.
O inventário do Amazon S3 fornece arquivos de saída nos formatos CSV (valores separados por vírgulas),
ORC (colunar de linhas otimizado do Apache) ou Parquet (Apache Parquet ) que listam seus objetos e os
metadados correspondentes, diária ou semanalmente, para um bucket ou prefixo compartilhado do S3 (ou
seja, objetos que tenham nomes que comecem com uma string comum). Caso isso ocorra semanalmente,
um relatório será gerado todos os domingos (fuso horário UTC) após o relatório inicial. Para obter mais
informações sobre a definição de preços do Amazon S3, consulte Definição de preços do Amazon S3.
Você pode configurar várias listas de inventário para um bucket. Você pode configurar quais metadados
de objeto serão incluídos no inventário, se deseja relacionar todas as versões do objeto ou apenas as
versões atuais, onde armazenar o arquivo resultante da lista de inventários e se o inventário será gerado
em uma frequência diária ou semanal. Você também pode especificar se o arquivo de lista de inventários
será criptografado.
É possível consultar o inventário do Amazon S3 usando o SQL padrão, usando o Amazon Athena, o
Amazon Redshift Spectrum e outras ferramentas, como Presto, Apache Hive e Apache Spark. É fácil
usar o Athena para executar consultas em seus arquivos de inventário. É possível usar as consultas de
inventário do Amazon S3 em todas as regiões onde o Athena estiver disponível.
Bucket de origem
O inventário lista os objetos armazenados no bucket de origem. Você pode obter as listas de inventário
para um bucket inteiro ou filtradas pelo prefixo (nome de chave de objeto).
O bucket de origem:
Bucket de destino
Os arquivos da lista de inventários do Amazon S3 são gravados no bucket de destino. Você pode
especificar um prefixo de destino (nome de chave de objeto) na configuração do inventário para agrupar
todos os arquivos de lista de inventários em um local comum no bucket de destino.
O bucket de destino:
Uma lista de inventários contém uma lista dos objetos em um bucket do S3 e os seguintes metadados para
cada objeto relacionado:
Recomendamos que você crie uma política de ciclo de vida que exclua listas de inventário antigas. Para
obter mais informações, consulte Gerenciando seu ciclo de vida de armazenamento (p. 569).
Consistência de inventário
Todos os seus objetos podem não aparecer em cada lista de inventários. A lista de inventários fornece
uma consistência eventual para PUTs dos objetos novos e também dos substituídos e excluídos. As listas
de inventário são um snapshot de rolamento de itens do bucket, que são eventualmente consistentes (ou
seja, a lista pode não incluir os objetos adicionados ou excluídos recentemente).
Para validar o estado do objeto antes de você realizar uma ação no objeto, recomendamos que faça
uma solicitação HEAD Object da API REST para recuperar metadados do objeto ou verifique suas
propriedades no console do Amazon S3. Também é possível verificar metadados do objeto com a CLI da
AWS ou os AWS SDKs. Para obter mais informações, consulte Objeto HEAD na Referência de APIs do
Amazon Simple Storage Service.
Para obter mais informações sobre como trabalhar com o inventário do S3, consulte os tópicos abaixo.
Tópicos
• Configuração do inventário do Amazon S3 (p. 607)
• Configuração de notificações de eventos do Amazon S3 para conclusão de inventário (p. 612)
• Localização de lista de inventário (p. 612)
• Consulta do inventário do Amazon S3 com o Amazon Athena (p. 615)
colunar de linhas otimizado do Apache (ORC) ou Apache Parquet (Parquet) que listam os seus objetos e
os metadados correspondentes, diária ou semanalmente, para um bucket do S3 ou para os objetos que
compartilham um prefixo (objetos com nomes iniciados pela mesma string). Para obter mais informações,
consulte Inventário do Amazon S3 (p. 605).
Esta seção descreve como configurar um inventário, incluindo detalhes sobre seus buckets de origem e
destino do inventário.
Tópicos
• Visão geral (p. 608)
• Criação de uma política de bucket de destino (p. 609)
• Conceder permissão para que o Amazon S3 use a CMK do AWS KMS para criptografia (p. 609)
• Configuração de um inventário usando o console do S3 (p. 610)
Visão geral
O inventário do Amazon S3 ajuda você a gerenciar seu armazenamento, criando listas dos objetos em
um bucket do S3 em uma programação definida. Você pode configurar várias listas de inventário para
um bucket. As listas de inventários são publicadas em arquivos CSV, ORC ou Parquet em um bucket de
destino.
A maneira mais fácil de configurar um inventário é usando o Console de Gerenciamento da AWS, mas
também é possível usar a API REST, a CLI da AWS ou os AWS SDKs. O console realiza a primeira etapa
do procedimento a seguir para você: adicionar uma política de bucket ao bucket de destino.
É necessário criar uma política de bucket no bucket de destino para conceder permissões ao Amazon
S3 para gravar objetos no bucket no local definido. Para ver um exemplo de política, consulte Conceder
permissões para inventário e análise do Amazon S3 (p. 386).
2. Configurar um inventário para relacionar objetos em um bucket de origem e publicar a lista em um
bucket de destino.
Ao configurar uma lista de inventários para um bucket de origem, você especifica o bucket de destino no
qual deseja que a lista seja armazenada e se quer gerar a lista diária ou semanalmente. Você também
pode configurar quais metadados de objeto serão incluídos e se serão relacionadas todas as versões
dos objetos ou apenas as versões atuais.
É possível especificar que o arquivo de lista de inventários seja criptografado usando uma chave
gerenciada do Amazon S3 (SSE-S3) ou uma chave mestra de cliente gerenciada pelo cliente (CMK) do
AWS Key Management Service (AWS KMS). Para obter mais informações sobre SSE-S3 e SSE-KMS,
consulte Proteção de dados usando criptografia no lado do servidor (p. 195). Se você pretende usar a
criptografia SSE-KMS, consulte a Etapa 3.
• Para obter informações sobre como usar o console para configurar uma lista de inventário, consulte
Configuração do inventário do Amazon S3 (p. 607).
• Para usar a API do Amazon S3 para configurar uma lista de inventários, use a API REST da
configuração de inventário de PUT Bucket ou o equivalente da CLI da AWS ou dos AWS SDKs.
3. Para criptografar o arquivo de lista de inventários com SSE-KMS, conceda permissão para que o
Amazon S3 use a CMK armazenada no AWS KMS.
S3 modificando a política de chave para a CMK gerenciada pelo cliente que você deseja usar para
criptografar o arquivo de inventário. Para mais informações, consulte a próxima sessão, Conceder
permissão para que o Amazon S3 use a CMK do AWS KMS para criptografia (p. 609).
Se ocorrer um erro quando você tentar criar a política do bucket, você receberá instruções sobre como
corrigi-lo. Por exemplo, se você escolher um bucket de destino em outra conta da AWS e não tiver as
permissões para ler e gravar na política do bucket, você verá uma mensagem de erro.
Nesse caso, o proprietário do bucket de destino deve adicionar a política do bucket exibida ao bucket de
destino. Se a política não for adicionada ao bucket de destino, você não terá um relatório de inventário,
pois o Amazon S3 não tem permissão para gravar no bucket de destino. Se o bucket de origem pertencer
a uma conta diferente da conta do usuário atual, o ID de conta correto do bucket de origem deverá ser
substituído na política.
1. Usando a conta da AWS que tem a CMK gerenciada pelo cliente, faça login no Console de
Gerenciamento da AWS.
2. Abra o console do AWS KMS em https://console.aws.amazon.com/kms.
3. Para alterar a região da AWS, use o seletor de região no canto superior direito da página.
4. No painel de navegação esquerdo, escolha Customer managed keys (Chaves gerenciadas pelo
cliente).
5. Em Customer managed keys (Chaves gerenciadas pelo cliente), escolha a CMK gerenciada pelo
cliente que você deseja usar para criptografar o arquivo de inventário.
6. Em Key policy (Política de chave), escolha Switch to policy view (Alternar para visualização de
política).
7. Para atualizar a política de chave, escolha Edit (Editar).
8. Em Edit key policy (Editar política de chave), adicione a seguinte política de chave à existente.
{
"Sid": "Allow Amazon S3 use of the CMK",
"Effect": "Allow",
"Principal": {
"Service": "s3.amazonaws.com"
},
"Action": [
"kms:GenerateDataKey"
],
"Resource": "*"
}
Para obter mais informações sobre como criar CMKs gerenciadas pelo cliente do AWS KMS e usar
políticas de chave, consulte os seguintes links no Guia do desenvolvedor do AWS Key Management
Service:
• Conceitos básicos
• Usar políticas de chaves no AWS KMS
O bucket de destino deve estar na mesma região da AWS que o bucket para o qual você está
configurando o inventário. O bucket de destino pode estar em uma conta da AWS diferente. No campo
de bucket Destination (Destino), você verá Destination bucket permission (Permissão do bucket de
destino) que é adicionada à política de bucket de destino para permitir que o Amazon S3 coloque
dados nesse bucket. Para obter mais informações, consulte Criação de uma política de bucket de
destino (p. 609).
9. Em Frequency (Frequência), escolha a frequência com que o relatório será gerado: Daily (Diário) ou
Weekly (Semanal).
10. Escolha o Output format (Formato de saída) para o relatório:
• CSV
• Apache ORC
• Apache Parquet
11. Em Status, escolha Enable (Ativar) ou Disable (Desabilitar).
12. Para usar a criptografia do lado do servidor, em Server-side encryption (Criptografia do lado do
servidor), siga estas etapas:
Note
Para criptografar o arquivo da lista de inventários com SSE-KMS, você deve conceder
uma permissão ao Amazon S3 para usar a AWS KMS CMK. Para obter instruções,
consulte Conceder permissão para o Amazon S3 criptografar usando a CMK do AWS
KMS (p. 609) .
13. Em Additional fields (Campos adicionais), selecione um ou mais dos seguintes campos para adicionar
ao relatório de inventário:
Para obter mais informações sobre bloqueio de objetos do S3, consulte Como o bloquei de objetos
do S3 funciona (p. 555).
Para obter mais informações sobre o conteúdo de um relatório de inventário, consulte Lista de
inventários do Amazon S3 (p. 606).
14. Escolha Create (Criar).
Versão da API 2006-03-01
611
Amazon Simple Storage Service Guia do usuário
Configuração de notificações para conclusão de inventário
O Amazon S3 pode publicar eventos em um tópico do Amazon Simple Notification Service (Amazon SNS),
em uma fila do Amazon Simple Queue Service (Amazon SQS) ou em uma função do AWS Lambda. Para
obter mais informações, consulte Notificações de eventos do Amazon S3 (p. 869).
<NotificationConfiguration>
<QueueConfiguration>
<Id>1</Id>
<Filter>
<S3Key>
<FilterRule>
<Name>prefix</Name>
<Value>destination-prefix/source-bucket</Value>
</FilterRule>
<FilterRule>
<Name>suffix</Name>
<Value>checksum</Value>
</FilterRule>
</S3Key>
</Filter>
<Cloudcode>arn:aws:lambda:us-west-2:222233334444:cloud-function-list-write</Cloudcode>
<Event>s3:ObjectCreated:*</Event>
</QueueConfiguration>
</NotificationConfiguration>
Para obter mais informações, consulte Usar o AWS Lambda com o Amazon S3 no Guia do desenvolvedor
do AWS Lambda.
destination-prefix/source-bucket/config-ID/YYYY-MM-DDTHH-MMZ/manifest.json
destination-prefix/source-bucket/config-ID/YYYY-MM-DDTHH-MMZ/manifest.checksum
destination-prefix/source-bucket/config-ID/hive/dt=YYYY-MM-DD-HH-MM/symlink.txt
• O ID de config é adicionado para evitar colisões com vários relatórios do inventário do mesmo
bucket de origem que são enviados ao mesmo bucket de destino. O config-ID vem da configuração
do relatório de inventário e é o nome do relatório definido na configuração.
• YYYY-MM-DDTHH-MMZ é o time stamp que consiste na hora de início e na data em que o relatório de
inventário começa a fazer a varredura no bucket. Por exemplo, 2016-11-06T21-32Z.
• manifest.json é o arquivo manifesto.
• manifest.checksum é o MD5 do conteúdo do arquivo manifest.json.
• symlink.txt é o arquivo manifesto compatível com o Apache Hive.
As listas de inventários são publicadas diária ou semanalmente no seguinte local do bucket de destino.
destination-prefix/source-bucket/config-ID/example-file-name.csv.gz
...
destination-prefix/source-bucket/config-ID/example-file-name-1.csv.gz
Manifesto de inventário
Os arquivos manifestos manifest.json e symlink.txt descrevem onde os arquivos de inventário
estão localizados. Sempre que uma nova lista de inventários é entregue, um novo conjunto de arquivos
manifestos a acompanha. Esses arquivos podem sobrescrever uns aos outros e, no versionamento, os
buckets habilitados criarão uma nova versão dos arquivos de manifesto.
Cada manifesto contido no arquivo manifest.json fornece metadados e outras informações básicas
sobre um inventário. Essas informações incluem:
CSV
{
"sourceBucket": "example-source-bucket",
"destinationBucket": "arn:aws:s3:::example-inventory-destination-bucket",
"version": "2016-11-30",
"creationTimestamp" : "1514944800000",
"fileFormat": "CSV",
"fileSchema": "Bucket, Key, VersionId, IsLatest, IsDeleteMarker,
Size, LastModifiedDate, ETag, StorageClass, IsMultipartUploaded,
ReplicationStatus, EncryptionStatus, ObjectLockRetainUntilDate, ObjectLockMode,
ObjectLockLegalHoldStatus",
"files": [
{
"key": "Inventory/example-source-bucket/2016-11-06T21-32Z/
files/939c6d46-85a9-4ba8-87bd-9db705a579ce.csv.gz",
"size": 2147483647,
"MD5checksum": "f11166069f1990abeb9c97ace9cdfabc"
}
]
}
ORC
{
"sourceBucket": "example-source-bucket",
"destinationBucket": "arn:aws:s3:::example-destination-bucket",
"version": "2016-11-30",
"creationTimestamp" : "1514944800000",
"fileFormat": "ORC",
"fileSchema":
"struct<bucket:string,key:string,version_id:string,is_latest:boolean,is_delete_marker:boolean,size
"files": [
{
"key": "inventory/example-source-bucket/data/
d794c570-95bb-4271-9128-26023c8b4900.orc",
"size": 56291,
"MD5checksum": "5925f4e78e1695c2d020b9f6eexample"
}
]
}
Parquet
{
"sourceBucket": "example-source-bucket",
"destinationBucket": "arn:aws:s3:::example-destination-bucket",
"version": "2016-11-30",
"creationTimestamp" : "1514944800000",
"fileFormat": "Parquet",
"fileSchema": "message s3.inventory { required binary bucket (UTF8); required
binary key (UTF8); optional binary version_id (UTF8); optional boolean is_latest;
O symlink.txt é um arquivo manifesto compatível com o Apache Hive pelo qual o Hive detecta
automaticamente arquivos de inventário e seus arquivos de dados associados. O manifesto compatível
com o Hive funciona com os serviços compatíveis com o Athena e o Amazon Redshift Spectrum. Ele
também funciona com aplicativos compatíveis com o Hive, como Presto, Apache Hive, Apache Spark e
muitos outros.
Important
O arquivo manifesto symlink.txt compatível com Apache Hive atualmente não funciona com o
AWS Glue.
A leitura do symlink.txt com o Apache Hive e o Apache Spark não é compatível com arquivos
de inventário nos formatos ORC e Parquet.
O Athena pode consultar arquivos de inventário do Amazon S3 nos formatos ORC, Parquet ou CSV.
Quando você usar o Athena para consultar inventários, use arquivos de inventário no formato ORC ou
Parquet. Os formatos ORC e Parquet têm um desempenho de consulta mais rápido e custos mais baixos
de consulta. ORC e Parquet são formatos de arquivo colunares do tipo autodescritivo projetados para o
Apache Hadoop. O formato colunar permite que o leitor leia, descompacte e processe apenas as colunas
necessárias para a consulta atual. Os formatos ORC e Parquet para inventário do Amazon S3 estão
disponíveis em todas as regiões da AWS.
1. Crie uma tabela do Athena. Para obter informações sobre como criar uma tabela, consulte Criar
tabelas no Amazon Athena no Guia do usuário do Amazon Athena.
O exemplo de consulta a seguir inclui todos os campos opcionais no relatório de inventário no formato
ORC. Descarte todos os campos opcionais que você não selecionou no inventário para que a consulta
corresponda aos campos escolhidos. Além disso, use o nome do seu bucket e a localização. A
localização indica o caminho de destino do inventário; por exemplo, s3://destination-prefix/
source-bucket/config-ID/hive/.
is_latest boolean,
is_delete_marker boolean,
size bigint,
last_modified_date string,
e_tag string,
storage_class string,
is_multipart_uploaded boolean,
replication_status string,
encryption_status string,
intelligent_tiering_tier string,
object_lock_retain_until_date string,
object_lock_mode string,
object_lock_legal_hold_status string
)
PARTITIONED BY (dt string)
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.orc.OrcSerde'
STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.SymlinkTextInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat'
LOCATION 's3://destination-prefix/source-bucket/config-ID/hive/';
Ao usar o Athena para consultar um relatório de inventário no formato Parquet, use a instrução
Parquet SerDe a seguir em vez de ORC SerDe na instrução ROW FORMAT SERDE.
Ao usar o Athena para consultar um relatório de inventário no formato CSV, use o CSV SerDe a seguir
em vez do ORC SerDe na instrução ROW FORMAT SERDE.
2. Para adicionar novas listas de inventários à sua tabela, use o comando MSCK REPAIR TABLE a
seguir.
3. Depois de executar as duas primeiras etapas, você pode executar consultas ad-hoc no inventário,
como mostrado no exemplo a seguir.
Para obter mais informações sobre como usar o Athena, consulte o Guia do usuário do Amazon Athena.
Replicação de objetos
O Replication permite a cópia automática e assíncrona de objetos nos buckets do Amazon S3. Os buckets
que são configurados para a replicação de objetos podem pertencer à mesma conta da AWS ou a
diferentes contas. O objeto pode ser replicado em um único bucket de destino ou em vários buckets de
destino. Os buckets de destino podem estar em diferentes regiões da AWS ou na mesma região que o
bucket de origem.
Por padrão, a replicação oferece suporte somente à cópia de novos objetos do Amazon S3 depois que
ela estiver habilitada. Você pode usar a replicação para copiar objetos existentes e cloná-los para um
bucket diferente, mas para isso, entre em contato com o AWS Support Center. Ao entrar em contato com o
suporte, forneça à sua ocorrência do AWS Support o assunto “Replicação para objetos existentes” e inclua
as seguintes informações:
• Bucket de origem
• Buckets ou buckets de destino
• Volume estimado de armazenamento a ser replicado (em terabytes)
• Contagem estimada de objetos de armazenamento a ser replicada
Para habilitar a replicação de objetos, adicione uma configuração de replicação ao bucket de origem. A
configuração mínima deve fornecer o seguinte:
• O bucket de destino ou buckets nos quais você quer que o Amazon S3 replique os objetos
• Uma função do AWS Identity and Access Management (IAM) que o Amazon S3 pode assumir para
replicar objetos em seu nome
Estão disponíveis opções de configuração adicionais. Para obter mais informações, consulte
Configurações de replicação adicionais (p. 663).
Tópicos
• Por que usar a replicação (p. 617)
• Quando usar a replicação entre regiões (p. 618)
• Quando usar Replicação na mesma região (p. 618)
• Requisitos para replicação (p. 618)
• O que o Amazon S3 replica? (p. 619)
• Configuração da replicação (p. 622)
• Orientações: Configuração da replicação (p. 636)
• Configurações de replicação adicionais (p. 663)
• Obtenção de informações sobre o status da replicação (p. 678)
• Solução de problemas de replicação (p. 680)
• Considerações adicionais (p. 681)
• Replicar objetos enquanto retém metadados: você pode usar a replicação para fazer cópias dos objetos
que retêm todos os metadados, como o tempo de criação do objeto original e as IDs de versão. Esse
recurso é importante se você precisar garantir que sua réplica seja idêntica ao objeto de origem.
• Replicar objetos em diferentes classes de armazenamento: você pode usar a replicação para colocar
objetos diretamente em S3 Glacier, S3 Glacier Deep Archive ou em outra classe de armazenamento no
bucket de destino. Você também pode replicar seus dados para a mesma classe de armazenamento
e usar políticas de ciclo de vida no bucket de destino para mover seus objetos para uma classe de
armazenamento "mais fria", conforme se aproximarem do fim da vida útil.
• Manter cópias de objetos em propriedades diferentes: independentemente de quem é o proprietário do
objeto de origem, você pode orientar o Amazon S3 a alterar a propriedade sobre a réplica para a conta
da AWS que tem o bucket de destino. Isso se chama opção de substituição do proprietário. Você pode
usar esta opção para restringir acesso às replicas do objeto.
• Mantenha objetos armazenados em várias regiões da AWS — você pode definir vários buckets de
destino em diferentes regiões da AWS para garantir diferenças geográficas onde seus dados são
mantidos. Isso pode ser útil para atender a certos requisitos de conformidade.
• Replicar objetos em 15 minutos: você pode usar o Controle do tempo de replicação do S3 (S3 RTC) para
replicar seus dados na mesma região da AWS ou em diferentes regiões em um período previsível. O S3
RTC replica 99,99 por cento dos novos objetos armazenados no Amazon S3 em 15 minutos (respaldado
por um acordo de nível de serviço). Para obter mais informações, consulte the section called “Uso do
Controle do tempo de replicação do S3” (p. 665).
• Atender aos requisitos de conformidade: embora o Amazon S3 armazene seus dados em diversas zonas
de disponibilidade geograficamente distantes por padrão, requisitos de conformidade podem ditar que
você armazene os dados em distâncias ainda maiores. A replicação entre regiões permite que você
replique dados entre regiões da AWS distantes para satisfazer esses requisitos.
• Minimizar a latência : se seus clientes estiverem em duas localizações geográficas distintas, é possível
minimizar a latência no acesso de objetos ao manter cópias deles nas regiões da AWS geograficamente
mais próximas dos usuários.
• Aumentar a eficiência operacional : se você computar clusters em duas regiões da AWS diferentes que
analisem o mesmo grupo de objetos, você pode optar por manter cópias do objeto nessas regiões.
• Agregar logs em um único bucket: se você armazenar logs em vários buckets ou em várias contas, será
possível replicar facilmente os logs em um único bucket na região. Isso permite o processamento mais
simples de logs em uma única localização.
• Configurar replicação ao vivo entre contas de produção e teste: se você ou seus clientes tiverem contas
de produção e de teste que usam os mesmos dados, será possível replicar objetos entre essas várias
contas, mantendo os metadados do objeto.
• Cumprir as leis de soberania de dados: você pode ser solicitado a armazenar várias cópias dos seus
dados em contas separadas da AWS em uma determinada região. A replicação na mesma região
pode ajudar a replicar automaticamente dados críticos quando os regulamentos de conformidade não
permitirem que os dados saiam do país.
• O proprietário do bucket de origem deve ter as regiões da AWS de origem e de destino habilitadas para
a conta. O proprietário do bucket de destino deve ter a região de destino habilitada para a conta.
Para obter mais informações sobre como ativar ou desativar uma região da AWS, consulte Endpoints de
serviço da AWS na Referência geral da AWS.
• Tanto o bucket de origem quanto o de destino devem ter o versionamento habilitado. Para obter
mais informações sobre controle de versão, consulte Usando o controle de versão em buckets do
S3 (p. 516).
• O Amazon S3 deve ter permissões para replicar objetos do bucket de origem para o bucket de destino
ou buckets em seu nome.
• Se o proprietário do bucket de origem não for proprietário do objeto no bucket, o proprietário do objeto
precisará conceder ao proprietário do bucket as permissões READ e READ_ACP com a lista de controle
de acesso (ACL) do objeto. Para obter mais informações, consulte Visão geral da lista de controle de
acesso (ACL) (p. 440).
• Se o bucket de origem tiver o Bloqueio de objetos do S3 habilitado, o bucket de destino também deverá
ter o Bloqueio de objetos do S3 habilitado.
Para obter mais informações, consulte Usar o S3 Object Lock (p. 554). Para habilitar a replicação em
um bucket com Bloqueio de objetos habilitado, entre em contato com o Suporte da AWS.
Se você estiver definindo a configuração de replicação em um cenário entre contas (onde os buckets de
origem e de destino pertencem a diferentes contas da AWS), o seguinte requisito adicional se aplicará:
• O proprietário dos buckets de destino precisa conceder ao proprietário do bucket de origem permissões
para replicar objetos com uma política de bucket. Para obter mais informações, consulte Conceder
permissões quando os buckets de origem e de destino forem de propriedade de contas diferentes da
AWS (p. 635).
• O bucket de destino não pode ser configurado como um bucket de Pagamento pelo solicitante.
Para obter mais informações, consulte Configuração de buckets de Pagamento pelo solicitante para
transferências de armazenamento e uso (p. 56).
O que é replicado?
Por padrão, o Amazon S3 replica o seguinte:
Para replicar objetos criptografados com CMKs armazenadas no AWS KMS, é necessário habilitar
explicitamente a opção. A cópia replicada do objeto é criptografada usando o mesmo tipo de
criptografia do lado do servidor que foi usada para o objeto de origem. Para obter mais informações
sobre criptografia no lado do servidor, consulte Proteção de dados usando criptografia no lado do
servidor (p. 195).
• Metadados de objeto dos objetos de origem para as réplicas. Para obter informações sobre como
replicar metadados das réplicas para os objetos de origem, consulte Replicação de alterações de
metadados com sincronização de modificação de réplica do Amazon S3 (p. 669).
• Somente os objetos no bucket de origem para os quais o proprietário do bucket tenha permissões para
ler objetos e listas de controle de acesso (ACLs).
Para obter mais informações sobre propriedade de recurso, consulte Propriedade de bucket e objeto do
Amazon S3 (p. 253).
• A ACL do objeto é atualizada, a menos que você oriente o Amazon S3 a alterar a propriedade da réplica
quando os buckets de origem e de destino não forem de propriedade das mesmas contas.
Para obter mais informações, consulte Alterar o proprietário da réplica (p. 670).
Pode levar um tempo até o Amazon S3 sincronizar as duas ACLs. Isso aplica-se apenas a objetos
criados depois que você adiciona uma configuração de replicação ao bucket.
• Tags de objeto, se houver.
• Informações de retenção de bloqueio de objetos do S3, se houver.
Quando o Amazon S3 replica objetos que tenham informações de retenção aplicadas, ele aplica esse
mesmo controles de retenção à suas réplicas, substituindo o período de retenção padrão configurado
nos buckets de destino. Se você não tiver controles de retenção aplicados aos objetos em seu bucket de
origem e replicá-los em buckets de destino que tenham um período de retenção definido, o período de
retenção padrão do bucket de destino será aplicado às réplicas de objeto. Para obter mais informações,
consulte Usar o S3 Object Lock (p. 554).
• Se você fizer uma solicitação DELETE sem especificar um ID de versão de objeto, o Amazon S3
adicionará um marcador de exclusão. O Amazon S3 lida com o marcador de exclusão da seguinte
forma:
• Se estiver usando a versão mais recente da configuração de replicação (ou seja, se você especificar
o elemento Filter em uma regra de configuração da replicação), o Amazon S3 não replicará o
marcador de exclusão, por padrão. No entanto, você pode adicionar replicação de marcadores de
exclusão a regras não baseadas em tags, para obter mais informações, consulte Replicação de
marcadores de exclusão entre intervalos (p. 668).
• Se você não especificar o elemento Filter, o Amazon S3 assumirá que a configuração de replicação
é a versão V1 e replicará marcadores de exclusão resultantes de ações do usuário. No entanto, se o
Amazon S3 excluir um objeto devido a uma ação de ciclo de vida, o marcador de exclusão não será
replicado para os buckets de destino.
• Se você especificar um ID da versão do objeto a ser excluído na solicitação DELETE, o Amazon S3
excluirá essa versão do objeto no bucket de origem. Porém, ele não replica a exclusão no bucket de
destino. Em outras palavras: ele não exclui a mesma versão do objeto dos buckets de destino. Isso
protege os dados contra exclusões mal-intencionadas.
• Objetos que existiam antes de você adicionar a configuração de replicação ao bucket. Em outras
palavras: o Amazon S3 não replica os objetos retroativamente.
• Objetos no bucket de origem que são réplicas criadas por outra regra de replicação. Por exemplo, se
você configurar a replicação em que o bucket A é a origem e o bucket B é o destino. Agora, suponha
que você adicione outra configuração da replicação em que o bucket B é a origem e o bucket C é
o destino. Neste caso, os objetos no bucket B que são réplicas de objetos no bucket A não serão
replicados para o bucket C.
• Objetos no bucket de origem que já foram replicados para um destino diferente. Por exemplo, se você
alterar o bucket de destino em uma configuração de replicação existente, o Amazon S3 não replicará o
objeto novamente.
• Objetos criados com criptografia no lado do servidor usando chaves de criptografia fornecidas pelo
cliente (SSE-C), mas isso pode ser ativado, consulte Proteção de dados usando criptografia no lado do
servidor (p. 195).
• Objetos armazenados na classe de armazenamento S3 Glacier ou S3 Glacier Deep Archive.
Para saber mais sobre o serviço Amazon S3 Glacier, consulte o Guia do desenvolvedor do Amazon S3
Glacier.
• Objetos no bucket de origem para os quais o proprietário do bucket não tenha permissão (quando ele
não for o proprietário do objeto).
Para obter informações sobre como o proprietário de um objeto pode conceder permissões ao
proprietário do bucket, consulte Conceder permissões entre contas para fazer upload de objetos
garantindo que o proprietário do bucket tenha controle total (p. 385).
• Atualizações nos sub-recursos no nível do bucket.
Por exemplo, se você alterar a configuração do ciclo de vida ou adicionar uma configuração de
notificação ao bucket de origem, essas alterações não serão aplicadas ao bucket de destino. Isso
permite termos diferentes configurações nos buckets de origem e de destino.
• Ações realizadas pela configuração do ciclo de vida.
Por exemplo, se a configuração de ciclo de vida estiver habilitada apenas no seu bucket de origem,
o Amazon S3 criará marcadores de exclusão para objetos expirados, mas não replicará esses
marcadores. Caso queira que as mesmas configurações de ciclo de vida sejam aplicadas ao bucket
de origem e de destino, habilite a mesma configuração de ciclo de vida em ambos. Para obter
mais informações sobre a configuração do ciclo de vida, consulte Gerenciando seu ciclo de vida de
armazenamento (p. 569).
Note
• Bucket de origem
• Buckets de destino
• Volume estimado de armazenamento a ser replicado (em terabytes)
• Contagem estimada de objetos de armazenamento a ser replicada
Configuração da replicação
Para habilitar a replicação, basta adicionar uma configuração de replicação ao seu bucket de origem.
A configuração diz ao Amazon S3 para replicar objetos, conforme especificado. Na configuração de
replicação, você deve fornecer o seguinte:
• Os buckets de destino — O bucket ou os buckets nos quais você quer que o Amazon S3 replique os
objetos.
• Os objetos que você deseja replicar — você pode replicar todos os objetos no bucket de origem ou em
um subgrupo. Identifique um subgrupo fornecendo, na configuração, um prefixo do nome da chave, uma
ou mais tags de objeto ou ambos.
Por exemplo, se você configurar uma regra de replicação para replicar somente objetos com o prefixo
de nome da chave Tax/, o Amazon S3 replicará objetos com chaves como Tax/doc1 ou Tax/doc2.
Porém, ele não replica um objeto com a chave Legal/doc3. Se você especificar tanto o prefixo
quanto uma ou mais tags, o Amazon S3 replicará somente objetos com o prefixo de chaves e as tags
específicas.
Você pode configurar a replicação usando a API REST, o AWS SDK, a AWS CLI ou o console do Amazon
S3.
O Amazon S3 também fornece APIs para oferecer suporte à configuração de regras de replicação. Para
obter mais informações, consulte os tópicos a seguir na Referência da API do Amazon Simple Storage
Service:
Tópicos
• Configuração de replicação (p. 622)
• Configuração de permissões (p. 633)
Configuração de replicação
O Amazon S3 armazena uma configuração de replicação como XML. No arquivo XML de configuração de
replicação, você especifica uma função do AWS Identity and Access Management (IAM) e uma ou mais
regras.
<ReplicationConfiguration>
<Role>IAM-role-ARN</Role>
<Rule>
...
</Rule>
<Rule>
...
</Rule>
...
</ReplicationConfiguration>
O Amazon S3 não pode replicar objetos sem sua permissão. Você concede permissões com a função
do IAM especificada na configuração de replicação. O Amazon S3 assume a função do IAM para
replicar objetos em seu nome. Primeiro você precisa fornecer as permissões necessárias à função
do IAM. Para obter mais informações sobre como gerenciar permissões, consulte Configuração de
permissões (p. 633).
Você adiciona várias regras a uma configuração de replicação, caso deseje selecionar um subgrupo
diferente de objetos. Em cada regra, você especifica um filtro que seleciona um subgrupo diferente
de objetos. Por exemplo, você pode optar por replicar objetos com os prefixos de chaves tax/ ou
document/. Você precisaria adicionar duas regras e especificar o filtro do prefixo de chaves tax/ em
uma regra e o prefixo de chaves document/ na outra.
Tópicos
• Configuração da regra básica (p. 623)
• Opcional: Especificação de um filtro (p. 624)
• Configurações adicionais de destino (p. 625)
• Exemplo de configurações de replicação (p. 628)
• Compatibilidade retroativa (p. 632)
• Status indica se a regra está habilitada ou desabilitada. Se uma regra estiver desabilitada, o Amazon
S3 não executará as ações especificadas nela.
• Priority indica qual regra tem precedência sempre que duas ou mais regras de replicação entram em
conflito. O Amazon S3 tentará replicar objetos de acordo com todas as regras de replicação. No entanto,
se houver duas ou mais regras com o mesmo bucket de destino, os objetos serão replicados de acordo
com a regra com a prioridade mais alta. Quanto maior o número, maior a prioridade.
• No momento, os marcadores de exclusão não são replicados. Por isso, defina
DeleteMarkerReplication para Disabled.
Na configuração de destino, você deve fornecer o nome do bucket ou buckets onde quer que o Amazon S3
replique objetos.
...
<Rule>
<ID>Rule-1</ID>
<Status>rule-Enabled-or-Disabled</Status>
<Priority>integer</Priority>
<DeleteMarkerReplication>
<Status>Disabled</Status>
</DeleteMarkerReplication>
<Destination>
<Bucket>arn:aws:s3:::bucket-name</Bucket>
</Destination>
</Rule>
<Rule>
...
</Rule>
...
...
Você também pode especificar outras opções de configuração. Por exemplo: você pode optar pelo uso de
uma classe de armazenamento para réplicas de objetos diferentes da classe do objeto de origem.
Para especificar uma regra com um filtro baseado no prefixo de chaves de um objeto, use o código a
seguir. Você pode especificar apenas um prefixo.
<Rule>
...
<Filter>
<Prefix>key-prefix</Prefix>
</Filter>
...
</Rule>
...
Para especificar uma regra com um filtro baseado nas tags do objeto, use o código a seguir. Você pode
especificar uma ou mais tags de objeto.
<Rule>
...
<Filter>
<And>
<Tag>
<Key>key1</Key>
<Value>value1</Value>
</Tag>
<Tag>
<Key>key2</Key>
<Value>value2</Value>
</Tag>
...
</And>
</Filter>
...
</Rule>
...
Para especificar um filtro de regra com uma combinação de um prefixo de chaves e tags de objeto, use o
código a seguir. Você envolve esses filtros em um elemento pai AND. O Amazon S3 executa uma operação
lógica AND para combinar esses filtros. Em outras palavras: a regra se aplica ao subgrupo de objetos com
o prefixo de chaves específico e as tags específicas.
<Rule>
...
<Filter>
<And>
<Prefix>key-prefix</Prefix>
<Tag>
<Key>key1</Key>
<Value>value1</Value>
</Tag>
<Tag>
<Key>key2</Key>
<Value>value2</Value>
</Tag>
...
</Filter>
...
</Rule>
...
Note
Se você especificar uma regra com uma tag de filtro vazia, a regra será aplicada a todos os
objetos no bucket.
...
<Destination>
<Bucket>arn:aws:s3:::destination-bucket</Bucket>
</Destination>
...
Tópicos
• Especificar classe de armazenamento (p. 626)
• Adicionar vários buckets de destino (p. 626)
• Especificar parâmetros diferentes para cada regra de replicação com vários buckets de
destino (p. 626)
• Alterar a propriedade da réplica (p. 627)
• Ativar controle do tempo de replicação do S3 (S3 RTC) (p. 627)
• Replicar objetos criados com criptografia no lado do servidor usando o AWS KMS (p. 628)
Você pode especificar a classe de armazenamento para as réplicas do objeto. Por padrão, o Amazon S3
usa a classe de armazenamento do objeto de origem para criar as réplicas do objeto.
...
<Destination>
<Bucket>arn:aws:s3:::destinationbucket</Bucket>
<StorageClass>storage-class</StorageClass>
</Destination>
...
Você pode adicionar vários buckets de destino em uma única configuração de replicação, como segue.
...
<Rule>
<ID>Rule-1</ID>
<Status>rule-Enabled-or-Disabled</Status>
<Priority>integer</Priority>
<DeleteMarkerReplication>
<Status>Enabled-or-Disabled</Status>
</DeleteMarkerReplication>
<Destination>
<Bucket>arn:aws:s3:::DOC-EXAMPLE-BUCKET1</Bucket>
</Destination>
</Rule>
<Rule>
<ID>Rule-2</ID>
<Status>rule-Enabled-or-Disabled</Status>
<Priority>integer</Priority>
<DeleteMarkerReplication>
<Status>Enabled-or-Disabled</Status>
</DeleteMarkerReplication>
<Destination>
<Bucket>arn:aws:s3:::DOC-EXAMPLE-BUCKET2</Bucket>
</Destination>
</Rule>
...
Especificar parâmetros diferentes para cada regra de replicação com vários buckets de destino
Ao adicionar vários buckets de destino em uma única configuração de replicação, você pode especificar
parâmetros diferentes para cada regra de replicação, da seguinte forma.
...
<Rule>
<ID>Rule-1</ID>
<Status>rule-Enabled-or-Disabled</Status>
<Priority>integer</Priority>
<DeleteMarkerReplication>
<Status>Disabled</Status>
</DeleteMarkerReplication>
<Metrics>
<Status>Enabled</Status>
<EventThreshold>
<Minutes>15</Minutes>
</EventThreshold>
</Metrics>
<Destination>
<Bucket>arn:aws:s3:::DOC-EXAMPLE-BUCKET1</Bucket>
</Destination>
</Rule>
<Rule>
<ID>Rule-2</ID>
<Status>rule-Enabled-or-Disabled</Status>
<Priority>integer</Priority>
<DeleteMarkerReplication>
<Status>Enabled</Status>
</DeleteMarkerReplication>
<Metrics>
<Status>Enabled</Status>
<EventThreshold>
<Minutes>15</Minutes>
</EventThreshold>
</Metrics>
<ReplicationTime>
<Status>Enabled</Status>
<Time>
<Minutes>15</Minutes>
</Time>
</ReplicationTime>
<Destination>
<Bucket>arn:aws:s3:::DOC-EXAMPLE-BUCKET2</Bucket>
</Destination>
</Rule>
...
Quando os buckets de origem e de destino não forem de propriedade da mesma conta, você poderá
alterar a propriedade da réplica para a conta da AWS que é proprietária do bucket de destino, adicionando
o elemento AccessControlTranslation:
...
<Destination>
<Bucket>arn:aws:s3:::destinationbucket</Bucket>
<Account>destination-bucket-owner-account-id</Account>
<AccessControlTranslation>
<Owner>Destination</Owner>
</AccessControlTranslation>
</Destination>
...
Se você não adicionar esse elemento à configuração de replicação, as réplicas serão de propriedade da
mesma conta da AWS proprietária do objeto de origem. Para obter mais informações, consulte Alterar o
proprietário da réplica (p. 670).
Você pode habilitar o Controle do tempo de replicação do S3 (S3 RTC) na configuração de replicação.
O S3 RTC replica a maioria dos objetos em segundos e 99,99 por cento dos objetos em 15 minutos
(respaldado por um acordo de nível de serviço).
Note
...
<Destination>
<Bucket>arn:aws:s3:::destinationbucket</Bucket>
<Metrics>
<Status>Enabled</Status>
<EventThreshold>
<Minutes>15</Minutes>
</EventThreshold>
</Metrics>
<ReplicationTime>
<Status>Enabled</Status>
<Time>
<Minutes>15</Minutes>
</Time>
</ReplicationTime>
</Destination>
...
Para obter mais informações, consulte Atendimento aos requisitos de conformidade usando o
Controle do tempo de replicação do S3 (S3 RTC) (p. 665). Para obter exemplos de API, consulte
PutBucketReplication na Referência da API do Amazon Simple Storage Service.
Replicar objetos criados com criptografia no lado do servidor usando o AWS KMS
O bucket de origem pode conter objetos criados com criptografia no lado do servidor usando as chaves
armazenadas no AWS KMS. Por padrão, o Amazon S3 não replica esses objetos. Opcionalmente, você
pode direcionar o Amazon S3 para replicar esses objetos. Primeiro, opte explicitamente por esse recurso
adicionando o elemento SourceSelectionCriteria e forneça a CMK do AWS KMS (para a região da
AWS do bucket de destino) a ser usada para criptografar réplicas de objetos.
...
<SourceSelectionCriteria>
<SseKmsEncryptedObjects>
<Status>Enabled</Status>
</SseKmsEncryptedObjects>
</SourceSelectionCriteria>
<Destination>
<Bucket>arn:aws:s3:::dest-bucket-name</Bucket>
<EncryptionConfiguration>
<ReplicaKmsKeyID>AWS KMS key IDs to use for encrypting object replicas</
ReplicaKmsKeyID>
</EncryptionConfiguration>
</Destination>
...
Para obter mais informações, consulte Replicação de objetos criados com criptografia no lado do servidor
(SSE) usando CMKs do AWS KMS (p. 672).
A configuração de replicação básica a seguir especifica uma regra. A regra especifica uma função do
IAM que o Amazon S3 pode assumir e um bucket de destino para único para réplicas de objetos. A regra
Status indica que a regra está em vigor.
<Destination><Bucket>arn:aws:s3:::destinationbucket</Bucket></Destination>
</Rule>
</ReplicationConfiguration>
Para escolher um subgrupo de objetos a serem replicados, adicione um filtro. Na configuração a seguir, o
filtro especifica um prefixo de chaves do objeto. Essa regra se aplica aos objetos que têm o prefixo Tax/
no nome da chave.
<Filter>
<Prefix>Tax/</Prefix>
</Filter>
<Destination><Bucket>arn:aws:s3:::destinationbucket</Bucket></Destination>
</Rule>
</ReplicationConfiguration>
Na configuração a seguir, o filtro especifica um prefixo e duas tags. A regra se aplica ao subgrupo de
objetos com o prefixo de chaves e as tags especificados. Mais especificamente, ela se aplica ao objeto
com o prefixo Tax/ no nome da chave e às duas tags de objeto especificadas. A prioridade não se aplica
porque há somente uma regra.
<Filter>
<And>
<Prefix>Tax/</Prefix>
<Tag>
<Tag>
<Key>tagA</Key>
<Value>valueA</Value>
</Tag>
</Tag>
<Tag>
<Tag>
<Key>tagB</Key>
<Value>valueB</Value>
</Tag>
</Tag>
</And>
</Filter>
<Destination><Bucket>arn:aws:s3:::destinationbucket</Bucket></Destination>
</Rule>
</ReplicationConfiguration>
Você pode especificar uma classe de armazenamento para as réplicas conforme a seguir.
<ReplicationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Role>arn:aws:iam::account-id:role/role-name</Role>
<Rule>
<Status>Enabled</Status>
<Destination>
<Bucket>arn:aws:s3:::destinationbucket</Bucket>
<StorageClass>storage-class</StorageClass>
</Destination>
</Rule>
</ReplicationConfiguration>
Você pode especificar uma classe de armazenamento à qual o Amazon S3 ofereça suporte.
Example
• Cada regra filtra em um prefixo de chave diferente para que cada regra se aplique a um subconjunto
distinto de objetos. O Amazon S3 replica objetos com nomes de chave Tax/doc1.pdf e Project/
project1.txt, mas não replica objetos com o nome da chave PersonalDoc/documentA.
• A prioridade da regra é irrelevante, pois as regras se aplicam a dois grupos distintos de objetos. O
exemplo a seguir mostra o que acontece quando aplicamos uma prioridade de regras.
• A segunda regra especifica uma classe de armazenamento para réplicas de objetos. O Amazon S3 usa
a classe de armazenamento especificada para essas réplicas de objetos.
<ReplicationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Role>arn:aws:iam::account-id:role/role-name</Role>
<Rule>
<Status>Enabled</Status>
<Priority>1</Priority>
<DeleteMarkerReplication>
<Status>string</Status>
</DeleteMarkerReplication>
<Filter>
<Prefix>Tax</Prefix>
</Filter>
<Status>Enabled</Status>
<Destination>
<Bucket>arn:aws:s3:::DOC-EXAMPLE-BUCKET1</Bucket>
</Destination>
...
</Rule>
<Rule>
<Status>Enabled</Status>
<Priority>2</Priority>
<DeleteMarkerReplication>
<Status>string</Status>
</DeleteMarkerReplication>
<Filter>
<Prefix>Project</Prefix>
</Filter>
<Status>Enabled</Status>
<Destination>
<Bucket>arn:aws:s3:::DOC-EXAMPLE-BUCKET1</Bucket>
<StorageClass>STANDARD_IA</StorageClass>
</Destination>
...
</Rule>
</ReplicationConfiguration>
Nessa configuração, as duas regras especificam filtros com prefixos de chaves sobrepostos, star/ e
starship. As duas regras se aplicam aos objetos com o nome de chave starship-x. Nesse caso,
o Amazon S3 usa a prioridade da regra para determinar qual regra deve ser aplicada. Quanto maior o
número, maior a prioridade.
<ReplicationConfiguration>
<Role>arn:aws:iam::AcctID:role/role-name</Role>
<Rule>
<Status>Enabled</Status>
<Priority>1</Priority>
<DeleteMarkerReplication>
<Status>string</Status>
</DeleteMarkerReplication>
<Filter>
<Prefix>star</Prefix>
</Filter>
<Destination>
<Bucket>arn:aws:s3:::DOC-EXAMPLE-BUCKET1</Bucket>
</Destination>
</Rule>
<Rule>
<Status>Enabled</Status>
<Priority>2</Priority>
<DeleteMarkerReplication>
<Status>string</Status>
</DeleteMarkerReplication>
<Filter>
<Prefix>starship</Prefix>
</Filter>
<Destination>
<Bucket>arn:aws:s3:::DOC-EXAMPLE-BUCKET1</Bucket>
</Destination>
</Rule>
</ReplicationConfiguration>
Para obter exemplos de demonstrações, consulte Orientações: Configuração da replicação (p. 636).
Para obter mais informações sobre a estrutura XML da configuração de replicação, consulte
PutBucketReplication na Referência da API do Amazon Simple Storage Service.
Compatibilidade retroativa
A versão mais recente do XML de configuração da replicação é V2. As configurações de replicação
XML V2 são aquelas que contêm o elemento Filter para regras e regras que especificam o Controle
do tempo de replicação do S3 (S3 RTC). Nas configurações de replicação de V2, o Amazon S3 não
replica marcadores de exclusão para regras com base em tag. Portanto, você deve definir o elemento
DeleteMarkerReplication como Disabled se estiver usando uma regra V2 baseada em tags.
Para ver a versão de configuração de replicação, você pode usar a API GetBucketReplication. Para
obter mais informações, consulte, GetBucketReplication na Referência da API do Amazon Simple Storage
Service.
Para compatibilidade com versões anteriores, o Amazon S3 continua a oferecer suporte à configuração de
replicação XML V1. Se você tiver usado a configuração da replicação XML V1, leve em consideração as
questões a seguir que afetam a compatibilidade reversa:
• A V2 do XML de configuração da replicação inclui o elemento Filter para regras. Com o elemento
Filter, você pode especificar filtros de objeto com base no prefixo de chaves do objeto, tags ou ambos
para colocar dentro do escopo os objetos aos quais a regra se aplica. A V1 do XML de configuração
da replicação oferecia suporte à filtragem com base somente no prefixo da chave. Nesse caso, você
adiciona o Prefix diretamente como elemento-filho do elemento Rule, conforme o exemplo a seguir.
</Rule>
</ReplicationConfiguration>
...
<Rule>
<ID>Rule-1</ID>
<Status>rule-Enabled-or-Disabled</Status>
<Priority>integer</Priority>
<DeleteMarkerReplication>
<Status>Disabled</Status>
</DeleteMarkerReplication>
<Destination>
<Bucket>arn:aws:s3:::bucket-name</Bucket>
</Destination>
</Rule>
...
Configuração de permissões
Ao definir a replicação, é preciso adquirir as permissões necessárias, da seguinte forma:
• Crie uma função do IAM: o Amazon S3 precisa de permissões para replicar objetos em seu nome. Você
concede essas permissões criando uma função do IAM e especificando a função na configuração da
replicação.
• Quando os buckets de origem e de destino não forem de propriedade da mesma conta, o proprietário do
bucket de destino deverá conceder ao proprietário do bucket de origem as permissões para armazenar
as réplicas.
Tópicos
• Criar uma função do IAM (p. 633)
• Conceder permissões quando os buckets de origem e de destino forem de propriedade de contas
diferentes da AWS (p. 635)
Por padrão, todos os recursos do Amazon S3 — buckets, objetos e sub-recursos relacionados — são
privados e somente o proprietário do recurso pode acessá-lo. O Amazon S3 precisa de permissões de
leitura e replicação de objetos do bucket de origem. Você concede essas permissões criando uma função
do IAM e especificando a função na configuração da replicação.
Esta seção explica a política de confiança e a política de permissão mínima necessária. As demonstrações
de exemplo fornecem instruções passo a passo para criar uma função do IAM. Para obter mais
informações, consulte Orientações: Configuração da replicação (p. 636).
• Veja a seguir uma política de confiança na qual você identifica o Amazon S3 como o principal de serviço
que pode assumir a função.
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Principal":{
"Service":"s3.amazonaws.com"
},
"Action":"sts:AssumeRole"
}
]
}
Para obter mais informações sobre funções do IAM, consulte Funções do IAM no Guia do Usuário do
IAM.
• Veja a seguir uma política de acesso em que você concede à função permissões para as tarefas de
replicação em seu nome. Quando o Amazon S3 assumir a função, ele terá as permissões que você
especificar nessa política.
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"s3:GetReplicationConfiguration",
"s3:ListBucket"
],
"Resource":[
"arn:aws:s3:::SourceBucket"
]
},
{
"Effect":"Allow",
"Action":[
"s3:GetObjectVersionForReplication",
"s3:GetObjectVersionAcl",
"s3:GetObjectVersionTagging"
],
"Resource":[
"arn:aws:s3:::SourceBucket/*"
]
},
{
"Effect":"Allow",
"Action":[
"s3:ReplicateObject",
"s3:ReplicateDelete",
"s3:ReplicateTags"
],
"Resource":"arn:aws:s3:::DestinationBucket/*"
}
]
}
Note
Para obter uma lista de ações do Amazon S3, consulte Ações do Amazon S3 (p. 273).
Important
Mais especificamente, a conta da AWS proprietária da função do IAM precisa ter permissões
para as ações que conceder à função do IAM.
Por exemplo, suponha que o bucket de origem contenha objetos pertencentes a outra conta
da AWS. O proprietário dos objetos deve conceder explicitamente à conta da AWS que é
de propriedade da função do IAM as permissões exigidas por meio da ACL do objeto. Caso
contrário, o Amazon S3 não conseguirá acessar os objetos e haverá falha na replicação dos
objetos. Para obter informações sobre as permissões da ACL, consulte Visão geral da lista de
controle de acesso (ACL) (p. 440).
As permissões descritas aqui estão relacionadas à configuração mínima da replicação. Se optar
por adicionar configurações de replicação opcionais, será necessário conceder permissões
adicionais ao Amazon S3. Para obter mais informações, consulte Configurações de replicação
adicionais (p. 663).
{
"Version":"2012-10-17",
"Id":"PolicyForDestinationBucket",
"Statement":[
{
"Sid":"Permissions on objects",
"Effect":"Allow",
"Principal":{
"AWS":"arn:aws:iam::SourceBucket-AcctID:source-acct-IAM-role"
},
"Action":[
"s3:ReplicateDelete",
"s3:ReplicateObject"
],
"Resource":"arn:aws:s3:::destinationbucket/*"
},
{
"Sid":"Permissions on bucket",
"Effect":"Allow",
"Principal":{
"AWS":"arn:aws:iam::SourceBucket-AcctID:source-acct-IAM-role"
},
"Action": [
"s3:List*",
"s3:GetBucketVersioning",
Versão da API 2006-03-01
635
Amazon Simple Storage Service Guia do usuário
Configuração da replicação
"s3:PutBucketVersioning"
],
"Resource":"arn:aws:s3:::destinationbucket"
}
]
}
Para ver um exemplo, consulte Configuração da replicação para os buckets de origem e destino forem de
propriedade de contas diferentes (p. 649).
...
"Statement":[
{
"Effect":"Deny",
"Principal":{
"AWS":"arn:aws:iam::SourceBucket-AcctID:source-acct-IAM-role"
},
"Action":"s3:ReplicateTags",
"Resource":"arn:aws:s3:::DestinationBucket/*"
}
]
...
Quando diferentes contas da AWS tiverem a propriedade dos buckets de origem de destino, você poderá
dizer ao Amazon S3 para alterar a propriedade da réplica para a conta da AWS à qual pertence o bucket
de destino. Isso se chama opção de substituição do proprietário. Para obter mais informações, consulte
Alterar o proprietário da réplica (p. 670).
Para obter informações sobre os AWS SDKs, consulte AWS SDK para Java e AWS SDK para .NET.
Tópicos
Se você especificar um ID da versão do objeto a ser excluído, o Amazon S3 excluirá essa versão do objeto
no bucket de origem. No entanto, ele não replica a exclusão no bucket de destino. Em outras palavras: ele
não exclui a mesma versão do objeto do bucket de destino. Isso protege os dados contra exclusões mal-
intencionadas.
Quando você adiciona uma regra de replicação a um bucket, ela fica ativada por padrão, portanto, começa
a funcionar assim que é salva.
Neste exemplo, você configura a replicação para os buckets de origem e de destino que são de
propriedade da mesma conta da AWS. São fornecidos exemplos para usar o console do Amazon S3, a
interface da linha de comando da AWS (CLI da AWS) e o AWS SDK para Java e o AWS SDK para .NET.
Uso do console do S3
Siga essas etapas para configurar uma replicação quando o bucket de destino estiver na mesma conta da
AWS que o bucket de origem.
Se o bucket de destino estiver um uma conta diferente do bucket de origem, você deverá adicionar uma
política ao bucket de destino. Assim, será possível conceder ao proprietário da conta do bucket de origem
permissão para replicar objetos no bucket de destino. Para obter mais informações, consulte Conceder
permissões quando os buckets de origem e de destino forem de propriedade de contas diferentes da
AWS (p. 635).
4. Em Rule name (Nome da regra), insira um nome para a regra, ajudando a identificá-la posteriormente.
O nome é obrigatório e precisa ser exclusivo dentro do bucket.
5. Configure uma função do AWS Identity and Access Management (IAM) que o Amazon S3 possa
assumir para replicar objetos em seu nome.
Para configurar uma função do IAM, na seção Replication rule configuration (Configuração da regra de
replicação), em IAM role (Função do IAM), siga um destes procedimentos:
• Recomendamos que você escolha Create new role (Criar nova função) para que o Amazon S3 crie
uma nova função do IAM para você. Quando você salva a regra, uma nova política é gerada para a
função do IAM que coincide com os buckets de origem e de destino que você escolher.
• Você pode usar uma função do IAM existente. Se fizer isso, escolha uma função que conceda ao
Amazon S3 as permissões necessárias para a replicação. A replicação falhará se essa função não
conceder ao Amazon S3 permissões suficientes para seguir sua regra de replicação.
Important
Quando você adiciona uma regra de replicação a um bucket, você deve ter a permissão
iam:PassRole para poder transmitir a função do IAM que concede permissões de
replicação do Amazon S3. Para obter mais informações, consulte Conceder permissões ao
usuário para passar uma função a um serviço da AWS no Guia do usuário do IAM.
6. Em Status, Enabled (Habilitado) é selecionado por padrão. Uma regra ativada começa a funcionar
assim que você a salva. Se você quiser habilitar a regra posteriormente, selecione Disabled
(Desabilitado).
7. Se o bucket tiver regras de replicação existentes, você será instruído a definir uma prioridade
para a regra. Defina uma prioridade para a regra, de maneira a evitar conflitos causados pelos
objetos incluídos no escopo de mais de uma regra. No caso de sobreposição de regras, o Amazon
S3 usa a prioridade da regra para determinar qual regra aplicar. Quanto maior o número, maior
a prioridade. Para obter mais informações sobre prioridade de regra, consulte Configuração de
replicação (p. 622).
8. Na Replication rule configuration (Configuração da regra de replicação), em Source bucket (Bucket de
origem), você tem as seguintes opções para definir a origem da replicação:
• Para replicar todo o bucket, escolha This rule applies to all objects in the bucket (Esta regra se
aplica a todos os objetos no bucket).
• Para replicar todos os objetos que tenham o mesmo prefixo, escolha Limit the scope of this rule
using one or more filters (Limitar o escopo desta regra usando um ou mais filtros). Isso limita
a replicação a todos os objetos que tenham nomes que começam com a string (por exemplo,
pictures). Insira um prefixo na caixa.
Note
Se você inserir um prefixo que seja o nome de uma pasta, é preciso usar / (barra) como o
último caractere (por exemplo, pictures/).
• Para replicar todos os objetos com uma ou mais tags de objeto, selecione Add tag (Adicionar tag)
e insira o par de valores de chave nas caixas. Repita o procedimento para adicionar outra tag.
Você pode combinar um prefixo e tags. Para obter mais informações sobre tags de objeto, consulte
Categorizando seu armazenamento usando tags (p. 683).
O novo esquema é compatível com os filtros de prefixo e tags e com a priorização das regras. Para
obter mais informações sobre o novo esquema, consulte Compatibilidade retroativa (p. 632).
Para obter mais informações sobre o XML usado com a API do Amazon S3 que funciona atrás da
interface do usuário, consulte Configuração de replicação (p. 622). O novo esquema é descrito como
configuração de replicação XML V2.
9. Em Destination (Destino), selecione o bucket no qual você deseja que o Amazon S3 replique objetos.
Note
• Para replicar para um bucket ou buckets em sua conta, selecione Choose a bucket in this account
(Escolher um bucket nesta conta) e digite ou procure o bucket de destino.
• Para replicar para um bucket ou buckets em uma conta da AWS diferente, selecione Choose a
bucket in another account (Escolher um bucket em outra conta) e insira o ID da conta do bucket de
destino e o nome.
Se o destino estiver um uma conta diferente do bucket de origem, você deverá adicionar uma
política de bucket aos buckets de destino para conceder ao proprietário da conta do bucket
de origem permissão para replicar objetos. Para obter mais informações, consulte Conceder
permissões quando os buckets de origem e de destino forem de propriedade de contas diferentes
da AWS (p. 635).
Note
Se o versionamento não estiver ativado no bucket de destino, você receberá uma advertência
que contém um botão Enable versioning (Habilitar versionamento). Escolha esse botão para
habilitar o versionamento no bucket.
10. Você tem as seguintes opções adicionais ao definir o Destination (Destino):
• Se você quiser habilitar a Object Ownership (Propriedade do objeto) para ajudar a padronizar
a propriedade de novos objetos no bucket de destino, escolha Change object ownership to the
destination bucket owner (Alterar propriedade do objeto para o proprietário do bucket de destino).
Para obter mais informações sobre essa opção, consulte Controlar a propriedade de objetos
carregados usando a propriedade de objetos do S3 (p. 500).
• Se você quiser replicar seus dados a uma classe de armazenamento específica no destino, escolha
Change the storage class for the replicated objects (Alterar a classe de armazenamento dos objetos
replicados). Em seguida, escolha a classe de armazenamento que você deseja usar para os objetos
replicados no destino. Se você não selecionar essa opção, a classe de armazenamento para
objetos replicados será a mesma classe dos objetos originais.
• Se quiser habilitar a replicação de marcadores de exclusão na configuração de replicação,
selecione Delete marker replication (Excluir replicação de marcador). Para obter mais informações,
consulte Replicação de marcadores de exclusão entre intervalos (p. 668).
• Se você quiser habilitar a sincronização de modificação de réplica do Amazon S3 em sua
configuração de replicação, selecione Replica modification sync (Sincronização de modificação
de réplica). Para obter mais informações, consulte Replicação de alterações de metadados com
sincronização de modificação de réplica do Amazon S3 (p. 669).
• Se você quiser habilitar métricas de replicação do S3 na configuração de replicação, selecione
Replication metrics and events (Métricas e eventos de replicação). Para obter mais informações,
consulte Monitoramento do progresso com métricas de replicação e notificações de eventos do
Amazon S3 (p. 663).
• Se você quiser habilitar o Controle do tempo de replicação do S3 (S3 RTC) na configuração de
replicação, selecione S3 Replication Time Control (Controle do tempo de replicação do S3). Para
obter mais informações sobre essa opção, consulte Atendimento aos requisitos de conformidade
usando o Controle do tempo de replicação do S3 (S3 RTC) (p. 665).
Note
Quando você usa métricas de replicação S3 RTC ou S3, aplicam-se taxas adicionais.
11. Para replicar objetos no bucket de origem que são criptografados com AWS Key Management Service
(AWS KMS), em Replication criteria (Critérios de replicação), selecione Replicate objects encrypted
with AWS KMS (Replicar objetos criptografados com AWS KMS). Em AWS KMS key for encrypting
destination objects (Chave do AWS KMS para criptografar objetos de destino) estão as chaves de
origem que você permite que a replicação use. Todas as CMKs de origem são incluídas por padrão. É
possível optar por refinar a seleção de CMKs.
Os objetos criptografados pelas CMKs do AWS KMS que você não seleciona não são replicados. A
CMK ou um grupo de CMKs é escolhido para você, mas você pode escolher as CMKs, se preferir.
Para obter informações sobre como usar o AWS KMS com replicação, consulte Replicação de objetos
criados com criptografia no lado do servidor (SSE) usando CMKs do AWS KMS (p. 672).
Important
Ao replicar objetos que estão criptografados com AWS KMS, a taxa de solicitações do
AWS KMS dobra na região de origem e aumenta na região de destino pelo mesmo valor.
Essas taxas de chamada aprimoradas ao AWS KMS se devem à forma com que os dados
são recriptografados usando a chave mestra do cliente (CMK) que você define na região
de destino de replicação. O AWS KMS tem um limite de taxas de solicitação por conta de
chamada por região. Para obter informações sobre os padrões de limite, consulte Limites
do AWS KMS - Solicitações por segundo: varia no Guia do desenvolvedor do AWS Key
Management Service.
Se a taxa de solicitações do objeto PUT do Amazon S3 durante a replicação é maior que
a metade do limite da taxa padrão do AWS KMS para sua conta, recomendamos que você
solicite um aumento do limite de taxa de solicitação do AWS KMS. Para solicitar um aumento,
crie um caso no AWS Support Center em Entre em contato conosco. Por exemplo, suponha
que a sua taxa de solicitação do objeto PUT seja 1.000 solicitações por segundo e você use o
AWS KMS para criptografar seus objetos. Nesse caso, recomendamos que você solicite que
o AWS Support aumente o limite da taxa do AWS KMS para 2.500 solicitações por segundo,
nas regiões de origem e de destino (se diferentes), para garantir que não haja nenhuma
limitação pelo AWS KMS.
Para ver a taxa de solicitação de objeto PUT no bucket de origem, visualize PutRequests
nas métricas de solicitação do Amazon CloudWatch para o Amazon S3. Para obter
informações sobre como visualizar métricas do CloudWatch, consulte Usar o console do
S3 (p. 865)
Se você optar por replicar objetos criptografados com o AWS KMS, insira o nome de recurso
da Amazon (ARN) da CMK do AWS KMS para criptografar réplicas no bucket de destino. Você
pode encontrar o ARN da CMK do AWS KMS no console do IAM, em Encryption keys (Chaves de
criptografia). Outra possibilidade é escolher o nome da CMK na lista suspensa.
Para obter mais informações sobre como criar uma CMK do AWS KMS, consulte Criar chaves no Guia
do desenvolvedor do AWS Key Management Service.
Important
O console do Amazon S3 lista apenas 100 CMKs do AWS KMS por região da AWS. Se você
tiver mais de 100 CMKs na mesma região, será possível ver somente as primeiras 100 CMKs
no console do S3. Para usar uma CMK do KMS que não esteja listada no console, escolha
Custom KMS ARN (Personalizar o ARN do KMS) e insira o ARN da CMK do KMS.
12. Para terminar, escolha Save (Salvar).
13. Depois de salvar sua regra, você pode editar, ativar, desativar ou excluir sua regra selecionando sua
regra e escolhendo Edit rule (Editar regra).
Para usar a CLI da AWS para configurar a replicação quando os buckets de origem e de destino forem
de propriedade da mesma conta da AWS, crie buckets de origem e destino, habilite o versionamento
neles, crie uma função do IAM que conceda permissão ao Amazon S3 para replicar objetos e adicione a
configuração da replicação ao bucket de origem. Para verificar sua configuração, teste-a.
1. Defina um perfil de credenciais para a CLI da AWS. Neste exemplo, usamos o nome de perfil acctA.
Para obter informações sobre como configurar perfis de credenciais, consulte Perfis nomeados no
Guia do usuário da interface da linha de comando da AWS.
Important
O perfil que você usar para este exercício deve ter as permissões necessárias. Por exemplo,
na configuração da replicação, especifique a função do IAM que o Amazon S3 pode assumir.
Você só pode fazer isso se o perfil usado tiver a permissão iam:PassRole. Para obter mais
informações, consulte Conceder permissões ao usuário para passar uma função a um serviço
da AWS no Guia do usuário do IAM. Se você usar as credenciais do usuário administrador
para criar um perfil nomeado, poderá executar todas as tarefas.
2. Crie um bucket de origem e habilite o versionamento nele. O código a seguir cria um bucket de
origem na região Leste dos EUA (Norte da Virgínia) (us-east-1).
3. Crie um bucket de destino e habilite o versionamento nele. O código a seguir cria um bucket de
destino na região Oeste dos EUA (Oregon) (us-west-2).
Note
4. Crie uma função do IAM. Você especifica essa função na configuração da replicação que adiciona ao
bucket de origem posteriormente. O Amazon S3 assume essa função para replicar objetos em seu
nome. A função do IAM é criada em duas etapas:
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Principal":{
"Service":"s3.amazonaws.com"
},
"Action":"sts:AssumeRole"
}
]
}
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"s3:GetObjectVersionForReplication",
"s3:GetObjectVersionAcl",
"s3:GetObjectVersionTagging"
],
"Resource":[
"arn:aws:s3:::source-bucket/*"
]
},
{
"Effect":"Allow",
"Action":[
"s3:ListBucket",
"s3:GetReplicationConfiguration"
],
"Resource":[
"arn:aws:s3:::source-bucket"
]
},
{
"Effect":"Allow",
"Action":[
"s3:ReplicateObject",
"s3:ReplicateDelete",
"s3:ReplicateTags"
],
"Resource":"arn:aws:s3:::destination-bucket/*"
}
]
}
ii. Execute o comando a seguir para criar uma política e ligá-la à função.
a. Embora a API do Amazon S3 exija configuração da replicação como XML, a CLI da AWS exige
que você especifique a configuração da replicação como JSON. Salve o JSON a seguir em um
arquivo chamado replication.json no diretório local do seu computador.
{
"Role": "IAM-role-ARN",
"Rules": [
{
"Status": "Enabled",
"Priority": 1,
"DeleteMarkerReplication": { "Status": "Disabled" },
"Filter" : { "Prefix": "Tax"},
"Destination": {
"Bucket": "arn:aws:s3:::destination-bucket"
}
}
]
}
Use os exemplos de código a seguir para adicionar uma configuração de replicação a um bucket com o
AWS SDK para Java e o AWS SDK para .NET, respectivamente.
Java
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.identitymanagement.AmazonIdentityManagement;
import com.amazonaws.services.identitymanagement.AmazonIdentityManagementClientBuilder;
import com.amazonaws.services.identitymanagement.model.CreateRoleRequest;
import com.amazonaws.services.identitymanagement.model.PutRolePolicyRequest;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.model.BucketReplicationConfiguration;
import com.amazonaws.services.s3.model.BucketVersioningConfiguration;
import com.amazonaws.services.s3.model.CreateBucketRequest;
import com.amazonaws.services.s3.model.DeleteMarkerReplication;
import com.amazonaws.services.s3.model.DeleteMarkerReplicationStatus;
import com.amazonaws.services.s3.model.ReplicationDestinationConfig;
import com.amazonaws.services.s3.model.ReplicationRule;
import com.amazonaws.services.s3.model.ReplicationRuleStatus;
import com.amazonaws.services.s3.model.SetBucketVersioningConfigurationRequest;
import com.amazonaws.services.s3.model.StorageClass;
import com.amazonaws.services.s3.model.replication.ReplicationFilter;
import com.amazonaws.services.s3.model.replication.ReplicationFilterPredicate;
import com.amazonaws.services.s3.model.replication.ReplicationPrefixPredicate;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
try {
.withCredentials(new ProfileCredentialsProvider())
.build();
StringBuilder trustPolicy = new StringBuilder();
trustPolicy.append("{\\r\\n ");
trustPolicy.append("\\\"Version\\\":\\\"2012-10-17\\\",\\r\\n ");
trustPolicy.append("\\\"Statement\\\":[\\r\\n {\\r\\n ");
trustPolicy.append("\\\"Effect\\\":\\\"Allow\\\",\\r\\n \\\"Principal\\
\":{\\r\\n ");
trustPolicy.append("\\\"Service\\\":\\\"s3.amazonaws.com\\\"\\r\\n },\
\r\\n ");
trustPolicy.append("\\\"Action\\\":\\\"sts:AssumeRole\\\"\\r\\n }\\r\\n
]\\r\\n}");
iamClient.createRole(createRoleRequest);
iamClient.putRolePolicy(putRolePolicyRequest);
}
}
C#
O exemplo de código do AWS SDK para .NET a seguir adiciona a configuração da replicação a um
bucket e, depois, a recupera. Para usar esse código, dê nomes aos buckets e o nome de recurso
da Amazon (ARN) à função do IAM. Para obter instruções sobre como criar e testar um exemplo
funcional, consulte Executar os exemplos de código do Amazon S3 .NET (p. 1044).
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class CrossRegionReplicationTest
{
private const string sourceBucket = "*** source bucket ***";
// Bucket ARN example - arn:aws:s3:::destinationbucket
private const string destinationBucketArn = "*** destination bucket ARN ***";
private const string roleArn = "*** IAM Role ARN ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint sourceBucketRegion =
RegionEndpoint.USWest2;
private static IAmazonS3 s3Client;
public static void Main()
{
s3Client = new AmazonS3Client(sourceBucketRegion);
EnableReplicationAsync().Wait();
}
static async Task EnableReplicationAsync()
{
try
{
ReplicationConfiguration replConfig = new ReplicationConfiguration
{
Role = roleArn,
Rules =
{
new ReplicationRule
{
Prefix = "Tax",
Status = ReplicationRuleStatus.Enabled,
Destination = new ReplicationDestination
{
BucketArn = destinationBucketArn
}
}
}
};
{
Console.WriteLine("Error encountered on server. Message:'{0}' when
writing an object", e.Message);
}
catch (Exception e)
{
Console.WriteLine("Unknown encountered on server. Message:'{0}' when
writing an object", e.Message);
}
}
private static async Task RetrieveReplicationConfigurationAsync(IAmazonS3
client)
{
// Retrieve the configuration.
GetBucketReplicationRequest getRequest = new GetBucketReplicationRequest
{
BucketName = sourceBucket
};
GetBucketReplicationResponse getResponse = await
client.GetBucketReplicationAsync(getRequest);
// Print.
Console.WriteLine("Printing replication configuration information...");
Console.WriteLine("Role ARN: {0}", getResponse.Configuration.Role);
foreach (var rule in getResponse.Configuration.Rules)
{
Console.WriteLine("ID: {0}", rule.Id);
Console.WriteLine("Prefix: {0}", rule.Prefix);
Console.WriteLine("Status: {0}", rule.Status);
}
}
}
}
Para obter mais informações sobre como configurar a replicação usando criptografia de vários lados com o
AWS Key Management Service em cenários entre contas, consulte Conceder permissões adicionais para
cenários entre contas (p. 677).
1. Neste exemplo, crie os buckets de origem e destino em duas contas diferentes da AWS. Você
precisa ter dois perfis de credencial definidos para a AWS CLI (neste exemplo, usamos os nomes
de perfil acctA e acctB). Para obter mais informações sobre como configurar perfis de credenciais,
consulte Perfis nomeados no Guia do usuário da interface da linha de comando da AWS.
2. Siga as instruções passo a passo em Configuração de buckets na mesma conta (p. 637) com as
seguintes alterações:
• Para todos os comandos da CLI da AWS relacionados a atividades do bucket de origem (para criar
o bucket de origem, habilitar o versionamento e criar a função do IAM), use o perfil acctA. Use o
perfil acctB para criar o bucket de destino.
• Verifique se a política e permissões especifica os buckets de origem e destino que você criou
para este exemplo.
3. No console, adicione a seguinte política do bucket ao bucket de destino para permitir que o
proprietário do bucket de origem replique objetos. Não deixe de editar a política ao fornecer o ID da
conta da AWS do proprietário do bucket de origem e o nome do bucket de destino.
{
"Version":"2012-10-17",
"Id":"",
"Statement":[
{
"Sid":"Set permissions for objects",
"Effect":"Allow",
"Principal":{
"AWS":"arn:aws:iam::source-bucket-acct-ID:source-acct-IAM-role"
},
"Action":["s3:ReplicateObject", "s3:ReplicateDelete"],
"Resource":"arn:aws:s3:::destination/*"
},
{
"Sid":"Set permissions on bucket",
"Effect":"Allow",
"Principal":{
"AWS":"arn:aws:iam::source-bucket-acct-ID:source-acct-IAM-role"
},
"Action":["s3:GetBucketVersioning", "s3:PutBucketVersioning"],
"Resource":"arn:aws:s3:::destination"
}
]
}
Escolha o bucket e adicione a política do bucket. Para obter instruções, consulte Adicionar uma política de
bucket usando o console do Amazon S3 (p. 377).
Na replicação, o proprietário do objeto de origem possui a réplica por padrão. Quando os buckets de
origem e destino forem de propriedade de diferentes contas da AWS, você poderá adicionar configurações
opcionais para alterar a propriedade da réplica para a conta da AWS proprietária do bucket de destino.
Para obter mais informações, consulte Alterar o proprietário da réplica (p. 670).
Para obter mais informações sobre como configurar a replicação usando criptografia de vários lados com o
AWS Key Management Service em cenários entre contas, consulte Conceder permissões adicionais para
cenários entre contas (p. 677).
Uso do console do S3
Para obter instruções detalhadas, consulte Configuração da replicação para buckets de origem e de
destino pertencentes à mesma conta (p. 637). Este tópico traz instruções para definir a configuração da
replicação quando os buckets forem de propriedade de contas iguais e diferentes da AWS.
Para alterar a propriedade da réplica usando a CLI da AWS, crie buckets, habilite o versionamento neles,
crie uma função do IAM que dê permissão ao Amazon S3 para replicar objetos e adicione a configuração
da replicação ao bucket de origem. Na configuração da replicação, você instrui o Amazon S3 a alterar o
proprietário da réplica. Você também testa a configuração.
1. Neste exemplo, você cria os buckets de origem e destino em duas contas diferentes da AWS.
Configure a CLI da AWS com dois perfis nomeados. Este exemplo usa os perfis nomeados acctA e
acctB, respectivamente. Para obter mais informações sobre como configurar perfis de credenciais,
consulte Perfis nomeados no Guia do usuário da interface da linha de comando da AWS.
Important
Os perfis que você usar para este exercício deve ter as permissões necessárias. Por
exemplo, na configuração da replicação, especifique a função do IAM que o Amazon S3
pode assumir. Você só pode fazer isso se o perfil usado tiver a permissão iam:PassRole.
Se você usar as credenciais do usuário administrador para criar um perfil nomeado, poderá
executar todas as tarefas. Para obter mais informações, consulte Conceder permissões ao
usuário para passar uma função a um serviço da AWS no Guia do usuário do IAM.
Você precisa garantir que esses perfis tenham as permissões necessárias. Por exemplo, a
configuração de replicação inclui uma função do IAM que o Amazon S3 pode assumir. O perfil
nomeado que você usa para conectar essa configuração a um bucket só poderá fazer isso se tiver
a permissão iam:PassRole. Se você especificar as credenciais do usuário administrador ao criar
esses perfis nomeados, eles terão todas as permissões. Para obter mais informações, consulte
Conceder permissões ao usuário para passar uma função a um serviço da AWS no Guia do usuário
do IAM.
2. Crie o bucket de origem e habilite o versionamento. Este exemplo cria o bucket de origem na região
Leste dos EUA (Norte da Virgínia) (us-east-1).
3. Crie um bucket de destino e habilite o versionamento. Este exemplo cria o bucket de destino na
região Oeste dos EUA (Oregon) (us-west-2). Use um perfil de conta da AWS diferente do usado para
o bucket de origem.
--profile acctB
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "destination_bucket_policy_sid",
"Principal": {
"AWS": "source-bucket-owner-account-id"
},
"Action": [
"s3:ReplicateObject",
"s3:ReplicateDelete",
"s3:ObjectOwnerOverrideToBucketOwner",
"s3:ReplicateTags",
"s3:GetObjectVersionTagging"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::destination/*"
]
}
]
}
5. Crie uma função do IAM. Você especifica essa função na configuração da replicação que adiciona ao
bucket de origem posteriormente. O Amazon S3 assume essa função para replicar objetos em seu
nome. A função do IAM é criada em duas etapas:
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Principal":{
"Service":"s3.amazonaws.com"
},
"Action":"sts:AssumeRole"
}
]
ii. Execute o seguinte comando da CLI da AWS para criar uma função.
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"s3:GetObjectVersionForReplication",
"s3:GetObjectVersionAcl"
],
"Resource":[
"arn:aws:s3:::source/*"
]
},
{
"Effect":"Allow",
"Action":[
"s3:ListBucket",
"s3:GetReplicationConfiguration"
],
"Resource":[
"arn:aws:s3:::source"
]
},
{
"Effect":"Allow",
"Action":[
"s3:ReplicateObject",
"s3:ReplicateDelete",
"s3:ObjectOwnerOverrideToBucketOwner",
"s3:ReplicateTags",
"s3:GetObjectVersionTagging"
],
"Resource":"arn:aws:s3:::destination/*"
}
]
}
ii. Para criar uma política e ligá-la à função, execute o comando a seguir.
a. A CLI da AWS requer que você especifique a configuração da replicação como JSON. Salve
o JSON a seguir em um arquivo chamado replication.json no diretório atual local do
computador local. Na configuração, a adição de AccessControlTranslation indica alteração
na propriedade da réplica.
{
"Role":"IAM-role-ARN",
"Rules":[
{
"Status":"Enabled",
"Priority":1,
"DeleteMarkerReplication":{
"Status":"Disabled"
},
"Filter":{
},
"Status":"Enabled",
"Destination":{
"Bucket":"arn:aws:s3:::destination",
"Account":"destination-bucket-owner-account-id",
"AccessControlTranslation":{
"Owner":"Destination"
}
}
}
]
}
Para obter um exemplo de código para adicionar a configuração da replicação, consulte Uso dos AWS
SDKs (p. 644). É necessário modificar a configuração de replicação de acordo. Para obter informações
conceituais, consulte Alterar o proprietário da réplica (p. 670).
linha de comando da AWS (CLI da AWS) para alterar a configuração da replicação do bucket para permitir
a replicação de objetos criptografados. Para obter mais informações, consulte Replicação de objetos
criados com criptografia no lado do servidor (SSE) usando CMKs do AWS KMS (p. 672).
Uso do console do S3
Para obter instruções detalhadas, consulte Configuração da replicação para buckets de origem e de
destino pertencentes à mesma conta (p. 637). Este tópico traz instruções para definir a configuração da
replicação quando os buckets forem de propriedade de contas iguais e diferentes da AWS.
Para replicar objetos criptografados com a CLI da AWS, crie buckets, habilite o versionamento neles,
crie uma função do IAM que dê permissão ao Amazon S3 para replicar objetos e adicione a configuração
da replicação ao bucket de origem. A configuração de replicação fornece informações relacionadas à
replicação de objetos criptografados usando as chaves do KMS. As permissões da função do IAM incluem
as permissões necessárias para replicar os objetos criptografados. Você também testa a configuração.
1. Neste exemplo, criamos tanto os buckets de origem quanto de destino na mesma conta da AWS.
Defina um perfil de credenciais para a CLI da AWS. Neste exemplo, usamos o nome de perfil acctA.
Para obter mais informações sobre como configurar perfis de credenciais, consulte Perfis nomeados
no Guia do usuário da interface da linha de comando da AWS.
2. Crie o bucket de origem e habilite o versionamento nele. Neste exemplo, criamos o bucket de
origem na região Leste dos EUA (Norte da Virgínia) (us-east-1).
3. Crie o bucket de destino e habilite o versionamento nele. Neste exemplo, criamos o bucket de
destino na região Oeste dos EUA (Oregon) (us-west-2).
Note
4. Crie uma função do IAM. Você especifica essa função na configuração da replicação que adiciona ao
bucket de origem posteriormente. O Amazon S3 assume essa função para replicar objetos em seu
nome. A função do IAM é criada em duas etapas:
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Principal":{
"Service":"s3.amazonaws.com"
},
"Action":"sts:AssumeRole"
}
]
}
b. Anexar uma política de permissões à função. Essa política concede permissões para várias ações
de bucket e objetos do Amazon S3.
{
"Version":"2012-10-17",
"Statement":[
{
"Action":[
"s3:ListBucket",
"s3:GetReplicationConfiguration",
"s3:GetObjectVersionForReplication",
"s3:GetObjectVersionAcl",
"s3:GetObjectVersionTagging"
],
Versão da API 2006-03-01
656
Amazon Simple Storage Service Guia do usuário
Configuração da replicação
"Effect":"Allow",
"Resource":[
"arn:aws:s3:::source",
"arn:aws:s3:::source/*"
]
},
{
"Action":[
"s3:ReplicateObject",
"s3:ReplicateDelete",
"s3:ReplicateTags"
],
"Effect":"Allow",
"Condition":{
"StringLikeIfExists":{
"s3:x-amz-server-side-encryption":[
"aws:kms",
"AES256"
],
"s3:x-amz-server-side-encryption-aws-kms-key-id":[
"AWS KMS key IDs(in ARN format) to use for encrypting object
replicas"
]
}
},
"Resource":"arn:aws:s3:::destination/*"
},
{
"Action":[
"kms:Decrypt"
],
"Effect":"Allow",
"Condition":{
"StringLike":{
"kms:ViaService":"s3.us-east-1.amazonaws.com",
"kms:EncryptionContext:aws:s3:arn":[
"arn:aws:s3:::source/*"
]
}
},
"Resource":[
"AWS KMS key IDs(in ARN format) used to encrypt source objects."
]
},
{
"Action":[
"kms:Encrypt"
],
"Effect":"Allow",
"Condition":{
"StringLike":{
"kms:ViaService":"s3.us-west-2.amazonaws.com",
"kms:EncryptionContext:aws:s3:arn":[
"arn:aws:s3:::destination/*"
]
}
},
"Resource":[
"AWS KMS key IDs(in ARN format) to use for encrypting object
replicas"
]
}
]
}
<ReplicationConfiguration>
<Role>IAM-Role-ARN</Role>
<Rule>
<Status>Enabled</Status>
<Priority>1</Priority>
<DeleteMarkerReplication>
<Status>Disabled</Status>
</DeleteMarkerReplication>
<Filter>
<Prefix>Tax</Prefix>
</Filter>
<Status>Enabled</Status>
<SourceSelectionCriteria>
<SseKmsEncryptedObjects>
<Status>Enabled</Status>
</SseKmsEncryptedObjects>
</SourceSelectionCriteria>
<Destination>
<Bucket>arn:aws:s3:::dest-bucket-name</Bucket>
<EncryptionConfiguration>
<ReplicaKmsKeyID>AWS KMS key IDs to use for encrypting object replicas</
ReplicaKmsKeyID>
</EncryptionConfiguration>
</Destination>
</Rule>
</ReplicationConfiguration>
a. A CLI da AWS requer que você especifique a configuração da replicação como JSON. Salve o
JSON a seguir em um arquivo (replication.json) no diretório atual local do seu computador
local.
{
"Role":"IAM-Role-ARN",
"Rules":[
{
"Status":"Enabled",
"Priority":1,
"DeleteMarkerReplication":{
"Status":"Disabled"
},
"Filter":{
"Prefix":"Tax"
},
"Destination":{
"Bucket":"arn:aws:s3:::destination",
"EncryptionConfiguration":{
"ReplicaKmsKeyID":"AWS KMS key IDs(in ARN format) to use for
encrypting object replicas"
}
},
"SourceSelectionCriteria":{
"SseKmsEncryptedObjects":{
"Status":"Enabled"
}
}
}
]
}
b. Edite o JSON para fornecer valores para o bucket de destino, ARN de ID do KMS e IAM-
role-ARN. Salve as alterações.
c. Adicione a configuração de replicação ao bucket de origem. Não deixe de dar um nome ao
bucket de origem.
Para obter um exemplo de código para adicionar a configuração da replicação, consulte Uso dos AWS
SDKs (p. 644). É necessário modificar a configuração de replicação de acordo.
Para obter informações conceituais, consulte Replicação de objetos criados com criptografia no lado do
servidor (SSE) usando CMKs do AWS KMS (p. 672).
Com o S3 RTC, você pode monitorar o número total e o tamanho dos objetos com replicação pendente
e o tempo máximo de replicação para a região de destino. As métricas de replicação estão disponíveis
por meio do Console de Gerenciamento da AWS e do Guia do usuário do Amazon CloudWatch.
Para obter mais informações, consulte the section called “Métricas de replicação do Amazon S3
CloudWatch” (p. 859).
Uso do console do S3
Para obter instruções detalhadas, consulte Configuração da replicação para buckets de origem e de
destino pertencentes à mesma conta (p. 637). Este tópico traz instruções para habilitar o S3 RTC na
configuração da replicação quando os buckets forem de propriedade de contas iguais e diferentes da
AWS.
Para usar a AWS CLI para replicar objetos com o S3 RTC habilitado na AWS CLI, crie buckets, habilite o
versionamento neles, crie uma função do IAM que conceda permissão ao Amazon S3 para replicar objetos
e adicione a configuração da replicação ao bucket de origem. A configuração da replicação precisa ter o
Controle do tempo de replicação do S3 (S3 RTC) habilitado.
{
"Rules": [
{
"Status": "Enabled",
"Filter": {
"Prefix": "Tax"
},
"DeleteMarkerReplication": {
"Status": "Disabled"
},
"Destination": {
"Bucket": "arn:aws:s3:::destination",
"Metrics": {
"Status": "Enabled",
"EventThreshold": {
"Minutes": 15
}
},
"ReplicationTime": {
"Status": "Enabled",
"Time": {
"Minutes": 15
}
}
},
"Priority": 1
}
],
"Role": "IAM-Role-ARN"
}
Important
O seguinte exemplo de Java adiciona a configuração da replicação com o Controle do tempo de replicação
do S3 (S3 RTC):
import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.s3.model.DeleteMarkerReplication;
import software.amazon.awssdk.services.s3.model.Destination;
import software.amazon.awssdk.services.s3.model.Metrics;
import software.amazon.awssdk.services.s3.model.MetricsStatus;
import software.amazon.awssdk.services.s3.model.PutBucketReplicationRequest;
import software.amazon.awssdk.services.s3.model.ReplicationConfiguration;
import software.amazon.awssdk.services.s3.model.ReplicationRule;
import software.amazon.awssdk.services.s3.model.ReplicationRuleFilter;
import software.amazon.awssdk.services.s3.model.ReplicationTime;
import software.amazon.awssdk.services.s3.model.ReplicationTimeStatus;
import software.amazon.awssdk.services.s3.model.ReplicationTimeValue;
.builder()
.prefix("testtest")
.build()
)
.build())
.role("role_arn")
.build();
s3.putBucketReplication(putBucketReplicationRequest);
}
}
Para obter mais informações, consulte Atendimento aos requisitos de conformidade usando o Controle do
tempo de replicação do S3 (S3 RTC) (p. 665).
Você usa o console do Amazon S3 para adicionar regras de replicação ao bucket de origem. As regras
de replicação definem os objetos do bucket de origem que devem ser replicados e o bucket de destino
ou buckets nos quais os objetos replicados estão armazenados. Para obter mais informações sobre a
replicação, consulte Replicação de objetos (p. 617).
Você pode gerenciar as regras de replicação na página Replication (Replicação). Você pode adicionar, ver,
habilitar, desabilitar, excluir e alterar a prioridade das regras de replicação. Para obter informações sobre
como adicionar regras de replicação a um bucket, consulte Uso do console do S3 (p. 637).
Defina prioridades para a regra, de maneira a evitar conflitos causados pelos objetos incluídos no
escopo de mais de uma regra. No caso de sobreposição de regras, o Amazon S3 usa a prioridade
da regra para determinar qual regra aplicar. Quanto maior o número, maior a prioridade. Para
obter mais informações sobre prioridade de regra, consulte Configuração de replicação (p. 622).
Tópicos
• Monitoramento do progresso com métricas de replicação e notificações de eventos do Amazon
S3 (p. 663)
• Atendimento aos requisitos de conformidade usando o Controle do tempo de replicação do S3 (S3
RTC) (p. 665)
• Replicação de marcadores de exclusão entre intervalos (p. 668)
• Replicação de alterações de metadados com sincronização de modificação de réplica do Amazon
S3 (p. 669)
• Alterar o proprietário da réplica (p. 670)
• Replicação de objetos criados com criptografia no lado do servidor (SSE) usando CMKs do AWS
KMS (p. 672)
Bytes pendentes de replicação—O número total de bytes de objetos com replicação pendente para uma
determinada regra de replicação.
Latência de replicação— o número máximo de segundos pelo qual os buckets de destino da replicação
estão atrás do bucket de origem para uma determinada regra de replicação.
As métricas de replicação de S3 são cobradas usando a mesma taxa das métricas personalizadas
do Amazon CloudWatch. Para obter mais informações, consulte Definição de preço do Amazon
CloudWatch.
Tópicos
• Ativação de métricas de replicação do S3 (p. 664)
• Recebimento de eventos de falha de replicação com notificações de eventos do Amazon S3 (p. 664)
• Exibição de métricas de replicação usando o console do Amazon S3 (p. 664)
Este tópico traz instruções para habilitar as métricas de replicação do S3 em sua configuração da
replicação quando os buckets forem de propriedade de contas iguais e diferentes da AWS.
Para habilitar métricas de replicação usando a Interface de linhas de comando da AWS (AWS CLI), você
deve adicionar uma configuração de replicação ao bucket de origem com Metrics habilitadas. Neste
exemplo de configuração, os objetos sob o prefixo Tax (Imposto) são replicados para o bucket de destino
DOC-EXAMPLE-BUCKET, e métricas são geradas para esses objetos.
{
"Rules": [
{
"Status": "Enabled",
"Filter": {
"Prefix": "Tax"
},
"Destination": {
"Bucket": "arn:aws:s3:::DOC-EXAMPLE-BUCKET",
"Metrics": {
"Status": "Enabled"
}
},
"Priority": 1
}
],
"Role": "IAM-Role-ARN"
}
Para obter instruções completas sobre como criar regras de replicação, consulte Configuração da
replicação para buckets de origem e de destino pertencentes à mesma conta (p. 637).
Para obter mais informações sobre como exibir métricas de replicação no console do S3, consulte Exibição
de métricas de replicação usando o console do Amazon S3 (p. 664).
Para obter mais informações sobre métricas do CloudWatch para o Amazon S3, consulte Monitoramento
de métricas com o Amazon CloudWatch (p. 855).
Pré-requisitos
O Amazon S3 exibe Replication Latency (in seconds) (Latência de replicação (em segundos)),
Operations pending replication (Operações pendentes de replicação) em gráficos.
6. Para exibir todas as métricas de replicação, incluindo Bytes pending replication (Bytes pendentes de
replicação)), Replication Latency (in seconds) (Latência de replicação (em segundos)), e Operations
pending replication (Operações pendentes replicação) juntos em uma página separada, escolha View
1 more chart (Exibir mais 1 gráfico).
Depois, você pode exibir as métricas de replicação Replication Latency (in seconds) (Latência de
replicação (em segundos)), Operations pending replication (Operações pendentes de replicação) e Bytes
pending replication (Replicação de bytes pendentes) para as regras selecionadas. O Amazon CloudWatch
começa a relatar métricas de replicação 15 minutos após você habilitar o S3 RTC na respectiva regra de
replicação. Você pode visualizar métricas de replicação no console do Amazon S3 ou do CloudWatch.
Para obter informações, consulte Métricas de replicação com o S3 RTC (p. 666).
O S3 RTC por padrão inclui métricas de replicação S3 e notificações de eventos S3, com as quais
você pode monitorar o número total de operações da API do S3 que estão com replicação pendente, o
tamanho total dos objetos com replicação pendente e o tempo máximo de replicação. As métricas de
replicação podem ser habilitadas independentemente do S3 RTC; consulte Monitoramento do progresso
com métricas de replicação. Além disso, o S3 RTC fornece eventos OperationMissedThreshold e
OperationReplicatedAfterThreshold que notificam o proprietário do bucket se a replicação do
objeto exceder ou replicar após o limite de 15 minutos.
Com o S3 RTC, os eventos do Amazon S3 podem notificar você nas raras vezes em que objetos não
replicam em até 15 minutos e quando esses objetos são replicados com êxito para a região de destino. Os
eventos do Amazon S3 estão disponíveis por meio do Amazon SQS, Amazon SNS ou AWS Lambda. Para
obter mais informações, consulte the section called “Notificações de eventos do Amazon S3” (p. 869).
Tópicos
• Habilitar o Controle do tempo de replicação do S3 (p. 666)
• Métricas de replicação com o S3 RTC (p. 666)
• Usar notificações de eventos do Amazon S3 para rastrear objetos de replicação (p. 666)
• Melhores práticas e diretrizes do S3 RTC (p. 666)
Se estiver usando a versão mais recente da configuração de replicação (ou seja, se você especificar o
elemento Filter em uma regra de configuração da replicação), o Amazon S3 não replicará o marcador
de exclusão, por padrão. No entanto, você pode adicionar replicação do marcador de exclusão a regras
não baseadas em tags.
Note
Para obter mais informações sobre como criar uma regra com o S3 RTC, consulte Replicação de objetos
com o Controle de Tempo de Replicação do S3 (S3 RTC) (p. 659).
Para obter mais informações sobre como encontrar métricas de replicação por meio do console do
Amazon S3, consulte Exibição de métricas de replicação usando o console do Amazon S3 (p. 664).
Os eventos de replicação estão disponíveis dentro de 15 minutos após a ativação do S3 RTC. Os eventos
do Amazon S3 estão disponíveis por meio do Amazon SQS, Amazon SNS ou AWS Lambda. Para obter
mais informações, consulte Notificações de eventos do Amazon S3 (p. 869).
Tópicos
• Diretrizes de performance da taxa de replicação e de solicitação do Amazon S3 (p. 667)
Ao fazer upload e recuperar armazenamento do Amazon S3, as aplicações podem realizar milhares de
transações por segundo em desempenho de solicitação. Por exemplo, um aplicativo pode atingir pelo
menos 3.500 solicitações PUT/COPY/POST/DELETE ou 5.500 solicitações GET/HEAD por segundo
por prefixo em um bucket do S3, incluindo as solicitações que a replicação do S3 faz em seu nome. Não
há limite para o número de prefixos em um bucket. Você pode aumentar seu desempenho de leitura ou
gravação paralelizando as leituras. Por exemplo, se você criar 10 prefixos em um bucket do S3 para
paralelizar leituras, poderá escalar o desempenho de leitura para 55.000 solicitações de leitura por
segundo.
O SLA do S3 RTC também não se aplica durante períodos em que a taxa de transferência de dados de
replicação excede o limite padrão de 1 Gbps. Se você espera que sua taxa de transferência de replicação
exceda 1 Gbps, entre em contato com o AWS Support Center ou use as Cotas de serviço para solicitar um
aumento no limite.
A taxa total de solicitações, incluindo as solicitações que a replicação do Amazon S3 faz em seu nome,
deve estar dentro das diretrizes de taxa de solicitação do Amazon S3 para os buckets de origem e destino
da replicação. Para cada objeto replicado, a replicação do Amazon S3 faz até cinco solicitações GET/
HEAD e uma solicitação PUT para o bucket de origem e uma solicitação PUT para cada bucket de destino.
Por exemplo, se você espera replicar 100 objetos por segundo, a replicação do Amazon S3 pode executar
mais 100 solicitações PUT em seu nome para um total de 200 PUTs por segundo para o bucket do S3 de
origem. A replicação do Amazon S3 também pode executar até 500 GET/HEAD (5 solicitações GET/HEAD
para cada objeto replicado).
Note
Você será cobrado pelos custos de apenas uma solicitação PUT por objeto replicado. Para obter
mais informações, consulte as informações sobre definição de preço nas Perguntas frequentes
sobre replicação do Amazon S3.
Se você espera que a taxa de transferência de dados do Controle do tempo de replicação do S3 exceda
o limite padrão de 1 Gbps, entre em contato com o AWS Support Center ou use as Cotas de serviço para
solicitar um aumento no limite.
Quando você replica objetos criptografados com criptografia no lado do servidor (SSE-KMS) usando a
replicação do Amazon S3, os limites de solicitações por segundo do AWS Key Management Service (AWS
KMS) são aplicáveis. O AWS KMS pode rejeitar uma solicitação válida porque sua taxa de solicitação
excede o limite do número de solicitações por segundo. Quando uma solicitação é rejeitada, o AWS
KMS retorna um erro ThrottlingException. O limite de taxa de solicitação do AWS KMS se aplica a
solicitações feitas diretamente e a solicitações feitas pela replicação do Amazon S3 em seu nome.
Por exemplo, se você espera replicar 1.000 objetos por segundo, poderá subtrair 2.000 solicitações do
limite de taxa de solicitação do AWS KMS. A taxa de solicitação resultante por segundo está disponível
para as cargas de trabalho do AWS KMS, excluindo a replicação. Você pode usar métricas de solicitação
do AWS KMS no Amazon CloudWatch para monitorar a taxa total de solicitações do AWS KMS em sua
conta da AWS.
Se você tiver a replicação de marcadores de exclusão ativada, esses marcadores serão copiados para
os buckets de destino e o Amazon S3 se comporta como se o objeto tivesse sido excluído nos buckets
de origem e de destino. Para obter mais informações sobre como funcionam os marcadores de exclusão,
consulte Trabalhar com marcadores de exclusão (p. 536).
Note
Se você não estiver usando a versão de configuração de replicação mais recente, as operações de
exclusão afetarão a replicação de forma diferente. Para obter mais informações, consulte Como a exclusão
de operações afeta a replicação (p. 620).
Para habilitar a replicação de marcadores de exclusão usando o console do Amazon S3, consulte Uso
do console do S3 (p. 637). Este tópico fornece instruções para habilitar a replicação de marcadores de
exclusão na configuração de replicação quando os buckets são de propriedade das mesmas contas da
AWS ou de contas diferentes.
No exemplo de configuração a seguir, os marcadores de exclusão são replicados para o bucket de destino
DOC-EXAMPLE-BUCKET para objetos sob o prefixo Tax (Imposto).
{
"Rules": [
{
"Status": "Enabled",
"Filter": {
"Prefix": "Tax"
},
"DeleteMarkerReplication": {
"Status": "Enabled"
},
"Destination": {
"Bucket": "arn:aws:s3:::DOC-EXAMPLE-BUCKET"
},
"Priority": 1
}
],
"Role": "IAM-Role-ARN"
}
Para obter instruções completas sobre como criar regras de replicação por meio da AWS CLI, consulte
Configuração da replicação para buckets de origem e de destino pertencentes à mesma conta (p. 637)
na seção Orientações de replicação.
Para habilitar a sincronização de modificação de réplica usando o console do Amazon S3, consulte
Orientações: Configuração da replicação (p. 636). Este tópico fornece instruções para ativar a
sincronização de modificação de réplica na configuração de replicação quando os buckets são de
propriedade das mesmas contas da AWS ou diferentes.
No exemplo de configuração a seguir, o Amazon S3 replica alterações de metadados sob o prefixo Tax
(Imposto) para o bucket DOC-EXAMPLE-BUCKET, que conteria os objetos de origem.
{
"Rules": [
{
"Status": "Enabled",
"Filter": {
"Prefix": "Tax"
},
"SourceSelectionCriteria": {
"ReplicaModifications":{
"Status": "Enabled"
}
},
"Destination": {
"Bucket": "arn:aws:s3:::DOC-EXAMPLE-BUCKET"
},
"Priority": 1
}
],
"Role": "IAM-Role-ARN"
Para obter instruções completas sobre como criar regras de replicação usando a AWS CLI, consulte
Configuração da replicação para buckets de origem e de destino pertencentes à mesma conta (p. 637).
As seções a seguir descrevem como executar essas tarefas. Para ver um exemplo funcional com
instruções detalhadas, consulte Alteração do proprietário da réplica para os buckets de origem e de destino
forem de propriedade de contas diferentes (p. 650).
<ReplicationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
...
<Destination>
...
<AccessControlTranslation>
<Owner>Destination</Owner>
</AccessControlTranslation>
<Account>destination-bucket-owner-account-id</Account>
</Destination>
</Rule>
</ReplicationConfiguration>
A configuração da replicação do exemplo a seguir diz ao Tax para replicar os objetos que têm o prefixo de
chaves Amazon S3 ao bucket de destino e altere a propriedade das réplicas.
...
{
"Effect":"Allow",
"Action":[
"s3:ObjectOwnerOverrideToBucketOwner"
],
"Resource":"arn:aws:s3:::destination-bucket/*"
}
...
...
{
"Sid":"1",
"Effect":"Allow",
"Principal":{"AWS":"source-bucket-account-id"},
"Action":["s3:ObjectOwnerOverrideToBucketOwner"],
"Resource":"arn:aws:s3:::destination-bucket/*"
}
...
Considerações adicionais
Ao configurar a opção de substituição da propriedade, aplicam-se as seguintes considerações:
• Por padrão, o proprietário do objeto de origem também possui a réplica. O Amazon S3 replica a versão
do objeto e a ACL associada a ela.
Se você adicionar a substituição do proprietário, o Amazon S3 replicará somente a versão do objeto, não
a ACL. Além disso, o Amazon S3 não replica as alterações subsequentes na ACL do objeto de origem.
O Amazon S3 define a ACL na réplica que concede controle total ao proprietário do bucket de destino.
• Ao atualizar uma configuração de replicação para habilitar ou desabilitar a substituição do proprietário,
ocorrerá a situação a seguir.
• Se você adicionar a opção de substituição do proprietário à configuração da replicação:
Quando o Amazon S3 replica uma versão do objeto, ele descarta a ACL associada ao objeto de
origem. Em vez disso, ele define a ACL na réplica, dando o controle total ao proprietário do bucket
de destino. Ele não replica as alterações subsequentes na ACL do objeto de origem. No entanto,
essa alteração na ACL não se aplica às versões de objeto replicadas antes de você definir a opção
de substituição do proprietário. As atualizações da ACL nos objetos de origem replicados antes da
substituição do proprietário foram definidas para continuarem a ser replicadas (porque o objeto e suas
réplicas continuam a ter o mesmo proprietário).
• Se você remover a opção de substituição do proprietário da configuração da replicação:
O Amazon S3 replica novos objetos que aparecem no bucket de origem e as ACLs associadas aos
buckets de destino. Para objetos replicados antes de você ter removido a substituição do proprietário,
o Amazon S3 não replicará as ACLs, pois a propriedade do objeto muda, de maneira que o Amazon
S3 feito permanece em vigor. Em outras palavras: as ACLs colocaram a versão do objeto que foi
replicada quando a substituição do proprietário tinha sido substituída para não continuarem a ser
replicadas.
Para obter um exemplo com instruções passo a passo, consulte Replicar objetos criptografados (p. 654).
Para obter informações sobre como criar uma configuração da replicação, consulte Replicação de
objetos (p. 617).
Tópicos
• Especificar informações adicionais na configuração de replicação (p. 673)
• Conceder permissões adicionais para a função do IAM (p. 674)
• Conceder permissões adicionais para cenários entre contas (p. 677)
• Considerações sobre o limite de transação do AWS KMS (p. 677)
• Na configuração Destination, adicione a CMK do AWS KMS gerenciada pelo cliente simétrica que
você deseja que o Amazon S3 use para criptografar réplicas de objetos.
• Aceite explicitamente ao habilitar a replicação de objetos criptografados usando as CMKs do AWS KMS
adicionando o elemento SourceSelectionCriteria.
<ReplicationConfiguration>
<Rule>
...
<SourceSelectionCriteria>
<SseKmsEncryptedObjects>
<Status>Enabled</Status>
</SseKmsEncryptedObjects>
</SourceSelectionCriteria>
<Destination>
...
<EncryptionConfiguration>
<ReplicaKmsKeyID>AWS KMS key ID for the AWS region of the destination
bucket.</ReplicaKmsKeyID>
</EncryptionConfiguration>
</Destination>
...
</Rule>
</ReplicationConfiguration>
Important
A CMK do AWS KMS deve ter sido criada na mesma região da AWS que os buckets de destino.
A CMK do AWS KMS deve ser válida. A API de replicação do bucket PUT não verifica a validade
das CMKs do AWS KMS. Se você usar uma CMK inválida, receberá o código de status 200 OK
como resposta, mas a replicação falhará.
O exemplo a seguir mostra uma configuração de replicação, que inclui elementos de configuração
opcionais.
<SseKmsEncryptedObjects>
<Status>Enabled</Status>
</SseKmsEncryptedObjects>
</SourceSelectionCriteria>
</Rule>
</ReplicationConfiguration>
Essa configuração de replicação tem uma regra. Esta regra aplica-se aos objetos com o prefixo de chaves
Tax. O Amazon S3 usa o ID da chave do AWS KMS para criptografar essas réplicas de objeto.
Recomendamos que você restrinja essas permissões apenas aos buckets e objetos de destino usando
chaves de condição do AWS KMS. A conta da AWS proprietária da função do IAM precisa ter permissões
para estas ações do AWS KMS (kms:Encrypt e kms:Decrypt) para CMKs do AWS KMS listadas
na política. Se as CMKs do AWS KMS forem de propriedade de outra conta da AWS, o proprietário da
CMK deverá conceder essas permissões à conta da AWS que possui a função do IAM. Para obter mais
informações sobre como gerenciar o acesso a essas CMKs, consulte Usar políticas do IAM com o AWS
KMS no Guia do desenvolvedor do AWS Key Management Service.
Para usar a replicação com uma chave de bucket do S3, a política de chaves do AWS KMS para a CMK
usada para criptografar a réplica do objeto deve incluir permissões kms:Decrypt para o principal de
chamada. A chamada para kms:Decrypt verifica a integridade da chave do bucket do S3 antes de usá-la.
Quando uma chave de bucket do S3 estiver habilitada para o bucket de origem ou de destino, o contexto
de criptografia será o Amazon Resource Name (ARN) do bucket e não o ARN do objeto, por exemplo,
arn:aws:s3:::bucket_ARN. Você precisa atualizar suas políticas do IAM para usar o ARN do bucket
para o contexto de criptografia:
"kms:EncryptionContext:aws:s3:arn": [
"arn:aws:s3:::bucket_ARN"
]
Para obter mais informações, consulte Contexto de criptografia (p. 198) e Alterações na observação antes
de habilitar uma chave de bucket do S3 (p. 206).
Exemplo de políticas - Usar criptografia do lado do servidor AWS KMS (SSE-KMS) com replicação
Os exemplos de políticas do IAM a seguir mostram instruções para o uso de criptografia do lado do
servidor AWS KMS com replicação.
Neste exemplo, o contexto de criptografia é o ARN do objeto. Se você usar o SSE-KMS com uma chave
de bucket do S3 habilitada, use o ARN do bucket como o contexto de criptografia. Para obter mais
informações, consulte Contexto de criptografia (p. 198).
Se o
Example Usando criptografia lateral do servidor do AWS KMS (SSE-KMS) — buckets de destino
separados
A política de exemplo a seguir mostra instruções para usar o AWS KMS com buckets de destino
separados.
{
"Version": "2012-10-17",
"Statement": [{
"Action": ["kms:Decrypt"],
"Effect": "Allow",
"Resource": "List of AWS KMS key ARNs used to encrypt source objects.",
"Condition": {
"StringLike": {
"kms:ViaService": "s3.source-bucket-region.amazonaws.com",
"kms:EncryptionContext:aws:s3:arn": "arn:aws:s3:::source-bucket-name/key-prefix1/*"
}
}
},
{
"Action": ["kms:Encrypt"],
"Effect": "Allow",
"Resource": "AWS KMS key ARNs (for the AWS Region of the destination bucket 1). Used to
encrypt object replicas created in destination bucket 1.",
"Condition": {
"StringLike": {
"kms:ViaService": "s3.destination-bucket-1-region.amazonaws.com",
"kms:EncryptionContext:aws:s3:arn": "arn:aws:s3:::destination-bucket-name-1/key-
prefix1/*"
}
}
},
{
"Action": ["kms:Encrypt"],
"Effect": "Allow",
"Resource": "AWS KMS key ARNs (for the AWS Region of destination bucket 2). Used to
encrypt object replicas created in destination bucket 2.",
"Condition": {
"StringLike": {
"kms:ViaService": "s3.destination-bucket-2-region.amazonaws.com",
"kms:EncryptionContext:aws:s3:arn": "arn:aws:s3:::destination-bucket-2-name/key-
prefix1*"
}
}
}
]
}
Example Replicação de objetos criados com criptografia no lado do servidor usando chaves de
criptografia gerenciadas do Amazon S3 e CMKs armazenadas no AWS KMS
Veja a seguir uma política completa do IAM que concede as permissões necessárias para replicar objetos
não criptografados, objetos criados com criptografia no lado do servidor usando chaves de criptografia
gerenciadas do Amazon S3 e CMKs armazenadas no AWS KMS.
Note
Objetos criados com criptografia do lado do servidor usando as chaves de criptografia fornecidas
pelo usuário (SSE-C) não serão replicados.
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"s3:GetReplicationConfiguration",
"s3:ListBucket"
],
"Resource":[
"arn:aws:s3:::source-bucket"
]
},
{
"Effect":"Allow",
"Action":[
"s3:GetObjectVersionForReplication",
"s3:GetObjectVersionAcl"
],
"Resource":[
"arn:aws:s3:::source-bucket/key-prefix1*"
]
},
{
"Effect":"Allow",
"Action":[
"s3:ReplicateObject",
"s3:ReplicateDelete"
],
"Resource":"arn:aws:s3:::destination-bucket/key-prefix1*"
},
{
"Action":[
"kms:Decrypt"
],
"Effect":"Allow",
"Condition":{
"StringLike":{
"kms:ViaService":"s3.source-bucket-region.amazonaws.com",
"kms:EncryptionContext:aws:s3:arn":[
"arn:aws:s3:::source-bucket-name/key-prefix1*"
]
}
},
"Resource":[
"List of AWS KMS key ARNs used to encrypt source objects."
]
},
{
"Action":[
"kms:Encrypt"
],
"Effect":"Allow",
"Condition":{
"StringLike":{
"kms:ViaService":"s3.destination-bucket-region.amazonaws.com",
"kms:EncryptionContext:aws:s3:arn":[
"arn:aws:s3:::destination-bucket-name/prefix1*"
]
}
},
"Resource":[
"AWS KMS key ARNs (for the AWS Region of the destination buckets) to use for
encrypting object replicas"
]
}
]
}
Como conceder permissão ao proprietário do bucket de origem para usar a CMK do AWS KMS
(console do IAM)
1. Faça login no Console de Gerenciamento da AWS e abra o console do AWS Key Management
Service (AWS KMS) em https://console.aws.amazon.com/kms.
2. Para alterar a região da AWS, use o seletor de região no canto superior direito da página.
3. Para exibir as chaves em sua conta que você cria e gerencia, no painel de navegação, escolha
Customer managed keys (Chaves gerenciadas de cliente).
4. Escolha a CMK.
5. Em General configuration (Configurações gerais), selecione a guia Key policy (Política de chaves).
6. Escolha Other AWS Accounts (Outras contas da AWS).
7. Escolha Add another AWS Account (Adicionar outra conta da AWS).
8. Em arn:aws:iam::, insira o ID da conta do bucket de origem.
9. Escolha Save Changes (Salvar alterações).
Como conceder ao proprietário do bucket de origem permissão para usar a CMK do AWS KMS
(CLI da AWS)
• Para obter mais informações, consulte put-key-policy na Referência de comando da CLI da AWS. Para
obter informações sobre a API subjacente, consulte PutKeyPolicy na Referência da API do AWS Key
Management Service.
Para solicitar um aumento de limite, use Cotas de serviço. Para obter mais informações, consulte Limites
da Amazon Web Services. Se as cotas de serviço não forem compatíveis com sua região, abra um caso do
AWS Support.
Tópicos
• Visão geral do status da replicação (p. 678)
• Status da replicação, se replicar para vários intervalos de destino (p. 678)
• Status da replicação se a sincronização de modificação de réplica do Amazon S3 estiver
ativada (p. 678)
• Localização do status de replicação (p. 679)
Por exemplo, suponha que, em sua configuração de replicação, você especifique o prefixo de objeto
TaxDocs para dizer ao Amazon S3 para replicar somente objetos com o prefixo de nome de chave
TaxDocs. Todos os objetos dos quais você fizer upload e tiverem esse prefixo de nome de chave, por
exemplo, TaxDocs/document1.pdf, serão replicados. Para qualquer solicitação de objeto com esse
prefixo de nome de chave, o Amazon S3 retorna o cabeçalho x-amz-replication-status com um
dos seguintes valores para o status de replicação de objeto: PENDING, COMPLETED ou FAILED.
Note
Se a replicação do objeto falhar depois de você fazer upload de um objeto, não será possível
tentar novamente a replicação. É preciso fazer upload do objeto novamente. Os objetos mudam
para um estado FAILED em caso de problemas como a ausência das permissões da função
de replicação do S3, do AWS KMS ou do bucket. Para falhas temporárias, por exemplo, se
um bucket ou região não estiver disponível, o status da replicação não fará a transição para
FAILED, mas permanecerá PENDING. Depois que o recurso estiver online novamente,o S3
retomará a replicação desses objetos.
• Ao solicitar um objeto no bucket de destino, se o objeto da sua solicitação for uma réplica criada pelo
Amazon S3, o Amazon S3 retornará o cabeçalho x-amz-replication-status com valor REPLICA.
Note
Antes de excluir um objeto de um bucket de origem com a replicação habilitada, verifique o status
de replicação dele para garantir que o objeto tenha sido replicado.
Se a configuração de ciclo de vida estiver habilitada no bucket de origem, o Amazon S3
suspenderá as ações de ciclo de vida até que o status dos objetos seja COMPLETED ou FAILED.
até que a replicação tenha sido concluída para todos os destinos. Se um ou mais destinos falharem na
replicação, o cabeçalho retornará FAILED.
Você pode encontrar o status de replicação de objetos usando o console, a interface de linha de comandos
da AWS (AWS CLI) ou o AWS SDK.
Uso do console do S3
No console do S3, você pode exibir o status da replicação de um objeto na página Details (Detalhes) do
objeto na Object management overview (Visão geral de gerenciamento de objeto).
{
"AcceptRanges":"bytes",
"ContentType":"image/jpeg",
"LastModified":"Mon, 23 Mar 2015 21:02:29 GMT",
"ContentLength":3191,
"ReplicationStatus":"COMPLETED",
"VersionId":"jfnW.HIMOfYiD_9rGbSkmroXsFj3fqZ.",
"ETag":"\"6805f2cfc46c0f04559748bb039d69ae\"",
"Metadata":{
Java
.NET
GetObjectMetadataResponse getmetadataResponse =
client.GetObjectMetadata(getmetadataRequest);
Console.WriteLine("Object replication status: {0}",
getmetadataResponse.ReplicationStatus);
• Para a maioria dos objetos, a replicação ocorre em até 15 minutos, mas, às vezes, pode levar algumas
horas. Raramente a replicação pode levar mais tempo. O tempo que o Amazon S3 leva para replicar um
objeto depende de vários fatores, incluindo o par de regiões de origem e destino e o tamanho do objeto.
Para objetos grandes, a replicação pode levar várias horas.
Se o objeto que estiver sendo replicado for grande, aguarde um pouco antes de conferir se ele está
sendo exibido no destino. Você também pode conferir o status de replicação do objeto de origem. Se o
status de replicação do objeto for PENDING, você saberá que o Amazon S3 não concluiu a replicação.
Se o status de replicação do objeto for FAILED, confira a configuração de replicação definida no bucket
de origem.
• Na configuração de replicação do bucket de origem, verifique o seguinte:
• O nome de recurso da Amazon (ARN) dos buckets de destino está correto.
• O prefixo do nome de chave está correto. Por exemplo, se você definiu a configuração para replicar
objetos com o prefixo Tax, apenas objetos com nomes de chaves como Tax/document1 ou Tax/
document2 serão replicados. Um objeto com o nome de chave document3 não será replicado.
• O status é Enabled.
• Verifique se o controle de versão não foi suspenso em nenhum bucket. Tanto o bucket de origem quanto
o de destino devem ter o versionamento habilitado.
• Se o bucket de destino for de propriedade de outra conta da AWS, verifique se o proprietário do bucket
tem uma política de bucket no bucket de destino que permite que o proprietário do bucket de origem
replique objetos. Para ver um exemplo, consulte Configuração da replicação para os buckets de origem
e destino forem de propriedade de contas diferentes (p. 649).
• Se a réplica do objeto não aparecer no bucket de destino, a replicação poderá ter sido evitada pelo
seguinte:
• O Amazon S3 não replica um objeto em um bucket de origem que seja uma réplica criada por outra
configuração de replicação. Por exemplo, se você definir a configuração de replicação do bucket A
para o bucket B e para o bucket C, o Amazon S3 não replicará réplicas de objeto no bucket B para o
bucket C.
• O proprietário de bucket de origem pode conceder a outras contas da AWS permissão para fazer
upload de objetos. Por padrão, o proprietário do bucket de origem não tem nenhuma permissão para
os objetos criados por outras contas. A configuração de replicação vai replicar somente os objetos
para os quais o proprietário do bucket de origem tem permissões de acesso. O proprietário do bucket
de origem pode conceder a outras contas da AWS permissões para criar objetos condicionalmente
exigindo permissões explícitas de acesso nesses objetos. Para ver um exemplo de política, consulte
Conceder permissões entre contas para fazer upload de objetos garantindo que o proprietário do
bucket tenha controle total (p. 385).
• Vamos supor que, na configuração da replicação, você adicione uma regra para replicar um subgrupo de
objetos com uma tag específica. Neste caso, atribua a chave da tag específica e o valor no momento de
criar o objeto para o Amazon S3 replicar o objeto. Se você primeiro criar um objeto e depois adicionar a
tag ao objeto existente, o Amazon S3 não replicará o objeto.
• A replicação falhará se a política de bucket negar o acesso à função de replicação para qualquer uma
das seguintes ações:
Bucket de origem:
"s3:GetReplicationConfiguration",
"s3:ListBucket",
"s3:GetObjectVersion",
"s3:GetObjectVersionAcl",
"s3:GetObjectVersionTagging"
Buckets de destino:
"s3:ReplicateObject",
"s3:ReplicateDelete",
"s3:ReplicateTags"
Tópicos relacionados
Replicação de objetos (p. 617)
Considerações adicionais
O Amazon S3 também oferece suporte às configurações do bucket para o seguinte:
• Versionamento: para obter mais informações, consulte Usando o controle de versão em buckets do
S3 (p. 516).
• Hospedagem de sites: para obter mais informações, consulte Hospedagem de um site estático usando o
Amazon S3 (p. 945).
• Acesso ao bucket por meio de uma política ou lista de controle de acesso (ACL) — Para obter mais
informações, consulte Políticas de bucket e políticas de usuário (p. 268) e Visão geral da lista de controle
de acesso (ACL) (p. 440).
• Armazenamento de logs: para obter mais informações, consulte Registrar em log as solicitações com
registro em log de acesso ao servidor (p. 833).
• Gerenciamento do ciclo de vida para os objetos dentro de um bucket: para obter mais informações,
consulte Gerenciando seu ciclo de vida de armazenamento (p. 569).
Este tópico explica como a configuração de replicação do bucket afeta o comportamento dessas
configurações do bucket.
Tópicos
• Configuração de ciclo de vida e réplicas de objeto (p. 682)
• Configuração do versionamento e configuração de replicação (p. 682)
• Configuração de log e de replicação (p. 682)
• A CRR e a região de destino (p. 683)
• Pausar a replicação (p. 683)
A configuração de replicação requer que o bucket seja ativado por versionamento. Ao habilitar o
versionamento em um bucket, lembre-se de:
• Se você tiver uma política de ciclo de vida de expiração de um objeto, depois de habilitar o
versionamento, adicione uma política de NonCurrentVersionExpiration para manter o mesmo
comportamento de exclusão permanente que antes de habilitar o versionamento.
• Se você tiver uma política de ciclo de vida de transição, depois de habilitar o versionamento, considere
adicionar a política NonCurrentVersionTransition.
Se os logs de acesso ao servidor (Registrar em log as solicitações com registro em log de acesso ao
servidor (p. 833)) ou logs do AWS CloudTrail (Registrar em log chamadas de API do Amazon S3 usando
o AWS CloudTrail (p. 815)) estiverem ativados no seu bucket de origem ou de destino, o Amazon S3
incluirá nos logs as solicitações relacionadas à replicação. Por exemplo, o Amazon S3 registra cada objeto
que ele replica.
Suponha que você escolheu Leste dos EUA (Norte da Virgínia) (us-east-1) como a região do bucket de
origem. Se você escolher Oeste dos EUA (Oregon) (us-west-2) como a região dos buckets de destino,
pagará mais do que se escolher a região Leste dos EUA (Ohio) (us-east-2). Para obter informações
sobre preços, consulte a seção "Definição de preço da transferência de dados" em Definição de preço do
Amazon S3.
Pausar a replicação
Para pausar temporariamente a replicação, desabilite a regra em questão na configuração da replicação.
Se a replicação estiver ativada e você remover a função do IAM que concede ao Amazon S3 as
permissões necessárias, a replicação falhará. O Amazon S3 relata o status da replicação para objetos
afetados como FAILED.
Você pode adicionar tags a objetos novos ao fazer upload deles ou pode adicioná-las aos objetos
existentes.
• Você pode associar até 10 tags a um objeto. As tags associadas a um objeto devem ter chaves de tag
exclusivas.
• Um chave de tag pode ter até 128 caracteres Unicode e os valores de tag podem ter até 256 caracteres
Unicode.
• As chaves e os valores diferenciam letras maiúsculas de minúsculas.
• Para obter mais informações sobre restrições de tags, consulte Restrições de tags definidas pelo
usuário.
Exemplos
PHI=True
ou
Classification=PHI
Project=Blue
Project=x
Classification=confidential
photos/photo1.jpg
project/projectx/document.pdf
project/projecty/document2.pdf
Com a marcação, você agora tem outra dimensão. Se você quiser que photo1 esteja na categoria projeto
x, poderá marcar o objeto conforme necessário.
Benefícios adicionais
• As tags de objeto permitem ter controle de acesso de permissões. Por exemplo, você pode conceder a
um usuário do IAM permissões a objetos somente leitura com tags específicas.
• As tags de objeto permitem o gerenciamento de ciclo de vida do objeto em que você pode especificar
um filtro com base em tag, além de um prefixo de nome da chave, em uma regra de ciclo de vida.
• Ao usar a análise do Amazon S3, você pode configurar filtros para agrupar objetos para análise por tags
de objeto, prefixo de nome da chave ou ambos, prefixo e tags.
• Você também pode personalizar métricas do Amazon CloudWatch para exibir informações por filtros de
tag específicos. As seguintes seções fornecem detalhes.
Important
É aceitável usar tags para identificar objetos que contêm dados confidenciais, como informações
de identificação pessoal (PII) ou informações de saúde protegidas (PHI). No entanto, as próprias
tags não devem conter nenhuma informação confidencial.
Adição de conjuntos de tags de objeto a vários objetos do Amazon S3 com uma única solicitação
Para adicionar conjuntos de tags de objeto a mais de um objeto do Amazon S3 com uma única solicitação,
você pode usar operações em lote do S3. Você fornece às operações em lote do S3 uma lista de objetos
nos quais operar. O S3 Batch Operations chama a respectiva API para executar a operação especificada.
Um único trabalho de operações em lote pode realizar a operação especificada em bilhões de objetos
contendo exabytes de dados.
Para obter mais informações sobre tags de objetos, consulte Gerenciar tags de objeto (p. 689).
• Atribuição de tags de objeto PUT: Substitui tags em um objeto. Especifique tags no corpo de solicitação.
Há dois cenários distintos de gerenciamento de tags de objeto usando essa API.
• O objeto não tem tags – Usando essa API, você pode adicionar um conjunto de tags a um objeto (o
objeto não tem nenhuma tag anterior).
• O objeto tem um conjunto de tags existentes – Para modificar o conjunto de tags existente, você deve
primeiro recuperar o conjunto de tags existente, modificá-lo no lado do cliente e usar essa API para
substituir o conjunto de tags.
Note
Se você enviar essa solicitação com o conjunto de tags vazio, o Amazon S3 excluirá o
conjunto de tags existente no objeto. Se você usar esse método, será cobrado por uma
solicitação de nível 1 (PUT). Para obter mais informações, consulte Definição de preço do
Amazon S3.
A solicitação de Atribuição de tags de objeto DELETE é preferível, pois atinge o mesmo
resultado sem incorrer em cobranças.
• Atribuição de tags de objeto GET: retorna o conjunto de tags associado a um objeto. O Amazon S3
retorna tags de objetos no corpo da resposta.
• Atribuição de tags de objeto DELETE: exclui o conjunto de tags associado a um objeto.
• Objeto PUT e Iniciar multipart upload: você pode especificar tags ao criar objetos. Especifique tags
usando o cabeçalho de solicitação x-amz-tagging.
• Objeto GET: em vez de retornar o conjunto de tags, o Amazon S3 retorna a contagem de tags de objeto
no cabeçalho x-amz-tag-count (somente se o solicitante tiver permissões para ler tags) porque o
tamanho de resposta do cabeçalho está limitado a 8 KB. Caso queira ver as tags, faça outra solicitação
para a operação de API Atribuição de tags de objeto GET.
• Objeto POST: você pode especificar tags na solicitação POST.
Contanto que as tags na solicitação não ultrapassem o limite de tamanho de cabeçalho de solicitações
HTTP de 8 KB, você pode usar a PUT Object API para criar objetos com tags. Se as tags
especificadas ultrapassarem o limite de tamanho do cabeçalho, você poderá usar esse método POST
para incluir as tags no corpo.
Objeto PUT - Copiar: você pode especificar a x-amz-tagging-directive na solicitação para instruir
o Amazon S3 a copiar (comportamento padrão) as tags ou substituir as tags por um novo conjunto de
tags fornecido na solicitação.
Versão da API 2006-03-01
685
Amazon Simple Storage Service Guia do usuário
Configurações adicionais
Observe o seguinte:
• A atribuição de tags de objetos do S3 é muito consistente. Para obter mais informações, consulte
Modelo de consistência de dados do Amazon S3 (p. 3).
Configurações adicionais
Esta seção explica como a marcação de objetos está relacionada a outras configurações.
Suponha que você armazene fotos (brutas e no formato concluído) no bucket do Amazon S3. Você pode
marcar esses objetos como mostrado a seguir.
phototype=raw
or
phototype=finished
Você pode considerar o arquivamento das fotos brutas no S3 Glacier pouco tempo depois de serem
criadas. Você pode configurar uma regra de ciclo de vida com um filtro que identifica o subconjunto de
objetos com o prefixo de nome de chave (photos/) que têm uma tag específica (phototype=raw).
Para obter mais informações, consulte Gerenciando seu ciclo de vida de armazenamento (p. 569).
Para obter mais informações sobre a marcação de objetos, consulte os seguintes tópicos:
Tópicos
• Marcação e políticas de controle de acesso (p. 686)
• Gerenciar tags de objeto (p. 689)
As tags de objeto permitem ter controle de acesso para gerenciar permissões. Você pode conceder
permissões condicionais com base em tags de objeto. O Amazon S3 oferece suporte às seguintes chaves
de condição que podem ser usadas para conceder permissões condicionais com base em tags de objeto:
Note
Para conceder permissões para as operações PUT Object e DELETE Object, não é
permitido usar essa chave de condição. Isto é, você não pode criar uma política para conceder
ou negar permissões de usuário para excluir ou substituir um objeto existente com base nas
tags existentes.
• s3:RequestObjectTagKeys – Use esta chave de condição para restringir as chaves de tag
que deseja permitir em objetos. Isso é útil para adicionar tags a objetos usando as solicitações
PutObjectTagging e PutObject e de POST objeto.
• s3:RequestObjectTag/<tag-key> – Use esta chave de condição para restringir as chaves e
os valores de tag que deseja permitir em objetos. Isso é útil para adicionar tags a objetos usando as
solicitações PutObjectTagging e PutObject e de bucket POST.
Para obter uma lista completa de chaves de condição específicas de serviço do Amazon S3, consulte
Exemplos de chave de condição do Amazon S3 (p. 278). As seguintes políticas de permissões ilustram
como a marcação de objetos permite gerenciar permissões de acesso.
Example 1: Permitir que um usuário leia somente os objetos que têm uma tag específica
A política de permissões a seguir concede ao usuário permissão para ler objetos, mas a condição limita a
permissão de leitura somente a objetos que possuem a chave e o valor de tag específicos a seguir.
security : public
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::awsexamplebucket1/*",
"Principal": "*",
"Condition": { "StringEquals": {"s3:ExistingObjectTag/security": "public" } }
}
]
}
Example 2: permitir que um usuário adicione tags de objeto com restrições nas chaves de tag
permitidas
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObjectTagging"
],
"Resource": [
"arn:aws:s3:::awsexamplebucket1/*"
],
"Principal":{
"CanonicalUser":[
"64-digit-alphanumeric-value"
]
},
"Condition": {
"ForAllValues:StringLike": {
"s3:RequestObjectTagKeys": [
"Owner",
"CreationDate"
]
}
}
}
]
}
A política garante que o conjunto de tags, se especificado na solicitação, tenha as chaves especificadas.
Um usuário pode enviar um conjunto de tags vazio em PutObjectTagging, o que é permitido por essa
política (um conjunto de tags vazio na solicitação remove as tags existentes no objeto). Se você quiser
impedir que um usuário remova o conjunto de tags, adicione outra condição para garantir que o usuário
forneça pelo menos um valor. O ForAnyValue na condição garante que pelo menos um dos valores
especificados deva estar presente na solicitação.
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObjectTagging"
],
"Resource": [
"arn:aws:s3:::awsexamplebucket1/*"
],
"Principal":{
"AWS":[
"arn:aws:iam::account-number-without-hyphens:user/username"
]
},
"Condition": {
"ForAllValues:StringLike": {
"s3:RequestObjectTagKeys": [
"Owner",
"CreationDate"
]
},
"ForAnyValue:StringLike": {
"s3:RequestObjectTagKeys": [
"Owner",
"CreationDate"
]
}
}
}
]
}
Para obter mais informações, consulte Criar uma condição que testa vários valores de chave (operações
de conjunto) no Guia do usuário do IAM.
Example 3: permitir que um usuário adicione tags de objeto que incluam uma chave e um valor de
tag específicos
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObjectTagging"
],
"Resource": [
"arn:aws:s3:::awsexamplebucket1/*"
],
"Principal":{
"AWS":[
"arn:aws:iam::account-number-without-hyphens:user/username"
]
},
"Condition": {
"StringEquals": {
"s3:RequestObjectTag/Project": "X"
}
}
}
]
}
A marcação de objetos é uma forma de categorizar o armazenamento. Cada tag é um par de valores
chave que segue as regras a seguir:
• Você pode associar até 10 tags a um objeto. As tags associadas a um objeto devem ter chaves de tag
exclusivas.
• Um chave de tag pode ter até 128 caracteres Unicode e os valores de tag podem ter até 256 caracteres
Unicode.
• Os valores de chave e tag diferenciam maiúsculas de minúsculas.
Para obter mais informações sobre tags de objetos, consulte Categorizando seu armazenamento usando
tags (p. 683). Para obter mais informações sobre restrições de tags, consulte Restrições de tags
definidas pelo usuário no Guia do usuário do AWS Billing and Cost Management.
Uso do console do S3
Para adicionar tags a um objeto
2. Na lista Buckets (Buckets), escolha o nome do bucket que contém os objetos aos quais você deseja
adicionar às tags.
Para obter mais informações, consulte também Exibir propriedades do objeto no console do Amazon
S3 (p. 157) e Fazer upload de objetos (p. 71) neste guia.
O exemplo a seguir mostra como usar o AWS SDK para Java para definir tags para um objeto novo
e recuperar ou substituir tags para um objeto existente. Para obter mais informações sobre marcação
de objetos, consulte Categorizando seu armazenamento usando tags (p. 683). Para obter instruções
sobre criar e testar um exemplo funcional, consulte Testar exemplos de código Java no Amazon
S3 (p. 1042).
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.*;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();
// Create an object, add two new tags, and upload the object to Amazon S3.
PutObjectRequest putRequest = new PutObjectRequest(bucketName, keyName, new
File(filePath));
List<Tag> tags = new ArrayList<Tag>();
.NET
O exemplo a seguir mostra como usar o AWS SDK para .NET para definir as tags para um objeto
novo e recuperar ou substituir as tags para um objeto existente. Para obter mais informações sobre
marcação de objetos, consulte Categorizando seu armazenamento usando tags (p. 683).
Para obter instruções sobre como criar e testar um exemplo funcional, consulte Executar os exemplos
de código do Amazon S3 .NET (p. 1044).
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
public class ObjectTagsTest
{
private const string bucketName = "*** bucket name ***";
private const string keyName = "*** key name for the new object ***";
private const string filePath = @"*** file path ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 client;
{
try
{
// 1. Put an object with tags.
var putRequest = new PutObjectRequest
{
BucketName = bucketName,
Key = keyName,
FilePath = filePath,
TagSet = new List<Tag>{
new Tag { Key = "Keyx1", Value = "Value1"},
new Tag { Key = "Keyx2", Value = "Value2" }
}
};
}
catch (AmazonS3Exception e)
{
Console.WriteLine(
"Error encountered ***. Message:'{0}' when writing an object"
, e.Message);
}
catch (Exception e)
{
Console.WriteLine(
"Encountered an error. Message:'{0}' when writing an object"
, e.Message);
}
}
}
}
O relatório de alocação de custos lista o uso da AWS de sua conta por categoria de produto e usuário do
AWS Identity and Access Management (IAM). O relatório contém os mesmos itens de linha do relatório
de faturamento detalhado (consulte Entender os relatórios de uso e faturamento da AWS para o Amazon
S3 (p. 698)) e colunas adicionais para suas chaves de tag.
A AWS fornece dois tipos de tags de alocação de custos: uma tag gerada pela AWS e tags definidas pelo
usuário. A AWS define, cria e aplica a tag createdBy gerada pela AWS para você depois de um evento
de CreateBucket do Amazon S3. Você define, cria e aplica tags definidas pelo usuário ao seu bucket do
S3.
Você deve ativar ambos os tipos de tags separadamente no console de Gerenciamento de custos
e faturamento antes que elas possam aparecer em seus relatórios de faturamento. Para obter mais
informações sobre tags geradas pela AWS, consulte Tags de alocação de custos geradas pela AWS.
• Para criar tags no console, consulte Visualização das propriedades de um bucket do S3 (p. 35).
• Para criar tags usando a API do Amazon S3, consulte Marcação de PUT bucket na Referência da API do
Amazon Simple Storage Service.
• Para criar tags usando a CLI da AWS, consulte put-bucket-tagging na Referência de comandos da CLI
da AWS .
• Para obter mais informações sobre a ativação de tags, consulte Usar tags de alocação de custos no
Guia do usuário do Gerenciamento de custos e faturamento da AWS.
Uma tag de alocação de custos definida pelo usuário tem os seguintes componentes:
• A chave de tags. A chave de tags é o nome da tag. Por exemplo, no projeto de tags/Trinity, o projeto é a
chave. A chave de tags é uma string que diferencia maiúsculas e minúsculas que pode conter de 1 a 128
caracteres Unicode.
• O valor da tag. O valor da tag é uma string obrigatória. Por exemplo, no projeto de tags/Trinity, Trinity é
o valor. O valor da tag é uma string que diferencia maiúsculas e minúsculas que pode conter de 0 a 256
caracteres Unicode.
Para obter detalhes sobre os caracteres permitidos em tags definidas pelo usuário e outras restrições,
consulte Restrições de tags definidas pelo usuário no Guia do usuário do Gerenciamento de custos e
faturamento da AWS. Para obter mais informações sobre tags, consulte Tags de alocação de custos
definidas pelo usuário no Guia do usuário do Gerenciamento de custos e faturamento da AWS.
Tags de bucket do S3
Cada bucket do S3 tem um conjunto de tags. Um conjunto de tags contém todas as tags que são
atribuídas àquele bucket. Um conjunto de tags pode conter até 50 tags ou estar vazio. As chaves podem
ser únicas em um conjunto de tags, mas os valores nele não precisam ser únicos. Por exemplo, você pode
ter o mesmo valor nos conjuntos de tags chamados project/Trinity e cost-center/Trinity.
Em um bucket, se você adicionar uma tag que tenha a mesma chave de uma tag existente, o novo valor
substituirá o antigo.
A AWS não aplica nenhum significado semântico às suas tags. Interpretamos as tags estritamente como
sequências de caracteres.
Para adicionar, listar, editar ou excluir tags, você pode usar o console do Amazon S3, a interface de linha
de comando da AWS (CLI da AWS) ou a API do Amazon S3.
Mais informações
• Usar tags de alocação de custos no Guia do usuário do Gerenciamento de custos e faturamento da
AWS
• Entender os relatórios de uso e faturamento da AWS para o Amazon S3 (p. 698)
• Relatórios de faturamento da AWS para o Amazon S3 (p. 695)
• Relatórios de faturamento: vários relatórios que fornecem visualizações de alto nível de todas as
atividades dos serviços da AWS que você está usando, incluindo o Amazon S3. A AWS sempre cobra as
taxas do Amazon S3 do proprietário do bucket do S3, a menos que o bucket tenha sido criado como um
bucket de Pagamento pelo solicitante. Para obter mais informações sobre Pagamento pelo solicitante,
consulte Configuração de buckets de Pagamento pelo solicitante para transferências de armazenamento
e uso (p. 56). Para obter mais informações sobre relatórios de faturamento, consulte Relatórios de
faturamento da AWS para o Amazon S3 (p. 695).
• Relatório de uso: um resumo das atividades de um serviço específico, agregado por hora, dia ou mês.
Você pode escolher qual tipo e operação de uso incluir. Também é possível escolher a forma como os
dados são agregados. Para obter mais informações, consulte Relatório de uso da AWS para o Amazon
S3 (p. 696).
Os tópicos seguintes fornecem informações sobre os relatórios de uso e faturamento do Amazon S3.
Tópicos
• Relatórios de faturamento da AWS para o Amazon S3 (p. 695)
• Relatório de uso da AWS para o Amazon S3 (p. 696)
Você também pode fazer download de um relatório de uso que forneça mais detalhes sobre o uso do
armazenamento do Amazon S3 do que os relatórios de faturamento. Para obter mais informações,
consulte Relatório de uso da AWS para o Amazon S3 (p. 696).
Cobrança Comentários
Cobrança Comentários
Para obter informações detalhadas sobre as cobranças de uso do Amazon S3 para armazenamento,
transferência de dados e serviços, consulte Definição de preço do Amazon S3 e Perguntas frequentes
sobre o Amazon S3.
Para obter informações sobre como entender os códigos e as abreviações usadas nos relatórios de uso e
faturamento do Amazon S3, consulte Entender os relatórios de uso e faturamento da AWS para o Amazon
S3 (p. 698).
Mais informações
• Relatório de uso da AWS para o Amazon S3 (p. 696)
• Usar tags de alocação de custos para buckets do S3 (p. 693)
• AWS Billing and Cost Management
• Definição de preço do Amazon S3
• Perguntas frequentes sobre o Amazon S3
• Definição de preço do S3 Glacier
• Serviço: Amazon S3
• Operação: a operação executada em seu bucket ou objeto. Para obter uma explicação detalhada das
operações do Amazon S3, consulte Controle de operações em seus relatórios de uso (p. 709).
• UsageType: um dos seguintes valores:
Para obter uma explicação detalhada dos tipos de uso do Amazon S3, consulte Entender os relatórios
de uso e faturamento da AWS para o Amazon S3 (p. 698).
• Recurso: o nome do bucket associado ao uso listado.
• StartTime: a hora inicial do dia ao qual o uso se aplica, no Tempo Universal Coordenado (UTC).
• EndTime: a hora de término do dia ao qual o uso se aplica, no Tempo universal coordenado (UTC).
• UsageValue: um dos valores de volume a seguir: A unidade de medida comum para dados é gigabytes
(GB). No entanto, dependendo do serviço e do relatório, terabytes (TB) podem aparecer.
• O número de solicitações durante o período especificado
• A quantidade de dados transferidos
• A quantidade de dados armazenados em uma determinada hora
• A quantidade de dados associados a restaurações do armazenamento de S3 Standard-IA, S3 One
Zone-IA, S3 Glacier ou S3 Glacier Deep Archive
Tip
Para obter informações detalhadas sobre cada solicitação recebida pelo Amazon S3 para seus
objetos, ative os logs de acesso do servidor para seus buckets. Para obter mais informações,
consulte Registrar em log as solicitações com registro em log de acesso ao servidor (p. 833).
Você pode fazer download de um relatório de uso como um arquivo XML ou de valores separados por
vírgula (CSV). A seguir há um relatório de uso de exemplo em formato CSV aberto em um aplicativo de
planilha.
Para obter informações sobre como entender o relatório de uso, consulte Entender os relatórios de uso e
faturamento da AWS para o Amazon S3 (p. 698).
3. No painel de navegação, escolha AWS Cost and Usage Reports (Relatórios de custo e uso da AWS).
4. Na seção Other Reports (Outros relatórios), escolha AWS Usage Report (Relatório de uso da AWS).
5. Para Services (Serviços), escolha Amazon Simple Storage Service.
6. Para Download Usage Report (Fazer download do relatório de uso), escolha as seguintes
configurações:
• Usage Types (Tipos de uso): para obter uma explicação detalhada sobre os tipos de uso do
Amazon S3, consulte Entender os relatórios de uso e faturamento da AWS para o Amazon
S3 (p. 698).
• Operation (Operação): para obter uma explicação detalhada sobre as operações do Amazon S3,
consulte Controle de operações em seus relatórios de uso (p. 709).
• Time Period (Período): o período de cobertura do relatório.
• Report Granularity (Granularidade do relatório): para que o relatório inclua subtotais por hora, dia ou
mês.
7. Escolha o formato Download e siga as instruções para abrir ou salvar o relatório.
Mais informações
• Entender os relatórios de uso e faturamento da AWS para o Amazon S3 (p. 698)
• Relatórios de faturamento da AWS para o Amazon S3 (p. 695)
Para obter informações sobre a definição de preço por região da AWS, consulte Definição de preço do
Amazon S3.
A primeira coluna da tabela a seguir indica os tipos de uso que aparecem em seus relatórios de uso e
faturamento. A unidade de medida comum para dados é gigabytes (GB). No entanto, dependendo do
serviço e do relatório, terabytes (TB) podem aparecer.
Tipos de uso
Observações:
1. Caso você encerre uma transferência antes da conclusão, o volume de dados transferidos pode exceder
o volume de dados recebidos pelo aplicativo. Essa discrepância pode ocorrer porque uma solicitação
de encerramento de transferência não pode ser executada instantaneamente, e parte do volume de
dados pode estar em trânsito com execução pendente da solicitação de encerramento. Esses dados em
trânsito são faturados como dados de "saída" transferidos.
2. Quando objetos arquivados na classe de armazenamento do S3 Glacier ou S3 Glacier Deep Archive
são excluídos, substituídos ou fizerem transição para outra classe de armazenamento antes do término
do compromisso de armazenamento mínimo, que é de 90 dias para o S3 Glacier ou de 180 dias para S3
Glacier Deep Archive, há uma cobrança pro rata por gigabyte para os dias restantes.
3. Para objetos que estão no armazenamento S3 Intelligent-Tiering, S3 Standard-IA ou S3 One Zone-IA,
quando são excluídos, substituídos ou movidos para uma classe de armazenamento diferente antes de
30 dias, existe uma cobrança pro rata por gigabyte pelos dias restantes.
4. Para pequenos objetos (menores que 128 KB) que estão no armazenamento S3 Standard-IA ou S3 One
Zone-IA, quando são excluídos, substituídos ou movidos para uma classe de armazenamento diferente
antes de 30 dias, existe uma cobrança pro rata por gigabyte pelos dias restantes.
5. Não há tamanho de objeto mínimo faturável para objetos na classe de armazenamento S3 Intelligent-
Tiering, mas objetos menores que 128 KB não estão qualificados para autonivelamento e sempre são
cobrados segundo a taxa do nível de acesso frequente S3 Intelligent-Tiering.
Mais informações
• Relatório de uso da AWS para o Amazon S3 (p. 696)
• Relatórios de faturamento da AWS para o Amazon S3 (p. 695)
• Definição de preço do Amazon S3
• Perguntas frequentes sobre o Amazon S3
• Definição de preço do S3 Glacier
• Perguntas frequentes sobre o S3 Glacier
O Seleção do Amazon S3 funciona em objetos armazenados em formato CSV, JSON ou Apache Parquet.
Ele também funciona com objetos compactados com GZIP ou BZIP2 (somente para objetos CSV e JSON)
e objetos criptografados no lado do servidor. Você pode especificar o formato dos resultados como CSV ou
JSON e determinar como os registros do resultado são delimitados.
Expressões SQL são passadas para o Amazon S3 na solicitação. O Seleção do Amazon S3 é compatível
com um subconjunto de SQL. Para obter mais informações sobre os elementos SQL compatíveis com o
Seleção do Amazon S3, consulte Referência SQL para Amazon S3 Select e S3 Glacier Select. (p. 714).
É possível executar consultas SQL usando AWS SDKs, a API REST de conteúdo de objeto SELECT, a
Interface de linha de comando da AWS (CLI da AWS) ou o console do Amazon S3. O console do Amazon
S3 limita a quantidade de dados retornados em 40 MB. Para recuperar mais dados, use a CLI da AWS ou
a API.
Requisitos e limites
Estes são os requisitos para o uso do Seleção do Amazon S3:
Limitações adicionais são aplicáveis no uso do Seleção do Amazon S3 com objetos Parquet:
• O Seleção do Amazon S3 é compatível somente com a compactação colunar com GZIP ou Snappy. O
Seleção do Amazon S3 não é compatível com a compactação de objetos inteiros no caso de objetos
Parquet.
• O Seleção do Amazon S3 não é compatível com a saída do Parquet. É necessário especificar o formato
de saída como CSV ou JSON.
• O tamanho máximo do grupo de linhas não compactadas é de 256 MB.
• É necessário usar os tipos de dados especificados no esquema do objeto.
• A seleção em um campo repetido retorna apenas o último valor.
Para obter mais informações sobre como criar uma solicitação do Seleção do Amazon S3, consulte
SELECTObjectContent na Referência de APIs do Amazon Simple Storage Service. Também é possível um
exemplo de código do SDK nas seções a seguir.
A,B
C,D
D,E
E,F
G,H
I,J
Use o parâmetro ScanRange do Seleção do Amazon S3 e inicie no (byte) 1 e termine no (byte) 4. Assim,
o intervalo de verificação começaria em "," e faria a verificação até o final do registro, começando em "C" e
retornaria o resultado C, D, pois esse é o final do registro.
As solicitações de intervalo de varredura do Seleção do Amazon S3 estão disponíveis para uso na CLI,
na API e no SDK do Amazon S3. É possível usar o parâmetro ScanRange na solicitação do Seleção do
Amazon S3 desse recurso. Para obter mais informações, consulte o conteúdo do objeto do Seleção do
Amazon S3 na Referência de APIs do Amazon Simple Storage Service.
Erros
O Seleção do Amazon S3 retorna um código de erro e uma mensagem de erro associada quando
um problema é encontrado ao tentar executar uma consulta. Para obter uma lista de códigos de erro
e descrições, consulte a seção Lista de Códigos de erro de conteúdo de objetos SELECT da página
Respostas de erro na Referência de APIs do Amazon Simple Storage Service.
Para obter mais informações sobre o Amazon S3 Select, consulte os tópicos abaixo:
Tópicos
• Exemplos de uso do Amazon S3 Select em objetos (p. 712)
• Referência SQL para Amazon S3 Select e S3 Glacier Select. (p. 714)
Java
O código Java a seguir retorna o valor da primeira coluna para cada registro armazenado em um
objeto que contém dados armazenados em formato CSV. Ele também solicita que mensagens de
Progress e Stats sejam retornadas. É necessário fornecer um nome de bucket válido e um objeto
que contenha dados em formato CSV.
Para obter instruções sobre criar e testar um exemplo funcional, consulte Testar exemplos de código
Java no Amazon S3 (p. 1042).
package com.amazonaws;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.CSVInput;
import com.amazonaws.services.s3.model.CSVOutput;
import com.amazonaws.services.s3.model.CompressionType;
import com.amazonaws.services.s3.model.ExpressionType;
import com.amazonaws.services.s3.model.InputSerialization;
import com.amazonaws.services.s3.model.OutputSerialization;
import com.amazonaws.services.s3.model.SelectObjectContentEvent;
import com.amazonaws.services.s3.model.SelectObjectContentEventVisitor;
import com.amazonaws.services.s3.model.SelectObjectContentRequest;
import com.amazonaws.services.s3.model.SelectObjectContentResult;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.concurrent.atomic.AtomicBoolean;
/**
* This example shows how to query data from S3Select and consume the response in the
form of an
* InputStream of records and write it to a file.
*/
/*
* An End Event informs that the request has finished
successfully.
*/
@Override
public void visit(SelectObjectContentEvent.EndEvent event)
{
isResultComplete.set(true);
System.out.println("Received End Event. Result is
complete.");
}
}
);
copy(resultInputStream, fileOutputStream);
}
/*
* The End Event indicates all matching records have been transmitted.
* If the End Event is not received, the results may be incomplete.
*/
if (!isResultComplete.get()) {
throw new Exception("S3 Select request was incomplete as End Event was not
received.");
}
}
return request;
}
}
JavaScript
Para obter um exemplo de JavaScript usando o AWS SDK para JavaScript com a API do S3
SelectObjectContent para selecionar registros de arquivos JSON e CSV armazenados no Amazon S3,
consulte a publicação de blog Querying data without servers or databases using Amazon S3 Select.
Python
Para obter um exemplo do Python sobre o uso de consultas de linguagem de consulta estruturada
(SQL) para pesquisar dados carregados para o Amazon S3 como um arquivo de valor separado por
vírgulas (CSV) usando o S3 Select, consulte a publicação do blog Querying data without servers or
databases using Amazon S3 Select.
Tópicos
• Comando SELECT (p. 714)
• Tipos de dados (p. 720)
• Operadores (p. 721)
• Palavras-chave reservadas (p. 722)
• Funções SQL (p. 726)
Comando SELECT
O Seleção do Amazon S3 e o Seleção do S3 Glacier são compatíveis somente com o comando SELECT
de SQL. As seguintes cláusulas padrão ANSI são compatíveis com SELECT:
• SELECT lista
• Cláusula FROM
• Cláusula WHERE
• Cláusula LIMIT (somente Seleção do Amazon S3)
Note
As consultas do Seleção do Amazon S3 e do Seleção do S3 Glacier não são compatíveis com
subconsultas nem com junções.
Lista SELECT
A lista SELECT nomeia as colunas, as funções e as expressões que a consulta deve retornar. A lista
representa o resultado da consulta.
SELECT *
SELECT projection [ AS column_alias | column_alias ] [, ...]
O primeiro formulário com * (asterisco) retorna todas as linhas que passaram na cláusula WHERE, da
maneira como estão. O segundo formulário cria uma linha com expressões escalares de saída definidas
pelo usuário projection para cada coluna.
Cláusula FROM
O Seleção do Amazon S3 e o Seleção do S3 Glacier são compatíveis com os seguintes formulários da
cláusula FROM:
FROM table_name
FROM table_name alias
FROM table_name AS alias
Em que table_name é um S3Object (para o Seleção do Amazon S3), ARCHIVE ou OBJECT (para o
Seleção do S3 Glacier) que faz referência ao arquivo que está sendo consultado. Os usuários provenientes
de bancos de dados relacionais tradicionais podem pensar nisso como um esquema de banco de dados
que contém várias visualizações em uma tabela.
Seguindo o SQL padrão, a cláusula FROM cria linhas filtradas na cláusula WHERE e projetadas na lista
SELECT.
Para objetos JSON armazenados no Seleção do Amazon S3, você também pode usar as seguintes formas
da cláusula FROM:
FROM S3Object[*].path
FROM S3Object[*].path alias
FROM S3Object[*].path AS alias
Com essa forma da cláusula FROM, você pode selecionar entre matrizes ou objetos em um objeto JSON.
Você pode especificar esse pathusando uma das formas a seguir:
Note
Example
Exemplos:
Exemplo 1
{ "Rules": [ {"id": "1"}, {"expr": "y > x"}, {"id": "2", "expr": "z = DEBUG"} ]}
{ "created": "June 27", "modified": "July 6" }
{"id":"1"}
{}
{"id":"2"}
{}
Se você não quiser que o Seleção do Amazon S3 retorne registros vazios quando não encontrar uma
correspondência, você poderá testar o valor MISSING. A consulta a seguir retorna os mesmos resultados
que a consulta anterior, mas com os valores vazios omitidos:
{"id":"1"}
{"id":"2"}
Exemplo 2
{"dir_name":"important_docs","files":[{"name":"."},{"name":".."},{"name":".aws"},
{"name":"downloads"}]}
{"dir_name":"other_docs","files":[{"name":"."},{"name":".."},{"name":"my stuff"},
{"name":"backup"}]}
{"dir_name":"important_docs","owner":"AWS S3"}
{"dir_name":"other_docs","owner":"User"}
Cláusula WHERE
A cláusula WHERE segue esta sintaxe:
WHERE condition
A cláusula WHERE filtra as linhas com base na condição. Uma condição é uma expressão com um valor
booliano. Somente linhas para as quais a condição é avaliada como TRUE são retornadas no resultado.
LIMIT number
A cláusula LIMIT limita o número de registros que você deseja que a consulta retorne com base no
número.
Note
O S3 Glacier Select não é compatível com a cláusula LIMIT.
Acesso de atributo
As cláusulas SELECT e WHERE podem se referir a dados de registro usando um dos métodos nas seções a
seguir, dependendo se o arquivo que está sendo consultado está no formato CSV ou JSON.
CSV
• Números da coluna — você pode se referir à Nª coluna de uma linha com o nome _N, em que N é a
posição da coluna. A contagem da posição começa em 1. Por exemplo, a primeira coluna é denominada
_1 e a segunda coluna é denominada _2.
Você pode se referir a uma coluna como _N ou alias._N. Por exemplo, _2 e myAlias._2 são
maneiras válidas de fazer referência a uma coluna na lista SELECT e na cláusula WHERE.
• Cabeçalhos da coluna — Para objetos no formato CSV que possuem uma linha de cabeçalho, os
cabeçalhos estão disponíveis para a lista SELECT e a cláusula WHERE. Especificamente, como no
SQL tradicional, nas expressões de cláusula SELECT e WHERE, você pode consultar as colunas por
alias.column_name ou column_name.
• Documento — você pode acessar os campos do documentos JSON como alias.name. Os campos
aninhados também podem ser acessados, por exemplo, alias.name1.name2.name3
• Lista — Você pode acessar elementos em uma lista JSON usando índices baseados em zero com
o operador []. Por exemplo, você pode acessar o segundo elemento de uma lista como alias[1].
Acessar elementos de lista pode ser combinado com campos como alias.name1.name2[1].name3.
• Exemplos: considere esse objeto JSON como um exemplo de conjunto de dados:
Exemplo 1
{"name":"Susan Smith"}
Exemplo 2
{"project_name":"project1"}
Os exemplos a seguir são 1) objetos do Amazon S3 ou do S3 Glacier no formato CSV com os cabeçalhos
de coluna especificados e com FileHeaderInfo definido como "Usar" para a solicitação de consulta; ou
2) objetos do Amazon S3 no formato JSON com os atributos especificados.
• A expressão a seguir retorna com êxito valores do objeto (sem aspas: não diferenciando entre letras
maiúsculas e minúsculas):
Exemplo 2: O objeto do Amazon S3 que está sendo consultado tem um cabeçalho/atributo com "NAME" e
outro cabeçalho/atributo com "name".
• A seguinte expressão resulta em um erro 400 AmbiguousFieldName (sem aspas: sem diferenciação
entre letras maiúsculas e minúsculas, mas há duas correspondências):
• A expressão a seguir retorna com êxito valores do objeto (aspas: diferenciação entre letras maiúsculas e
minúsculas, portanto, resolve a ambiguidade):
Para obter a lista completa de palavras-chave, consulte Palavras-chave reservadas (p. 722).
Exemplo: o objeto que está sendo consultado tem o cabeçalho/atributo nomeado como “CAST”, que é uma
palavra-chave reservada.
• A expressão a seguir retorna com êxito valores do objeto (aspas: usar cabeçalho/atributo definido pelo
usuário):
• Os seguintes resultados de expressão resultam em um erro de análise 400 (sem aspas: entram em
conflito com palavra-chave reservada):
Expressões escalares
Na cláusula WHERE e na lista SELECT, você tem expressões escalares SQL, que são expressões que
retornam valores escalares. Elas têm o seguinte formato:
• literal
Um literal SQL.
• column_reference
Tipos de dados
O Seleção do Amazon S3 e o Seleção do S3 Glacier são compatíveis com vários tipos de dados primitivos.
Para obter mais informações sobre a função CAST, consulte CAST (p. 730).
string String de tamanho variável codificada por UTF8. O limite padrão 'xyz'
é um caractere. O limite máximo de caracteres é 2.147.483.647.
decimal, Número de base 10, com precisão máxima de 38 (ou seja, a 123.456
numérico quantidade máxima de dígitos significativos) e com escala no
31 31
intervalo de -2 a 2 -1 (ou seja, o expoente de base 10).
Note
Operadores
O Seleção do Amazon S3 e o Seleção do S3 Glacier são compatíveis com os seguintes operadores.
Operadores lógicos
• AND
• NOT
• OR
Operadores de comparação
• <
• >
• <=
• >=
• =
• <>
• !=
• BETWEEN
• IN – Por exemplo: IN ('a', 'b', 'c')
Operadores unitários
• IS NULL
• IS NOT NULL
Operadores matemáticos
A adição, a subtração, a multiplicação, a divisão e o módulo são compatíveis.
• +
• –
• *
• /
• %
Precedência do operador
A tabela a seguir mostra a precedência dos operadores em ordem decrescente.
*, /, % esquerda multiplicação,
divisão, módulo
+, - esquerda adição,
subtração
IN associação de
conjunto
BETWEEN contenção de
intervalo
LIKE correspondência
de padrões de
string
= direita igualdade,
atribuição
Palavras-chave reservadas
Abaixo está a lista de palavras-chave reservadas para o Seleção do Amazon S3 e o Seleção do S3
Glacier. Estes incluem os nomes de função, tipos de dados, operadores etc., necessários para executar as
expressões SQL usadas para consultar o conteúdo do objeto.
absolute
action
add
all
allocate
alter
and
any
are
as
asc
assertion
at
authorization
avg
bag
begin
between
bit
bit_length
blob
bool
boolean
both
by
cascade
cascaded
case
cast
catalog
char
char_length
character
character_length
check
clob
close
coalesce
collate
collation
column
commit
connect
connection
constraint
constraints
continue
convert
corresponding
count
create
cross
current
current_date
current_time
current_timestamp
current_user
cursor
date
day
deallocate
dec
decimal
declare
default
deferrable
deferred
delete
desc
describe
descriptor
diagnostics
disconnect
distinct
domain
double
drop
else
end
end-exec
escape
except
exception
exec
execute
exists
external
extract
false
fetch
first
float
for
foreign
found
from
full
get
global
go
goto
grant
group
having
hour
identity
immediate
in
indicator
initially
inner
input
insensitive
insert
int
integer
intersect
interval
into
is
isolation
join
key
language
last
leading
left
level
like
limit
list
local
lower
match
max
min
minute
missing
module
month
names
national
natural
nchar
next
no
not
null
nullif
numeric
octet_length
of
on
only
open
option
or
order
outer
output
overlaps
pad
partial
pivot
position
precision
prepare
preserve
primary
prior
privileges
procedure
public
read
real
references
relative
restrict
revoke
right
rollback
rows
schema
scroll
second
section
select
session
session_user
set
sexp
size
smallint
some
space
sql
sqlcode
sqlerror
sqlstate
string
struct
substring
sum
symbol
system_user
table
temporary
then
time
timestamp
timezone_hour
timezone_minute
to
trailing
transaction
translate
translation
trim
true
tuple
union
unique
unknown
unpivot
update
upper
usage
user
using
value
values
varchar
varying
view
when
whenever
where
with
work
write
year
zone
Funções SQL
O Seleção do Amazon S3 e o Seleção do S3 Glacier são compatíveis com várias funções SQL.
Tópicos
• Funções agregadas (somente no Seleção do Amazon S3) (p. 726)
• Funções condicionais (p. 727)
• Funções da conversão (p. 730)
• Funções de data (p. 730)
• Funções de string (p. 736)
COUNT – INT
Funções condicionais
O Seleção do Amazon S3 e o Seleção do S3 Glacier são compatíveis com as seguintes funções
condicionais.
Tópicos
• CASE (p. 727)
• COALESCE (p. 729)
• NULLIF (p. 729)
CASE
Em expressões CASE simples, uma expressão é comparada a um valor. Quando uma correspondência
é encontrada, a ação especificada na cláusula THEN é aplicada. Se nenhuma correspondência é
encontrada, a ação especificada na cláusula ELSE é aplicada.
Em expressões CASE pesquisadas, cada CASE é avaliado com base em uma expressão booleana e a
instrução CASE retorna o primeiro CASE correspondente. Se nenhum CASE correspondente é encontrado
entre as cláusulas WHEN, a ação na cláusula ELSE é retornada.
Sintaxe
Instrução CASE simples usada para correspondência de condições:
CASE expression
WHEN value THEN result
[WHEN...]
[ELSE result]
END
CASE
WHEN boolean condition THEN result
[WHEN ...]
[ELSE result]
END
Exemplos
Use uma expressão CASE simples para substituir Nova York City por Big Apple em uma consulta.
Substitua todos os outros nomes de cidade por outros.
select venuecity,
case venuecity
when 'New York City'
then 'Big Apple' else 'other'
end from venue
order by venueid desc;
venuecity | case
-----------------+-----------
Los Angeles | other
New York City | Big Apple
San Francisco | other
Baltimore | other
...
(202 rows)
Use uma expressão CASE pesquisada para atribuir números de grupo com base no valor PRICEPAID
para vendas individuais de ingresso:
select pricepaid,
case when pricepaid <10000 then 'group 1'
when pricepaid >10000 then 'group 2'
else 'group 3'
end from sales
order by 1 desc;
pricepaid | case
-----------+---------
12624.00 | group 2
10000.00 | group 3
10000.00 | group 3
9996.00 | group 1
9988.00 | group 1
...
(172456 rows)
COALESCE
Avalia os argumentos na ordem e retorna o primeiro não desconhecido, ou seja, o primeiro que não for
nulo ou ausente. Essa função não propaga nulos e ausentes.
Sintaxe
Parâmetros
expressão
Exemplos
COALESCE(1) -- 1
COALESCE(null) -- null
COALESCE(null, null) -- null
COALESCE(missing) -- null
COALESCE(missing, missing) -- null
COALESCE(1, null) -- 1
COALESCE(null, null, 1) -- 1
COALESCE(null, 'string') -- 'string'
COALESCE(missing, 1) -- 1
NULLIF
Dadas as duas expressões, retorna NULL se as duas forem avaliadas para o mesmo valor. Caso contrário,
retorna o resultado da avaliação da primeira expressão.
Sintaxe
Parâmetros
expression1, expression2
Exemplos
NULLIF(1, 1) -- null
NULLIF(1, 2) -- 1
NULLIF(1.0, 1) -- null
NULLIF(1, '1') -- 1
NULLIF([1], [1]) -- null
NULLIF(1, NULL) -- 1
NULLIF(NULL, 1) -- null
NULLIF(null, null) -- null
NULLIF(missing, null) -- null
Funções da conversão
O Seleção do Amazon S3 e o Seleção do S3 Glacier são compatíveis com as seguintes funções de
conversão.
Tópicos
• CAST (p. 730)
CAST
A função CAST converte uma entidade, como uma expressão que retorna um único valor, de um tipo em
outro.
Sintaxe
Parâmetros
expressão
Uma combinação de um ou mais valores, operadores e funções SQL que retornam um valor.
data_type
O tipo de dados de destino, como INT, no qual a expressão será convertida. Para obter uma lista dos
tipos de dados compatíveis, consulte Tipos de dados (p. 720).
Exemplos
CAST('2007-04-05T14:30Z' AS TIMESTAMP)
CAST(0.456 AS FLOAT)
Funções de data
O Seleção do Amazon S3 e o Seleção do S3 Glacier são compatíveis com as seguintes funções de data.
Tópicos
• DATE_ADD (p. 730)
• DATE_DIFF (p. 731)
• EXTRACT (p. 732)
• TO_STRING (p. 732)
• TO_TIMESTAMP (p. 735)
• UTCNOW (p. 736)
DATE_ADD
Dada uma parte da data, uma quantidade e um time stamp, retorna um time stamp atualizado, alterando a
parte da data pela quantidade.
Sintaxe
Parâmetros
date_part
Especifica que parte da data deve ser modificada. Pode ser uma das partes a seguir:
• year
• mês
• dia
• hora
• minuto
• segundos
quantity (quantidade)
O valor a ser aplicado a um time stamp atualizado. Os valores positivos para a quantidade são
adicionados à date_part do time stamp e os valores negativos são subtraídos.
timestamp
Exemplos
DATE_DIFF
Dada uma parte da data e dois time stamps, retorna a diferença nas partes da data. O valor de retorno
é um inteiro negativo quando o valor date_part do timestamp1 for maior que o valor date_part do
timestamp2. O valor de retorno é um inteiro positivo quando o valor date_part do timestamp1 for
menor que o valor date_part do timestamp2.
Sintaxe
Parâmetros
date_part
Especifica que parte dos time stamps deve ser comparada. Para a definição de date_part, consulte
DATE_ADD (p. 730).
timestamp1
Exemplos
EXTRACT
Dada uma parte da data e um time stamp, retorna o valor da parte da data do time stamp.
Sintaxe
Parâmetros
date_part
Especifica que parte dos time stamps deve ser extraída. Pode ser uma das partes a seguir:
• year
• mês
• dia
• hora
• minuto
• segundos
• timezone_hour
• timezone_minute
timestamp
Exemplos
TO_STRING
Dado um time stamp e um padrão de formato, retorna uma representação de string do time stamp no
formato especificado.
Sintaxe
Parâmetros
timestamp
M 1 Mês do ano
MM 01 Mês do ano
preenchido com
zeros
d 2 Dia do mês (1 a
31)
dd 02 Dia do mês
preenchido com
zeros (01 a 31)
a AM H do dia
h 3 Hora do dia (1 a
12)
hh 03 Hora do dia
preenchida com
zeros (01 a 12)
H 3 Hora do dia (0 a
23)
HH 03 Hora do dia
preenchida com
zeros (00 a 23)
m 4 Minuto da hora
(0 a 59)
mm 04 Minuto da hora
preenchido com
zeros (00 a 59)
s 5 Segundo do
minuto (0 a 59)
ss 05 Segundo
do minuto
preenchido com
zeros (00 a 59)
S 0 Fração de
segundos
(precisão: 0,1,
intervalo: 0,0 a
0,9)
SS 6 Fração de
segundos
(precisão: 0,01,
intervalo: 0,0 a
0,99)
SSS 60 Fração de
segundos
(precisão:
0,001, intervalo:
0,0 a 0,999)
… … …
n 60000000 Nano de
segundo
X +07 or Z Deslocamento
em horas
ou "Z" se o
deslocamento
for 0
x 7 Deslocamento
em horas
Exemplos
TO_TIMESTAMP
Dada uma string, converte-a em um time stamp. Esta é a operação inversa de TO_STRING.
Sintaxe
TO_TIMESTAMP ( string )
Parâmetros
string
Exemplos
TO_TIMESTAMP('2007T') -- `2007T`
TO_TIMESTAMP('2007-02-23T12:14:33.079-08:00') -- `2007-02-23T12:14:33.079-08:00`
UTCNOW
Sintaxe
UTCNOW()
Parâmetros
none
Exemplos
UTCNOW() -- 2017-10-13T16:02:11.123Z
Funções de string
O Seleção do Amazon S3 e o Seleção do S3 Glacier são compatíveis com as seguintes funções de string.
Tópicos
• CHAR_LENGTH, CHARACTER_LENGTH (p. 736)
• LOWER (p. 737)
• SUBSTRING (p. 737)
• TRIM (p. 738)
• UPPER (p. 738)
CHAR_LENGTH, CHARACTER_LENGTH
Sintaxe
CHAR_LENGTH ( string )
Parâmetros
string
Exemplos
CHAR_LENGTH('') -- 0
CHAR_LENGTH('abcdefg') -- 7
LOWER
Dada uma string, converte todos os caracteres maiúsculos em minúsculos. Todos os caracteres
minúsculos permanecem inalterados.
Sintaxe
LOWER ( string )
Parâmetros
string
Exemplos
LOWER('AbCdEfG!@#$') -- 'abcdefg!@#$'
SUBSTRING
Dada uma string, um índice inicial e, opcionalmente, um tamanho, retorna a substring do índice inicial até o
final da string ou até o tamanho fornecido.
Note
O primeiro caractere da string de entrada tem o índice 1. Se start for < 1, será definido como 1.
Sintaxe
Parâmetros
string
O tamanho da substring a ser retornada. Se não estiver presente, prossiga para o final da string.
Exemplos
SUBSTRING("123456789", 0) -- "123456789"
SUBSTRING("123456789", 1) -- "123456789"
SUBSTRING("123456789", 2) -- "23456789"
SUBSTRING("123456789", -4) -- "123456789"
TRIM
Corta os caracteres iniciais ou finais de uma string. O caractere padrão a ser removido é ' '.
Sintaxe
Parâmetros
string
O conjunto de caracteres a ser removido. Observe que remove_chars pode ser uma string com
tamanho > 1. Essa função retorna a string com qualquer caractere de remove_chars encontrado no
início ou final da string que foi removida.
Exemplos
UPPER
Dada uma string, converte todos os caracteres minúsculos em maiúsculos. Todos os caracteres
maiúsculos permanecem inalterados.
Sintaxe
UPPER ( string )
Parâmetros
string
Exemplos
UPPER('AbCdEfG!@#$') -- 'ABCDEFG!@#$'
Use as operações em lote do S3 para copiar objetos e definir tags de objetos ou listas de controle de
acesso (ACLs). Também é possível iniciar restaurações de objetos no Amazon S3 Glacier ou chamar uma
função do AWS Lambda para executar ações personalizadas usando os seus objetos. É possível executar
essas operações em uma lista personalizada de objetos ou usar um relatório de inventário do Amazon S3
para facilitar a geração de listas de objetos. As operações em lote do Amazon S3 usam as mesmas APIs
do Amazon S3 que você já usa com o Amazon S3, portanto, a interface é familiar.
Tópicos
• Conceitos básicos sobre operações em lote do S3 (p. 739)
• Conceder permissões para operações em lote do Amazon S3 (p. 740)
• Criar um trabalho de operações em lote do S3 (p. 746)
• Operações (p. 753)
• Gerenciar trabalhos de operações em lote do S3 (p. 767)
• Controlar o acesso e rotular trabalhos usando tags (p. 774)
• Gerenciar o Bloqueio de objetos do S3 usando o Operações em lote do S3 (p. 785)
• Copiar objetos em contas da AWS usando o Operações em lote do S3 (p. 801)
• Monitorar um trabalho do Operações em lote do S3 no Amazon EventBridge por meio do AWS
CloudTrail (p. 806)
• Relatórios de conclusão do Operações em lote do S3 (p. 809)
Tópicos
• Terminologia (p. 739)
• Como funciona um trabalho de operações em lote do S3 (p. 740)
Terminologia
Esta seção usa os termos trabalhos, operações e tarefas. Confira suas definições abaixo:
Trabalho
Um trabalho é a unidade básica de trabalho para operações em lote do S3. Uma tarefa contém todas
as informações necessárias para executar a operação especificada nos objetos listados no manifesto.
Depois que você tiver fornecido essas informações e solicitado o início do trabalho, ele executará a
operação em cada objeto no manifesto.
Operação
A operação é o tipo de ação da API, como copiar objetos, que você deseja que o trabalho de
operações em lote execute. Cada trabalho executa um único tipo de operação em todos os objetos
especificados no manifesto.
Tarefa
Uma tarefa é a unidade de execução para um trabalho. Uma tarefa representa uma única chamada
para uma operação de API do AWS Lambda ou do Amazon S3 a fim de executar a operação do
trabalho em um único objeto. Ao longo da vida útil de um trabalho, as operações em lote do S3 criam
uma tarefa para cada objeto especificado no manifesto.
Um trabalho em lote realiza a operação especificada em cada objeto incluído em seu manifesto. Um
manifesto lista os objetos que você deseja que um trabalho em lote processe e ele é armazenado como
um objeto em um bucket. Você pode usar um relatório Inventário do Amazon S3 (p. 605) formatado em
CSV como um manifesto, o que facilita a criação de grandes listas de objetos localizados em um bucket.
Também é possível especificar um manifesto em um formato CSV simples que permite realizar operações
em lotem em uma lista personalizada de objetos contidos em um único bucket.
Tópicos
• Permissões necessárias para criar um trabalho de operações em lote do S3 (p. 741)
• Criar uma função do IAM das operações em lote do S3 (p. 741)
• Políticas de permissões (p. 741)
O Amazon S3 deve ter permissão para executar operações em lote no S3 em seu nome. Você concede
essas permissões por meio de uma função do AWS Identity and Access Management (IAM). Esta seção
fornece exemplos das políticas de permissões e confiança usadas ao criar uma função do IAM. Para
obter mais informações, consulte Funções do IAM. Para exemplos, consulte Controlar permissões para o
recurso Operações em lote do S3 usando tags de trabalho (p. 780) e Copiar objetos em contas da AWS
usando o Operações em lote do S3 (p. 801).
Em suas políticas do IAM, você também pode usar chaves de condição para filtrar permissões de acesso
para trabalhos de operações em lote do S3. Para obter mais informações e uma lista completa de chaves
de condição específicas do Amazon S3, consulte Ações, recursos e chaves de condição do Amazon
S3 (p. 288).
O vídeo a seguir mostra como configurar permissões do IAM para trabalhos de operações em lote usando
o Console de Gerenciamento da AWS.
Política de confiança
Para permitir que o principal do serviço de operações em lote do S3 assuma a função do IAM, anexe a
política de confiança a seguir à função.
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Principal":{
"Service":"batchoperations.s3.amazonaws.com"
},
"Action":"sts:AssumeRole"
}
]
}
Políticas de permissões
Dependendo do tipo de operação, é possível anexar uma das seguintes políticas:
Tópicos
• Copiar objetos: PutObject (p. 742)
• Substituir marcação de objetos: PutObjectTagging (p. 743)
• Excluir marcação de objetos: DeleteObjectTagging (p. 743)
• Substituir lista de controle de acesso: PutObjectAcl (p. 744)
• Restaurar objetos: RestoreObject (p. 744)
• Aplicar retenção do bloqueio de objetos: PutObjectRetention (p. 745)
• Aplicar retenção legal do bloqueio de objetos: PutObjectLegalHold (p. 746)
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:PutObject",
"s3:PutObjectAcl",
"s3:PutObjectTagging"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::{{DestinationBucket}}/*"
},
{
"Action": [
"s3:GetObject",
"s3:GetObjectAcl",
"s3:GetObjectTagging",
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::{{SourceBucket}}",
"arn:aws:s3:::{{SourceBucket}}/*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:GetObjectVersion"
],
"Resource": [
"arn:aws:s3:::{{ManifestBucket}}/*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::{{ReportBucket}}/*"
]
}
]
}
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"s3:PutObjectTagging",
"s3:PutObjectVersionTagging"
],
"Resource": "arn:aws:s3:::{{TargetResource}}/*"
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:GetObjectVersion"
],
"Resource": [
"arn:aws:s3:::{{ManifestBucket}}/*"
]
},
{
"Effect":"Allow",
"Action":[
"s3:PutObject"
],
"Resource":[
"arn:aws:s3:::{{ReportBucket}}/*"
]
}
]
}
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:DeleteObjectTagging",
"s3:DeleteObjectVersionTagging"
],
"Resource": [
"arn:aws:s3:::{{TargetResource}}/*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:GetObjectVersion"
],
"Resource": [
"arn:aws:s3:::{{ManifestBucket}}/*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::{{ReportBucket}}/*"
]
}
]
}
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"s3:PutObjectAcl",
"s3:PutObjectVersionAcl"
],
"Resource": "arn:aws:s3:::{{TargetResource}}/*"
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:GetObjectVersion"
],
"Resource": [
"arn:aws:s3:::{{ManifestBucket}}/*"
]
},
{
"Effect":"Allow",
"Action":[
"s3:PutObject"
],
"Resource":[
"arn:aws:s3:::{{ReportBucket}}/*"
]
}
]
}
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"s3:RestoreObject"
],
"Resource": "arn:aws:s3:::{{TargetResource}}/*"
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:GetObjectVersion"
],
"Resource": [
"arn:aws:s3:::{{ManifestBucket}}/*"
]
},
{
"Effect":"Allow",
"Action":[
"s3:PutObject"
],
"Resource":[
"arn:aws:s3:::{{ReportBucket}}/*"
]
}
]
}
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:GetBucketObjectLockConfiguration",
"Resource": [
"arn:aws:s3:::{{TargetResource}}"
]
},
{
"Effect": "Allow",
"Action": [
"s3:PutObjectRetention",
"s3:BypassGovernanceRetention"
],
"Resource": [
"arn:aws:s3:::{{TargetResource}}/*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:GetObjectVersion"
],
"Resource": [
"arn:aws:s3:::{{ManifestBucket}}/*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::{{ReportBucket}}/*"
]
}
]
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:GetBucketObjectLockConfiguration",
"Resource": [
"arn:aws:s3:::{{TargetResource}}"
]
},
{
"Effect": "Allow",
"Action": "s3:PutObjectLegalHold",
"Resource": [
"arn:aws:s3:::{{TargetResource}}/*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:GetObjectVersion"
],
"Resource": [
"arn:aws:s3:::{{ManifestBucket}}/*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::{{ReportBucket}}/*"
]
}
]
}
Para obter mais informações sobre o recurso Operações em lote, consulte Conceitos básicos sobre
operações em lote do S3 (p. 739).
Esta seção descreve as informações necessárias para criar um trabalho do Operações em lote do S3 e
os resultados de uma solicitação Create Job. Ela também fornece instruções para criar um trabalho do
recurso Operações em lote.
Ao criar uma trabalho de operações em lote do S3, você pode solicitar um relatório de conclusão para
todas as tarefas ou somente para aquelas que apresentaram falha. Contanto que pelo menos uma tarefa
tenha sido invocada com êxito, as operações em lote do S3 geram um relatório para tarefas que foram
concluídas, que falharam ou que foram canceladas. Para obter mais informações, consulte Relatórios de
conclusão do Operações em lote do S3 (p. 809).
Tópicos
• Elementos da solicitação de trabalho de Operações em lote (p. 747)
• Especificar um manifesto (p. 748)
• Como criar um trabalho de Operações em lote (p. 749)
• Respostas do trabalho (p. 753)
• Recursos relacionados (p. 753)
Operação
Especifique a operação que deseja que as operações em lote do S3 execute nos objetos no
manifesto. Cada tipo de operação aceita parâmetros específicos para essa operação. Isso permite que
você realize as mesmas tarefas que se executasse a operação individualmente em cada objeto.
Manifesto
O manifesto é uma lista de todos os objetos em que você deseja que as operações em lote do S3
execute a ação especificada. Use um relatório em formato CSV Inventário do Amazon S3 (p. 605)
como manifesto ou a própria lista CSV personalizada de objetos.
Se os objetos no manifesto estiverem em um bucket com versão, você deverá especificar os IDs de
versão dos objetos. Para obter mais informações, consulte Especificar um manifesto (p. 748).
Priority
Use prioridades de trabalho para indicar a prioridade relativa desse trabalho em relação a outros em
execução na conta. Um número maior indica uma prioridade mais alta.
As operações em lote do S3 priorizam trabalhos em ordem numérica, mas não é garantida rigidez
a essa ordem. Por isso, você não deve usar prioridades de trabalho para garantir que um trabalho
comece ou termine antes de outro. Caso precise garantir uma ordem rígida, aguarde a conclusão de
uma tarefa para iniciar a próxima.
RoleArn
Especifique uma função do AWS Identity and Access Management (IAM) para executar o trabalho.
A função do IAM usada deve ter permissões suficientes para realizar a operação especificada no
trabalho. Por exemplo, para executar um trabalho PUT Object Copy, a função do IAM deve ter
permissões s3:GetObject para o bucket de origem e permissões s3:PutObject para o bucket
de destino. A função também precisa de permissões para ler o manifesto e gravar o relatório de
conclusão do trabalho.
Para obter mais informações sobre funções do IAM, consulte Funções do IAM no Guia do Usuário do
IAM.
Para obter mais informações sobre as permissões do Amazon S3, consulte Ações do Amazon
S3 (p. 273).
Relatório
Especifique se deseja que as operações em lote do S3 gerem um relatório de conclusão. Caso solicite
um relatório de conclusão do trabalho, você deve fornecer os parâmetros para o relatório neste
elemento. As informações necessárias incluem o bucket onde você deseja armazenar o relatório, o
formato do relatório, se deseja que o relatório inclua os detalhes de todas as tarefas ou apenas tarefas
com falha e uma string de prefixo opcional.
Tags (opcional)
Você pode rotular e controlar o acesso aos trabalhos de operações em lote do S3 adicionando tags.
As tags podem ser usadas para identificar quem é responsável por um trabalho de operações em
lote. Você pode criar trabalhos com tags anexadas a eles e pode adicionar tags a trabalhos depois de
criá-los. Por exemplo, você pode conceder a um usuário do IAM permissão para invocar CreateJob,
desde que o trabalho seja criado com a tag "Department=Finance".
Para obter mais informações, consulte the section called “Usar tags” (p. 774).
Descrição (opcional)
Para rastrear e monitorar seu trabalho, você também pode fornecer uma descrição de até 256
caracteres. O Amazon S3 inclui essa descrição sempre que retorna informações sobre um trabalho
ou exibe detalhes do trabalho no console do Amazon S3. É possível classificar e filtrar os trabalhos
com facilidade de acordo com as descrições atribuídas. As descrições não precisam ser exclusivas,
de maneira que você possa usar descrições como categorias (por exemplo, "Tarefas de cópia de log
semanais") para ajudar a rastrear grupos de tarefas semelhantes.
Especificar um manifesto
Um manifesto é um objeto do Amazon S3 que lista as chaves de objeto nas quais você deseja que o
Amazon S3 atue. Para criar um manifesto de uma tarefa, especifique a chave de objeto, a ETag e o ID da
versão opcional do manifesto. O conteúdo do manifesto deve estar codificado em URL. Os manifestos que
usam a criptografia no lado do servidor com chaves fornecidas pelo cliente (SSE-C) e a criptografia no lado
do servidor com chaves mestras (CMKs) de cliente do AWS Key Management Service (SSE-KMS) não são
compatíveis. O manifesto deve conter o nome do bucket, a chave de objeto e, opcionalmente, a versão de
cada objeto. Qualquer outro campo no manifesto não é usado pelas operações em lote do S3.
objetos. Para obter mais informações sobre o formato de manifesto CSV, consulte JobManifestSpec na
Referência da API do Amazon Simple Storage Service.
Note
Examplebucket,objectkey1
Examplebucket,objectkey2
Examplebucket,objectkey3
Examplebucket,photos/jpgs/objectkey4
Examplebucket,photos/jpgs/newjersey/objectkey5
Examplebucket,object%20key%20with%20spaces
Examplebucket,objectkey1,PZ9ibn9D5lP6p298B7S9_ceqx1n5EJ0p
Examplebucket,objectkey2,YY_ouuAJByNW1LRBfFMfxMge7XQWxMBF
Examplebucket,objectkey3,jbo9_jhdPEyB4RrmOxWS0kU0EoNrU_oI
Examplebucket,photos/jpgs/objectkey4,6EqlikJJxLTsHsnbZbSRffn24_eh5Ny4
Examplebucket,photos/jpgs/newjersey/objectkey5,imHf3FAiRsvBW_EHB8GOu.NHunHO1gVs
Examplebucket,object%20key%20with%20spaces,9HkPvDaZY5MVbMhn6TMn1YTb5ArQAo3w
Important
Se os objetos no manifesto estiverem em um bucket com versão, você deverá especificar os IDs
de versão dos objetos. Quando você cria um trabalho, o recurso Operações em lote do S3 analisa
todo o manifesto antes de executar o trabalho. No entanto, ele não tira snapshots do estado do
bucket.
Como os manifestos podem conter bilhões de objetos, as tarefas podem demorar muito para
serem executadas. Se você substituir um objeto por uma nova versão enquanto um trabalho
estiver em execução e não especificar o ID da versão desse objeto, o Amazon S3 realizará a
operação na versão mais recente do objeto, não na versão que existia quando você criou o
trabalho. A única maneira de evitar esse comportamento é especificar o ID de versão do objeto
listado no manifesto.
Usar o console do S3
Esta seção descreve como criar um trabalho de Operações em lote do S3 usando o console do Amazon
S3.
• Se você selecionar S3 inventory report (Relatório de inventário do S3), insira o caminho para o
objeto manifest.json gerado pelo Amazon S3 como parte do relatório de inventário em formato CSV
e, opcionalmente, o ID de versão do objeto do manifesto a ser usado, se não for a mais recente.
• Se você selecionar CSV, insira o caminho para o objeto do manifesto formatado em CSV. O objeto
do manifesto deve seguir o formato descrito no console. Opcionalmente, inclua o ID de versão do
objeto do manifesto que deseja usar, se não for a mais recente.
6. Escolha Next (Próximo).
7. Em Operation (Operação), selecione a operação a ser executada em todos os objetos no manifesto.
Preencha as informações da operação escolhida e, depois, selecione Next (Próximo).
8. Preencha as informações para Configure additional options (Configurar opções adicionais) e, depois,
selecione Next (Próximo).
9. Em Review (Revisão), verifique as configurações. Se precisar fazer alterações, escolha Previous
(Anterior). Caso contrário, selecione Create job (Criar trabalho).
1. Crie uma função do AWS Identity and Access Management (IAM) e atribua permissões. A função
concede permissão ao Amazon S3 para adicionar tags de objeto, para as quais você vai criar uma
tarefa na próxima etapa.
Registre o nome de recurso da Amazon (ARN) da função. Você precisará dele ao criar trabalhos.
b. Crie uma política do IAM com permissões e anexe-a à função do IAM que você criou na etapa
anterior. Para obter mais informações sobre permissões, consulte Conceder permissões para
operações em lote do Amazon S3 (p. 740).
"Statement":[
{
"Effect":"Allow",
"Action":[
"s3:PutObjectTagging",
"s3:PutObjectVersionTagging"
],
"Resource": "arn:aws:s3:::{{TargetResource}}/*"
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:GetObjectVersion",
"s3:GetBucketLocation"
],
"Resource": [
"arn:aws:s3:::{{ManifestBucket}}",
"arn:aws:s3:::{{ManifestBucket}}/*"
]
},
{
"Effect":"Allow",
"Action":[
"s3:PutObject",
"s3:GetBucketLocation"
],
"Resource":[
"arn:aws:s3:::{{ReportBucket}}",
"arn:aws:s3:::{{ReportBucket}}/*"
]
}
]
}'
O arquivo manifest.csv fornece uma lista de buckets e valores de chave de objeto. O trabalho
aplica as tags específicas aos objetos identificados no manifesto. O ETag é o ETag do objeto
manifest.csv, que você pode obter no console do Amazon S3. A solicitação especifica o parâmetro
do no-confirmation-required. Portanto, o Amazon S3 qualifica o trabalho para ser executado
sem a necessidade de confirmá-lo usando o comando udpate-job-status.
Example
package aws.example.s3control;
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.services.s3control.AWSS3Control;
import com.amazonaws.services.s3control.AWSS3ControlClient;
import com.amazonaws.services.s3control.model.*;
import java.util.UUID;
import java.util.ArrayList;
try {
JobOperation jobOperation = new JobOperation()
.withS3PutObjectTagging(new S3SetObjectTaggingOperation()
.withTagSet(tagSet)
);
s3ControlClient.createJob(new CreateJobRequest()
.withAccountId(accountId)
.withOperation(jobOperation)
.withManifest(manifest)
.withReport(jobReport)
.withPriority(42)
.withRoleArn(iamRoleArn)
.withClientRequestToken(uuid)
.withDescription("job description")
.withConfirmationRequired(false)
);
} catch (AmazonServiceException e) {
// The call was transmitted successfully, but Amazon S3 couldn't process
// it and returned an error response.
e.printStackTrace();
} catch (SdkClientException e) {
// Amazon S3 couldn't be contacted for a response, or the client
// couldn't parse the response from Amazon S3.
e.printStackTrace();
}
}
}
Respostas do trabalho
Se a solicitação Create Job for bem-sucedida, o Amazon S3 retornará um ID de trabalho. O ID de
trabalho é um identificador exclusivo gerado pelo Amazon S3 automaticamente para que você possa
identificar as operações em lote e monitorar o status do trabalho.
Quando você cria um trabalho pela AWS CLI, AWS SDKs ou API REST, é possível configurar para que as
operações em lote do S3 comecem a processar o trabalho automaticamente. Ele é executado assim que
fica pronto e não aguarda o processamento de trabalhos de prioridade mais alta.
Ao criar um trabalho por meio do Console de Gerenciamento da AWS, você deve revisar os detalhes do
trabalho e confirmar se deseja executá-lo antes que as operações em lote possam começar a processá-
lo. Depois que você confirma que deseja executar a tarefa, ela avança como se tivesse sido criada por
meio de um dos outros métodos. Se uma tarefa permanecer no estado suspenso por mais de 30 dias, ela
apresentará falha.
Recursos relacionados
• Conceitos básicos sobre operações em lote do S3 (p. 739)
• Operações (p. 753)
• Gerenciar trabalhos de operações em lote do S3 (p. 767)
Operações
As operações em lote do S3 são compatíveis com várias operações diferentes. Os tópicos desta seção
descrevem cada uma dessas operações.
Tópicos
• Copiar (p. 754)
• Invocar uma função do AWS Lambda (p. 754)
• Substituir todas as tags de objeto (p. 762)
• Excluir todas as tags de objeto (p. 762)
• Substituir lista de controle de acesso (p. 763)
• Restaurar (p. 764)
Copiar
A operação Copiar copia cada objeto especificado no manifesto. É possível copiar objetos em um bucket
na mesma região da AWS ou em um bucket em outra região. O recurso Operações em lote do S3 é
compatível com a maioria das opções disponíveis no Amazon S3 para copiar objetos. Essas opções
incluem a definição de metadados de objetos e permissões e a alteração da classe de armazenamento
de um objeto. Para obter mais informações sobre a funcionalidade disponível no Amazon S3 para copiar
objetos, consulte Cópia de objetos (p. 114).
Restrições e limitações
• Todos os objetos de origem devem estar em um só bucket.
• Todos os objetos de destino devem estar em um só bucket.
• Você deve ler todas as permissões para o bucket de origem e gravar permissões para o bucket de
destino.
• Os objetos a serem copiados devem ter até 5 GB.
• Os trabalhos de cópia devem ser criados na região de destino, que é a região para a qual você pretende
copiar os objetos.
• Todas as opções de cópia são suportadas, exceto para verificações condicionais em ETags e
criptografia do lado do servidor com chaves de criptografia fornecidas pelo cliente (SSE-C).
• Se os buckets não tiverem versões, você deverá substituir os objetos pelos mesmos nomes de chave.
• Os objetos não são necessariamente copiados na mesma ordem em que são listados no manifesto.
Para buckets versionados, se preservar a ordem de versão atual/não atual for importante, você deve
copiar todas as versões não atuais primeiro. Em seguida, após a conclusão do primeiro trabalho, copie
as versões atuais em um trabalho subsequente.
• A cópia de objetos na classe Reduced Redundancy Storage (RRS) não é compatível.
É possível trabalhar com as operações em lote do S3 para Lambda usando o Console de Gerenciamento
da AWS, a interface da linha de comando da AWS (CLI da AWS), os AWS SDKs ou as APIs REST. Para
obter mais informações sobre como usar o Lambda, consulte Conceitos básicos do AWS Lambda no Guia
do desenvolvedor do AWS Lambda.
As seções a seguir explicam como começar a usar as operações em lote do S3 com o Lambda.
Tópicos
• Usar o Lambda com operações em lote do Amazon S3 (p. 755)
• Criar uma função do Lambda para uso com operações em lote do S3 (p. 755)
• Criar um trabalho de operações em lote do S3 que chama uma função do Lambda (p. 759)
• Fornecer informações em nível de tarefa em manifestos do Lambda (p. 759)
Crie um trabalho de operações em lote do S3 que chame a função do Lambda. O trabalho executa a
mesma função do Lambda em todos os objetos listados no manifesto. É possível controlar quais versões
da função do Lambda usar durante o processamento dos objetos no manifesto. As operações em lote
do S3 são compatíveis com nomes de recursos da Amazon (ARNs) não qualificados, aliases e versões
específicas. Para obter mais informações, consulte Apresentação do versionamento do AWS Lambda no
Guia do desenvolvedor do AWS Lambda.
Se você fornecer ao trabalho de operações em lote do S3 um ARN de função que usa um alias ou o
qualificador $LATEST, e atualizar a versão indicada por um deles, as operações em lote do S3 começarão
a chamar a nova versão dessa função do Lambda. Isso pode ser útil quando você quer atualizar a
funcionalidade durante um trabalho grande. Para que as operações em lote do S3 não alterem a versão
usada, forneça a versão específica no parâmetro FunctionARN ao criar o trabalho.
Há dois níveis de código que as operações em lote do S3 esperam das funções do Lambda. O primeiro é
o código de resposta para toda a solicitação, e o segundo é um código de resultado por tarefa. A tabela a
seguir contém os códigos de resposta.
Crie funções do Lambda especificamente para uso com as operações em lote do S3. Não é possível
reutilizar as funções existentes do Lambda baseadas em eventos do Amazon S3. Isso ocorre porque as
funções do Lambda usadas para operações em lote do S3 devem aceitar e retornar campos de dados
especiais.
Important
Veja a seguir exemplos das permissões do IAM necessárias para usar uma função do Lambda com
operações em lote do S3.
Veja a seguir um exemplo da política de confiança que pode ser usada para a função do IAM de operações
em lote. Essa função do IAM é especificada quando você cria o trabalho e concede às operações em lote
permissão para assumir a função do IAM.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "batchoperations.s3.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
Veja a seguir um exemplo de uma política do IAM que concede permissão às operações em lote do S3
para chamar a função do Lambda e ler o manifesto de entrada.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "BatchOperationsLambdaPolicy",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:GetObjectVersion",
"s3:PutObject",
"lambda:InvokeFunction"
],
"Resource": "*"
}
]
}
Example Solicitação
{
"invocationSchemaVersion": "1.0",
"invocationId": "YXNkbGZqYWRmaiBhc2RmdW9hZHNmZGpmaGFzbGtkaGZza2RmaAo",
"job": {
"id": "f3cc4f60-61f6-4a2b-8a21-d07600c373ce"
},
"tasks": [
{
"taskId": "dGFza2lkZ29lc2hlcmUK",
"s3Key": "customerImage1.jpg",
"s3VersionId": "1",
"s3BucketArn": "arn:aws:s3:us-east-1:0123456788:awsexamplebucket1"
}
]
}
Example Resposta
{
"invocationSchemaVersion": "1.0",
"treatMissingKeysAs" : "PermanentFailure",
"invocationId" : "YXNkbGZqYWRmaiBhc2RmdW9hZHNmZGpmaGFzbGtkaGZza2RmaAo",
"results": [
{
"taskId": "dGFza2lkZ29lc2hlcmUK",
"resultCode": "Succeeded",
"resultString": "[\"Mary Major", \"John Stiles\"]"
}
]
}
Como mostra o exemplo, as chaves das operações em lote do S3 são codificadas por URL. Para usar o
Amazon S3 com outros serviços da AWS, é importante decodificar a chave passada pelas operações em
lote do S3.
import logging
from urllib import parse
import boto3
from botocore.exceptions import ClientError
logger = logging.getLogger(__name__)
logger.setLevel('INFO')
s3 = boto3.client('s3')
:param event: The S3 batch event that contains the ID of the delete marker
to remove.
:param context: Context about the event.
:return: A result structure that Amazon S3 uses to interpret the result of the
operation. When the result code is TemporaryFailure, S3 retries the
operation.
"""
# Parse job parameters from Amazon S3 batch operations
invocation_id = event['invocationId']
invocation_schema_version = event['invocationSchemaVersion']
results = []
result_code = None
result_string = None
task = event['tasks'][0]
task_id = task['taskId']
try:
obj_key = parse.unquote(task['s3Key'], encoding='utf-8')
obj_version_id = task['s3VersionId']
bucket_name = task['s3BucketArn'].split(':')[-1]
try:
# If this call does not raise an error, the object version is not a delete
# marker and should not be deleted.
response = s3.head_object(
Bucket=bucket_name, Key=obj_key, VersionId=obj_version_id)
result_code = 'PermanentFailure'
result_string = f"Object {obj_key}, ID {obj_version_id} is not " \
f"a delete marker."
logger.debug(response)
logger.warning(result_string)
except ClientError as error:
delete_marker = error.response['ResponseMetadata']['HTTPHeaders'] \
.get('x-amz-delete-marker', 'false')
if delete_marker == 'true':
logger.info("Object %s, version %s is a delete marker.",
obj_key, obj_version_id)
try:
s3.delete_object(
Bucket=bucket_name, Key=obj_key, VersionId=obj_version_id)
result_code = 'Succeeded'
result_string = f"Successfully removed delete marker " \
f"{obj_version_id} from object {obj_key}."
logger.info(result_string)
except ClientError as error:
# Mark request timeout as a temporary failure so it will be retried.
if error.response['Error']['Code'] == 'RequestTimeout':
result_code = 'TemporaryFailure'
result_string = f"Attempt to remove delete marker from " \
f"object {obj_key} timed out."
logger.info(result_string)
else:
raise
else:
raise ValueError(f"The x-amz-delete-marker header is either not "
f"present or is not 'true'.")
except Exception as error:
# Mark all other exceptions as permanent failures.
result_code = 'PermanentFailure'
result_string = str(error)
logger.exception(error)
finally:
results.append({
'taskId': task_id,
'resultCode': result_code,
'resultString': result_string
})
return {
'invocationSchemaVersion': invocation_schema_version,
'treatMissingKeysAs': 'PermanentFailure',
'invocationId': invocation_id,
'results': results
}
• O ARN da função do Lambda (que pode incluir o alias da função ou o número de uma versão específica)
• Uma função do IAM com permissão para invocar a função
• O parâmetro de ação LambdaInvokeFunction
Para obter mais informações sobre como criar um trabalho de operações em lote do S3, consulte Criar um
trabalho de operações em lote do S3 (p. 746) e Operações (p. 753).
O exemplo a seguir cria um trabalho de operações em lote do S3 que invoca uma função do Lambda
usando a CLI da AWS.
do trabalho. O processo a seguir descreve como você pode incluir dados adicionais em seu manifesto para
poder executar funções do Lambda mais complexas.
Para especificar parâmetros por chave no manifesto de operações em lote do S3 para usar no código da
função do Lambda, use o seguinte formato JSON codificado por URL. O campo key é passado para a
função do Lambda como se fosse uma chave de objeto do Amazon S3. Porém, ele pode ser interpretado
pela função do Lambda como contendo outros valores ou várias chaves, como mostrado a seguir.
Note
Example manifesto que substitui as "chaves do Amazon S3" por strings JSON
A versão codificada por URL deve ser fornecida para operações em lote do S3.
Essa versão codificada por URL deve ser fornecida para operações em lote do S3. A versão não
codificada em URL não funciona.
my-bucket,%7B%22origKey%22%3A%20%22object1key%22%2C%20%22newKey%22%3A%20%22newObject1Key
%22%7D
my-bucket,%7B%22origKey%22%3A%20%22object2key%22%2C%20%22newKey%22%3A%20%22newObject2Key
%22%7D
my-bucket,%7B%22origKey%22%3A%20%22object3key%22%2C%20%22newKey%22%3A%20%22newObject3Key
%22%7D
Example função do Lambda com formato de manifesto que grava resultados no relatório de
trabalho
Esta função do Lambda mostra como analisar uma tarefa delimitada por pipe que é codificada no
manifesto das operações em lote do S3 A tarefa indica qual operação de revisão é aplicada ao objeto
especificado.
import logging
from urllib import parse
import boto3
from botocore.exceptions import ClientError
logger = logging.getLogger(__name__)
logger.setLevel('INFO')
s3 = boto3.resource('s3')
:param event: The Amazon S3 batch event that contains the ID of the object to
revise and the revision type to apply.
:param context: Context about the event.
:return: A result structure that Amazon S3 uses to interpret the result of the
operation.
"""
# Parse job parameters from Amazon S3 batch operations
invocation_id = event['invocationId']
invocation_schema_version = event['invocationSchemaVersion']
results = []
result_code = None
result_string = None
task = event['tasks'][0]
task_id = task['taskId']
# The revision type is packed with the object key as a pipe-delimited string.
obj_key, revision = \
parse.unquote(task['s3Key'], encoding='utf-8').split('|')
bucket_name = task['s3BucketArn'].split(':')[-1]
try:
stanza_obj = s3.Bucket(bucket_name).Object(obj_key)
stanza = stanza_obj.get()['Body'].read().decode('utf-8')
if revision == 'lower':
stanza = stanza.lower()
elif revision == 'upper':
stanza = stanza.upper()
elif revision == 'reverse':
stanza = stanza[::-1]
elif revision == 'delete':
pass
else:
raise TypeError(f"Can't handle revision type '{revision}'.")
if revision == 'delete':
stanza_obj.delete()
result_string = f"Deleted stanza {stanza_obj.key}."
else:
stanza_obj.put(Body=bytes(stanza, 'utf-8'))
result_string = f"Applied revision type '{revision}' to " \
f"stanza {stanza_obj.key}."
logger.info(result_string)
result_code = 'Succeeded'
except ClientError as error:
if error.response['Error']['Code'] == 'NoSuchKey':
result_code = 'Succeeded'
result_string = f"Stanza {obj_key} not found, assuming it was deleted " \
f"in an earlier revision."
logger.info(result_string)
else:
result_code = 'PermanentFailure'
result_string = f"Got exception when applying revision type '{revision}' " \
f"to {obj_key}: {error}."
logger.exception(result_string)
finally:
results.append({
'taskId': task_id,
'resultCode': result_code,
'resultString': result_string
})
return {
'invocationSchemaVersion': invocation_schema_version,
'treatMissingKeysAs': 'PermanentFailure',
'invocationId': invocation_id,
'results': results
Para criar um trabalho Substituir todas as tags de objeto, forneça um conjunto de tags que pretende
aplicar. As Operações em lote do Amazon S3 aplica o mesmo conjunto de tags a cada objeto. O conjunto
de tags que você fornece substitui os conjuntos de tags já associados aos objetos no manifesto. As
Operações em lote do S3 não são compatíveis com a adição de tags a objetos, deixando as tags
existentes no lugar.
Se os objetos em seu manifesto estiverem em um bucket versionado, você pode aplicar o conjunto de tags
a versões específicas de cada objeto. Para fazer isso, especifique um ID de versão para cada objeto no
manifesto. Se você não incluir um ID de versão para nenhum objeto, as Operações em lote do S3 aplicam
o conjunto de tags à versão mais recente de cada objeto.
Restrições e limitações
• A função do IAM que você especificar para executar o trabalho das Operações em lote deve ter
permissões para executar a operação subjacente do Amazon S3 Substituir todas as tags de objeto. Para
obter mais informações sobre as permissões necessárias, consulte PutObjectTagging na Referência da
API do Amazon Simple Storage Service.
• As Operações em lote do S3 usam a operação PutObjectTagging do Amazon S3 para aplicar tags
a cada objeto no manifesto. Todas as restrições e limitações que se aplicam à operação subjacente
também se aplicam a trabalhos das Operações em lote do S3.
Para obter mais informações sobre como Criar um trabalho de Operações em lote do S3 a partir do
console, consulte o Guia do usuário do console do Amazon Simple Storage Service.
Para obter mais detalhes sobre marcação, consulte Categorizando seu armazenamento usando
tags (p. 683) neste guia, bem como PutObjectTagging, GetObjectTagginge DeleteObjectTagging na
Referência da API do Amazon Simple Storage Service.
Para obter mais informações sobre o recurso Operações em lote, consulte Especificar um
manifesto (p. 748).
Warning
A execução deste trabalho remove todos os conjuntos de tags de objeto em cada objeto listado no
manifesto.
Restrições e limitações
• A função do AWS Identity and Access Management (IAM) que você especificar para executar o trabalho
deve ter permissões para executar a operação subjacente Excluir marcação de objetos do Amazon S3.
Para obter mais informações, consulte DeleteObjectTagging na Referência da API do Amazon Simple
Storage Service.
• As Operações em lote do S3 usam a operação DeleteObjectTagging do Amazon S3 para remover
os conjuntos de tags de cada objeto no manifesto. Todas as restrições e limitações que se aplicam à
operação subjacente também se aplicam a trabalhos das Operações em lote do S3.
Para obter mais informações sobre como criar trabalhos, consulte Criar um trabalho de operações em lote
do S3 (p. 746).
Para obter mais detalhes sobre a marcação de objetos, consulte Substituir todas as tags de
objeto (p. 762) neste guia e PutObjectTagging, GetObjectTagginge DeleteObjectTagging na Referência
da API do Amazon Simple Storage Service.
As operações em lote do S3 são compatíveis com ACLs que você define e com ACLs pré-configuradas
fornecidas pelo Amazon S3 com um conjunto predefinido de permissões de acesso.
Se os objetos em seu manifesto estiverem em um bucket versionado, é possível aplicar as ACLs a versões
específicas de cada objeto. Para fazer isso, especifique um ID de versão para cada objeto no manifesto.
Se você não incluir um ID de versão para um objeto, as operações em lote do S3 aplicarão a ACL à versão
mais recente do objeto.
Note
Para limitar o acesso público a todos os objetos em um bucket, use o bloqueio de acesso público
do Amazon S3 em vez de operações em lote do S3. O bloqueio do acesso público pode limitar
o acesso público a cada bucket ou à conta com uma única operação simples, que entra em
vigor rapidamente. Essa é uma melhor opção caso seu objetivo seja controlar o acesso público
a todos os objetos em um bucket ou uma conta. Usar as Operações em lote do S3 quando
precisar aplicar uma ACL personalizada a cada objeto no manifesto. Para obter mais informações
sobre o bloqueio de acesso público do Amazon S3, consulte Bloquear o acesso público ao
armazenamento do Amazon S3 (p. 469).
Restrições e limitações
• A função especificada para executar o trabalho Substituir lista de controle de acesso deve ter
permissões para executar a operação subjacente do Amazon S3 PutObjectAcl. Para obter mais
informações sobre as permissões necessárias, consulte PutObjectAcl na Referência da API do Amazon
Simple Storage Service.
• As Operações em lote do S3 usam a operação PutObjectAcl do Amazon S3 para aplicar a ACL
especificada a cada objeto no manifesto. Portanto, todas as restrições e limitações que se aplicam
à operação PutObjectAcl subjacente também se aplicam a trabalhos Substituir lista de controle de
acesso das Operações em lote do S3. Para obter mais informações, consulte a seção Recursos
relacionados (p. 763) desta página.
Recursos relacionados
• Visão geral da lista de controle de acesso (ACL) (p. 440)
Restaurar
As Operações em lote do S3 podem executar operações em uma lista de objetos do Amazon S3 que
você especificar, incluindo a inicialização de solicitações de restauração para objetos arquivados. Os
seguintes objetos devem ser restaurados com um trabalho Iniciar a restauração de um objeto do S3 antes
que possam ser acessados em tempo real:
O uso de uma operação Iniciar a restauração de um objeto do S3 no trabalho das Operações em lote do
S3 resulta em uma solicitação de restauração para cada objeto especificado no manifesto.
Important
O trabalho Iniciar a restauração de um objeto do S3 apenas inicia a solicitação para restaurar
objetos. As Operações em lote do S3 relatam o trabalho como concluído para cada objeto depois
que a solicitação é iniciada para aquele objeto. O Amazon S3 não atualiza o trabalho nem o
notificará quando os objetos tiverem sido restaurados. No entanto, é possível usar notificações de
eventos para receber alertas quando os objetos estiverem disponíveis no Amazon S3. Para obter
mais informações, consulte Notificações de eventos do Amazon S3 (p. 869).
• Quando você restaura do S3 Glacier ou S3 Glacier Deep Archive, uma cópia temporária do objeto é
criada. O Amazon S3 exclui essa cópia após ExpirationInDays dias. Depois que essa cópia for
excluída, é preciso enviar uma solicitação de restauração adicional para acessá-la.
• Quando você restaura a partir dos níveis Acesso de arquivamento ou Acesso de arquivamento profundo
do S3 Intelligent-Tiering, o objeto faz a transição de volta para o nível Acesso frequente do S3 Intelligent-
Tiering. O objeto transita automaticamente para o nível de Acesso de arquivamento após um mínimo de
90 dias consecutivos sem acesso. Ele passa para o nível Acesso de arquivamento profundo após um
mínimo de 180 dias consecutivos sem acesso. Não especifique o argumento ExpirationInDays ao
restaurar objetos arquivados do S3 Intelligent-Tiering.
• Os trabalhos de Operações em lote podem operar em objetos de classe de armazenamento S3 Glacier e
S3 Glacier Deep Archive ou em objetos de nível de armazenamento Acesso de arquivamento e Acesso
de arquivamento profundo do S3 Intelligent-Tiering. Eles não podem operar em ambos os tipos no
mesmo trabalho. Para restaurar objetos de ambos os tipos, você deve criar trabalhos de Operações em
lote separados.
Para criar um trabalho Iniciar a restauração de um objeto do S3, os seguintes argumentos estão
disponíveis:
ExpirationInDays
Este argumento especifica por quanto tempo o objeto do S3 Glacier ou S3 Glacier Deep Archive
permanece disponível no Amazon S3. Os trabalhos Iniciar a restauração de um objeto que visam
objetos S3 Glacier e S3 Glacier Deep Archive exigem ExpirationInDays definido como 1 ou
superior.
Por outro lado, não defina ExpirationInDays ao criar trabalhos de operação Iniciar a restauração
de um objeto do S3 que visam objetos do nível Acesso de arquivamento e Acesso de arquivamento
O Amazon S3 pode restaurar objetos usando um dos três níveis de recuperação diferentes:
EXPEDITED, STANDARD e BULK. No entanto, o recurso Operações em lote do S3 suporta apenas os
níveis de recuperação STANDARD e BULK. Para obter mais informações sobre as diferenças entre os
níveis de recuperação, consulte Opções de recuperação de arquivamento (p. 545). Para obter mais
informações sobre definição de preço para cada nível, consulte a seção Solicitações e recuperações
de dados na seção Definição de preço do Amazon S3.
Sobrepor restaurações
Se o trabalho Iniciar a restauração de um objeto do S3 tentar restaurar um objeto que já esteja em
processo de restauração, o comportamento das Operações em lote do S3 será o seguinte.
A operação de restauração será bem-sucedida para o objeto se uma das seguintes condições for
verdadeira:
A operação apresenta falha para o objeto se uma das seguintes condições for verdadeira:
Limitações
Os trabalhos Iniciar a restauração de um objeto do S3 têm as seguintes limitações:
Para obter mais informações sobre a restauração de objetos, consulte Restaurar um objeto
arquivado (p. 547).
É possível usar as operações em lote do S3 com bloqueio de objetos para gerenciar as datas de retenção
de muitos objetos do Amazon S3 de uma só vez. Especifique a lista de objetos de destino no manifesto
e envie-a para as operações em lote para conclusão. Para obter mais informações, consulte Bloqueio de
objetos do S3 the section called “Períodos de retenção” (p. 557).
As datas de retenção de trabalhos de operações em lote do S3 com datas de retenção é executado até
que a conclusão, o cancelamento ou um estado de falha seja atingido. Use as operações em lote do S3
e a retenção de bloqueio de objetos do S3 ao adicionar, alterar ou remover a data de retenção de muitos
objetos com uma única solicitação.
As operações em lote verificam se o bloqueio de objetos está habilitado no bucket antes de processar
qualquer chave no manifesto. Para executar as operações e a validação, as operações em lote precisam
das permissões s3:GetBucketObjectLockConfiguration e s3:PutObjectRetention em uma
função do IAM para permitir que as operações em lote chamem o bloqueio de objetos em seu nome.
Para obter informações sobre como usar essa operação com a API REST, consulte
S3PutObjectRetention na operação CreateJob na Referência da API do Amazon Simple Storage
Service.
Para obter um exemplo da interface da linha de comando da AWS de como usar essa operação, consulte
the section called “Usar operações em lote com retenção de bloqueio de objetos” (p. 789). Para obter um
exemplo do AWS SDK para Java, consulte the section called “Usar operações em lote com retenção de
bloqueio de objetos” (p. 789).
Restrições e limitações
• As operações em lote do S3 não fazem alterações em nível de bucket.
• O versionamento e o bloqueio de objetos do S3 devem ser configurados no bucket em que o trabalho é
executado.
• Todos os objetos listados no manifesto devem estar no mesmo bucket.
• A operação funciona na versão mais recente do objeto, a menos que uma versão seja explicitamente
especificada no manifesto.
• É necessária a permissão s3:PutObjectRetention na função do IAM para usar isso.
• A permissão s3:GetBucketObjectLockConfiguration do IAM é necessária para confirmar que o
bloqueio de objetos está habilitado para o bucket do S3.
• Só é possível estender o período de retenção de objetos com datas de retenção do modo COMPLIANCE
aplicadas, e não é possível reduzi-lo.
Você pode usar o Operações em lote do S3 com o Bloqueio de objetos para adicionar retenções legais
a muitos objetos do Amazon S3 de uma só vez. Você pode fazer isso listando os objetos de destino
no manifesto e enviando essa lista às operações em lote. O trabalho de operações em lote do S3 com
retenção legal de bloqueio de objetos é executado até a conclusão, até o cancelamento ou até que um
estado de falha seja atingido.
Ao criar o trabalho de operações em lote do S3 para remover a retenção legal, é necessário especificar
Off (Desativado) como o status de retenção legal. Para obter mais informações, consulte the section called
“Gerenciar o bloqueio de objetos ” (p. 560).
Para obter informações sobre como usar essa operação com a API REST, consulte
S3PutObjectLegalHold na operação CreateJob na Referência da API do Amazon Simple Storage
Service.
Para obter um exemplo de uso desta operação, consulte Usar o AWS SDK Java (p. 800).
Restrições e limitações
• As operações em lote do S3 não fazem alterações em nível de bucket.
• Todos os objetos listados no manifesto devem estar no mesmo bucket.
• O versionamento e o bloqueio de objetos do S3 devem ser configurados no bucket em que o trabalho é
executado.
• A operação funciona na versão mais recente do objeto, a menos que uma versão seja explicitamente
especificada no manifesto.
• A permissão s3:PutObjectLegalHold é necessária na função do IAM para adicionar ou remover a
retenção legal de objetos.
• A permissão s3:GetBucketObjectLockConfiguration do IAM é necessária para confirmar se o
bloqueio de objetos do S3 está habilitado para o bucket do S3.
Para evitar que trabalhos executem um grande número de operações malsucedidas, o Amazon S3 impõe
um limite de falhas por tarefa em cada trabalho de operações em lote. O Amazon S3 monitora a taxa de
falhas das tarefas depois que o trabalho executa pelo menos 1.000 tarefas. Se, a qualquer momento, a
taxa de falha (o número de tarefas que falharam em proporção ao número total de tarefas executadas)
exceder 50%, o trabalho vai falhar. Se o trabalho falhar porque excedeu o limite de falhas da tarefa, você
poderá identificar a causa das falhas. Por exemplo, você pode ter incluído por acidente alguns objetos
no manifesto que não existem no bucket especificado. Depois de corrigir os erros, você pode reenviar o
trabalho.
Note
Para obter mais informações sobre eventos do Amazon S3, consulte Notificações de eventos do Amazon
S3 (p. 869).
Relatórios de conclusão
Ao criar um trabalho, você solicita um relatório de conclusão. Desde que as operações em lote do S3
invoquem com êxito pelo menos uma tarefa, o Amazon S3 vai gerar um relatório de conclusão depois de
concluir a execução de tarefas, falhar ou ser cancelado. Configure o relatório de conclusão para incluir
todas as tarefas ou somente tarefas com falha.
Mesmo que você não configure um relatório de conclusão, ainda poderá monitorar e auditar o trabalho
e suas tarefas usando o CloudTrail e o Amazon CloudWatch. Para obter mais informações, consulte the
section called “Monitorar um trabalho do Operações em lote” (p. 806).
Tópicos
• Gerenciar trabalhos do Operações em lote do S3 usando o console do S3 (p. 768)
• Listar trabalhos (p. 769)
• Visualizar detalhes do trabalho (p. 769)
• Atribuir prioridade aos trabalhos (p. 769)
• Monitorar status do trabalho (p. 771)
Listar trabalhos
Você pode recuperar uma lista dos seus trabalhos de operações em lote do S3. Ela inclui os trabalhos
ainda não concluídos, bem como os concluídos nos últimos 90 dias. A lista inclui informações para cada
trabalho, como ID, descrição, prioridade, status atual e número de tarefas que foram bem-sucedidas e que
apresentaram falha. Você pode filtrar a lista por status. Ao recuperar uma lista pelo console, você também
pode pesquisar os trabalhos por descrição ou ID e filtrá-los por região da AWS.
Você pode alterar a prioridade do trabalho enquanto ele está sendo executado. Se você enviar um novo
trabalho com uma prioridade mais alta enquanto um trabalho estiver em execução, o trabalho de menor
prioridade poderá ser pausado para permitir a execução do trabalho de maior prioridade.
Note
Para obter mais informações sobre prioridade de trabalhos, consulte Atribuir prioridade aos
trabalhos (p. 769).
Example
package aws.example.s3control;
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.services.s3control.AWSS3Control;
import com.amazonaws.services.s3control.AWSS3ControlClient;
import com.amazonaws.services.s3control.model.UpdateJobPriorityRequest;
try {
AWSS3Control s3ControlClient = AWSS3ControlClient.builder()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(US_WEST_2)
.build();
s3ControlClient.updateJobPriority(new UpdateJobPriorityRequest()
.withAccountId(accountId)
.withJobId(jobId)
.withPriority(98));
} catch (AmazonServiceException e) {
// The call was transmitted successfully, but Amazon S3 couldn't process
// it and returned an error response.
e.printStackTrace();
} catch (SdkClientException e) {
// Amazon S3 couldn't be contacted for a response, or the client
// couldn't parse the response from Amazon S3.
e.printStackTrace();
}
}
}
O exemplo a seguir atualiza o status de um trabalho de operações em lote do S3 usando o AWS SDK para
Java.
Para obter mais informações sobre o status de trabalhos, consulte Monitorar status do trabalho (p. 771).
Example
package aws.example.s3control;
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.services.s3control.AWSS3Control;
import com.amazonaws.services.s3control.AWSS3ControlClient;
import com.amazonaws.services.s3control.model.UpdateJobStatusRequest;
try {
AWSS3Control s3ControlClient = AWSS3ControlClient.builder()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(US_WEST_2)
.build();
s3ControlClient.updateJobStatus(new UpdateJobStatusRequest()
.withAccountId(accountId)
.withJobId(jobId)
.withRequestedJobStatus("Ready"));
} catch (AmazonServiceException e) {
// The call was transmitted successfully, but Amazon S3 couldn't process
// it and returned an error response.
e.printStackTrace();
} catch (SdkClientException e) {
// Amazon S3 couldn't be contacted for a response, or the client
// couldn't parse the response from Amazon S3.
e.printStackTrace();
}
}
}
Considere o seguinte exemplo de marcação: suponha que você deseja que seu departamento financeiro
crie um trabalho de operações em lote. Você pode escrever uma política do AWS Identity and Access
Management (IAM) que permita que um usuário invoque CreateJob, desde que o trabalho seja criado
com a tag Department atribuída ao valor Finance. Além disso, você pode anexar essa política a todos
os usuários que são membros do departamento de Finanças.
Continuando com este exemplo, você pode escrever uma política que permita que um usuário atualize
a prioridade de qualquer trabalho que tenha as tags desejadas ou cancele qualquer trabalho que tenha
essas tags. Para obter mais informações, consulte the section called “Controlar permissões” (p. 780).
Você pode adicionar tags a novos trabalhos de operações em lote do S3 ao criá-los ou adicionar tags a
trabalhos existentes.
• Você pode associar até 50 tags a um trabalho, desde que elas tenham chaves de tag exclusivas.
• Um chave de tag pode ter até 128 caracteres Unicode e os valores de tag podem ter até 256 caracteres
Unicode.
• As chaves e os valores diferenciam letras maiúsculas de minúsculas.
Para obter mais informações sobre restrições de tags, consulte Restrições de tags definidas pelo usuário
no Guia do usuário do AWS Billing and Cost Management.
Se você enviar essa solicitação com o conjunto de tags vazio, o Operações em lote do S3
excluirá o conjunto de tags existente no objeto. Se você usar esse método, será cobrado por
uma solicitação de nível 1 (PUT). Para obter mais informações, consulte Definição de preço
do Amazon S3.
Para excluir tags existentes do trabalho de Operações em lote, a ação DeleteJobTagging
é preferida porque ela obtém o mesmo resultado sem incorrer em encargos.
• DeleteJobTagging — exclui o conjunto de tags associado a um trabalho de Operações em lote.
1. Selecione a ação ou OPERATION que deseja que o trabalho de operações em lote execute e escolha
TargetResource.
"TargetResource": "arn:aws:s3:::destination-bucket"
}
}
EOF
2. Identifique as TAGS que você deseja para o trabalho. Nesse caso, você aplica duas tags,
department e FiscalYear, com os valores Marketing e 2020, respectivamente.
5. Execute a ação create-job para criar o trabalho de operações em lote com entradas definidas nas
etapas anteriores.
aws \
s3control create-job \
--account-id 123456789012 \
--manifest "${MANIFEST//$'\n'}" \
--operation "${OPERATION//$'\n'/}" \
--report "${REPORT//$'\n'}" \
--priority 10 \
--role-arn arn:aws:iam::123456789012:role/batch-operations-role \
--tags "${TAGS//$'\n'/}" \
--client-request-token "$(uuidgen)" \
--region us-west-2 \
--description "Copy with Replace Metadata";
Example
O exemplo a seguir cria um trabalho de operações em lote do S3 com tags usando o AWS SDK para Java.
return result.getJobId();
}
O exemplo a seguir exclui as tags de um trabalho de operações em lote usando a CLI da AWS.
aws \
s3control delete-job-tagging \
--account-id 123456789012 \
--job-id Example-e25a-4ed2-8bee-7f8ed7fc2f1c \
--region us-east-1;
Example
O exemplo a seguir exclui as tags de um trabalho de operações em lote do S3 usando o AWS SDK para
Java.
Veja a seguir um exemplo de uso de s3control put-job-tagging para adicionar tags ao trabalho de
operações em lote do S3 usando a CLI da AWS.
Note
Se você enviar essa solicitação com o conjunto de tags vazio, o Operações em lote do S3 excluirá
o conjunto de tags existente no objeto. Além disso, se você usar esse método, será cobrado por
uma solicitação de nível 1 (PUT). Para obter mais informações, consulte Definição de preço do
Amazon S3.
Para excluir tags existentes do trabalho de Operações em lote, a ação DeleteJobTagging é
preferida porque ela obtém o mesmo resultado sem incorrer em encargos.
1. Identifique as TAGS que você deseja para o trabalho. Nesse caso, você aplica duas tags,
department e FiscalYear, com os valores Marketing e 2020, respectivamente.
aws \
s3control put-job-tagging \
--account-id 123456789012 \
--tags "${TAGS//$'\n'/}" \
--job-id Example-e25a-4ed2-8bee-7f8ed7fc2f1c \
--region us-east-1;
Example
O exemplo a seguir coloca as tags de um trabalho de operações em lote do S3 usando o AWS SDK para
Java.
O exemplo a seguir obtém as tags de um trabalho de operações em lote usando a CLI da AWS.
aws \
s3control get-job-tagging \
--account-id 123456789012 \
--job-id Example-e25a-4ed2-8bee-7f8ed7fc2f1c \
--region us-east-1;
Example
O exemplo a seguir obtém as tags de um trabalho de operações em lote do S3 usando o AWS SDK para
Java.
return tags;
}
Você pode aplicar até 50 tags de trabalho a cada trabalho de operações em lote. Isso permite que você
defina políticas muito granulares restringindo o conjunto de usuários que podem editar o trabalho. As
tags de trabalho podem conceder ou limitar a capacidade do usuário de cancelar um trabalho, ativar um
trabalho no estado de confirmação ou alterar o nível de prioridade de um trabalho. Além disso, você pode
impor que as tags sejam aplicadas a todos os novos trabalhos e especificar os pares de chave-valor
permitidos para as tags. Você pode expressar todas essas condições usando a mesma linguagem de
política do IAM. Para obter mais informações, consulte Ações, recursos e chaves de condição do Amazon
S3 (p. 288).
O exemplo a seguir mostra como você pode usar tags de trabalho de operações em lote do S3
para conceder aos usuários permissão para criar e editar somente os trabalhos executados em um
departamento específico (por exemplo, o departamento Finanças ou Conformidade). Você também pode
atribuir trabalhos com base no estágio de desenvolvimento ao qual eles estão relacionados, como QA ou
Produção.
Neste exemplo, você usa tags de trabalho de operações em lote do S3 nas políticas do AWS Identity
and Access Management (IAM) para conceder aos usuários permissão para criar e editar apenas os
trabalhos que estão sendo executados em seu departamento. Você atribui trabalhos com base no estágio
de desenvolvimento ao qual eles estão relacionados, como QA ou Produção.
Este exemplo usa os seguintes departamentos, com cada um usando operações em lote de maneiras
diferentes:
• Finanças
• Conformidade
• Business Intelligence
• Engenharia
Tópicos
Chave: valor
• department : Finance
• department : Compliance
• department : BusinessIntelligence
• department : Engineering
Note
Além disso, você pode anexar uma política gerenciada ao usuário do IAM que permite que qualquer
usuário em sua empresa crie ou modifique trabalhos de operações em lote do S3 dentro de seus
respectivos departamentos.
• A primeira instrução na política permite que o usuário crie um trabalho de operações em lote desde
que a solicitação de criação de trabalho inclua uma tag de trabalho que corresponda ao respectivo
departamento. Isso é expresso usando a sintaxe "${aws:PrincipalTag/department}",
que é substituída pela tag de departamento do usuário do IAM no momento da avaliação da
política. A condição é satisfeita quando o valor fornecido para a tag de departamento na solicitação
("aws:RequestTag/department") corresponde ao departamento do usuário.
• A segunda instrução na política permite que os usuários alterem a prioridade dos trabalhos ou
atualizem o status de um trabalho, desde que o trabalho que o usuário está atualizando corresponda ao
departamento do usuário.
• A terceira instrução permite que um usuário atualize as tags de um trabalho de operações em lote
a qualquer momento por meio de uma solicitação PutJobTagging, desde que (1) sua tag de
departamento seja preservada e (2) o trabalho que está atualizando esteja dentro de seu departamento.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:CreateJob",
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:RequestTag/department": "${aws:PrincipalTag/department}"
}
}
},
{
"Effect": "Allow",
"Action": [
"s3:UpdateJobPriority",
"s3:UpdateJobStatus"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:ResourceTag/department": "${aws:PrincipalTag/
department}"
}
}
},
{
"Effect": "Allow",
"Action": "s3:PutJobTagging",
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:RequestTag/department": "${aws:PrincipalTag/
department}",
"aws:ResourceTag/department": "${aws:PrincipalTag/
department}"
}
}
}
]
}
Todos os trabalhos de operações em lote do S3 têm uma prioridade numérica, que o Amazon S3 usa para
decidir em que ordem executar os trabalhos. Para este exemplo, você restringe a prioridade máxima que a
maioria dos usuários pode atribuir a trabalhos, com intervalos de prioridade mais altos reservados para um
conjunto limitado de usuários privilegiados, da seguinte forma:
Para fazer isso, introduza um novo conjunto de tags representando o estágio do trabalho:
Chave : Valor
• stage : QA
• stage : Production
Esta política introduz duas novas restrições à criação e atualização de trabalhos de operações em lote do
S3, além da restrição baseada em departamento:
• Ele permite que os usuários criem ou atualizem trabalhos em seu departamento com uma nova condição
que requer que o trabalho inclua a tag stage=QA.
• Ele permite que os usuários criem ou atualizem a prioridade de um trabalho até uma nova prioridade
máxima de 100.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:CreateJob",
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:RequestTag/department": "${aws:PrincipalTag/department}",
"aws:RequestTag/stage": "QA"
},
"NumericLessThanEquals": {
"s3:RequestJobPriority": 100
}
}
},
{
"Effect": "Allow",
"Action": [
"s3:UpdateJobStatus"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:ResourceTag/department": "${aws:PrincipalTag/department}"
}
}
},
{
"Effect": "Allow",
"Action": "s3:UpdateJobPriority",
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:ResourceTag/department": "${aws:PrincipalTag/department}",
"aws:ResourceTag/stage": "QA"
},
"NumericLessThanEquals": {
"s3:RequestJobPriority": 100
}
}
},
{
"Effect": "Allow",
"Action": "s3:PutJobTagging",
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:RequestTag/department" : "${aws:PrincipalTag/department}",
"aws:ResourceTag/department": "${aws:PrincipalTag/department}",
"aws:RequestTag/stage": "QA",
"aws:ResourceTag/stage": "QA"
}
}
},
{
"Effect": "Allow",
"Action": "s3:GetJobTagging",
"Resource": "*"
}
]
}
Um pequeno número de usuários pode exigir a capacidade de criar trabalhos de alta prioridade em QA
ou Produção. Para dar suporte a essa necessidade, crie uma política gerenciada adaptada da política de
baixa prioridade na seção anterior.
• Permite que os usuários criem ou atualizem trabalhos em seu departamento com a tag stage=QA ou
stage=Production.
• Permite que os usuários criem ou atualizem a prioridade de um trabalho até um máximo de 300.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:CreateJob",
"Resource": "*",
"Condition": {
"ForAnyValue:StringEquals": {
"aws:RequestTag/stage": [
"QA",
"Production"
]
},
"StringEquals": {
"aws:RequestTag/department": "${aws:PrincipalTag/department}"
},
"NumericLessThanEquals": {
"s3:RequestJobPriority": 300
}
}
},
{
"Effect": "Allow",
"Action": [
"s3:UpdateJobStatus"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:ResourceTag/department": "${aws:PrincipalTag/department}"
}
}
},
{
"Effect": "Allow",
"Action": "s3:UpdateJobPriority",
"Resource": "*",
"Condition": {
"ForAnyValue:StringEquals": {
"aws:ResourceTag/stage": [
"QA",
"Production"
]
},
"StringEquals": {
"aws:ResourceTag/department": "${aws:PrincipalTag/department}"
},
"NumericLessThanEquals": {
"s3:RequestJobPriority": 300
}
}
},
{
"Effect": "Allow",
"Action": "s3:PutJobTagging",
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:RequestTag/department": "${aws:PrincipalTag/department}",
"aws:ResourceTag/department": "${aws:PrincipalTag/department}"
},
"ForAnyValue:StringEquals": {
"aws:RequestTag/stage": [
"QA",
"Production"
],
"aws:ResourceTag/stage": [
"QA",
"Production"
]
}
}
}
]
}
Você pode usar o Operações em lote do S3 com o Bloqueio de objetos para adicionar retenções legais a
muitos objetos do Amazon S3 de uma só vez.
Para obter mais informações, consulte Retenção legal do Bloqueio de objetos do S3 (p. 766).
Tópicos
• Habilitar o Bloqueio de objetos do S3 usando o Operações em lote do S3 (p. 786)
• Definir a retenção do Bloqueio de objetos usando o Operações em lote (p. 789)
• Usar operações em lote do S3 com o modo de conformidade de retenção de bloqueio de objetos do
S3 (p. 790)
• Usar operações em lote do S3 com modo de governança de retenção de bloqueio de objetos do
S3 (p. 794)
• Usar operações em lote do S3 para desativar a retenção legal do bloqueio de objetos do S3 (p. 798)
Os exemplos a seguir mostram como criar uma função do IAM com permissões do Operações em lote
do S3 e atualizar as permissões de função para criar trabalhos que habilitem o Bloqueio de objetos. Nos
exemplos, substitua todos os valores de variável por valores adequados às suas necessidades. Você
também deve ter um manifesto CSV identificando os objetos para o trabalho de operações em lote do S3.
Para obter mais informações, consulte the section called “Especificar um manifesto” (p. 748).
1. Crie uma função do IAM e atribua permissões de operações em lote do S3 para executar.
export AWS_PROFILE='aws-user'
a. Execute o bloqueio de objeto no bucket do S3 que contém os objetos de destino nos quais você
deseja que as operações em lote sejam executadas.
b. Leia o bucket do S3 no qual estão localizados o arquivo CSV de manifesto e os objetos.
c. Grave os resultados do trabalho de operações em lote do S3 no bucket de relatórios.
"arn:aws:s3:::{{ManifestBucket}}"
]
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:GetObjectVersion",
"s3:GetBucketLocation"
],
"Resource": [
"arn:aws:s3:::{{ManifestBucket}}/*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetBucketLocation"
],
"Resource": [
"arn:aws:s3:::{{ReportBucket}}/*"
]
}
]
}
EOF
1. Crie uma função do IAM e atribua permissões de operações em lote do S3 para executar. Esta etapa
é necessária para todos os trabalhos de operações em lote do S3.
2. Configure operações em lote do S3 com bloqueio de objeto do S3 para executar.
1. Execute o bloqueio de objeto no bucket do S3 que contém os objetos de destino nos quais você
deseja que as operações em lote sejam executadas.
2. Leia o bucket do S3 no qual estão localizados o arquivo CSV de manifesto e os objetos.
3. Grave os resultados do trabalho de operações em lote do S3 no bucket de relatórios.
Atualize a função para incluir permissões s3:PutObjectRetention para que você possa executar a
retenção de bloqueio de objetos nos objetos no bucket.
export AWS_PROFILE='aws-user'
export AWS_PROFILE='aws-user'
export AWS_DEFAULT_REGION='us-west-2'
export ACCOUNT_ID=123456789012
export ROLE_ARN='arn:aws:iam::123456789012:role/bops-objectlock'
aws \
s3control create-job \
--account-id "${ACCOUNT_ID}" \
--manifest "${MANIFEST//$'\n'}" \
--operation "${OPERATION//$'\n'/}" \
--report "${REPORT//$'\n'}" \
--priority 10 \
--role-arn "${ROLE_ARN}" \
--client-request-token "$(uuidgen)" \
--region "${AWS_DEFAULT_REGION}" \
--description "Set compliance retain-until to 1 Jul 2030";
Example Estender a retain until date do modo COMPLIANCE para 15 de janeiro de 2020
O exemplo a seguir estende retain until date do modo COMPLIANCE para 15 de janeiro de 2025.
export AWS_PROFILE='aws-user'
export AWS_DEFAULT_REGION='us-west-2'
export ACCOUNT_ID=123456789012
export ROLE_ARN='arn:aws:iam::123456789012:role/bops-objectlock'
aws \
s3control create-job \
--account-id "${ACCOUNT_ID}" \
--manifest "${MANIFEST//$'\n'}" \
--operation "${OPERATION//$'\n'/}" \
--report "${REPORT//$'\n'}" \
--priority 10 \
--role-arn "${ROLE_ARN}" \
--client-request-token "$(uuidgen)" \
--region "${AWS_DEFAULT_REGION}" \
--description "Extend compliance retention to 15 Jan 2020";
Example Defina o modo de retenção como COMPLIANCE e a retenção até à data de 1º de janeiro
de 2020.
return result.getJobId();
O exemplo a seguir estende a retain until date do modo COMPLIANCE para 15 de janeiro de 2020.
return result.getJobId();
}
export AWS_PROFILE='aws-user'
export AWS_DEFAULT_REGION='us-west-2'
export ACCOUNT_ID=123456789012
export ROLE_ARN='arn:aws:iam::123456789012:role/bops-objectlock'
aws \
s3control create-job \
--account-id "${ACCOUNT_ID}" \
--manifest "${MANIFEST//$'\n'}" \
--operation "${OPERATION//$'\n'/}" \
--report "${REPORT//$'\n'}" \
--priority 10 \
--role-arn "${ROLE_ARN}" \
--client-request-token "$(uuidgen)" \
--region "${AWS_DEFAULT_REGION}" \
--description "Put governance retention";
O exemplo a seguir baseia-se nos exemplos anteriores de criação de uma política de confiança e na
definição de permissões de configuração de operações em lote do S3 e bloqueio de objetos do S3. Ele
mostra como ignorar a governança de retenção em vários objetos e cria um trabalho de operações em lote
que usa o bucket de manifestos e relata os resultados no bucket de relatórios.
export AWS_PROFILE='aws-user'
export AWS_PROFILE='aws-user'
export AWS_DEFAULT_REGION='us-west-2'
export ACCOUNT_ID=123456789012
export ROLE_ARN='arn:aws:iam::123456789012:role/bops-objectlock'
EOF
aws \
s3control create-job \
--account-id "${ACCOUNT_ID}" \
--manifest "${MANIFEST//$'\n'}" \
--operation "${OPERATION//$'\n'/}" \
--report "${REPORT//$'\n'}" \
--priority 10 \
--role-arn "${ROLE_ARN}" \
--client-request-token "$(uuidgen)" \
--region "${AWS_DEFAULT_REGION}" \
--description "Remove governance retention";
O exemplo a seguir baseia-se nos exemplos anteriores de criação de uma política de confiança e na
definição de permissões de configuração de operações em lote do S3 e bloqueio de objetos do S3. Ele
mostra como aplicar a governança de retenção de bloqueio de objetos do S3 com o retain until date
definido como 30 de janeiro de 2020 em vários objetos. Ele cria um trabalho de operações em lote que usa
o bucket de manifesto e relata os resultados no bucket de relatórios.
return result.getJobId();
}
O exemplo a seguir baseia-se nos exemplos anteriores de criação de uma política de confiança e na
definição de permissões de configuração de operações em lote do S3 e bloqueio de objetos do S3. Ele
mostra como ignorar a governança de retenção em vários objetos e cria um trabalho de operações em lote
que usa o bucket de manifestos e relata os resultados no bucket de relatórios.
}
public String createRemoveGovernanceRetentionJob(final AWSS3ControlClient
awss3ControlClient) {
final String manifestObjectArn = "arn:aws:s3:::ManifestBucket/governance-objects-
manifest.csv";
final String manifestObjectVersionId = "15ad5ba069e6bbc465c77bf83d541385";
return result.getJobId();
}
export AWS_PROFILE='aws-user'
EOF
export AWS_PROFILE='aws-user'
export AWS_DEFAULT_REGION='us-west-2'
export ACCOUNT_ID=123456789012
export ROLE_ARN='arn:aws:iam::123456789012:role/bops-objectlock'
"Bucket": "arn:aws:s3:::ReportBucket",
"Format": "Report_CSV_20180820",
"Enabled": true,
"Prefix": "reports/legalhold-objects-bops",
"ReportScope": "AllTasks"
}
EOF
aws \
s3control create-job \
--account-id "${ACCOUNT_ID}" \
--manifest "${MANIFEST//$'\n'}" \
--operation "${OPERATION//$'\n'/}" \
--report "${REPORT//$'\n'}" \
--priority 10 \
--role-arn "${ROLE_ARN}" \
--client-request-token "$(uuidgen)" \
--region "${AWS_DEFAULT_REGION}" \
--description "Turn off legal hold";
return result.getJobId();
}
Tópicos
• Usar um relatório de inventário entregue à conta de destino para copiar objetos entre contas da
AWS (p. 802)
• Usar um manifesto CSV armazenado na conta de origem para copiar objetos entre contas da
AWS (p. 804)
Você pode usar o inventário do Amazon S3 para entregar o relatório de inventário à conta de destino para
uso durante a criação do trabalho. Para usar um manifesto CSV na conta de origem ou destino, consulte
the section called “Usar um manifesto CSV armazenado na conta de origem para copiar objetos entre
contas da AWS” (p. 804).
O inventário do Amazon S3 gera inventários dos objetos em um bucket. A lista resultante é publicada em
um arquivo de saída. O bucket do qual foi feito o inventário é chamado de bucket de origem e o bucket no
qual o relatório de inventário é armazenado é chamado de bucket de destino.
O relatório de inventário do Amazon S3 pode ser configurado para ser entregue a outra conta da AWS.
Isso permite que as operações em lote do S3 leiam o relatório de inventário quando a tarefa é criada na
conta de destino da AWS.
Para obter mais informações sobre os buckets de origem e destino do inventário do Amazon S3, consulte
Buckets de origem e destino (p. 605).
A maneira mais fácil de configurar um inventário é usando o Console de Gerenciamento da AWS, mas
você também pode usar a API REST, a interface da linha de comando da AWS (CLI da AWS) ou AWS
SDKs.
O procedimento de console a seguir contém as etapas de alto nível para configurar permissões para um
trabalho de operações em lote do S3. Neste procedimento, você copia objetos de uma conta de origem
para uma conta de destino, com o relatório de inventário armazenado na conta da AWS de destino.
Como configurar o inventário do Amazon S3 para buckets de origem e de destino que são de
propriedade de diferentes contas
Configure uma lista de inventário para um bucket de origem. Ao fazer isso, você especifica o bucket
de destino no qual deseja que a lista seja armazenada. O relatório de inventário para o bucket de
origem é publicado no bucket de destino. Neste procedimento, a conta de origem é a conta que possui
o bucket de origem.
Para obter informações sobre como usar o console para configurar um inventário, consulte
Configuração do inventário do Amazon S3 (p. 607).
Ao inserir informações para o bucket de destino, selecione Buckets in another account (Buckets em
outra conta). Em seguida, insira o nome do bucket do manifesto de destino. Se preferir, você poderá
inserir o ID da conta de destino.
Após salvar a configuração do inventário, o console exibirá uma mensagem semelhante à seguinte:
O Amazon S3 não conseguiu criar uma política de bucket no bucket de destino. Peça para o
proprietário do bucket de destino adicionar a política de bucket a seguir a fim de permitir que o
Amazon S3 insira dados nele.
O console exibirá, então, uma política de bucket que pode ser usada para o bucket de destino.
4. Copie a política do bucket de destino que aparece no console.
5. Na conta de destino, adicione a política de bucket copiada ao bucket do manifesto de destino no qual
o relatório de inventário está armazenado.
6. Crie uma função na conta de destino baseada na política de confiança do recurso Operações
em lote do S3. Para obter mais informações sobre a política de confiança, consulte Política de
confiança (p. 741).
Para obter mais informações sobre como criar uma função, consulte Criar uma função para delegar
permissões a um serviço da AWS no Guia do usuário do IAM.
Em seguida, selecione Create policy (Criar política) para anexar a política a seguir à função.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowBatchOperationsDestinationObjectCOPY",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:PutObjectVersionAcl",
"s3:PutObjectAcl",
"s3:PutObjectVersionTagging",
"s3:PutObjectTagging",
"s3:GetObject",
"s3:GetObjectVersion",
"s3:GetObjectAcl",
"s3:GetObjectTagging",
"s3:GetObjectVersionAcl",
"s3:GetObjectVersionTagging"
],
"Resource": [
"arn:aws:s3:::ObjectDestinationBucket/*",
"arn:aws:s3:::ObjectSourceBucket/*",
"arn:aws:s3:::ObjectDestinationManifestBucket/*"
]
}
]
}
permite que as operações em lote do S3 obtenham objetos do bucket de origem por meio da função
de confiança.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowBatchOperationsSourceObjectCOPY",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::DestinationAccountNumber:role/
BatchOperationsDestinationRoleCOPY"
},
"Action": [
"s3:GetObject",
"s3:GetObjectVersion",
"s3:GetObjectAcl",
"s3:GetObjectTagging",
"s3:GetObjectVersionAcl",
"s3:GetObjectVersionTagging"
],
"Resource": "arn:aws:s3:::ObjectSourceBucket/*"
}
]
}
8. Depois que o relatório de inventário estiver disponível, crie uma tarefa de cópia do objeto PUT de
operações em lote do S3 na conta de destino escolhendo o relatório de inventário no bucket do
manifesto de destino. Você precisa do ARN para a função que criou na conta de destino.
Para obter informações gerais sobre como criar uma tarefa, consulte Criar um trabalho de operações
em lote do S3 (p. 746).
Para obter informações sobre a criação de um trabalho usando o console, consulte Criar um trabalho
de operações em lote do S3 (p. 746).
O procedimento a seguir mostra como configurar permissões ao usar uma tarefa de operações em lote do
S3 para copiar objetos de uma conta de origem para uma conta de destino com arquivo de manifesto CSV
armazenado na conta de origem.
1. Crie uma função na conta de destino baseada na política de confiança do recurso Operações em lote
do S3. Neste procedimento, a conta de destino é a conta para a qual os objetos estão sendo copiados.
Para obter mais informações sobre a política de confiança, consulte Política de confiança (p. 741).
Para obter mais informações sobre como criar uma função, consulte Criar uma função para delegar
permissões a um serviço da AWS no Guia do usuário do IAM.
Versão da API 2006-03-01
804
Amazon Simple Storage Service Guia do usuário
Copiar objetos em contas da AWS
Se você criar a função usando o console, insira um nome para a função (a função do exemplo usa o
nome BatchOperationsDestinationRoleCOPY). Escolha o serviço S3 e selecione o caso de uso
S3 bucket Batch Operations (Operações em lote do bucket do S3), que aplica a política de confiança à
função.
Em seguida, selecione Create policy (Criar política) para anexar a política a seguir à função.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowBatchOperationsDestinationObjectCOPY",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:PutObjectVersionAcl",
"s3:PutObjectAcl",
"s3:PutObjectVersionTagging",
"s3:PutObjectTagging",
"s3:GetObject",
"s3:GetObjectVersion",
"s3:GetObjectAcl",
"s3:GetObjectTagging",
"s3:GetObjectVersionAcl",
"s3:GetObjectVersionTagging"
],
"Resource": [
"arn:aws:s3:::ObjectDestinationBucket/*",
"arn:aws:s3:::ObjectSourceBucket/*",
"arn:aws:s3:::ObjectSourceManifestBucket/*"
]
}
]
}
Esta etapa permite que as operações em lote do S3 leiam o manifesto usando a função confiável.
Aplique a política de bucket ao bucket que contém o manifesto.
Veja a seguir um exemplo da política de bucket para ser aplicada ao bucket do manifesto de origem.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowBatchOperationsSourceManfiestRead",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::DestinationAccountNumber:user/
ConsoleUserCreatingJob",
"arn:aws:iam::DestinationAccountNumber:role/
BatchOperationsDestinationRoleCOPY"
]
},
"Action": [
"s3:GetObject",
"s3:GetObjectVersion"
],
"Resource": "arn:aws:s3:::ObjectSourceManifestBucket/*"
}
]
}
Esta poítica também concede ao usuário de um console que está criando uma tarefa na conta de
destino as mesmas permissões no bucket do manifesto de origem por meio da mesma política de
bucket.
3. Na conta de origem, crie uma política de bucket para o bucket de origem que concede a função que
você criou para objetos GET, ACLs, tags e versões no bucket de origem. O Operações em lote do S3
pode então obter objetos do bucket de origem por meio da função confiável.
Veja a seguir um exemplo da política de bucket para o bucket que contém os objetos de origem.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowBatchOperationsSourceObjectCOPY",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::DestinationAccountNumber:role/
BatchOperationsDestinationRoleCOPY"
},
"Action": [
"s3:GetObject",
"s3:GetObjectVersion",
"s3:GetObjectAcl",
"s3:GetObjectTagging",
"s3:GetObjectVersionAcl",
"s3:GetObjectVersionTagging"
],
"Resource": "arn:aws:s3:::ObjectSourceBucket/*"
}
]
}
4. Crie um trabalho de operações em lote do S3 na conta de destino. Você precisa do nome de recurso
da Amazon (ARN) para a função que criou na conta de destino.
Para obter informações gerais sobre como criar uma tarefa, consulte Criar um trabalho de operações
em lote do S3 (p. 746).
Para obter informações sobre a criação de um trabalho usando o console, consulte Criar um trabalho
de operações em lote do S3 (p. 746).
o recurso de notificação de destino de sua escolha, como o Amazon Simple Notification Service (Amazon
SNS).
Note
Tópicos
• Eventos de operações em lote do S3 emitidos para o CloudTrail (p. 807)
• Usar uma regra do EventBridge para rastrear eventos de trabalho de operações em lote do
S3 (p. 808)
Quando um trabalho de operações em lote é criado, ele é gravado como um evento JobCreated no
CloudTrail. À medida que o trabalho é executado, ele muda de estado durante o processamento e outros
eventos JobStatusChanged são registrados no CloudTrail. Você pode visualizar esses eventos no
console do CloudTrail. Para obter mais informações sobre o CloudTrail, consulte o Guia do usuário do
AWS CloudTrail.
Note
{
"eventVersion": "1.05",
"userIdentity": {
"accountId": "123456789012",
"invokedBy": "s3.amazonaws.com"
},
"eventTime": "2020-02-05T18:25:30Z",
"eventSource": "s3.amazonaws.com",
"eventName": "JobStatusChanged",
"awsRegion": "us-west-2",
"sourceIPAddress": "s3.amazonaws.com",
"userAgent": "s3.amazonaws.com",
"requestParameters": null,
"responseElements": null,
"eventID": "f907577b-bf3d-4c53-b9ed-8a83a118a554",
"readOnly": false,
"eventType": "AwsServiceEvent",
"recipientAccountId": "123412341234",
"serviceEventDetails": {
"jobId": "d6e58ec4-897a-4b6d-975f-10d7f0fb63ce",
"jobArn": "arn:aws:s3:us-west-2:181572960644:job/
d6e58ec4-897a-4b6d-975f-10d7f0fb63ce",
"status": "Complete",
"jobEventId": "b268784cf0a66749f1a05bce259804f5",
"failureCodes": [],
"statusChangeReason": []
}
}
Para fazer isso, você cria uma regra seguindo todas as etapas em Criar uma regra do EventBridge
acionada em uma chamada de API da AWS usando o CloudTrail. Cole a política de padrão de evento
personalizada de operações em lote do S3, quando aplicável, e selecione o serviço de destino de sua
escolha.
{
"source": [
"aws.s3"
],
"detail-type": [
"AWS Service Event via CloudTrail"
],
"detail": {
"eventSource": [
"s3.amazonaws.com"
],
"eventName": [
"JobCreated",
"JobStatusChanged"
]
}
}
Os exemplos a seguir são dois eventos de operações em lote que foram enviados para o Amazon Simple
Queue Service (Amazon SQS) a partir de uma regra de evento do EventBridge. Um trabalho de operações
em lote passa por vários estados diferentes durante o processamento (New, Preparing, Active etc.),
portanto, você pode esperar receber várias mensagens para cada trabalho.
{
"version": "0",
"id": "51dc8145-541c-5518-2349-56d7dffdf2d8",
"detail-type": "AWS Service Event via CloudTrail",
"source": "aws.s3",
"account": "123456789012",
"time": "2020-02-27T15:25:49Z",
"region": "us-east-1",
"resources": [],
"detail": {
"eventVersion": "1.05",
"userIdentity": {
"accountId": "11112223334444",
"invokedBy": "s3.amazonaws.com"
},
"eventTime": "2020-02-27T15:25:49Z",
"eventSource": "s3.amazonaws.com",
"eventName": "JobCreated",
"awsRegion": "us-east-1",
"sourceIPAddress": "s3.amazonaws.com",
"userAgent": "s3.amazonaws.com",
"eventID": "7c38220f-f80b-4239-8b78-2ed867b7d3fa",
"readOnly": false,
"eventType": "AwsServiceEvent",
"serviceEventDetails": {
"jobId": "e849b567-5232-44be-9a0c-40988f14e80c",
"jobArn": "arn:aws:s3:us-east-1:181572960644:job/
e849b567-5232-44be-9a0c-40988f14e80c",
"status": "New",
"jobEventId": "f177ff24f1f097b69768e327038f30ac",
"failureCodes": [],
"statusChangeReason": []
}
}
}
{
"version": "0",
"id": "c8791abf-2af8-c754-0435-fd869ce25233",
"detail-type": "AWS Service Event via CloudTrail",
"source": "aws.s3",
"account": "123456789012",
"time": "2020-02-27T15:26:42Z",
"region": "us-east-1",
"resources": [],
"detail": {
"eventVersion": "1.05",
"userIdentity": {
"accountId": "1111222233334444",
"invokedBy": "s3.amazonaws.com"
},
"eventTime": "2020-02-27T15:26:42Z",
"eventSource": "s3.amazonaws.com",
"eventName": "JobStatusChanged",
"awsRegion": "us-east-1",
"sourceIPAddress": "s3.amazonaws.com",
"userAgent": "s3.amazonaws.com",
"eventID": "0238c1f7-c2b0-440b-8dbd-1ed5e5833afb",
"readOnly": false,
"eventType": "AwsServiceEvent",
"serviceEventDetails": {
"jobId": "e849b567-5232-44be-9a0c-40988f14e80c",
"jobArn": "arn:aws:s3:us-east-1:181572960644:job/
e849b567-5232-44be-9a0c-40988f14e80c",
"status": "Complete",
"jobEventId": "51f5ac17dba408301d56cd1b2c8d1e9e",
"failureCodes": [],
"statusChangeReason": []
}
}
}
O relatório de conclusão contém informações adicionais de cada tarefa, inclusive a chave e a versão do
objeto, status, códigos de erro e descrições de qualquer erro. A descrição dos erros para cada tarefa com
falha pode ser usada para diagnosticar problemas durante a criação de trabalhos, como permissões.
{
"Format": "Report_CSV_20180820",
"ReportCreationDate": "2019-04-05T17:48:39.725Z",
"Results": [
{
"TaskExecutionStatus": "succeeded",
"Bucket": "my-job-reports",
"MD5Checksum": "83b1c4cbe93fc893f54053697e10fd6e",
"Key": "job-f8fb9d89-a3aa-461d-bddc-ea6a1b131955/
results/6217b0fab0de85c408b4be96aeaca9b195a7daa5.csv"
},
{
"TaskExecutionStatus": "failed",
"Bucket": "my-job-reports",
"MD5Checksum": "22ee037f3515975f7719699e5c416eaa",
"Key": "job-f8fb9d89-a3aa-461d-bddc-ea6a1b131955/results/
b2ddad417e94331e9f37b44f1faf8c7ed5873f2e.csv"
}
],
"ReportSchema": "Bucket, Key, VersionId, TaskStatus, ErrorCode, HTTPStatusCode,
ResultMessage"
}
• Bucket
• Key
• VersionId
• TaskStatus
• ErrorCode
• HTTPStatusCode
• ResultMessage
O exemplo de relatório a seguir mostra um caso no qual a função do AWS Lambda atingiu o tempo
limite, fazendo com que as falhas excedessem o limite de falhas. Ela foi então marcado como um
PermanentFailure.
• Bucket
• Key
• VersionId
• TaskStatus
• ErrorCode
• HTTPStatusCode
• ResultMessage
No exemplo a seguir, a função do Lambda copiou com êxito o objeto do Amazon S3 para outro bucket.
A resposta retornada do Amazon S3 é passada de volta para operações em lote do S3 e, em seguida, é
gravada no relatório de conclusão final.
awsexamplebucket1,image_17775,,succeeded,200,,"{u'CopySourceVersionId':
'xVR78haVKlRnurYofbTfYr3ufYbktF8h', u'CopyObjectResult': {u'LastModified':
datetime.datetime(2019, 4, 5, 17, 35, 39, tzinfo=tzlocal()), u'ETag':
'""fe66f4390c50f29798f040d7aae72784""'}, 'ResponseMetadata': {'HTTPStatusCode':
200, 'RetryAttempts': 0, 'HostId': 'nXNaClIMxEJzWNmeMNQV2KpjbaCJLn0OGoXWZpuVOFS/
iQYWxb3QtTvzX9SVfx2lA3oTKLwImKw=', 'RequestId': '3ED5852152014362', 'HTTPHeaders':
{'content-length': '234', 'x-amz-id-2': 'nXNaClIMxEJzWNmeMNQV2KpjbaCJLn0OGoXWZpuVOFS/
iQYWxb3QtTvzX9SVfx2lA3oTKLwImKw=', 'x-amz-copy-source-version-id':
'xVR78haVKlRnurYofbTfYr3ufYbktF8h', 'server': 'AmazonS3', 'x-amz-request-id':
'3ED5852152014362', 'date': 'Fri, 05 Apr 2019 17:35:39 GMT', 'content-type': 'application/
xml'}}}"
awsexamplebucket1,image_17763,,succeeded,200,,"{u'CopySourceVersionId':
'6HjOUSim4Wj6BTcbxToXW44pSZ.40pwq', u'CopyObjectResult': {u'LastModified':
datetime.datetime(2019, 4, 5, 17, 35, 39, tzinfo=tzlocal()),
u'ETag': '""fe66f4390c50f29798f040d7aae72784""'}, 'ResponseMetadata':
{'HTTPStatusCode': 200, 'RetryAttempts': 0, 'HostId': 'GiCZNYr8LHd/
Thyk6beTRP96IGZk2sYxujLe13TuuLpq6U2RD3we0YoluuIdm1PRvkMwnEW1aFc=', 'RequestId':
'1BC9F5B1B95D7000', 'HTTPHeaders': {'content-length': '234', 'x-amz-id-2': 'GiCZNYr8LHd/
Thyk6beTRP96IGZk2sYxujLe13TuuLpq6U2RD3we0YoluuIdm1PRvkMwnEW1aFc=', 'x-amz-copy-source-
version-id': '6HjOUSim4Wj6BTcbxToXW44pSZ.40pwq', 'server': 'AmazonS3', 'x-amz-request-id':
'1BC9F5B1B95D7000', 'date': 'Fri, 05 Apr 2019 17:35:39 GMT', 'content-type': 'application/
xml'}}}"
awsexamplebucket1,image_17860,,succeeded,200,,"{u'CopySourceVersionId':
'm.MDD0g_QsUnYZ8TBzVFrp.TmjN8PJyX', u'CopyObjectResult': {u'LastModified':
datetime.datetime(2019, 4, 5, 17, 35, 40, tzinfo=tzlocal()), u'ETag':
'""fe66f4390c50f29798f040d7aae72784""'}, 'ResponseMetadata': {'HTTPStatusCode':
200, 'RetryAttempts': 0, 'HostId': 'F9ooZOgpE5g9sNgBZxjdiPHqB4+0DNWgj3qbsir
+sKai4fv7rQEcF2fBN1VeeFc2WH45a9ygb2g=', 'RequestId': '8D9CA56A56813DF3', 'HTTPHeaders':
{'content-length': '234', 'x-amz-id-2': 'F9ooZOgpE5g9sNgBZxjdiPHqB4+0DNWgj3qbsir
+sKai4fv7rQEcF2fBN1VeeFc2WH45a9ygb2g=', 'x-amz-copy-source-version-id':
'm.MDD0g_QsUnYZ8TBzVFrp.TmjN8PJyX', 'server': 'AmazonS3', 'x-amz-request-id':
'8D9CA56A56813DF3', 'date': 'Fri, 05 Apr 2019 17:35:40 GMT', 'content-type': 'application/
xml'}}}"
Monitorar o Amazon S3
O monitoramento é uma parte importante para manter a confiabilidade, a disponibilidade e a performance
do Amazon S3 e das soluções da AWS. Você deve coletar dados de monitoramento de todas as partes da
solução da AWS para que possa depurar com mais facilidade uma falha de vários pontos, caso ela ocorra.
Antes de começar a monitorar o Amazon S3, crie um plano de monitoramento que inclua as respostas para
as seguintes perguntas:
Para obter mais informações sobre registro em log e monitoramento no Amazon S3, consulte os tópicos a
seguir.
Tópicos
• Ferramentas de monitoramento (p. 812)
• Opções de registro em log para o Amazon S3 (p. 813)
• Registrar em log chamadas de API do Amazon S3 usando o AWS CloudTrail (p. 815)
• Registrar em log as solicitações com registro em log de acesso ao servidor (p. 833)
• Monitoramento de métricas com o Amazon CloudWatch (p. 855)
• Notificações de eventos do Amazon S3 (p. 869)
Ferramentas de monitoramento
A AWS fornece várias ferramentas que você pode usar para monitorar o Amazon S3. Você pode configurar
algumas dessas ferramentas para fazer o monitoramento em seu lugar, e, ao mesmo tempo, algumas
das ferramentas exigem intervenção manual. Recomendamos que as tarefas de monitoramento sejam
automatizadas ao máximo possível.
• Amazon CloudWatch Alarms (Alarmes do Amazon CloudWatch): observe uma única métrica ao longo de
um período que você especificar e realize uma ou mais ações com base no valor da métrica em relação
a um determinado limite ao longo de vários períodos. A ação é uma notificação enviada para um tópico
do Amazon Simple Notification Service (Amazon SNS) ou uma política do Amazon EC2 Auto Scaling. Os
alarmes do CloudWatch não invocam ações só porque estão em um determinado estado. O estado deve
ter sido alterado e mantido por uma quantidade especificada de períodos. Para obter mais informações,
consulte Monitoramento de métricas com o Amazon CloudWatch (p. 855).
• AWS CloudTrail Log Monitoring (Monitoramento de log do AWS CloudTrail): compartilhe arquivos de log
entre contas, monitore os arquivos de log do CloudTrail em tempo real enviando-os para o CloudWatch
Logs, escreva aplicações de processamento de logs em Java e confirme se os arquivos de log não
foram alterados após a entrega pelo CloudTrail. Para obter mais informações, consulte Registrar em log
chamadas de API do Amazon S3 usando o AWS CloudTrail (p. 815).
• Registrar em log as solicitações com registro em log de acesso ao servidor (p. 833)
• Registrar em log chamadas de API do Amazon S3 usando o AWS CloudTrail (p. 815)
A tabela a seguir lista as principais propriedades dos logs do AWS CloudTrail e dos logs de acesso ao
servidor do Amazon S3. Analise a tabela e as observações para garantir que o AWS CloudTrail atenda aos
seus requisitos de segurança.
Observações:
1. O CloudTrail não entrega logs para solicitações com falha de autenticação (nas quais as credenciais
fornecidas não são válidas). No entanto, ele inclui logs para solicitações nas quais a autorização falha
(AccessDenied) e as solicitações são feitas por usuários anônimos.
2. O proprietário do bucket do S3 recebe logs do CloudTrail somente se o conta possuir ou tiver acesso
total ao objeto na solicitação. Para obter mais informações, consulte Ações do nível de objetos em
cenários entre contas (p. 820).
Se você criar uma trilha, poderá habilitar a entrega contínua de eventos do CloudTrail para um bucket
do Amazon S3, incluindo eventos para o Amazon S3. Se você não configurar uma trilha, ainda poderá
visualizar os eventos mais recentes no console do CloudTrail em Event history (Histórico de eventos).
Usando as informações coletadas pelo CloudTrail, é possível determinar a solicitação feita para o Amazon
S3, o endereço IP do qual a solicitação foi feita, quem fez a solicitação, quando ela foi feita e detalhes
adicionais.
Para saber mais sobre o CloudTrail, incluindo como configurá-lo e ativá-lo, consulte o Guia do usuário do
AWS CloudTrail.
Você pode usar logs do AWS CloudTrail junto com logs de acesso ao servidor para o Amazon S3. Os logs
do CloudTrail fornecem rastreamento detalhado de API para operações no nível de bucket e objeto do
Amazon S3. Os logs de acesso ao servidor do Amazon S3 fornecem visibilidade em operações no nível
de objeto em seus dados no Amazon S3. Para obter mais informações sobre logs de acesso ao servidor,
consulte Registrar em log as solicitações com registro em log de acesso ao servidor (p. 833).
Você também pode usar logs do CloudTrail junto com o CloudWatch para Amazon S3. A integração do
CloudTrail com o CloudWatch Logs entrega as atividades de API no nível do bucket do S3 capturadas pelo
CloudTrail a um stream de logs do CloudWatch no grupo de logs do CloudWatch especificado. Você pode
criar alarmes do CloudWatch para monitoramento de atividade específica de API e receber notificações
por e-mail quando a atividade específica de API ocorrer. Para obter mais informações sobre alarmes do
CloudWatch para monitorar atividades específicas da API, consulte o Guia do usuário do AWS CloudTrail.
Para obter mais informações sobre como usar o CloudWatch com o Amazon S3, consulte Monitoramento
de métricas com o Amazon CloudWatch (p. 855).
Os novos recursos do Amazon S3 não são compatíveis com o SOAP. Recomendamos que você
use a API REST ou os AWS SDKs.
ListAllMyBuckets ListBuckets
CreateBucket CreateBucket
DeleteBucket DeleteBucket
GetBucketAccessControlPolicy GetBucketAcl
SetBucketAccessControlPolicy PutBucketAcl
GetBucketLoggingStatus GetBucketLogging
SetBucketLoggingStatus PutBucketLogging
Para obter mais informações sobre o CloudTrail e o Amazon S3, consulte os seguintes tópicos:
Tópicos
• Eventos do CloudTrail no Amazon S3 (p. 817)
• Entradas de arquivo de log do CloudTrail para Amazon S3 e Amazon S3 no Outposts (p. 821)
• Habilitar o log de eventos do CloudTrail para buckets e objetos do S3 (p. 825)
• Identificar solicitações do Amazon S3 usando o CloudTrail (p. 826)
Para obter um registro de eventos em andamento na sua conta da AWS, incluindo eventos do Amazon S3,
crie uma trilha. Uma trilha permite que o CloudTrail entregue arquivos de log para um bucket do Amazon
S3. Por padrão, quando você cria uma trilha no console, ela é aplicada a todas as regiões. A trilha registra
em log os eventos de todas as regiões na partição da AWS e entrega os arquivos de log ao bucket do
Amazon S3 especificado por você. Além disso, você pode configurar outros serviços da AWS para analisar
mais profundamente e agir sobre os dados de eventos coletados nos logs do CloudTrail. Para obter mais
informações, consulte:
Cada entrada de log ou evento contém informações sobre quem gerou a solicitação. As informações de
identidade ajudam a determinar:
Você pode armazenar arquivos de log no bucket pelo tempo que desejar, mas também pode definir regras
do ciclo de vida do Amazon S3 para arquivar ou excluir os arquivos de log automaticamente. Por padrão,
os arquivos de log são criptografados usando-se Server-Side Encryption (SSE - Criptografia do lado do
servidor) do Amazon S3.
Para obter informações sobre quais chamadas de API do Amazon S3 são capturadas pelo CloudTrail,
consulte Eventos do CloudTrail no Amazon S3 (p. 817).
As tabelas nesta seção listam as ações no nível da conta do Amazon S3 que são compatíveis com o
registro do CloudTrail.
Ações de API no nível da conta do Amazon S3 rastreadas pelo registro em log do CloudTrail aparecem
como os seguintes nomes de eventos:
• DeletePublicAccessBlock
• GetPublicAccessBlock
• PutPublicAccessBlock
As tabelas nesta seção listam as ações do nível do bucket do Amazon S3 que são compatíveis com o
registro em log do CloudTrail.
Ações de API no nível do bucket do Amazon S3 rastreadas pelo registro em log do CloudTrail aparecerão
como os seguintes nomes de eventos:
• CreateBucket
• DeleteBucket
• DeleteBucketCors
• DeleteBucketEncryption
• DeleteBucketLifecycle
• DeleteBucketPolicy
• DeleteBucketReplication
• DeleteBucketTagging
• DeletePublicAccessBlock
• GetBucketCors
• GetBucketEncryption
• GetBucketLifecycle
• GetBucketLocation
• GetBucketLogging
• GetBucketNotification
• GetBucketPolicy
• GetBucketReplication
• GetBucketRequestPayment
• GetBucketTagging
• GetBucketVersioning
• GetBucketWebsite
• GetPublicAccessBlock
• ListBuckets
• PutBucketAcl
• PutBucketCors
• PutBucketEncryption
• PutBucketLifecycle
• PutBucketLogging
• PutBucketNotification
• PutBucketPolicy
• PutBucketReplication
• PutBucketRequestPayment
• PutBucketTagging
• PutBucketVersioning
• PutBucketWebsite
• PutPublicAccessBlock
Além dessas operações de API, também é possível usar a ação OPTIONS object do nível do objeto. Essa
ação é tratada como uma ação do nível do bucket no registro do CloudTrail, pois verifica a configuração
cors de um bucket.
As seguintes ações de API no nível do objeto são registradas como eventos do CloudTrail:
• AbortMultipartUpload
• CompleteMultipartUpload
• DeleteObjects
• DeleteObject
• GetObject
• GetObjectAcl
• GetObjectTagging
• GetObjectTorrent
• HeadObject
• CreateMultipartUpload
• ListParts
• PostObject
• RestoreObject
• PutObject
• PutObjectAcl
• PutObjectTagging
• CopyObject
• UploadPart
• UploadPartCopy
Além dessas operações, você pode usar as seguintes operações do nível do bucket para obter logs do
CloudTrail como ações do nível do objeto do Amazon S3 sob certas condições:
• GET Bucket Object (List Objects) (GET Bucket Object (Listar objetos) Versão 2: selecione um prefixo
especificado na trilha.
• GET Bucket Object Versions (List Object Versions (GET Bucket Object Versions (Listar versões do
objeto)): selecione um prefixo especificado na trilha.
• Bucket HEAD: especifique um bucket e um prefixo vazio.
• Excluir vários objetos: especifique um bucket e um prefixo vazio.
Note
O CloudTrail não registra nomes de chaves para as chaves excluídas usando a operação
Excluir vários objetos.
O CloudTrail entrega sempre os logs de acesso da API do nível do objeto ao solicitante. Além disso, o
CloudTrail também entrega os mesmo logs ao proprietário do bucket somente se o proprietário do bucket
tiver permissões para as mesmas ações da API sobre esse objeto.
Note
Exemplo 2: O CloudTrail não prolifera os endereços de e-mail usados nas configurações das
ACLs de objeto
• A Conta-B (solicitante) envia uma solicitação para definir uma concessão de ACL de objeto usando um
endereço de e-mail. Para obter informações sobre ACLs, consulte Visão geral da lista de controle de
acesso (ACL) (p. 440).
A solicitação obtém os logs junto com as informações do e-mail. Contudo, o proprietário do bucket - se
for qualificado para receber logs como no exemplo 1 - recebe o log do CloudTrail que relata o evento.
Contudo, o proprietário do bucket não obtém as informações de configuração da ACL, especificamente
o e-mail do favorecido e a concessão. A única informação que o log dá ao proprietário do bucket é que a
chamada da API da ACL foi feita pela Conta-B.
Tópicos
• Exemplo: entrada de arquivo de log do CloudTrail para o Amazon S3 (p. 821)
• Exemplo: entradas de arquivo de log do Amazon S3 no Outposts (p. 823)
{
"Records": [
{
"eventVersion": "1.03",
"userIdentity": {
"type": "IAMUser",
"principalId": "111122223333",
"arn": "arn:aws:iam::111122223333:user/myUserName",
"accountId": "111122223333",
"accessKeyId": "AKIAIOSFODNN7EXAMPLE",
"userName": "myUserName"
},
"eventTime": "2019-02-01T03:18:19Z",
"eventSource": "s3.amazonaws.com",
"eventName": "ListBuckets",
"awsRegion": "us-west-2",
"sourceIPAddress": "127.0.0.1",
"userAgent": "[]",
"requestParameters": {
"host": [
"s3.us-west-2.amazonaws.com"
]
},
"responseElements": null,
"additionalEventData": {
"SignatureVersion": "SigV2",
"AuthenticationMethod": "QueryString"
},
"requestID": "47B8E8D397DCE7A6",
"eventID": "cdc4b7ed-e171-4cef-975a-ad829d4123e8",
"eventType": "AwsApiCall",
"recipientAccountId": "111122223333"
},
{
"eventVersion": "1.03",
"userIdentity": {
"type": "IAMUser",
"principalId": "111122223333",
"arn": "arn:aws:iam::111122223333:user/myUserName",
"accountId": "111122223333",
"accessKeyId": "AKIAIOSFODNN7EXAMPLE",
"userName": "myUserName"
},
"eventTime": "2019-02-01T03:22:33Z",
"eventSource": "s3.amazonaws.com",
"eventName": "PutBucketAcl",
"awsRegion": "us-west-2",
"sourceIPAddress": "",
"userAgent": "[]",
"requestParameters": {
"bucketName": "",
"AccessControlPolicy": {
"AccessControlList": {
"Grant": {
"Grantee": {
"xsi:type": "CanonicalUser",
"xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance",
"ID":
"d25639fbe9c19cd30a4c0f43fbf00e2d3f96400a9aa8dabfbbebe1906Example"
},
"Permission": "FULL_CONTROL"
}
},
"xmlns": "http://s3.amazonaws.com/doc/2006-03-01/",
"Owner": {
"ID": "d25639fbe9c19cd30a4c0f43fbf00e2d3f96400a9aa8dabfbbebe1906Example"
}
}
"host": [
"s3.us-west-2.amazonaws.com"
],
"acl": [
""
]
},
"responseElements": null,
"additionalEventData": {
"SignatureVersion": "SigV4",
"CipherSuite": "ECDHE-RSA-AES128-SHA",
"AuthenticationMethod": "AuthHeader"
},
"requestID": "BD8798EACDD16751",
"eventID": "607b9532-1423-41c7-b048-ec2641693c47",
"eventType": "AwsApiCall",
"recipientAccountId": "111122223333"
},
{
"eventVersion": "1.03",
"userIdentity": {
"type": "IAMUser",
"principalId": "111122223333",
"arn": "arn:aws:iam::111122223333:user/myUserName",
"accountId": "111122223333",
"accessKeyId": "AKIAIOSFODNN7EXAMPLE",
"userName": "myUserName"
},
"eventTime": "2019-02-01T03:26:37Z",
"eventSource": "s3.amazonaws.com",
"eventName": "GetBucketVersioning",
"awsRegion": "us-west-2",
"sourceIPAddress": "",
"userAgent": "[]",
"requestParameters": {
"host": [
"s3.us-west-2.amazonaws.com"
],
"bucketName": "DOC-EXAMPLE-BUCKET1",
"versioning": [
""
]
},
"responseElements": null,
"additionalEventData": {
"SignatureVersion": "SigV4",
"CipherSuite": "ECDHE-RSA-AES128-SHA",
"AuthenticationMethod": "AuthHeader",
},
"requestID": "07D681279BD94AED",
"eventID": "f2b287f3-0df1-4961-a2f4-c4bdfed47657",
"eventType": "AwsApiCall",
"recipientAccountId": "111122223333"
}
]
}
Uma trilha é uma configuração que permite a entrega de eventos como registros de log a um bucket do S3
em uma região que você especifica. Os logs do CloudTrail para os intervalos Outposts incluem um novo
campo edgeDeviceDetails, que identifica o Outpost em que o bucket especificado está localizado.
Campos de log adicionais incluem a ação solicitada, a data e a hora da ação e os parâmetros de
solicitação. Os arquivos de log do CloudTrail não são um rastreamento de pilha ordenada das chamadas
de API pública. Dessa forma, eles não são exibidos em uma ordem específica.
O exemplo a seguir mostra uma entrada de log do CloudTrail que demonstra a ação PutObject em s3-
outposts.
{
"eventVersion": "1.08",
"userIdentity": {
"type": "IAMUser",
"principalId": "111122223333",
"arn": "arn:aws:iam::111122223333:user/yourUserName",
"accountId": "222222222222",
"accessKeyId": "AKIAIOSFODNN7EXAMPLE",
"userName": "yourUserName"
},
"eventTime": "2020-11-30T15:44:33Z",
"eventSource": "s3-outposts.amazonaws.com",
"eventName": "PutObject",
"awsRegion": "us-east-1",
"sourceIPAddress": "26.29.66.20",
"userAgent": "aws-cli/1.18.39 Python/3.4.10 Darwin/18.7.0 botocore/1.15.39",
"requestParameters": {
"expires": "Wed, 21 Oct 2020 07:28:00 GMT",
"Content-Language": "english",
"x-amz-server-side-encryption-customer-key-MD5": "wJalrXUtnFEMI/K7MDENG/
bPxRfiCYEXAMPLEKEY",
"ObjectCannedACL": "BucketOwnerFullControl",
"x-amz-server-side-encryption": "Aes256",
"Content-Encoding": "gzip",
"Content-Length": "10",
"Cache-Control": "no-cache",
"Content-Type": "text/html; charset=UTF-8",
"Content-Disposition": "attachment",
"Content-MD5": "je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY",
"x-amz-storage-class": "Outposts",
"x-amz-server-side-encryption-customer-algorithm": "Aes256",
"bucketName": "DOC-EXAMPLE-BUCKET1",
"Key": "path/upload.sh"
},
"responseElements": {
"x-amz-server-side-encryption-customer-key-MD5": "wJalrXUtnFEMI/K7MDENG/
bPxRfiCYEXAMPLEKEY",
"x-amz-server-side-encryption": "Aes256",
"x-amz-version-id": "001",
"x-amz-server-side-encryption-customer-algorithm": "Aes256",
"ETag": "d41d8cd98f00b204e9800998ecf8427f"
},
"additionalEventData": {
"CipherSuite": "ECDHE-RSA-AES128-SHA",
"bytesTransferredIn": 10,
"x-amz-id-2": "29xXQBV2O+xOHKItvzY1suLv1i6A52E0zOX159fpfsItYd58JhXwKxXAXI4IQkp6",
"SignatureVersion": "SigV4",
"bytesTransferredOut": 20,
"AuthenticationMethod": "AuthHeader"
},
"requestID": "8E96D972160306FA",
"eventID": "ee3b4e0c-ab12-459b-9998-0a5a6f2e4015",
"readOnly": false,
"resources": [
{
"accountId": "222222222222",
"type": "AWS::S3Outposts::Object",
"ARN": "arn:aws:s3-outposts:us-east-1:YYY:outpost/op-01ac5d28a6a232904/bucket/
path/upload.sh"
},
{
"accountId": "222222222222",
"type": "AWS::S3Outposts::Bucket",
"ARN": "arn:aws:s3-outposts:us-east-1:YYY:outpost/op-01ac5d28a6a232904/bucket/"
}
],
"eventType": "AwsApiCall",
"managementEvent": false,
"recipientAccountId": "444455556666",
"sharedEventID": "02759a4c-c040-4758-b84b-7cbaaf17747a",
"edgeDeviceDetails": {
"type": "outposts",
"deviceID": "op-01ac5d28a6a232904"
},
"eventCategory": "Data"
Ao criar uma trilha no CloudTrail, na seção de eventos de dados, você pode marcar a caixa de seleção
Select all S3 buckets in your account (Selecionar todos os buckets do S3 em sua conta) para registrar
todos os eventos no nível de objetos.
Note
• É uma melhor prática criar uma política de ciclo de vida para o bucket de eventos de dados do
AWS CloudTrail. Configure a política de ciclo de vida para remover periodicamente arquivos de
log após o período que você acredita ser necessário auditá-los. Fazer isso reduz a quantidade
de dados que o Athena analisa para cada consulta. Para obter mais informações, consulte
Definir a configuração do ciclo de vida em um bucket (p. 575).
• Para obter informações sobre o formato do registro em log, consulte Registrar em log
chamadas de API do Amazon S3 usando o AWS CloudTrail (p. 815).
• Para obter exemplos de como consultar logs do CloudTrail, consulte a publicação do Blog sobre
big data da AWS Analyze Security, Compliance, and Operational Activity Using AWS CloudTrail
and Amazon Athena.
Por padrão, as trilhas do CloudTrail não registram em log eventos de dados, mas você pode configurar as
trilhas para registrar eventos de dados para buckets do S3 que você especificar, ou para registrar eventos
de dados para todos os buckets do Amazon S3 em sua conta da AWS. Para obter mais informações,
consulte Registrar em log chamadas de API do Amazon S3 usando o AWS CloudTrail (p. 815).
O CloudTrail não preenche eventos de dados no histórico de eventos do CloudTrail. Além disso, nem
todas as ações no nível do bucket são preenchidas no histórico de eventos do CloudTrail. Para obter mais
informações, consulte o artigo do Centro de conhecimento da AWS que fala sobre como usar padrões de
filtro do Amazon CloudWatch Logs e o Amazon Athena para consultar logs do CloudTrail.
Para configurar uma trilha para registrar eventos de dados para um bucket do S3, você pode usar o
console do AWS CloudTrail ou o console do Amazon S3. Se você estiver configurando uma trilha para
registrar eventos de dados para todos os buckets do Amazon S3 na sua conta da AWS, é mais fácil usar
o console do CloudTrail. Para obter informações sobre como usar o console do CloudTrail para configurar
uma trilha para registrar eventos de dados do S3, consulte Eventos de dados no Guia do usuário do AWS
CloudTrail.
Important
Há cobranças adicionais para eventos de dados. Para obter mais informações, consulte Definição
de preço do AWS CloudTrail.
O procedimento a seguir mostra como usar o console do Amazon S3 para habilitar uma trilha do CloudTrail
para registrar eventos de dados para um bucket do S3.
Para obter informações sobre como criar trilhas no console do CloudTrail, consulte Criar e atualizar
uma trilha com o console no Guia do usuário do AWS CloudTrail.
5. Para desabilitar o registro em log no nível do objeto para o bucket, abra o console do CloudTrail e
remova o nome do bucket de Data events (Eventos de dados) da trilha.
Note
Se você usar o console do CloudTrail ou o console do Amazon S3 para configurar uma trilha
para registro de eventos de dados para um bucket do S3, o console do Amazon S3 mostra
que o registro está habilitado no nível do objeto para o bucket.
Para obter informações sobre como habilitar o registro no nível do objeto ao criar um bucket do S3,
consulte Criação de um bucket (p. 31).
Para obter mais informações sobre o registro em log do CloudTrail com buckets do S3, consulte os
seguintes tópicos:
usando logs de acesso ao servidor do Amazon S3, consulte the section called “Identificar solicitações do
S3” (p. 851).
Tópicos
• Identificar solicitações feitas ao Amazon S3 em um log do CloudTrail (p. 827)
• Identificar solicitações do Amazon S3 Signature versão 2 usando o CloudTrail (p. 828)
• Identificar o acesso a objetos do S3 usando o CloudTrail (p. 831)
s3://<myawsexamplebucket1>/AWSLogs/<111122223333>/CloudTrail/<Region>/<yyyy>/
<mm>/<dd>
Example : Use o Athena para consultar logs de eventos do CloudTrail para solicitações
específicas
s3://myawsexamplebucket1/AWSLogs/111122223333/CloudTrail/us-east-2/2019/04/14
Com os logs de eventos do CloudTrail, agora você pode criar um banco de dados e uma tabela do Athena
para consultá-los da seguinte forma:
4. Use a consulta a seguir para criar uma tabela para todos os eventos do CloudTrail no bucket.
Certifique-se de alterar o nome do bucket de <CloudTrail_myawsexamplebucket1> para o nome
do seu bucket. Além disso, forneça o AWS_account_ID do CloudTrail que é usado no bucket.
attributes:STRUCT<
mfaauthenticated:STRING,
creationdate:STRING>,
sessionissuer:STRUCT<
type:STRING,
principalId:STRING,
arn:STRING,
accountId:STRING,
userName:STRING>
>
>,
eventtime STRING,
eventsource STRING,
eventname STRING,
awsregion STRING,
sourceipaddress STRING,
useragent STRING,
errorcode STRING,
errormessage STRING,
requestparameters STRING,
responseelements STRING,
additionaleventdata STRING,
requestid STRING,
eventid STRING,
resources ARRAY<STRUCT<
ARN:STRING,
accountId:STRING,
type:STRING>>,
eventtype STRING,
apiversion STRING,
readonly STRING,
recipientaccountid STRING,
serviceeventdetails STRING,
sharedeventid STRING,
vpcendpointid STRING
)
ROW FORMAT SERDE 'com.amazon.emr.hive.serde.CloudTrailSerde'
STORED AS INPUTFORMAT 'com.amazon.emr.cloudtrail.CloudTrailInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION 's3://<myawsexamplebucket1>/AWSLogs/<111122223333>/';
É altamente recomendável que você use o CloudTrail para ajudar a determinar se algum dos seus fluxos
de trabalho está usando o Signature versão 2. Corrija-os atualizando suas bibliotecas e o código para usar
o Signature versão 4 para evitar qualquer impacto em seus negócios.
Para obter mais informações, consulte Anúncio: o AWS CloudTrail para Amazon S3 adiciona novos
campos para auditoria de maior segurança nos fóruns de discussão da AWS.
Note
O AWS CloudTrail é o método preferencial para identificar solicitações do Signature versão 2. Se você
estiver usando logs de acesso ao servidor do Amazon S3, consulte Identificar solicitações do Signature
versão 2 usando logs de acesso do Amazon S3 (p. 853).
Tópicos
• Exemplos de consulta do Athena para identificar solicitações do Amazon S3 Signature versão
2 (p. 829)
• Particionar dados do Signature versão 2 (p. 829)
Example : Selecione todos os solicitantes que estão enviando tráfego do Signature versão 2
Para fazer isso, crie uma tabela com partições conforme indicado a seguir.
Em seguida, crie as partições individualmente. Não é possível obter resultados de datas que não foram
criadas.
PARTITION (region= 'ap-southeast-1', year= '2019', month= '02', day= '19') LOCATION
's3://myawsexamplebucket1/AWSLogs/111122223333/CloudTrail/ap-southeast-1/2019/02/19/'
PARTITION (region= 'ap-southeast-2', year= '2019', month= '02', day= '19') LOCATION
's3://myawsexamplebucket1/AWSLogs/111122223333/CloudTrail/ap-southeast-2/2019/02/19/'
PARTITION (region= 'ap-northeast-1', year= '2019', month= '02', day= '19') LOCATION
's3://myawsexamplebucket1/AWSLogs/111122223333/CloudTrail/ap-northeast-1/2019/02/19/'
PARTITION (region= 'eu-west-1', year= '2019', month= '02', day= '19') LOCATION 's3://
myawsexamplebucket1/AWSLogs/111122223333/CloudTrail/eu-west-1/2019/02/19/'
PARTITION (region= 'sa-east-1', year= '2019', month= '02', day= '19') LOCATION 's3://
myawsexamplebucket1/AWSLogs/111122223333/CloudTrail/sa-east-1/2019/02/19/';
Você pode, então, fazer a solicitação com base nessas partições e não é preciso carregar todo o bucket.
SELECT useridentity.arn,
Count(requestid) AS RequestCount
FROM s3_cloudtrail_events_db.cloudtrail_myawsexamplebucket1_table_partitioned
WHERE eventsource='s3.amazonaws.com'
AND json_extract_scalar(additionalEventData, '$.SignatureVersion')='SigV2'
AND region='us-east-1'
AND year='2019'
AND month='02'
AND day='19'
Group by useridentity.arn
O exemplo a seguir mostra como obter todas as solicitações de objeto PUT para o Amazon S3 a partir do
log de eventos do AWS CloudTrail.
Tópicos
• Exemplos de consulta do Athena para identificar solicitações de acesso a objetos do Amazon
S3 (p. 831)
Example : Selecione todos os eventos que têm solicitações de acesso ao objeto PUT e imprima
somente EventTime, EventSource, SourceIP, UserAgent, BucketName, object, e UserARN
SELECT
eventTime,
eventName,
eventSource,
sourceIpAddress,
userAgent,
json_extract_scalar(requestParameters, '$.bucketName') as bucketName,
Example : Selecione todos os eventos que têm solicitações de acesso ao objeto GET e imprima
somente EventTime, EventSource, SourceIP, UserAgent, BucketName, object e UserARN
SELECT
eventTime,
eventName,
eventSource,
sourceIpAddress,
userAgent,
json_extract_scalar(requestParameters, '$.bucketName') as bucketName,
json_extract_scalar(requestParameters, '$.key') as object,
userIdentity.arn as userArn
FROM
s3_cloudtrail_events_db.cloudtrail_myawsexamplebucket_table
WHERE
eventName = 'GetObject'
AND eventTime BETWEEN '2019-07-05T00:00:00Z' and '2019-07-06T00:00:00Z'
SELECT
eventTime,
eventName,
eventSource,
sourceIpAddress,
userAgent,
json_extract_scalar(requestParameters, '$.bucketName') as bucketName,
userIdentity.arn as userArn,
userIdentity.principalId
FROM
s3_cloudtrail_events_db.cloudtrail_myawsexamplebucket_table
WHERE
userIdentity.principalId='ANONYMOUS_PRINCIPAL'
AND eventTime BETWEEN '2019-07-05T00:00:00Z' and '2019-07-06T00:00:00Z'
Note
• Esses exemplos de consulta também podem ser úteis para o monitoramento de segurança.
Você pode ver os resultados de chamadas PutObject ou GetObject de solicitantes/
endereços IP inesperados ou não autorizados e identificar solicitações anônimas ao seu bucket.
• Essa consulta recupera somente informações do momento no qual o registro estava habilitado.
Se você estiver usando logs de acesso ao servidor do Amazon S3, consulte Identificar solicitações de
acesso a objetos usando logs de acesso do Amazon S3 (p. 854).
1. Forneça o nome do bucket de destino. Esse bucket é onde você deseja que o Amazon S3 salve os logs
de acesso como objetos. Os buckets de origem e de destino devem estar na mesma região da AWS e
ser de propriedade da mesma conta.
Os logs podem ser entregues a qualquer bucket que você possui e que esteja na mesma região que
o bucket de origem, incluindo o próprio bucket de origem. No entanto, para um gerenciamento de logs
mais simples, recomendamos que você salve logs de acesso em um bucket diferente.
Quando o bucket de origem e o bucket de destino são os mesmos, logs adicionais são criados para
os logs que forem gravados no bucket. Isso pode não ser ideal porque pode resultar em um pequeno
aumento na cobrança do armazenamento. Além disso, com os logs adicionais sobre logs, pode ser mais
difícil encontrar o log que você está procurando. Se você optar por salvar os logs de acesso no bucket
de origem, recomendamos que você especifique um prefixo para todas as chaves de objeto do log, para
que os nomes do objeto comecem com uma string em comum e seja fácil identificar esses objetos.
Prefixos de chaves também são úteis para distinguir entre buckets de origem quando vários buckets são
registrados em log no mesmo bucket de origem.
2. (Opcional) Atribua um prefixo a todas as chaves de objeto de log do Amazon S3. O prefixo facilita a
localização de objetos de log. Por exemplo, se você especificar o valor do prefixo logs/, cada objeto de
log criado pelo Amazon S3 começará com o prefixo logs/ em sua chave.
logs/2013-11-01-21-32-16-E568B2907131C0C0
O prefixo de chaves também ajuda ao excluir os logs. Por exemplo, defina uma regra de configuração
do ciclo de vida para que o Amazon S3 exclua objetos com um prefixo de chave específico. Para obter
mais informações, consulte Exclusão de arquivos de log do Amazon S3 (p. 850).
3. (Opcional) Defina permissões para que outros possam acessar os logs gerados. Por padrão, somente
o proprietário do bucket sempre tem acesso completo aos objetos de log. Para obter mais informações,
consulte Identity and Access Management no Amazon S3 (p. 252).
TargetPrefixYYYY-mm-DD-HH-MM-SS-UniqueString/
Na chave, YYYY, mm, DD, HH, MM e SS são os dígitos do ano, mês, dia, hora, minuto e segundos
(respectivamente) quando o arquivo de log foi entregue. Essas datas e horas estão em Tempo Universal
Coordenado (UTC).
Um arquivo de log entregue em um horário específico pode conter registros gravados a qualquer momento
até aquele horário. Não há como saber se todos os logs de um certo intervalo de tempo foram entregues
ou não.
O componente UniqueString da chave existe para impedir que arquivos sejam substituídos por outros.
Ele não tem significado, e o software de processamento de logs deve ignorá-lo.
O Amazon S3 usa uma conta especial de entrega de logs, chamada de grupo de Entrega de logs, para
gravar logs de acessos. Essas gravações estão sujeitas a restrições usuais de controle de acesso. Você
deve conceder ao grupo de Entrega de logs a permissão para gravação no bucket de destino adicionando
uma entrada de concessão na lista de controle de acesso (ACL) do bucket.
Se você usar o console do Amazon S3 para habilitar o registro em log em um bucket, o console habilitará
o registro em log no bucket de origem e atualizará a ACL no bucket de destino para conceder a permissão
para gravação ao grupo de Entrega de logs. Para obter mais informações, consulte Visão geral da lista de
controle de acesso (ACL) (p. 440).
A integralidade e a pontualidade do registro em log do servidor não são garantidas. O registro de log de
uma solicitação específica pode ser entregue muito depois de a solicitação ter sido realmente processada
ou pode nem ser entregue. A finalidade dos logs do servidor é proporcionar uma ideia da natureza do
tráfego no bucket. É raro perder registros de log, mas o log dos servidores não tem como objetivo ser uma
contabilidade completa de todas as solicitações.
Levando em conta a natureza de melhor esforço do recurso de registro em log do servidor, os relatórios
de uso disponíveis no portal da AWS (relatórios do Gerenciamento de custos e faturamento no Console de
Gerenciamento da AWS) podem incluir uma ou mais solicitações de acesso que não aparecem em um log
do servidor entregue.
o B, alguns logs podem continuar sendo entregues ao bucket A durante a próxima hora, enquanto outros
serão entregues ao novo bucket de destino B. Em todo caso, as novas configurações entrarão em vigor
posteriormente, sem a necessidade de ações adicionais.
Para obter mais informações sobre registro em log e arquivos de log, consulte as seguintes seções:
Tópicos
• Habilitar registro em log de acesso ao servidor do Amazon S3 (p. 835)
• Formato dos logs de acesso ao servidor do Amazon S3 (p. 841)
• Exclusão de arquivos de log do Amazon S3 (p. 850)
• Uso de logs de acesso do Amazon S3 para identificar solicitações (p. 851)
Por padrão, o Amazon S3 não coleta logs de acesso ao servidor. Quando você habilita o registro em log,
o Amazon S3 entrega logs de acesso a um bucket de origem ou de destino de sua escolha. O bucket de
destino deve estar na mesma região da AWS que o bucket de origem e não deve ter uma configuração de
período de retenção.
Um registro do log de acesso contém detalhes sobre as solicitações feitas a um bucket. Essa informação
pode incluir o tipo de solicitação, os recursos que foram especificados na solicitação e a hora e data em
que a solicitação foi processada. Para obter mais informações sobre noções básicas de registro em log,
consulte Registrar em log as solicitações com registro em log de acesso ao servidor (p. 833).
Important
Não há custo adicional para a ativação de registro de acesso ao servidor em um bucket do
Amazon S3. No entanto, todos os arquivos de log que o sistema fornece acumularão as
cobranças normais de armazenamento. Você pode excluir os arquivos de registro a qualquer
momento. Não computamos custo pela transferência de dados na entrega de arquivos de registro,
mas cobramos a taxa normal de transferência de dados pelo acesso aos arquivos de registro.
Você pode habilitar ou desabilitar o registro em log de acesso ao servidor usando o console do Amazon
S3, a API do Amazon S3, a Interface de Linhas de Comando da AWS (AWS CLI) ou os AWS SDKs.
• No Amazon S3, você pode conceder permissão para entregar logs de acesso por meio de listas de
controle de acesso (ACLs) de bucket, mas não por meio da política de bucket.
• Adicionar condições de negação a uma política de bucket pode impedir que o Amazon S3 entregue logs
de acesso.
• Você pode usar a criptografia de bucket padrão no bucket de destino somente se a opção AES256
(SSE-S3) estiver selecionada. A criptografia SSE-KMS não é compatível.
• Não é possível habilitar o Bloqueio de objetos do S3 no bucket de destino.
Usar o console do S3
1. Faça login no Console de Gerenciamento da AWS e abra o console do Amazon S3 em https://
console.aws.amazon.com/s3/.
2. Na lista Buckets, escolha o nome do bucket para o qual você deseja habilitar o log de acesso ao
servidor.
3. Escolha Propriedades.
4. Na seção Server access logging (Registro de acesso ao servidor) escolha Edit (Editar).
5. Em Server access logging (Registro de acesso ao servidor), selecione Enable (Ativar).
6. Em Target bucket (Bucket de destino), insira o nome do bucket que você deseja que receba os objetos
de registro em log.
O bucket de destino deve estar na mesma região do bucket de origem e não deve ter uma
configuração de período de retenção.
7. Selecione Save changes.
Ao habilitar o registro em log em um bucket, o console habilita o log no bucket de origem e adiciona
uma concessão na lista de controle de acesso (ACL) do bucket de destino, concedendo ao grupo de
Entrega de logs a permissão para gravação.
Você pode visualizar os logs no bucket de destino. Depois de habilitar o registro em log de acesso
ao servidor, pode demorar algumas horas antes que os logs sejam entregues no bucket de destino.
Para obter mais informações sobre como e quando os logs são entregues, consulte Como os logs são
entregues? (p. 834).
Para obter mais informações, consulte Visualização das propriedades de um bucket do S3 (p. 35).
O exemplo a seguir identifica logbucket como o bucket de destino e logs/ como o prefixo.
<BucketLoggingStatus xmlns="http://doc.s3.amazonaws.com/2006-03-01">
<LoggingEnabled>
<TargetBucket>logbucket</TargetBucket>
<TargetPrefix>logs/</TargetPrefix>
</LoggingEnabled>
</BucketLoggingStatus>
Os objetos de log são gravados e pertencem à conta de Entrega de logs. O proprietário do bucket tem
permissões totais aos objetos de log. Além disso, você tem a opção de conceder permissões a outros
usuários para que eles possam acessar os logs. Para obter mais informações, consulte PUT Bucket
Logging (Registro em log de PUT Bucket).
O Amazon S3 também fornece a API GET Bucket logging (Registro em log de GET Bucket) para recuperar
a configuração de log em um bucket. Para excluir a configuração de registro, envie a solicitação de registro
em log do PUT Bucket com um BucketLoggingStatus vazio.
<BucketLoggingStatus xmlns="http://doc.s3.amazonaws.com/2006-03-01">
</BucketLoggingStatus>
Use a API do Amazon S3 ou as bibliotecas wrapper do SDK da AWS para habilitar o log em um bucket.
O exemplo C# a seguir habilita o log em um bucket. Você deve criar dois buckets, um de origem e um
de destino. Primeiro, o exemplo concede as permissões necessárias ao grupo de Entrega de logs para
gravação de logs no bucket de destino e, em seguida, habilita o registro em log no bucket de origem.
Example
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class ServerAccesLoggingTest
{
private const string bucketName = "*** bucket name for which to enable logging
***";
private const string targetBucketName = "*** bucket name where you want access logs
stored ***";
private const string logObjectKeyPrefix = "Logs";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 client;
// Send request.
var putBucketLoggingRequest = new PutBucketLoggingRequest
{
BucketName = bucketName,
LoggingConfig = loggingConfig
};
await client.PutBucketLoggingAsync(putBucketLoggingRequest);
}
}
}
• 1-awsexamplebucket1-us-east-1
• 2-awsexamplebucket1-us-east-1
• 3-awsexamplebucket1-us-east-1
• 1-awsexamplebucket1-us-west-2
• 2-awsexamplebucket1-us-west-2
• awsexamplebucket1-logs-us-east-1
• awsexamplebucket1-logs-us-west-2
2. Depois, ative os logs de acesso do Amazon S3 da seguinte forma:
• Usar o Habilitar registro em log de acesso ao servidor do Amazon S3 (p. 835) ou,
• Uso do comando put-bucket-logging da AWS CLI para habilitar programaticamente os logs de
acesso em um bucket usando os seguintes comandos:
Logging.json é um documento JSON na pasta atual que contém a política de registro em log:
{
"LoggingEnabled": {
"TargetBucket": "awsexamplebucket1-logs",
"TargetPrefix": "awsexamplebucket1/",
"TargetGrants": [
{
"Grantee": {
"Type": "AmazonCustomerByEmail",
"EmailAddress": "[email protected]"
},
"Permission": "FULL_CONTROL"
}
]
}
}
Note
loggingBucket='awsexamplebucket1-logs'
region='us-west-2'
rm logging.json
echo "Complete"
Note
Isso somente funcionará se todos os buckets estiverem na mesma região. Se você tiver
buckets em várias regiões, deverá ajustar o script.
Se você habilitar o log de acesso ao servidor usando o console do S3, o S3 atualizará automaticamente
sua ACL do bucket para conceder acesso ao Grupo de entrega de log do S3. Você não precisa conceder
manualmente permissões da ACL. Para obter informações sobre ACLs, consulte Visão geral da lista de
controle de acesso (ACL) (p. 440).
Os exemplos da AWS CLI e do AWS SDK nesta página incluem etapas para conceder permissões da ACL
ao Grupo de entrega de log do S3. Se você usar esses exemplos, não precisará conceder manualmente
permissões da ACL ao Grupo de entrega de log.
Se você habilitar o log de acesso ao servidor programaticamente e não especificar permissões da ACL,
você deverá conceder as permissões s3:GetObjectAcl e s3:PutObject para este grupo adicionando
as concessões WRITE e READ_ACP à lista de controle de acesso (ACL) do bucket de destino. O grupo de
Entrega de logs é representado pelo seguinte URL.
http://acs.amazonaws.com/groups/s3/LogDelivery
Para conceder as permissões WRITE e READ_ACP (leitura da ACL), adicione as seguintes concessões à
ACL do bucket de destino.
<Grant>
<Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group">
<URI>http://acs.amazonaws.com/groups/s3/LogDelivery</URI>
</Grantee>
<Permission>WRITE</Permission>
</Grant>
<Grant>
<Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group">
<URI>http://acs.amazonaws.com/groups/s3/LogDelivery</URI>
</Grantee>
<Permission>READ_ACP</Permission>
</Grant>
Para obter exemplos de adição de concessões da ACL de forma programada, consulte Configurar
ACLs (p. 448).
Os arquivos de log de acesso ao servidor consistem em uma sequência de registros de log delimitados
por novas linhas. Cada registro do log representa uma solicitação e consiste em campos delimitados por
espaço.
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be
awsexamplebucket1 [06/Feb/2019:00:00:38 +0000] 192.0.2.3
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be 3E57427F3EXAMPLE
REST.GET.VERSIONING - "GET /awsexamplebucket1?versioning HTTP/1.1" 200 - 113 - 7 -
"-" "S3Console/0.4" - s9lzHYrFp76ZVxRcpX9+5cjAnEH2ROuNkd2BHfIa6UkFVdtjf5mKR3/eTPFvsiP/
XV/VLi31234= SigV2 ECDHE-RSA-AES128-GCM-SHA256 AuthHeader awsexamplebucket1.s3.us-
west-1.amazonaws.com TLSV1.1
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be
awsexamplebucket1 [06/Feb/2019:00:00:38 +0000] 192.0.2.3
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be 891CE47D2EXAMPLE
REST.GET.LOGGING_STATUS - "GET /awsexamplebucket1?logging HTTP/1.1" 200 - 242
- 11 - "-" "S3Console/0.4" - 9vKBE6vMhrNiWHZmb2L0mXOcqPGzQOI5XLnCtZNPxev+Hf
+7tpT6sxDwDty4LHBUOZJG96N1234= SigV2 ECDHE-RSA-AES128-GCM-SHA256 AuthHeader
awsexamplebucket1.s3.us-west-1.amazonaws.com TLSV1.1
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be
awsexamplebucket1 [06/Feb/2019:00:00:38 +0000] 192.0.2.3
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be A1206F460EXAMPLE
REST.GET.BUCKETPOLICY - "GET /awsexamplebucket1?policy HTTP/1.1" 404
NoSuchBucketPolicy 297 - 38 - "-" "S3Console/0.4" - BNaBsXZQQDbssi6xMBdBU2sLt
+Yf5kZDmeBUP35sFoKa3sLLeMC78iwEIWxs99CRUrbS4n11234= SigV2 ECDHE-RSA-AES128-GCM-SHA256
AuthHeader awsexamplebucket1.s3.us-west-1.amazonaws.com TLSV1.1
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be
awsexamplebucket1 [06/Feb/2019:00:01:00 +0000] 192.0.2.3
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be 7B4A0FABBEXAMPLE
REST.GET.VERSIONING - "GET /awsexamplebucket1?versioning HTTP/1.1" 200 - 113 - 33 - "-"
"S3Console/0.4" - Ke1bUcazaN1jWuUlPJaxF64cQVpUEhoZKEG/hmy/gijN/I1DeWqDfFvnpybfEseEME/
u7ME1234= SigV2 ECDHE-RSA-AES128-GCM-SHA256 AuthHeader awsexamplebucket1.s3.us-
west-1.amazonaws.com TLSV1.1
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be
awsexamplebucket1 [06/Feb/2019:00:01:57 +0000] 192.0.2.3
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be
DD6CC733AEXAMPLE REST.PUT.OBJECT s3-dg.pdf "PUT /awsexamplebucket1/
s3-dg.pdf HTTP/1.1" 200 - - 4406583 41754 28 "-" "S3Console/0.4" -
Note
Qualquer campo pode ser definido como - para indicar que os dados eram desconhecidos ou
estavam indisponíveis ou que o campo não era aplicável para essa solicitação.
Tópicos
• Campos de registro de log (p. 842)
• Registro em log adicional para operações de cópia (p. 846)
• Informações personalizadas do log de acesso (p. 850)
• Considerações de programação para o formato do log de acesso ao servidor extensível (p. 850)
Proprietário do bucket
Exemplo de registro
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be
Bucket
O nome do bucket no qual a solicitação foi processada. Se o sistema receber uma solicitação
malformada e não puder determinar o bucket, a solicitação não aparecerá em nenhum log de acesso
ao servidor.
Exemplo de registro
awsexamplebucket1
Tempo
O horário em que a solicitação foi recebida. As datas e horas estão em Tempo Universal Coordenado
(UTC). O formato que usa a terminologia strftime() é o seguinte: [%d/%b/%Y:%H:%M:%S %z]
Exemplo de registro
[06/Feb/2019:00:00:38 +0000]
IP remoto
Exemplo de registro
192.0.2.3
Solicitante
Exemplo de registro
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be
ID da solicitação
Uma string gerada pelo Amazon S3 para identificar exclusivamente cada solicitação.
Exemplo de registro
3E57427F33A59F07
Operação
Exemplo de registro
REST.PUT.OBJECT
Chave
A parte “chave” da solicitação, codificada pela URL ou “-”, se a operação não usar um parâmetro de
chave.
Exemplo de registro
/photos/2019/08/puppy.jpg
Request-URI
Entrada de exemplo
Status HTTP
Exemplo de registro
200
Código de erro
Exemplo de registro
NoSuchBucket
Bytes enviados
O número de bytes de resposta enviados excluindo a sobrecarga do protocolo HTTP ou “-”, se zero.
Exemplo de registro
2662992
Tamanho do objeto
Exemplo de registro
3462992
Tempo total
Exemplo de registro
70
Tempo de retorno
O número de milissegundos que o Amazon S3 gastou processando a solicitação. Esse valor é medido
do momento do recebimento do último byte da solicitação até o momento em que o primeiro byte da
resposta foi enviado.
Exemplo de registro
10
Referer
O valor do cabeçalho do indicador HTTP, se presente. Os agentes do usuário HTTP (por exemplo,
navegadores) normalmente definem esse cabeçalho como o URL da página de vinculação ou
incorporação ao fazer uma solicitação.
Exemplo de registro
"http://www.amazon.com/webservices"
Agente de usuário
Exemplo de registro
"curl/7.15.1"
Id da versão
Exemplo de registro
3HL4kqtJvjVBH40Nrjfkd
ID do host
Exemplo de registro
s9lzHYrFp76ZVxRcpX9+5cjAnEH2ROuNkd2BHfIa6UkFVdtjf5mKR3/eTPFvsiP/XV/VLi31234=
Versão do Signature
A versão do Signature, SigV2 ou SigV4, que foi usada para autenticar a solicitação ou - para
solicitações não autenticadas.
Exemplo de registro
SigV2
Pacote de criptografia
A codificação Secure Sockets Layer (SSL) que foi negociada para a solicitação HTTPS ou - para
HTTP.
Exemplo de registro
ECDHE-RSA-AES128-GCM-SHA256
Tipo de autenticação
Exemplo de registro
AuthHeader
Cabeçalho de host
Exemplo de registro
s3.us-west-2.amazonaws.com
Algumas regiões mais antigas oferecem suporte a endpoints legados. Você poderá ver esses
endpoints nos logs de acesso ao servidor ou nos logs do AWS CloudTrail. Para obter mais
informações, consulte Endpoints legados (p. 1030). Para obter uma lista completa de regiões e
endpoints do Amazon S3, consulte Endpoints e cotas do Amazon S3 na Referência geral da AWS.
Versão do TLS
A versão do Transport Layer Security (TLS) negociada pelo cliente. O valor é um dos seguintes:
TLSv1, TLSv1.1, TLSv1.2 ou - se o TLS não foi usado.
Exemplo de registro
TLSv1.2
Proprietário do bucket
O ID canônico do usuário do bucket que armazena o objeto que está sendo copiado. O ID de usuário
canônico é uma outra forma do ID da conta da AWS. Para obter mais informações sobre IDs de
usuário canônico, consulte Identificadores de conta da AWS na Referência geral da AWS. Para obter
informações sobre como encontrar o ID de usuário canônico da conta, consulte Como encontrar o ID
de usuário canônico da conta da AWS.
Exemplo de registro
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be
Bucket
Exemplo de registro
awsexamplebucket1
Tempo
O horário em que a solicitação foi recebida. As datas e horas estão em Tempo Universal Coordenado
(UTC). O formato que usa a terminologia strftime() é o seguinte: [%d/%B/%Y:%H:%M:%S %z]
Exemplo de registro
[06/Feb/2019:00:00:38 +0000]
IP remoto
Exemplo de registro
192.0.2.3
Solicitante
Exemplo de registro
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be
ID da solicitação
Uma string gerada pelo Amazon S3 para identificar exclusivamente cada solicitação.
Exemplo de registro
3E57427F33A59F07
Operação
Exemplo de registro
REST.COPY.OBJECT_GET
Chave
A “chave” do objeto que está sendo copiado ou “-”, se a operação não usar um parâmetro de chave.
Exemplo de registro
/photos/2019/08/puppy.jpg
Request-URI
Exemplo de registro
"GET /awsexamplebucket1/photos/2019/08/puppy.jpg?x-foo=bar"
Status HTTP
Exemplo de registro
200
Código de erro
O Código de erro (p. 1053) do Amazon S3, da parte GET da operação de cópia ou “-”, se nenhum erro
tiver ocorrido.
Exemplo de registro
NoSuchBucket
Bytes enviados
O número de bytes de resposta enviados excluindo a sobrecarga do protocolo HTTP ou “-”, se zero.
Exemplo de registro
2662992
Tamanho do objeto
Exemplo de registro
3462992
Tempo total
Exemplo de registro
70
Tempo de retorno
O número de milissegundos que o Amazon S3 gastou processando a solicitação. Esse valor é medido
do momento do recebimento do último byte da solicitação até o momento em que o primeiro byte da
resposta foi enviado.
Exemplo de registro
10
Referer
O valor do cabeçalho do indicador HTTP, se presente. Os agentes do usuário HTTP (por exemplo,
navegadores) normalmente definem esse cabeçalho como o URL da página de vinculação ou
incorporação ao fazer uma solicitação.
Exemplo de registro
"http://www.amazon.com/webservices"
Agente de usuário
Exemplo de registro
"curl/7.15.1"
Id da versão
O ID da versão do objeto que está sendo copiado ou "-", se o cabeçalho x-amz-copy-source não
especificou um parâmetro versionId como parte da origem da cópia.
Entrada de exemplo
3HL4kqtJvjVBH40Nrjfkd
ID do host
Exemplo de registro
s9lzHYrFp76ZVxRcpX9+5cjAnEH2ROuNkd2BHfIa6UkFVdtjf5mKR3/eTPFvsiP/XV/VLi31234=
Versão do Signature
A versão do Signature, SigV2 ou SigV4, que foi usada para autenticar a solicitação ou - para
solicitações não autenticadas.
Exemplo de registro
SigV2
Pacote de criptografia
A codificação Secure Sockets Layer (SSL) que foi negociada para a solicitação HTTPS ou - para
HTTP.
Exemplo de registro
ECDHE-RSA-AES128-GCM-SHA256
Tipo de autenticação
Exemplo de registro
AuthHeader
Cabeçalho de host
Exemplo de registro
s3.us-west-2.amazonaws.com
Algumas regiões mais antigas oferecem suporte a endpoints legados. Você pode ver esses endpoints
nos logs de acesso ao servidor ou em logs do CloudTrail. Para obter mais informações, consulte
Endpoints legados (p. 1030). Para obter uma lista completa de regiões e endpoints do Amazon S3,
consulte Endpoints e cotas do Amazon S3 na Referência geral da AWS.
Versão do TLS
A versão do Transport Layer Security (TLS) negociada pelo cliente. O valor é um dos seguintes:
TLSv1, TLSv1.1, TLSv1.2 ou - se o TLS não foi usado.
Exemplo de registro
TLSv1.2
Você pode definir uma configuração de ciclo de vida para um subconjunto de objetos no seu bucket do S3
usando um prefixo compartilhado (ou seja, objetos com nomes que começam com uma string em comum).
Se você especificou um prefixo na sua configuração do registro em log de acesso ao servidor, defina uma
regra de configuração do ciclo de vida para excluir objetos de log com esse prefixo.
Por exemplo, se os seus objetos de log têm o prefixo logs/, você pode definir uma regra de configuração
do ciclo de vida para excluir todos os objetos no bucket com o prefixo /logs após um período
especificado.
Para obter mais informações sobre a configuração do ciclo de vida, consulte Gerenciando seu ciclo de vida
de armazenamento (p. 569).
Para obter mais informações sobre o registro em log de acesso ao servidor, consulte Registrar em log as
solicitações com registro em log de acesso ao servidor (p. 833).
• Recomendamos que você use eventos de dados do AWS CloudTrail em vez de logs de acesso
do Amazon S3. Os eventos de dados do CloudTrail são mais fáceis de configurar e contêm
mais informações. Para obter mais informações, consulte Identificar solicitações do Amazon S3
usando o CloudTrail (p. 826).
• Dependendo de quantas solicitações de acesso você receber, poderá ser necessário mais
recursos ou tempo para analisar seus logs.
Tópicos
• Consultar logs de acesso para solicitações usando o Amazon Athena (p. 851)
• Identificar solicitações do Signature versão 2 usando logs de acesso do Amazon S3 (p. 853)
• Identificar solicitações de acesso a objetos usando logs de acesso do Amazon S3 (p. 854)
O Amazon S3 armazena logs de acesso ao servidor como objetos em um bucket do S3. Muitas vezes, é
mais fácil usar uma ferramenta que possa analisar os logs no Amazon S3. O Athena oferece suporte à
análise de objetos do S3 e pode ser usado para consultar logs de acesso do Amazon S3.
Example
O exemplo a seguir mostra como você pode consultar os logs de acesso ao servidor do Amazon S3 no
Amazon Athena.
Note
Note
É uma prática recomendada criar o banco de dados na mesma região da AWS que a do
bucket do S3.
3. No Query Editor, execute um comando semelhante ao seguinte para criar um esquema de tabela
no banco de dados criado na etapa 2. Os valores de tipo de dados STRING e BIGINT são as
propriedades do log de acesso. É possível consultar essas propriedades no Athena. Para LOCATION,
insira o bucket do S3 e o caminho do prefixo conforme indicado anteriormente.
No painel Results (Resultados), você deve ver dados dos logs de acesso ao servidor, como
bucketowner, bucket, requestdatetime e assim por diante. Isso significa que você criou a tabela
do Athena com êxito. Agora você pode consultar os logs de acesso ao servidor do Amazon S3.
Example : Mostre quem excluiu um objeto e quando (timestamp, endereço IP e usuário IAM)
Example : Mostre todas as operações que foram realizadas por um usuário do IAM
SELECT *
FROM s3_access_logs_db.mybucket_logs
WHERE requester='arn:aws:iam::123456789123:user/user_name';
SELECT *
FROM s3_access_logs_db.mybucket_logs
WHERE Key='prefix/images/picture.jpg'
AND parse_datetime(RequestDateTime,'dd/MMM/yyyy:HH:mm:ss Z')
BETWEEN parse_datetime('2017-02-18:07:00:00','yyyy-MM-dd:HH:mm:ss')
AND parse_datetime('2017-02-18:08:00:00','yyyy-MM-dd:HH:mm:ss');
Note
Para reduzir o tempo de retenção do log, você pode criar uma política de ciclo de vida do Amazon
S3 para o bucket de logs de acesso ao servidor. Configure a política de ciclo de vida para remover
os arquivos de log periodicamente. Fazer isso reduz a quantidade de dados que o Athena analisa
para cada consulta. Para obter mais informações, consulte Definir a configuração do ciclo de vida
em um bucket (p. 575).
• Recomendamos que você use eventos de dados do AWS CloudTrail em vez de logs de acesso
do Amazon S3. Os eventos de dados do CloudTrail são mais fáceis de configurar e contêm
mais informações. Para obter mais informações, consulte Identificar solicitações do Amazon S3
Signature versão 2 usando o CloudTrail (p. 828).
Example : mostrar todos os solicitantes que estão enviando tráfego do Signature versão 2
O exemplo de consulta do Amazon Athena a seguir mostra como obter todas as solicitações de objeto PUT
para o Amazon S3 a partir do log de acesso ao servidor.
Example : mostrar todos os solicitantes que estão enviando solicitações de objeto PUT em um
determinado período
O exemplo de consulta do Amazon Athena a seguir mostra como obter todas as solicitações de objeto
GET para o Amazon S3 a partir do log de acesso ao servidor.
Example : mostrar todos os solicitantes que estão enviando solicitações de objeto GET em um
determinado período
O exemplo de consulta do Amazon Athena a seguir mostra como obter todas as solicitações anônimas ao
seu bucket do S3 do log de acesso ao servidor.
Example : mostrar todos os solicitantes anônimos que estão fazendo solicitações a um bucket em
um determinado período
Note
Quando ativadas, as métricas de solicitações são relatadas para todas as operações de objeto. Por
padrão, essas métricas de 1 minuto estão disponíveis no nível do bucket do Amazon S3. Também é
possível definir um filtro para as métricas coletadas usando um prefixo compartilhado ou uma tag de
objeto. Isso permite que você alinhe filtros de métricas para aplicativos de negócios, fluxos de trabalho
ou organizações internas específicos.
• Métricas de replicação: monitore o número total de operações de API do S3 que estão pendentes de
replicação, o tamanho total de objetos com replicação pendente e o tempo máximo de replicação para
a região de destino. As regras de replicação com Controle de tempo de replicação do S3 (S3 RTC) ou
métricas de replicação do S3 habilitadas publicarão as métricas de replicação.
Para obter mais informações, consulte Monitoramento do progresso com métricas de replicação e
notificações de eventos do Amazon S3 (p. 663) ou Atendimento aos requisitos de conformidade usando
o Controle do tempo de replicação do S3 (S3 RTC) (p. 665).
Todas as estatísticas do CloudWatch ficam retidas por um período de 15 meses, para que você possa
acessar informações históricas e obter uma perspectiva melhor sobre como o serviço ou o aplicação Web
estão se saindo. Para obter mais informações, consulte O que é o Amazon CloudWatch? no Guia do
usuário do Amazon CloudWatch.
Tópicos
Métricas e dimensões
As métricas e dimensões de armazenamento que o Amazon S3 envia para o CloudWatch estão listadas
abaixo.
Tópicos
• Métricas de armazenamento diárias do Amazon S3 CloudWatch para buckets (p. 856)
• Métricas de solicitação do Amazon S3 CloudWatch (p. 857)
• Métricas de replicação do Amazon S3 CloudWatch (p. 859)
• Métricas do Amazon S3 em Outposts CloudWatch (p. 860)
• Dimensões do Amazon S3 CloudWatch (p. 861)
Métrica Descrição
Unidade: bytes
Métrica Descrição
Filtros de tipo de armazenamento válidos: AllStorageTypes (consulte a
dimensão StorageType)
Unidade: contagem
Métrica Descrição
Unidade: contagem
Unidade: contagem
Unidade: contagem
Unidade: contagem
HeadRequests O número de solicitações HTTP HEAD feitas para um bucket do Amazon S3.
Unidade: contagem
PostRequests O número de solicitações HTTP POST feitas para um bucket do Amazon S3.
Métrica Descrição
Unidade: contagem
Unidade: contagem
Unidade: bytes
Estatísticas válidas: média (bytes por solicitação), soma (bytes por período),
contagem de amostras, mín., máx. (o mesmo que p100), qualquer percentil
entre p0,0 e p99,9
Unidade: bytes
Estatísticas válidas: média (bytes por solicitação), soma (bytes por período),
contagem de amostras, mín., máx. (o mesmo que p100), qualquer percentil
entre p0,0 e p99,9
Unidade: contagem
Unidade: bytes
Estatísticas válidas: média (bytes por solicitação), soma (bytes por período),
contagem de amostras, mín., máx. (o mesmo que p100), qualquer percentil
entre p0,0 e p99,9
Unidade: bytes
Estatísticas válidas: média (bytes por solicitação), soma (bytes por período),
contagem de amostras, mín., máx. (o mesmo que p100), qualquer percentil
entre p0,0 e p99,9
Métrica Descrição
Unidade: contagem
Unidade: contagens
Unidade: milissegundos
Estatísticas válidas: média, soma, mín., máx. (o mesmo que p100), contagem
de amostras, qualquer percentil entre p0,0 e p100
TotalRequestLatency O tempo por solicitação decorrido do primeiro byte recebido até o último byte
enviado para um bucket do Amazon S3. Isso inclui o tempo necessário para
receber o corpo da solicitação e enviar o corpo da resposta, que não está
incluído em FirstByteLatency.
Unidade: milissegundos
Estatísticas válidas: média, soma, mín., máx. (o mesmo que p100), contagem
de amostras, qualquer percentil entre p0,0 e p100
Você pode habilitar alarmes para suas métricas de replicação no Amazon CloudWatch. Quando
você configurar alarmes para as métricas de replicação, defina o campo Missing data treatment
(Tratamento de dados ausentes) como Treat missing data as ignore (maintain the alarm state)
(Ignorar dados ausentes [manter o estado de alarme]).
Métrica Descrição
Unidade: segundos
Unidade: bytes
Unidade: contagens
Métrica Descrição
Unidade: bytes
Período: 5 minutos
Unidade: bytes
Período: 5 minutos
Unidade: contagens
Período: 5 minutos
Dimensão Descrição
BucketName Essa dimensão filtra os dados que você solicita somente para o
bucket identificado.
Dimensão Descrição
• IntDAAS3ObjectOverhead - para cada objeto na classe
de armazenamento INTELLIGENT_TIERING no nível Acesso
de arquivamento profundo, o Amazon S3 adiciona 8 KB de
armazenamento para índice e metadados relacionados. Esses
dados extras são necessários para identificar e recuperar seu
objeto. Você é cobrado pelas taxas de STANDARD nesse
armazenamento adicional.
• OneZoneIAStorage: o número de bytes usados para objetos
na classe de armazenamento OneZone-Infrequent Access
(ONEZONE_IA).
• OneZoneIASizeOverhead – o número de bytes usados para
objetos menores de 128 KB na classe de armazenamento
ONEZONE_IA.
• ReducedRedundancyStorage – o número de bytes usados para
objetos na classe Reduced Redundancy Storage (RRS).
• GlacierStorage – o número de bytes usados para objetos na
classe de armazenamento GLACIER.
• GlacierStagingStorage - O número de bytes usados
para partes de objetos Multipart antes de a solicitação
CompleteMultipartUpload seja realizada em objetos na classe de
armazenamento GLACIER.
• GlacierObjectOverhead - Para cada objet arquivado, o
GLACIER adiciona 32 KB de armazenamento para o índice e
metadados relacionados. Esses dados extras são necessários
para identificar e recuperar seu objeto. Você é cobrado pelas taxas
do GLACIER por esse armazenamento adicional.
• GlacierS3ObjectOverhead - Para cada objeto arquivado no
GLACIER, o Amazon S3 usa 8 KB de armazenamento para o
nome do objeto e outros metadados. Você é cobrado pelas taxas
de STANDARD nesse armazenamento adicional.
• DeepArchiveStorage: o número de bytes usados para objetos
na classe de armazenamento S3 Glacier Deep Archive.
• DeepArchiveObjectOverhead: para cada objeto arquivado,
o S3 Glacier Deep Archive adiciona 32 KB de armazenamento
para o índice e metadados relacionados. Esses dados extras
são necessários para identificar e recuperar seu objeto. Você
é cobrado pelas taxas do S3 Glacier Deep Archive nesse
armazenamento adicional.
• DeepArchiveS3ObjectOverhead: para cada objeto arquivado
no S3 Glacier Deep Archive, o Amazon S3 usa 8 KB de
armazenamento para o nome do objeto e outros metadados. Você
é cobrado pelas taxas de STANDARD nesse armazenamento
adicional.
• DeepArchiveStagingStorage: o número de bytes usados
para partes de objetos Multipart antes de a solicitação
CompleteMultipartUpload seja realizada em objetos na classe de
armazenamento S3 Glacier Deep Archive.
Dimensão Descrição
{
"Datapoints": [
{
"Timestamp": "2016-10-19T00:00:00Z",
"Average": 1025328.0,
"Unit": "Bytes"
}
],
"Label": "BucketSizeBytes"
}
Usar o console do S3
Como exibir métricas usando o console do CloudWatch
Ver uma lista de métricas válidas armazenadas para sua conta da AWS usando a CLI da AWS
Se quiser obter as métricas de solicitações do CloudWatch para objetos em um bucket, será necessário
criar uma configuração de métricas para o bucket. Para obter mais informações, consulte Criar uma
configuração de métricas do CloudWatch para todos os objetos em seu bucket (p. 865).
Também é possível definir um filtro para as métricas coletadas usando um prefixo compartilhado ou tags
de objeto. Isso permite que você alinhe filtros de métricas para aplicativos de negócios, fluxos de trabalho
ou organizações internas específicos. Para obter mais informações, consulte Criar uma configuração de
métricas que filtre por prefixo ou tag de nome de chave de objeto (p. 867).
Para obter mais informações sobre as métricas do CloudWatch que estão disponíveis e as diferenças entre
métricas de armazenamento e métricas de solicitação, consulte Monitoramento de métricas com o Amazon
CloudWatch (p. 855).
A integridade e pontualidade das métricas não são garantidas. O ponto de dados para uma solicitação
específica pode ser retornado com um timestamp posterior à solicitação processada. O ponto de dados de
um minuto pode ser atrasado antes de ser disponibilizado pelo CloudWatch ou pode nem ser entregue. As
métricas de solicitação do CloudWatch lhe dão uma ideia da natureza do tráfego em seu bucket em tempo
quase real. Não se trata de uma contabilidade completa de todas as solicitações.
Devido à natureza de melhor esforço deste recurso, os relatórios disponíveis no Painel de faturamento
e de gerenciamento de custo podem incluir uma ou mais solicitações de acesso que não aparecem nas
métricas do bucket.
Para obter mais informações sobre como trabalhar com métricas do CloudWatch no Amazon S3, consulte
os tópicos a seguir.
Tópicos
• Criar uma configuração de métricas do CloudWatch para todos os objetos em seu bucket (p. 865)
• Criar uma configuração de métricas que filtre por prefixo ou tag de nome de chave de objeto (p. 867)
• Excluir um filtro de métricas (p. 868)
Os procedimentos neste tópico mostram como criar uma configuração para todos os objetos em seu
bucket. Para criar uma configuração que filtre por tag de objeto ou prefixo, consulte Criar uma configuração
de métricas que filtre por prefixo ou tag de nome de chave de objeto (p. 867).
Existem três tipos de métricas do Amazon CloudWatch para o Amazon S3: métricas de armazenamento,
métricas de solicitação e métricas de replicação. As métricas de armazenamento são relatadas uma vez
por dia e fornecidas para todos os clientes sem qualquer custo adicional. As métricas de solicitação estão
disponíveis em intervalos de um minuto após alguma latência para processar. As métricas de solicitação
são cobradas na taxa padrão do CloudWatch. Você deve optar por métricas de solicitação configurando-as
no console ou usando a API do Amazon S3.
Para obter mais informações sobre métricas do CloudWatch para o Amazon S3, consulte Monitoramento
de métricas com o Amazon CloudWatch (p. 855).
Você pode adicionar configurações de métricas a um bucket usando o console do Amazon S3, a Interface
de Linhas de Comando da AWS (AWS CLI) ou a API REST do Amazon S3.
Usar o console do S3
Nomes podem conter apenas letras, números, pontos, traços e sublinhados. Recomendamos usar o
nome EntireBucket para um filtro que se aplica a todos os objetos.
8. Em Choose a filter scope (Escolher um escopo de filtro), escolha This filter applies to all objects in the
bucket (Este filtro se aplica a todos os objetos no bucket).
Você também pode definir um filtro para que as métricas sejam coletadas e relatadas apenas em um
subconjunto de objetos no bucket. Para obter mais informações, consulte Criar uma configuração de
métricas que filtre por prefixo ou tag de nome de chave de objeto (p. 867).
9. Escolha Create Filter (Criar filtro).
10. Na guia Request metrics (métricas de solicitação), em Filters (Filtros), escolha o filtro que você acabou
de criar.
Após cerca de 15 minutos, o CloudWatch começa a rastrear essas métricas de solicitação. Você pode
vê-las na guia Request metrics (Métricas de solicitação) . Você pode ver gráficos para as métricas no
console do Amazon S3 ou do CloudWatch. As métricas de solicitação são cobradas na taxa padrão do
CloudWatch. Para obter mais informações, consulte Definição de preços do Amazon CloudWatch.
1. Instale e configure a CLI da AWS. Para obter instruções, consulte Instalar, atualizar e desinstalar a
AWS CLI no Guia do usuário da Interface de Linhas de Comando da AWS.
2. Abra um terminal.
3. Execute o comando a seguir para adicionar uma configuração de métricas.
{
"MetricsConfiguration": {
"Filter": {
"Prefix": "prefix1"
},
"Id": "metrics-config-id"
}
}
Você também pode adicionar configurações de métricas de maneira programática com a API REST
do Amazon S3. Para obter mais informações sobre como adicionar e trabalhar com configurações de
métricas, consulte os tópicos a seguir na Referência da API do Amazon Simple Storage Service:
Para obter mais informações sobre métricas do CloudWatch para o Amazon S3, consulte Monitoramento
de métricas com o Amazon CloudWatch (p. 855).
Ao configurar métricas do CloudWatch, você pode criar um filtro para todos os objetos em seu bucket ou
filtrar a configuração em grupos de objetos relacionados em um único bucket. Você pode filtrar objetos
em um bucket para inclusão em uma configuração de métricas baseada em um ou mais dos seguintes
elementos:
• Prefixo de nome de chave de objeto: embora o modelo de dados do Amazon S3 seja uma estrutura
plana, você pode inferir a hierarquia usando um prefixo. O console do Amazon S3 oferece suporte a
esses prefixos com o conceito de pastas. Se você filtrar por prefixo, os objetos com mesmo prefixo serão
incluídos na configuração de métricas.
• Tag: você pode adicionar tags, que são pares de nome chave-valor, aos objetos. As tags ajudam
a encontrar e organizar objetos com facilidade. Você também pode usar tags como um filtro para
configurações de métricas.
Se você especificar um filtro, somente solicitações que operem em objetos únicos podem corresponder ao
filtro e serem incluídas nas métricas relatadas. As solicitações como Excluir vários objetos e solicitações de
List não retornam nenhuma métrica para configurações com filtros.
Para solicitar uma filtragem mais complexa, escolha dois ou mais elementos. Somente os objetos que têm
todos esses elementos são incluídos na configuração de métricas. Se você não definir filtros, todos os
objetos no bucket estão incluídos na configuração de métricas.
Usar o console do S3
Agora você criou um filtro que limita o escopo de métricas de solicitação por tags e prefixos do objeto.
Cerca de 15 minutos após o CloudWatch começar a rastrear essas métricas de solicitação, você
pode ver gráficos para as métricas nos consoles do Amazon S3 e do CloudWatch. As métricas de
solicitação são cobradas na taxa padrão do CloudWatch. Para obter mais informações, consulte
Definição de preços do Amazon CloudWatch.
Você também pode configurar métricas de solicitação no nível de bucket. Para obter mais
informações, consulte Criar uma configuração de métricas do CloudWatch para todos os objetos em
seu bucket (p. 865).
Você também pode adicionar configurações de métricas de maneira programática com a API REST
do Amazon S3. Para obter mais informações sobre como adicionar e trabalhar com configurações de
métricas, consulte os tópicos a seguir na Referência da API do Amazon Simple Storage Service:
Ao excluir um filtro, você não poderá mais usar o filtro para métricas de solicitação. A exclusão de um filtro
não pode ser desfeita.
Para obter informações sobre como criar um filtro de métricas de solicitação, consulte os seguintes tópicos:
• Criar uma configuração de métricas do CloudWatch para todos os objetos em seu bucket (p. 865)
• Criar uma configuração de métricas que filtre por prefixo ou tag de nome de chave de objeto (p. 867)
Usar o console do S3
• Evento de criação de um objeto: o Amazon S3 é compatível com várias APIs para criação de
objetos. Você pode solicitar notificação quando apenas uma API específica for usada (por
exemplo, s3:ObjectCreated:Put). Você também pode usar um caractere curinga (por exemplo,
s3:ObjectCreated:*) para solicitar notificação quando um objeto é criado, independentemente da
API usada.
• Eventos de remoção de objetos: o Amazon S3 é compatível com exclusões de objetos com e sem
versionamento. Para obter mais informações, consulte Usando o controle de versão em buckets do
S3 (p. 516).
Você pode solicitar uma notificação quando um objeto não versionado for excluído
ou quando um objeto com versionamento for excluído permanentemente usando o
tipo de evento s3:ObjectRemoved:Delete. Ou você pode solicitar uma notificação
quando um marcador de exclusão for criado para um objeto com versionamento usando
s3:ObjectRemoved:DeleteMarkerCreated. Você também pode usar um caractere curinga
s3:ObjectRemoved:* para solicitar uma notificação sempre que um objeto for excluído. Para obter
informações sobre como excluir objetos com versionamento, consulte Excluir versões de objetos de um
bucket com versionamento habilitado (p. 534).
• Eventos de restauração de objetos: o Amazon S3 é compatível com a restauração de objetos arquivados
na classe de armazenamento S3 Glacier. Você solicita ser notificado da conclusão da restauração do
Para obter uma lista dos tipos de evento com suporte, consulte Tipos de evento compatíveis (p. 871).
O Amazon SNS é um serviço de mensagens por push flexível e totalmente gerenciado. Usando esse
serviço, você pode enviar mensagens por push a dispositivos móveis ou serviços distribuídos. Com o
SNS você pode publicar uma mensagem uma vez e entregá-la uma ou mais vezes. Atualmente, o SNS
padrão só é permitido como um destino de notificação de eventos do S3, ao passo que o SNS FIFO não
é permitido. Para obter mais informações sobre o SNS, consulte o Amazon SNS.
• Fila do Amazon Simple Queue Service (Amazon SQS)
O Amazon SQS é um serviço de fila de mensagens confiável, escalável e totalmente gerenciado. Você
pode usar o SQS para transmitir qualquer volume de dados sem exigir que outros serviços estejam
sempre disponíveis. Na configuração de notificação você pode solicitar que o Amazon S3 publique
eventos em uma fila do SQS.
No momento, a fila padrão do SQS só é permitida como um destino de notificação de evento do Amazon
S3, enquanto a fila FIFO do SQS não é permitida. Para obter mais informações sobre o Amazon SQS,
consulte Amazon SQS.
• AWS Lambda
O AWS Lambda é um serviço de computação que facilita a criação de aplicações que respondam
rapidamente a novas informações. O AWS Lambda executa seu código em resposta a eventos, como
uploads de imagens, atividades no aplicativo, cliques em sites ou saídas de dispositivos conectados.
Você pode usar o AWS Lambda para estender outros serviços da AWS com lógica personalizada ou
criar seu próprio back-end que opere na escala, performance e segurança da AWS. Com o Lambda, é
possível criar facilmente aplicações distintas orientadas por eventos que são executadas apenas quando
necessário e escalam automaticamente de algumas solicitações por dia a milhares por segundo.
O Lambda pode executar código personalizado em resposta a eventos do bucket do Amazon S3. Você
faz upload do código personalizado no Lambda e cria o que é chamado de função Lambda Quando o
Amazon S3 detecta um evento de um tipo específico (por exemplo, um evento de criação de objeto),
ele pode publicar o evento no AWS Lambda e invocar sua função no Lambda. Em resposta, o Lambda
executa a função.
Warning
Se a notificação for gravada no mesmo bucket que aciona a notificação, isso poderá causar um
loop de execução. Por exemplo, se o bucket acionar uma função do Lambda toda vez que houver
um upload de objeto, e a função fizer upload de um objeto no bucket, a função será acionada
indiretamente. Para evitar isso, use dois buckets ou configure o trigger para só se aplicar a um
prefixo usado em objetos recebidos.
Para obter mais informações e um exemplo de uso de notificações do Amazon S3 com o AWS
Lambda, consulte Usar o AWS Lambda com o Amazon S3 no Guia do desenvolvedor do AWS
Lambda.
Para obter mais informações sobre notificações de eventos do S3, consulte as seguintes seções:
Tópicos
• Tipos e destinos de notificações de evento (p. 871)
• Conceder permissões para publicar mensagens de notificação de vento a um destino (p. 874)
• Habilitar notificações de eventos (p. 876)
• Demonstração: configurar um bucket para notificações (tópico do SNS ou fila do SQS) (p. 879)
• Configurar notificações de eventos usando filtragem de nomes de chave de objeto (p. 884)
• Estrutura de mensagens de evento (p. 889)
Tópicos
• Tipos de evento compatíveis (p. 871)
• Destinos de eventos suportados (p. 872)
s3:ObjectRemoved:DeleteMarkerCreated
s3:ReducedRedundancyLostObject Você pode usar esse tipo de evento para solicitar uma
mensagem de notificação quando o Amazon S3 detectar que
um objeto da classe de armazenamento RRS foi perdido.
s3:Replication:OperationReplicatedAfterThreshold
Você recebe esse evento de notificação quando um objeto
qualificado para replicação usando o S3 Replication Time
Control replica após o limite de 15 minutos.
Você deve conceder ao Amazon S3 permissões para postar mensagens em um tópico do Amazon SNS ou
em uma fila do Amazon SQS. Você também deve conceder permissão ao Amazon S3 para invocar uma
função do AWS Lambda em seu nome. Para obter informações sobre como conceder essas permissões,
consulte Conceder permissões para publicar mensagens de notificação de vento a um destino (p. 874).
O tópico deve estar na mesma região da AWS que o bucket do Amazon S3. Para obter informações
sobre como criar um tópico do Amazon SNS, consulte Conceitos básicos do Amazon SNS no Guia do
desenvolvedor do Amazon Simple Notification Service e nas Perguntas frequentes sobre o Amazon SNS.
Antes de poder usar o tópico do Amazon SNS criado como um destino de notificação de evento, você
precisa do seguinte:
A fila do Amazon SQS deve estar na mesma região que o bucket do Amazon S3. Para obter informações
sobre como criar uma fila do Amazon SQS, consulte O que é o Amazon Simple Queue Service e Conceitos
básicos do Amazon SQS no Guia do desenvolvedor do Amazon Simple Queue Service.
Antes de poder usar a fila do Amazon SQS como um destino de notificação de evento, você precisa do
seguinte:
Função Lambda
Você pode usar o console do AWS Lambda para criar uma função do Lambda que use a infraestrutura
da AWS para executar o código em seu nome. A função do Lambda deve estar na mesma região que
seu bucket do S3. Você também deve ter o nome ou o ARN de uma função do Lambda para configurar a
função do Lambda como um destino de notificação de evento.
Warning
Se a notificação for gravada no mesmo bucket que aciona a notificação, isso poderá causar um
loop de execução. Por exemplo, se o bucket acionar uma função do Lambda toda vez que houver
um upload de objeto, e a função fizer upload de um objeto no bucket, a função será acionada
indiretamente. Para evitar isso, use dois buckets ou configure o trigger para só se aplicar a um
prefixo usado em objetos recebidos.
Para obter mais informações e um exemplo de uso de notificações do Amazon S3 com o AWS
Lambda, consulte Usar o AWS Lambda com o Amazon S3 no Guia do desenvolvedor do AWS
Lambda.
Tópicos
• Conceder permissões para invocar uma função do AWS Lambda (p. 874)
• Conceder permissões para publicar mensagens em um tópico do SNS ou em uma fila do
SQS (p. 874)
Você também pode conceder permissões do Amazon S3 do AWS Lambda para invocar a função do
Lambda. Para obter mais informações, consulte oTutorial: Usar o AWS Lambda com o Amazon S3 no Guia
do desenvolvedor do AWS Lambda.
Para obter um exemplo de como anexar uma política a um tópico do SNS ou a uma fila do SQS, consulte
Demonstração: configurar um bucket para notificações (tópico do SNS ou fila do SQS) (p. 879). Para
obter mais informações sobre permissões, consulte os tópicos a seguir:
{
"Version": "2012-10-17",
"Id": "example-ID",
"Statement": [
{
"Sid": "example-statement-ID",
"Effect": "Allow",
"Principal": {
"Service": "s3.amazonaws.com"
},
"Action": [
"SNS:Publish"
],
"Resource": "arn:aws:sns:Region:account-id:topic-name",
"Condition": {
"ArnLike": { "aws:SourceArn": "arn:aws:s3:::awsexamplebucket1" },
"StringEquals": { "aws:SourceAccount": "bucket-owner-account-id" }
}
}
]
}
{
"Version": "2012-10-17",
"Id": "example-ID",
"Statement": [
{
"Sid": "example-statement-ID",
"Effect": "Allow",
"Principal": {
"Service": "s3.amazonaws.com"
},
"Action": [
"SQS:SendMessage"
],
"Resource": "arn:aws:sqs:Region:account-id:queue-name",
"Condition": {
"ArnLike": { "aws:SourceArn": "arn:aws:s3:*:*:awsexamplebucket1" },
"StringEquals": { "aws:SourceAccount": "bucket-owner-account-id" }
}
}
]
}
Observe que para as políticas do IAM do Amazon SNS e do Amazon SQS, você pode especificar a
condição StringLike na política, em vez da condição ArnLike.
"Condition": {
"StringLike": { "aws:SourceArn": "arn:aws:s3:*:*:bucket-name" }
}
{
"Version": "2012-10-17",
"Id": "example-ID",
"Statement": [
{
"Sid": "example-statement-ID",
"Effect": "Allow",
"Principal": {
"Service": "s3.amazonaws.com"
},
"Action": [
"kms:GenerateDataKey",
"kms:Decrypt"
],
"Resource": "*"
}
]
}
Para obter mais informações sobre políticas de chaves do AWS KMS, consulte Usar políticas de chaves no
AWS KMS no Guia do desenvolvedor do AWS Key Management Service.
Para obter mais informações sobre como usar a criptografia no lado do servidor com o AWS KMS para o
Amazon SQS e o Amazon SNS, consulte:
• Usar o console do Amazon S3: a interface de usuário do console permite que você defina uma
configuração de notificação em um bucket sem ter que escrever nenhum código. Para obter mais
informações, consulte Habilitar e configurar notificações de eventos usando o console do Amazon
S3 (p. 877).
• Usar os AWS SDKs de forma programática: internamente, tanto o console quanto os SDKs chamam a
API REST do Amazon S3 para gerenciar sub-recursos de notificação associados ao bucket. Para obter
a configuração de notificação usando exemplos do AWS SDK, consulte Demonstração: configurar um
bucket para notificações (tópico do SNS ou fila do SQS) (p. 879).
Note
Você também pode fazer chamadas de API REST do Amazon S3 diretamente do seu código.
Contudo, isso pode ser complicado, porque exige que você grave código para autenticar suas
solicitações.
Tópicos
• Habilitar e configurar notificações de eventos usando o console do Amazon S3 (p. 877)
• Configuração de notificações de eventos de forma programática (p. 878)
Pré-requisitos: antes de habilitar as notificações de eventos para o intervalo, você deve configurar um dos
tipos de destino e, em seguida, configurar permissões. Para obter mais informações, consulte Destinos de
eventos suportados (p. 872) e Conceder permissões para publicar mensagens de notificação de vento a
um destino (p. 874).
Se você não inserir um nome, um identificador exclusivo global (GUID) será gerado e usado para
o nome.
b. Para filtrar opcionalmente notificações de eventos por prefixo, insira um Prefix (Prefixo).
Por exemplo, é possível configurar um filtro de prefixo para receber notificações somente quando
os arquivos são adicionados a uma pasta específica (por exemplo, images/).
c. Para filtrar opcionalmente notificações de eventos por sufixo, insira um Suffix (Sufixo).
Para obter mais informações, consulte Configurar notificações de eventos usando filtragem de
nomes de chave de objeto (p. 884).
6. Na seção Event types (Tipos de evento), selecione um ou mais tipos de eventos para os quais você
deseja receber notificações.
Para obter uma lista dos tipos de evento, consulte Tipos de evento compatíveis (p. 871).
7. Na seção Destination (Destino), escolha o destino da notificação de evento.
Note
a. Selecione o tipo de destino: Lambda Function (Função do Lambda), SNS Topic (Tópico do SNS)
ou SQS Queue (Fila do SQS).
b. Depois de escolher o tipo de destino, escolha uma função, um tópico ou uma fila na lista.
c. Como alternativa, se você preferir especificar um nome de recurso da Amazon (ARN), selecione
Enter ARN (Inserir ARN) e insira o ARN.
Versão da API 2006-03-01
877
Amazon Simple Storage Service Guia do usuário
Habilitar notificações de eventos
Para obter mais informações, consulte Destinos de eventos suportados (p. 872).
8. Escolha Save changes (Salvar alterações) e o Amazon S3 enviará uma mensagem de teste para o
destino de notificação de evento.
<NotificationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
</NotificationConfiguration>
Para habilitar notificações para eventos de tipos específicos, você substitui o XML pela configuração
apropriada que identifica os tipos de evento que deseja que o Amazon S3 publique e o destino
onde deseja que os eventos sejam publicados. Para cada destino, você adiciona uma configuração
correspondente de XML.
Para definir uma fila do SQS como o destino de notificação para um ou mais tipos de evento, adicione o
QueueConfiguration.
<NotificationConfiguration>
<QueueConfiguration>
<Id>optional-id-string</Id>
<Queue>sqs-queue-arn</Queue>
<Event>event-type</Event>
<Event>event-type</Event>
...
</QueueConfiguration>
...
</NotificationConfiguration>
Para definir um tópico do SNS como o destino de notificação para tipos de eventos específicos, adicione o
TopicConfiguration.
<NotificationConfiguration>
<TopicConfiguration>
<Id>optional-id-string</Id>
<Topic>sns-topic-arn</Topic>
<Event>event-type</Event>
<Event>event-type</Event>
...
</TopicConfiguration>
...
</NotificationConfiguration>
Para invocar a função do AWS Lambda e fornecer uma mensagem de evento como um argumento
Para definir uma função do Lambda como o destino de notificação para tipos de evento específicos,
adicione o CloudFunctionConfiguration.
<NotificationConfiguration>
<CloudFunctionConfiguration>
<Id>optional-id-string</Id>
<CloudFunction>cloud-function-arn</CloudFunction>
<Event>event-type</Event>
<Event>event-type</Event>
...
</CloudFunctionConfiguration>
...
</NotificationConfiguration>
Quando o Amazon S3 detecta um evento do tipo específico, ele publica uma mensagem com
as informações do evento. Para obter mais informações, consulte Estrutura de mensagens de
evento (p. 889).
Para obter mais informações sobre como configurar notificações de eventos, consulte os seguintes tópicos:
• Demonstração: configurar um bucket para notificações (tópico do SNS ou fila do SQS) (p. 879).
• Configurar notificações de eventos usando filtragem de nomes de chave de objeto (p. 884)
Tópicos
• Resumo da demonstração (p. 879)
• Etapa 1: Criar uma fila do Amazon SQS (p. 880)
• Etapa 2: Criar um tópico do Amazon SNS (p. 881)
• Etapa 3: Adicionar a configuração de notificação para o bucket (p. 882)
• Etapa 4: Testar a configuração (p. 884)
Resumo da demonstração
Esta demonstração ajuda você a fazer o seguinte:
Você pode executar todas essas etapas usando o console, sem escrever nenhum código. Além disso,
exemplos de código, que usam os AWS SDKs para Java e .NET também são fornecidos para ajudar a
adicionar configurações de notificação de maneira programática.
Usando o console do Amazon SQS, crie uma fila do SQS. É possível acessar todas as mensagens
que o Amazon S3 envia à fila de forma programática. Porém, para esta demonstração, verifique as
mensagens de notificação no console.
Anexe uma política de acesso à fila para conceder ao Amazon S3 permissão para postar mensagens.
2. Crie um tópico do Amazon SNS.
Usando o console do Amazon SNS, crie um tópico do SNS e cadastre-se no tópico para que todos
os eventos postados nele sejam entregues a você. Especifique o e-mail como o protocolo de
comunicações. Depois de criar um tópico, o Amazon SNS envia um e-mail. Você deve usar o link no e-
mail para confirmar a assinatura do tópico.
Anexe uma política de acesso ao tópico para conceder ao Amazon S3 permissão para postar
mensagens.
3. Adicione a configuração de notificação a um bucket.
1. Usando o console do Amazon SQS, crie uma fila. Para obter instruções, consulte Conceitos básicos
do Amazon SQS no Guia do desenvolvedor do Amazon Simple Queue Service.
2. Substitua a política de acesso anexada à fila pela política a seguir. No console do Amazon SQS,
selecione a fila e, na guia Permissions (Permissões), escolha Edit Policy Document (Advanced) (Editar
documento de política (Avançado).
{
"Version": "2012-10-17",
"Id": "example-ID",
"Statement": [
{
"Sid": "example-statement-ID",
"Effect": "Allow",
"Principal": {
"Service": "s3.amazonaws.com"
},
"Action": [
"SQS:SendMessage"
],
"Resource": "SQS-queue-ARN",
"Condition": {
"ArnLike": { "aws:SourceArn": "arn:aws:s3:*:*:awsexamplebucket1" },
"StringEquals": { "aws:SourceAccount": "bucket-owner-account-id" }
}
}
]
}
3. (Opcional) Se a fila do Amazon SQS ou o tópico do Amazon SNS estiverem habilitados para
criptografia no lado do servidor com o AWS Key Management Service (AWS KMS), adicione a
seguinte política à CMK do AWS KMS gerenciada pelo cliente simétrico associado.
Adicione a política a uma CMK gerenciada pelo cliente porque você não pode modificar a CMK
gerenciada pela AWS para o Amazon SQS ou o Amazon SNS.
{
"Version": "2012-10-17",
"Id": "example-ID",
"Statement": [
{
"Sid": "example-statement-ID",
"Effect": "Allow",
"Principal": {
"Service": "s3.amazonaws.com"
},
"Action": [
"kms:GenerateDataKey",
"kms:Decrypt"
],
"Resource": "*"
}
]
}
Para obter mais informações sobre como usar o SSE para o Amazon SQS e o Amazon SNS com o
AWS KMS, consulte:
A fila do SQS que você criou é outro recurso em sua conta da AWS e tem um Nome de recurso
da Amazon (ARN) exclusivo. Você precisará desse ARN na próxima etapa. O ARN terá o seguinte
formato:
arn:aws:sqs:aws-region:account-id:queue-name
1. Usando o console do Amazon SNS, crie um tópico. Para obter instruções, consulte Criação de um
tópico do Amazon SNS no Guia do desenvolvedor do Amazon Simple Notification Service.
2. Inscreva-se no tópico. Neste exercício, use o e-mail como o protocolo de comunicação. Para obter
instruções, consulte Assinatura de um tópico do Amazon SNS no Guia do desenvolvedor do Amazon
Simple Notification Service.
Você receberá um e-mail solicitando que confirme sua assinatura no tópico. Confirme a assinatura.
3. Substitua a política de acesso anexada ao tópico pela seguinte política. Você deve atualizar a política,
fornecendo o ARN do tópico do SNS, o nome do bucket e o ID da conta do proprietário do bucket.
{
"Version": "2012-10-17",
"Id": "example-ID",
"Statement": [
{
"Sid": "example-statement-ID",
"Effect": "Allow",
"Principal": {
"Service": "s3.amazonaws.com"
},
"Action": [
"SNS:Publish"
],
"Resource": "SNS-topic-ARN",
"Condition": {
O tópico do SNS que você criou é outro recurso em sua conta da AWS e tem um ARN exclusivo. Você
precisará desse ARN na próxima etapa. O ARN terá o seguinte formato:
arn:aws:sns:aws-region:account-id:topic-name
• Publique eventos do tipo Todos os eventos criados por objetos na fila do Amazon SQS.
• Publique eventos do tipo Objeto em RRS perdido no tópico do Amazon SNS.
Depois de salvar a configuração de notificação, o Amazon S3 posta uma mensagem de teste, que você
recebe via e-mail.
Para obter instruções, consulte Habilitar e configurar notificações de eventos usando o console do Amazon
S3 (p. 877).
O exemplo de código C# a seguir fornece uma lista completa de códigos que adicionam uma
configuração de notificação a um bucket. É necessário atualizar o código e fornecer o nome do bucket
e o ARN do tópico do SNS. Para obter informações sobre como criar e testar um exemplo funcional,
consulte Executar os exemplos de código do Amazon S3 .NET (p. 1044).
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class EnableNotificationsTest
{
private const string bucketName = "*** bucket name ***";
private const string snsTopic = "*** SNS topic ARN ***";
private const string sqsQueue = "*** SQS topic ARN ***";
// Specify your bucket region (an example region is shown).
Java
O seguinte exemplo mostra como adicionar uma configuração de notificação a um bucket. Para obter
instruções sobre criar e testar um exemplo funcional, consulte Testar exemplos de código Java no
Amazon S3 (p. 1042).
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.*;
import java.io.IOException;
import java.util.EnumSet;
try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();
BucketNotificationConfiguration notificationConfiguration = new
BucketNotificationConfiguration();
Você pode configurar as notificações para serem filtradas pelo prefixo e pelo sufixo do nome da chave de
objetos. Por exemplo, você pode definir uma configuração para que uma notificação seja enviada a você
apenas quando arquivos de imagem com uma extensão ".jpg" forem adicionados a um bucket. Ou ter
uma configuração que entregue uma notificação a um tópico do Amazon SNS quando um objeto com o
prefixo "images/" for adicionado ao bucket, e fazer com que notificações para objetos com um prefixo
"logs/" no mesmo bucket sejam entregues a uma função do AWS Lambda.
É possível definir configurações de notificação que usem filtragem de nomes de chaves de objetos
no console do Amazon S3 usando APIs do Amazon S3 por meio dos AWS SDKs ou das APIs REST
diretamente. Para obter informações sobre como usar a interface do usuário do console para definir uma
configuração de notificação em um bucket, consulte Habilitar e configurar notificações de eventos usando o
console do Amazon S3 (p. 877).
Se uma notificação de evento do Amazon S3 estiver configurada para usar a filtragem de nomes de chave
de objeto, as notificações serão publicadas somente para objetos com um determinado prefixo ou sufixo
de nome de chave. Um caractere selvagem (“*”) não pode ser usado em filtros como um prefixo ou sufixo
para representar qualquer caractere. Se você usar quaisquer caracteres especiais no valor do prefixo ou
sufixo, deverá inseri-los no formato codificado em URL (codificado em porcentagem). Para obter mais
informações, consulte Diretrizes de nomeação de chave de objeto (p. 64).
Configurações de notificação que usam o Filter não podem definir regras de filtragem com prefixos
sobrepostos, sufixos sobrepostos ou prefixos e sufixos sobrepostos. As seções a seguir têm exemplos
de configurações de notificação válidas com filtragem de nome de chave de objeto. Elas também contêm
exemplos de configurações de notificação que não são válidas devido à sobreposição de prefixo/sufixo.
Tópicos
• Exemplos de configurações válidas de notificação com filtragem de nome de chave de objeto (p. 885)
• Exemplos de configurações de notificação com sobreposição inválida de prefixo/sufixo (p. 887)
<NotificationConfiguration>
<QueueConfiguration>
<Id>1</Id>
<Filter>
<S3Key>
<FilterRule>
<Name>prefix</Name>
<Value>images/</Value>
</FilterRule>
<FilterRule>
<Name>suffix</Name>
<Value>jpg</Value>
</FilterRule>
</S3Key>
</Filter>
<Queue>arn:aws:sqs:us-west-2:444455556666:s3notificationqueue</Queue>
<Event>s3:ObjectCreated:Put</Event>
</QueueConfiguration>
</NotificationConfiguration>
A configuração de notificação a seguir tem vários prefixos não sobrepostos. A configuração define que
as notificações para solicitações PUT na pasta images/ vão para a fila A, enquanto as notificações para
solicitações PUT na pasta logs/ vão para a fila B.
<NotificationConfiguration>
<QueueConfiguration>
<Id>1</Id>
<Filter>
<S3Key>
<FilterRule>
<Name>prefix</Name>
<Value>images/</Value>
</FilterRule>
</S3Key>
</Filter>
<Queue>arn:aws:sqs:us-west-2:444455556666:sqs-queue-A</Queue>
<Event>s3:ObjectCreated:Put</Event>
</QueueConfiguration>
<QueueConfiguration>
<Id>2</Id>
<Filter>
<S3Key>
<FilterRule>
<Name>prefix</Name>
<Value>logs/</Value>
</FilterRule>
</S3Key>
</Filter>
<Queue>arn:aws:sqs:us-west-2:444455556666:sqs-queue-B</Queue>
<Event>s3:ObjectCreated:Put</Event>
</QueueConfiguration>
</NotificationConfiguration>
A configuração de notificação a seguir tem vários sufixos não sobrepostos. A configuração define que
todas as imagens .jpg recém-adicionadas ao bucket sejam processadas pela função A de nuvem do
Lambda e que todas as imagens .png recém-adicionadas sejam processadas pela função B de nuvem.
Os sufixos .png e .jpg não estão sendo sobrepostos, embora tenham a mesma última letra. Dois sufixos
são considerados sobrepostos se uma determinada sequência puder terminar com ambos os sufixos. Uma
sequência não pode terminar com .png e com .jpg, portanto, os sufixos na configuração de exemplo não
são sufixos sobrepostos.
<NotificationConfiguration>
<CloudFunctionConfiguration>
<Id>1</Id>
<Filter>
<S3Key>
<FilterRule>
<Name>suffix</Name>
<Value>.jpg</Value>
</FilterRule>
</S3Key>
</Filter>
<CloudFunction>arn:aws:lambda:us-west-2:444455556666:cloud-function-A</CloudFunction>
<Event>s3:ObjectCreated:Put</Event>
</CloudFunctionConfiguration>
<CloudFunctionConfiguration>
<Id>2</Id>
<Filter>
<S3Key>
<FilterRule>
<Name>suffix</Name>
<Value>.png</Value>
</FilterRule>
</S3Key>
</Filter>
<CloudFunction>arn:aws:lambda:us-west-2:444455556666:cloud-function-B</CloudFunction>
<Event>s3:ObjectCreated:Put</Event>
</CloudFunctionConfiguration>
</NotificationConfiguration>
As configurações de notificação que usam o Filter não podem definir regras de filtragem com prefixos
sobrepostos para os mesmos tipos de evento, a menos que os prefixos sobrepostos sejam usados com
sufixos não sobrepostos. A configuração de exemplo a seguir mostra como objetos criados com um prefixo
comum, mas com sufixos não sobrepostos, podem ser entregues a destinos diferentes.
<NotificationConfiguration>
<CloudFunctionConfiguration>
<Id>1</Id>
<Filter>
<S3Key>
<FilterRule>
<Name>prefix</Name>
<Value>images</Value>
</FilterRule>
<FilterRule>
<Name>suffix</Name>
<Value>.jpg</Value>
</FilterRule>
</S3Key>
</Filter>
<CloudFunction>arn:aws:lambda:us-west-2:444455556666:cloud-function-A</CloudFunction>
<Event>s3:ObjectCreated:Put</Event>
</CloudFunctionConfiguration>
<CloudFunctionConfiguration>
<Id>2</Id>
<Filter>
<S3Key>
<FilterRule>
<Name>prefix</Name>
<Value>images</Value>
</FilterRule>
<FilterRule>
<Name>suffix</Name>
<Value>.png</Value>
</FilterRule>
</S3Key>
</Filter>
<CloudFunction>arn:aws:lambda:us-west-2:444455556666:cloud-function-B</CloudFunction>
<Event>s3:ObjectCreated:Put</Event>
</CloudFunctionConfiguration>
</NotificationConfiguration>
se sobreponham. Para ver um exemplo, consulte Configurar notificações de eventos usando filtragem de
nomes de chave de objeto (p. 884).
Você pode usar filtros de nomes de chave de objetos sobrepostos com diferentes tipos de evento. Por
exemplo, você pode criar uma configuração de notificação que use o prefixo image/ para o tipo de evento
ObjectCreated:Put e o prefixo image/ para o tipo de evento ObjectRemoved:*.
Você receberá um erro se tentar salvar uma configuração de notificação que tenha filtros de nomes
sobrepostos inválidos para os mesmos tipos de evento ao usar o console ou a API do Amazon S3. Esta
seção mostra exemplos de configurações de notificação que são inválidas devido aos filtros de nomes
sobrepostos.
Presume-se que qualquer regra de configuração de notificação tenha um prefixo e um sufixo padrão que
correspondam a qualquer outro prefixo e um sufixo respectivamente. A configuração de notificação a
seguir é inválida porque tem prefixos sobrepostos, em que o prefixo raiz sobrepõe qualquer outro prefixo.
(O mesmo se aplicaria se você estivesse usando um sufixo em vez de um prefixo neste exemplo. O sufixo
raiz sobrepõe qualquer outro sufixo.)
<NotificationConfiguration>
<TopicConfiguration>
<Topic>arn:aws:sns:us-west-2:444455556666:sns-notification-one</Topic>
<Event>s3:ObjectCreated:*</Event>
</TopicConfiguration>
<TopicConfiguration>
<Topic>arn:aws:sns:us-west-2:444455556666:sns-notification-two</Topic>
<Event>s3:ObjectCreated:*</Event>
<Filter>
<S3Key>
<FilterRule>
<Name>prefix</Name>
<Value>images</Value>
</FilterRule>
</S3Key>
</Filter>
</TopicConfiguration>
</NotificationConfiguration>
A configuração de notificação a seguir é inválida porque tem sufixos sobrepostos. Dois sufixos são
considerados sobrepostos se uma determinada sequência puder terminar com ambos os sufixos. Uma
string pode terminar com jpg e pg, portanto, os sufixos estão sobrepostos. (O mesmo vale para prefixos.
Dois prefixos são considerados sobrepostos se uma determinada string puder começar com ambos os
prefixos.)
<NotificationConfiguration>
<TopicConfiguration>
<Topic>arn:aws:sns:us-west-2:444455556666:sns-topic-one</Topic>
<Event>s3:ObjectCreated:*</Event>
<Filter>
<S3Key>
<FilterRule>
<Name>suffix</Name>
<Value>jpg</Value>
</FilterRule>
</S3Key>
</Filter>
</TopicConfiguration>
<TopicConfiguration>
<Topic>arn:aws:sns:us-west-2:444455556666:sns-topic-two</Topic>
<Event>s3:ObjectCreated:Put</Event>
<Filter>
<S3Key>
<FilterRule>
<Name>suffix</Name>
<Value>pg</Value>
</FilterRule>
</S3Key>
</Filter>
</TopicConfiguration>
</NotificationConfiguration
<NotificationConfiguration>
<TopicConfiguration>
<Topic>arn:aws:sns:us-west-2:444455556666:sns-topic-one</Topic>
<Event>s3:ObjectCreated:*</Event>
<Filter>
<S3Key>
<FilterRule>
<Name>prefix</Name>
<Value>images</Value>
</FilterRule>
<FilterRule>
<Name>suffix</Name>
<Value>jpg</Value>
</FilterRule>
</S3Key>
</Filter>
</TopicConfiguration>
<TopicConfiguration>
<Topic>arn:aws:sns:us-west-2:444455556666:sns-topic-two</Topic>
<Event>s3:ObjectCreated:Put</Event>
<Filter>
<S3Key>
<FilterRule>
<Name>suffix</Name>
<Value>jpg</Value>
</FilterRule>
</S3Key>
</Filter>
</TopicConfiguration>
</NotificationConfiguration>
Para obter informações gerais sobre como configurar notificações de eventos, consulte Notificações de
eventos do Amazon S3 (p. 869).
O exemplo a seguir mostra a estrutura da mensagem JSON. Este exemplo mostra a versão 2.2 da
estrutura JSON da mensagem de evento, que é a versão que o Amazon S3 usa atualmente.
{
"Records":[
{
"eventVersion":"2.2",
"eventSource":"aws:s3",
"awsRegion":"us-west-2",
"eventTime":"The time, in ISO-8601 format, for example, 1970-01-01T00:00:00.000Z,
when Amazon S3 finished processing the request",
"eventName":"event-type",
"userIdentity":{
"principalId":"Amazon-customer-ID-of-the-user-who-caused-the-event"
},
"requestParameters":{
"sourceIPAddress":"ip-address-where-request-came-from"
},
"responseElements":{
"x-amz-request-id":"Amazon S3 generated request ID",
"x-amz-id-2":"Amazon S3 host that processed the request"
},
"s3":{
"s3SchemaVersion":"1.0",
"configurationId":"ID found in the bucket notification configuration",
"bucket":{
"name":"bucket-name",
"ownerIdentity":{
"principalId":"Amazon-customer-ID-of-the-bucket-owner"
},
"arn":"bucket-ARN"
},
"object":{
"key":"object-key",
"size":"object-size",
"eTag":"object eTag",
"versionId":"object version if bucket is versioning-enabled, otherwise
null",
"sequencer": "a string representation of a hexadecimal value used to
determine event sequence, only used with PUTs and DELETEs"
}
},
"glacierEventData": {
"restoreEventData": {
"lifecycleRestorationExpiryTime": "The time, in ISO-8601 format, for
example, 1970-01-01T00:00:00.000Z, of Restore Expiry",
"lifecycleRestoreStorageClass": "Source storage class for restore"
}
}
}
]
}
A versão principal será incrementada se o Amazon S3 fizer uma alteração na estrutura do evento
que não é compatível com versões anteriores. Isso inclui a remoção de um campo JSON que já está
presente ou a alteração de como os conteúdos de um campo são representados (por exemplo, um
formato de data).
A versão secundária será incrementada se o Amazon S3 adicionar novos campos à estrutura do evento.
Isso pode ocorrer se novas informações forem fornecidas para alguns ou todos os eventos existentes
ou somente em tipos de evento recém-introduzidos. Os aplicativos devem ignorar novos campos para
permanecerem compatíveis com novas versões secundárias da estrutura do evento.
Se novos tipos de evento são introduzidos, mas a estrutura do evento não é modificada, a versão do
evento não muda.
Para garantir que seus aplicativos possam analisar a estrutura do evento corretamente, recomendamos
que você faça uma comparação "igual a" no número da versão principal. Para garantir que os campos
esperados pelo seu aplicativo estejam presentes, também recomendamos fazer uma comparação "maior
que ou igual a" na versão secundária.
• O valor da chave responseElements será útil se você quiser rastrear uma solicitação com o
acompanhamento do AWS Support. Tanto o x-amz-request-id quanto o x-amz-id-2 ajudam o
Amazon S3 a rastrear uma solicitação individual. Esses valores são os mesmos que os retornados
pelo Amazon S3 na resposta à solicitação que inicia os eventos, para que possam ser usados para
corresponder o evento à solicitação.
• A chave s3 fornece informações sobre o bucket e o objeto envolvidos no evento. O valor do nome
da chave de objetos é codificado para URL. Por exemplo, "red flower.jpg" se torna "red+flower.jpg" (o
Amazon S3 retorna “application/x-www-form-urlencoded” como o tipo do conteúdo na
resposta).
• A chave sequencer fornece uma maneira de determinar a sequência de eventos. Não há garantia
de que as notificações de evento cheguem na ordem em que os eventos ocorreram. No entanto, as
notificações de eventos que criam objetos (PUTs) e excluem objetos contêm um sequencer que pode
ser usado para determinar a ordem dos eventos de uma determinada chave de objeto.
Se você comparar a sequências do sequencer nas duas notificações de evento na mesma chave
de objeto, a notificação de evento com o valor hexadecimal maior de sequencer será o evento que
ocorreu depois. Se estiver usando notificações de evento para manter um banco de dados ou um índice
separado dos objetos do Amazon S3, você provavelmente desejará comparar e armazenar os valores
de sequencer ao processar cada notificação de evento.
Observe o seguinte:
• Não é possível usar sequencer para determinar a ordem de eventos em chaves de objetos
diferentes.
• Os sequenciadores podem ter comprimentos diferentes. Portanto, para comparar esses valores,
primeiro você preenche zeros à esquerda do menor valor e, em seguida, faz uma comparação
lexicográfica.
• A chave glacierEventData só está visível para eventos s3:ObjectRestore:Completed.
• A chave restoreEventData contém atributos relacionados à solicitação de restauração.
• A chave replicationEventData só é visível para eventos de replicação.
O exemplo a seguir mostra a versão 2.0 da estrutura da mensagem do evento, que o Amazon S3 não usa
mais.
{
"Records":[
{
"eventVersion":"2.0",
"eventSource":"aws:s3",
"awsRegion":"us-west-2",
"eventTime":"The time, in ISO-8601 format, for example, 1970-01-01T00:00:00.000Z,
when S3 finished processing the request",
"eventName":"event-type",
"userIdentity":{
"principalId":"Amazon-customer-ID-of-the-user-who-caused-the-event"
},
"requestParameters":{
"sourceIPAddress":"ip-address-where-request-came-from"
},
"responseElements":{
"x-amz-request-id":"Amazon S3 generated request ID",
"x-amz-id-2":"Amazon S3 host that processed the request"
},
"s3":{
"s3SchemaVersion":"1.0",
"configurationId":"ID found in the bucket notification configuration",
"bucket":{
"name":"bucket-name",
"ownerIdentity":{
"principalId":"Amazon-customer-ID-of-the-bucket-owner"
},
"arn":"bucket-ARN"
},
"object":{
"key":"object-key",
"size":"object-size",
"eTag":"object eTag",
"versionId":"object version if bucket is versioning-enabled, otherwise
null",
"sequencer": "a string representation of a hexadecimal value used to
determine event sequence, only used with PUTs and DELETEs"
}
}
}
]
}
Exemplos de mensagens
Veja a seguir exemplos de mensagens de notificação de eventos do Amazon S3.
Quando você configura uma notificação de evento em um bucket, o Amazon S3 envia a mensagem de
teste a seguir.
{
"Service":"Amazon S3",
"Event":"s3:TestEvent",
"Time":"2014-10-13T15:57:02.089Z",
"Bucket":"bucketname",
"RequestId":"5582815E1AEA5ADF",
"HostId":"8cLeGAmw098X5cv4Zkwcmo8vvZa3eH3eKxsPzbB9wrR+YstdA6Knx4Ip8EXAMPLE"
}
A mensagem a seguir é um exemplo de mensagem que o Amazon S3 envia para publicar um evento
s3:ObjectCreated:Put.
{
"Records":[
{
"eventVersion":"2.1",
"eventSource":"aws:s3",
"awsRegion":"us-west-2",
"eventTime":"1970-01-01T00:00:00.000Z",
"eventName":"ObjectCreated:Put",
"userIdentity":{
"principalId":"AIDAJDPLRKLG7UEXAMPLE"
},
"requestParameters":{
"sourceIPAddress":"127.0.0.1"
},
"responseElements":{
"x-amz-request-id":"C3D13FE58DE4C810",
"x-amz-id-2":"FMyUVURIY8/IgAtTv8xRjskZQpcIZ9KG4V5Wp6S7S/JRWeUWerMUE5JgHvANOjpD"
},
"s3":{
"s3SchemaVersion":"1.0",
"configurationId":"testConfigRule",
"bucket":{
"name":"mybucket",
"ownerIdentity":{
"principalId":"A3NL1KOZZKExample"
},
"arn":"arn:aws:s3:::mybucket"
},
"object":{
"key":"HappyFace.jpg",
"size":1024,
"eTag":"d41d8cd98f00b204e9800998ecf8427e",
"versionId":"096fKKXTRTtl3on89fVO.nfljtsv6qko",
"sequencer":"0055AED6DCD90281E5"
}
}
}
]
}
Para obter uma definição de cada prefixo de identificação do IAM (AIDA, AROA, AGPA etc.), consulte
Identificadores do IAM no Guia do usuário do IAM.
Tópicos
• Análise do Amazon S3 – Análise de classe de armazenamento (p. 894)
• Avaliação de sua atividade de armazenamento e uso com o Amazon S3 Storage Lens (p. 900)
• Rastreamento de solicitações do Amazon S3 usando o AWS X-Ray (p. 943)
Você pode ter vários filtros vários de análise de classe de armazenamento por bucket, até 1.000, e
receberá uma análise separada para cada filtro. As várias configurações de filtro permitem analisar grupos
específicos de objetos para melhorar suas políticas de ciclo de vida que faz a transição de objetos para
STANDARD_IA.
Há custos associados à análise da classe de armazenamento. Para obter informações sobre preços,
consulte Gerenciamento e replicação Definição de preço do Amazon S3.
Tópicos
• Como configurar a análise de classe de armazenamento? (p. 895)
• Como usar a análise de classe de armazenamento? (p. 895)
Você pode configurar filtros que agrupam objetos para análise por prefixo, por tags de objeto ou por uma
combinação de prefixo e tags. Você recebe uma análise separada para cada filtro configurado. Você
pode ter várias configurações de filtro por bucket, até 1.000.
• Exportar dados de análise.
Quando você configura a análise de classe de armazenamento para um bucket ou filtro, pode optar por
exportar os dados de análise para um arquivo todo dia. A análise do dia é adicionada ao arquivo para
formar um registro histórico de análise para o filtro configurado. O arquivo é atualizado diariamente no
destino escolhido por você. Ao selecionar dados para exportar, especifique um bucket de destino e um
prefixo de destino opcional onde o arquivo é gravado.
Você pode usar o console do Amazon S3, a API REST, a AWS CLI ou os AWS SDKs para configurar a
análise de classe de armazenamento.
• Para obter informações sobre como configurar a análise de classe de armazenamento no console do
Amazon S3, consulte Configurar análise de classe de armazenamento (p. 898).
• Para usar a API do Amazon S3, use a API REST PutBucketAnalyticsConfiguration, ou equivalente, na
AWS CLI ou nos AWS SDKs.
Quando você configura um filtro pela primeira vez, o console do Amazon S3 pode levar algum tempo para
analisar os seus dados.
Geralmente, leva cerca de 30 dias para observar os padrões de acesso e coletar informações suficientes
para gerar um resultado de análise. Pode levar mais de 30 dias, dependendo do padrão de acesso
exclusivo dos dados. No entanto, depois de configurar um filtro, você começará a ver a análise de dados
baseada no filtro no console do Amazon S3 entre 24 e 48 horas. Você pode visualizar a análise de acesso
do objeto diariamente dividida por faixa etária no console do Amazon S3.
O console do Amazon S3 mostra os padrões de acesso agrupados pelos grupos etários de objetos
predefinidos. O texto Frequently accessed (Acessado com frequência) ou Infrequently accessed (Acessado
com pouca frequência) mostrado é uma ajuda visual para ajudá-lo no processo de criação do ciclo de vida.
Você deve criar uma política de bucket no bucket de destino para conceder permissões ao Amazon S3
para verificar se a conta da AWS é proprietária do bucket e para gravar objetos no bucket no local definido.
Para ver um exemplo de política, consulte Conceder permissões para inventário e análise do Amazon
S3 (p. 386).
Após configurar relatórios de análise de classe de armazenamento, você começará a receber o relatório
exportado diariamente após 24 horas. Depois disso, o Amazon S3 continuará monitorando e fornecendo
exportações diárias.
Você pode abrir o arquivo CSV em uma aplicação de planilha ou importar o arquivo para outras aplicações,
como o Amazon QuickSight. Para obter informações sobre como usar os arquivos do Amazon S3 com o
Amazon QuickSight, consulte Criar um conjunto de dados usando arquivos do Amazon S3 no Guia do
usuário do Amazon QuickSight.
Os dados no arquivo exportado são classificados por data na faixa etária de objeto conforme exibido nos
exemplos a seguir. Se a classe de armazenamento é STANDARD, a linha também contém dados para as
colunas ObjectAgeForSIATransition e RecommendedObjectAgeForSIATransition.
No final do relatório, a faixa etária de objeto é fornecida como ALL. As linhas ALL contêm totais
cumulativos, incluindo objetos menores que 128 KB, para todas as faixas etárias desse dia.
Para configurar a análise de classe de armazenamento, configure os dados de objeto que você deseja
analisar. Você pode configurar a análise de classe de armazenamento para fazer o seguinte:
Você pode configurar filtros que agrupam objetos para análise por prefixo, por tags de objeto ou por uma
combinação de prefixo e tags. Você recebe uma análise separada para cada filtro configurado. Você
pode ter várias configurações de filtro por bucket, até 1.000.
• Exportar dados de análise.
Quando você configura a análise de classe de armazenamento para um bucket ou filtro, pode optar por
exportar os dados de análise para um arquivo todo dia. A análise do dia é adicionada ao arquivo para
formar um registro histórico de análise para o filtro configurado. O arquivo é atualizado diariamente no
destino escolhido por você. Ao selecionar dados para exportar, especifique um bucket de destino e um
prefixo de destino opcional onde o arquivo é gravado.
Você pode usar o console do Amazon S3, a API REST, a AWS CLI ou os AWS SDKs para configurar a
análise de classe de armazenamento.
Important
Se você quiser configurar a análise de classe de armazenamento para exportar suas descobertas
como um arquivo.csv e o bucket de destino usar criptografia de bucket padrão com uma chave
mestra do cliente (CMK) do AWS KMS, atualize a política de chaves do AWS KMS para conceder
permissão ao Amazon S3 para criptografar o arquivo.csv. Para obter instruções, consulte
Conceder permissão para que o Amazon S3 use a CMK do AWS KMS para criptografia (p. 609).
Para obter mais informações sobre análises, consulte Análise do Amazon S3 – Análise de classe de
armazenamento (p. 894).
Usar o console do S3
Para configurar a análise de classe de armazenamento
Se o bucket de destino do arquivo.csv usar criptografia de bucket padrão com uma CMK do AWS
KMS, você deverá atualizar a política de chaves do AWS KMS para conceder permissão ao Amazon
S3 para criptografar o arquivo.csv. Para obter instruções, consulte Conceder permissão para que o
Amazon S3 use a CMK do AWS KMS para criptografia (p. 609).
9. Selecione Create Configuration (Criar configuração).
O Amazon S3 cria uma política de bucket no bucket de destino que concede ao Amazon S3 permissão
para gravação. Ela permite gravar os dados de exportação no bucket.
Se ocorrer um erro quando você tentar criar a política de bucket, serão fornecidas instruções sobre
como resolvê-lo. Por exemplo, se você escolher um bucket de destino em outra conta da AWS e não
tiver permissões para ler e gravar na política de bucket, verá a mensagem a seguir. Você deve pedir ao
proprietário do bucket de destino para adicionar a política de bucket exibida ao bucket de destino. Se a
política não for adicionada ao bucket de destino, você não terá os dados de exportação porque o Amazon
S3 não terá permissão para gravar no bucket de destino. Se o bucket de origem for de uma conta diferente
da conta do usuário atual, o ID de conta correto do bucket de origem deverá ser substituído na política.
Para obter informações sobre os dados exportados e como o filtro funciona, consulte Análise do Amazon
S3 – Análise de classe de armazenamento (p. 894).
Você pode usar as seguintes APIs REST para trabalhar com a Análise de classe de armazenamento:
O Amazon S3 Storage Lens oferece uma visão única do uso e da atividade em seu armazenamento
do Amazon S3. Com opções de drill-down para gerar insights no nível da organização, conta, bucket,
objeto ou até mesmo prefixo. O S3 Storage Lens analisa as métricas de armazenamento para fornecer
recomendações contextuais para ajudar a otimizar os custos de armazenamento e aplicar as práticas
recomendadas de proteção de dados.
No console do S3, o S3 Storage Lens fornece um painel padrão interativo que é atualizado diariamente.
Outros painéis podem ter escopo por conta (para usuários do AWS Organizations), regiões da AWS e
buckets do S3 para fornecer métricas de uso gratuitamente. Por um custo adicional, você pode atualizar
para receber métricas e recomendações avançadas. Isso inclui métricas de uso com agregação em nível
de prefixo, métricas de atividade agregadas por bucket e recomendações contextuais (disponíveis apenas
no painel). O S3 Storage Lens pode ser usado para obter um resumo das informações de armazenamento,
detectar discrepâncias, melhorar a proteção de dados e otimizar os custos de armazenamento. Para
obter mais informações, consulte Uso do Amazon S3 Storage Lens no console (p. 919). Para obter mais
informações sobre a definição de preço do S3 Storage Lens, consulte Definição de preço do Amazon S3
Além do painel no console do S3, é possível exportar métricas em formato CSV ou Parquet para um
bucket do S3 ou sua escolha para uso posterior. Para obter mais informações, consulte Exibição de
métricas de lente de armazenamento do Amazon S3 usando uma exportação de dados (p. 910).
Use o S3 Storage Lens para gerar insights resumidos, como descobrir quanto armazenamento você tem
em toda a organização ou quais são os buckets e prefixos que mais crescem. Identifique discrepâncias em
suas métricas de armazenamento e, em seguida, faça drill-down para investigar ainda mais a origem do
pico de uso ou atividade.
Você pode avaliar seu armazenamento com base nas práticas recomendadas de proteção de dados no
Amazon S3, como analisar a porcentagem de buckets com criptografia ou bloqueio de objeto habilitado.
Além disso, você pode identificar possíveis oportunidades de economia de custos, como, por exemplo,
analisando sua atividade de solicitação por bucket para encontrar buckets onde os objetos podem ser
transferidos para uma classe de armazenamento de menor custo.
Tópicos
• Noções básicas sobre o Amazon S3 Storage Lens (p. 901)
• Usando o Amazon S3 Storage Lens com o AWS Organizations (p. 905)
• Definição de permissões para usar o Amazon S3 Storage Lens (p. 907)
• Exibição de métricas de uso de armazenamento e atividade com o Amazon S3 Storage Lens (p. 909)
• Glossário de métricas de lente de armazenamento do Amazon S3 (p. 914)
• Exemplos e demonstração do console do Amazon S3 Storage Lens (p. 919)
O Amazon S3 Storage Lens agrega suas métricas de uso e atividade e exibe as informações em um painel
interativo no console do Amazon S3 ou por meio de uma exportação de dados de métricas que pode
ser baixada no formato CSV ou Parquet. Você pode usar o painel para visualizar insights e tendências,
sinalizar discrepâncias e fornecer recomendações para otimizar os custos de armazenamento e aplicar as
práticas recomendadas de proteção de dados. É possível usar o S3 Storage Lens por meio do Console de
Gerenciamento da AWS, da AWS CLI, dos AWS SDKs ou da API REST.
Tópicos
• Configuração (p. 901)
• Painel padrão (p. 901)
• Painéis (p. 902)
• Exportação de métricas (p. 902)
• Região inicial (p. 902)
• Período de retenção (p. 902)
• Tipos de métricas (p. 902)
• Recomendações (p. 903)
• Seleção de métricas (p. 904)
• S3 Storage Lens e AWS Organizations (p. 904)
Configuração
O Amazon S3 Storage Lens requer uma configuração que contém as propriedades usadas para agregar
métricas em seu nome para um único painel ou exportação. Isso inclui todas as seções ou parciais do
armazenamento da conta da organização, incluindo filtragem por região, bucket e escopo de nível de
prefixo (disponível somente com métricas avançadas). Ele inclui informações sobre se você escolheu
métricas gratuitas ou métricas e recomendações avançadas. Ele também inclui se uma exportação de
métricas é necessária e informações sobre onde colocar a exportação de métricas, se aplicável.
Painel padrão
O painel padrão do S3 Storage Lens no console é chamado default-account-dashboard. O S3 preconfigura
o painel para visualizar os insights resumidos e as tendências de uso agregado de armazenamento e
as métricas de atividade de armazenamento agregado de toda a sua conta e atualiza-as diariamente no
console do Amazon S3. Você não pode modificar o escopo de configuração do painel padrão, mas pode
atualizar a seleção de métricas de métricas gratuitas para as métricas e recomendações avançadas pagas.
Você também pode configurar a exportação de métricas opcionais ou até mesmo desabilitar o painel. No
entanto, você não pode excluir o painel padrão.
Note
Se você desabilitar seu painel padrão, ele não será mais atualizado e você não receberá mais
nenhuma nova métrica diária. Você ainda pode ver dados históricos até o período de expiração de
14 dias ou 15 meses se você estiver inscrito em métricas avançadas e recomendações para esse
painel. Você pode reativar o painel dentro do período de expiração para acessar esses dados.
Painéis
Você também pode usar o Amazon S3 Storage Lens para configurar um painel que visualize insights
resumidos e tendências de uso de armazenamento agregado e métricas de atividade, atualizadas
diariamente no console do Amazon S3. Você pode criar e modificar painéis do S3 Storage Lens para
expressar todas as seções ou parciais do armazenamento da conta da sua organização. Você pode filtrar
por região, bucket e prefixo da AWS (disponível somente com métricas e recomendações avançadas).
Você também pode desativar ou excluir o painel.
Note
• Você pode usar o S3 Storage Lens para criar até 50 painéis por região inicial.
• Se você desabilitar um painel, ele não será mais atualizado e você não receberá mais nenhuma
nova métrica diária. Você ainda pode ver dados históricos até o período de expiração de 14
dias (ou 15 meses, se você se inscreveu em métricas avançadas e recomendações para esse
painel). Você pode reativar o painel dentro do período de expiração para acessar esses dados.
• Se você excluir seu painel, você perderá todas as configurações do painel. Você não receberá
mais nenhuma nova métrica diária e também perderá o acesso aos dados históricos associados
a esse painel. Se você quiser acessar os dados históricos de um painel excluído, você deve
criar outro painel com o mesmo nome na mesma região inicial.
• Os painéis de nível da organização só podem ser limitados a um escopo regional.
Exportação de métricas
Uma exportação de métricas do S3 Storage Lens é um arquivo que contém todas as métricas identificadas
na configuração do S3 Storage Lens. Essas informações são geradas diariamente no formato CSV ou
Parquet em um bucket do S3 de sua escolha para análise posterior. O bucket do S3 para a exportação
de métricas deve estar na mesma região da configuração do S3 Storage Lens. Você pode gerar uma
exportação de métricas do S3 Storage Lens a partir do console do S3 editando a configuração do painel ou
usando a AWS CLI e SDKs.
Região inicial
A região inicial é a região onde todas as métricas do Amazon S3 Storage Lens para um determinado painel
ou configuração são armazenadas. Você deve escolher uma região inicial ao criar o painel ou configuração
do Amazon S3 Storage Lens. Depois que uma região inicial for atribuída, ela não poderá ser alterada.
Note
A criação de uma região inicial não tem suporte para as seguintes regiões:
Período de retenção
As métricas do Amazon S3 Storage Lens são mantidas para que você possa ver tendências históricas
e comparar diferenças no uso e na atividade do armazenamento ao longo do tempo. Os períodos de
retenção dependem da seleção de métricas e não podem ser modificados. As métricas gratuitas são
mantidas por um período de 14 dias e as métricas avançadas são mantidas por um período de 15 meses.
Tipos de métricas
O S3 Storage Lens oferece dois tipos de métricas de armazenamento: uso e atividade.
• Métricas de uso
O S3 Storage Lens coleta métricas de uso para todos os painéis e configurações. As métricas de uso
descrevem o tamanho, a quantidade e as características do armazenamento. Isso inclui o total de bytes
armazenados, a contagem de objetos e o tamanho médio do objeto, além de métricas que descrevem a
utilização de recursos, como bytes criptografados ou excluem contagens de objetos de mercado. Para
obter mais informações sobre as métricas de uso agregadas pelo S3 Storage Lens, consulte Glossário
de métricas.
• Métricas de atividade
O S3 Storage Lens agrega métricas de atividade para todos os painéis e configurações que têm o tipo
de métricas avançadas e recomendações habilitado. As métricas de atividade descrevem os detalhes da
frequência com que seu armazenamento é solicitado. Isso inclui o número de solicitações por tipo, bytes
de upload e download e erros. Para obter mais informações sobre as métricas de atividade agregadas
pelo S3 Storage Lens, consulte Glossário de métricas.
Recomendações
O S3 Storage Lens fornece recomendações automatizadas para ajudá-lo a otimizar seu armazenamento.
As recomendações são colocadas contextualmente ao lado de métricas relevantes no painel do S3
Storage Lens. Os dados históricos não são elegíveis para recomendações porque as recomendações
são relevantes para o que está acontecendo no período mais recente. As recomendações só aparecem
quando são relevantes.
• Sugestões
As sugestões alertam você sobre tendências de uso e atividade de armazenamento que podem indicar
uma oportunidade de otimização de custos de armazenamento ou uma prática recomendada de
proteção de dados. Você pode usar os tópicos sugeridos no Guia do usuário do Amazon S3 e no painel
do S3 Storage Lens para especificar mais detalhes sobre regiões, buckets ou prefixos específicos e
obter mais ajuda.
• Chamadas
Chamadas são recomendações que alertam você para anomalias interessantes dentro do uso e
atividade do armazenamento durante um período que pode precisar de mais atenção ou monitoramento.
• Chamadas discrepantes
O S3 Storage Lens fornece chamadas para métricas que são discrepantes, com base em sua
tendência recente de 30 dias. A discrepância é calculada usando uma pontuação padrão, também
conhecida como pontuação z. Nesta pontuação, a métrica do dia atual é subtraída da média dos
últimos 30 dias para essa métrica e, em seguida, dividida pelo desvio padrão para essa métrica nos
últimos 30 dias. A pontuação resultante geralmente é entre -3 e +3. Este número representa o número
de desvios padrão que a métrica do dia atual é da média.
O S3 Storage Lens considera métricas com uma pontuação >2 ou <-2 como discrepâncias porque são
maiores ou inferiores a 95% dos dados normalmente distribuídos.
• Chamadas de alterações significativas
A chamada de alteração significativa se aplica a métricas que devem ser alteradas com menos
frequência. Portanto, ela é definida para uma sensibilidade maior do que o cálculo de discrepância,
que geralmente é na faixa de +/- 20 por cento versus o dia anterior, semana ou mês.
Abordar chamadas em seu uso e atividade de armazenamento — se você receber uma chamada de
alteração significativa, não é necessariamente um problema e pode ser o resultado de uma alteração
antecipada no armazenamento. Por exemplo, você pode ter adicionado recentemente um grande
Versão da API 2006-03-01
903
Amazon Simple Storage Service Guia do usuário
Noções básicas sobre o S3 Storage Lens
número de novos objetos, excluído um grande número de objetos ou fez alterações planejadas
semelhantes.
Se você vir uma chamada de alteração significativa no seu painel, tome nota e determine se ela pode
ser explicada por circunstâncias recentes. Caso contrário, use o painel do S3 Storage Lens para fazer
drill-down a fim de obter mais detalhes para entender as regiões, buckets ou prefixos específicos que
estão gerando a flutuação.
• Lembretes
Os lembretes fornecem insights sobre como o Amazon S3 funciona. Eles podem ajudá-lo a aprender
mais sobre maneiras de usar os recursos do S3 para reduzir os custos de armazenamento ou aplicar as
práticas recomendadas de proteção de dados.
Seleção de métricas
O S3 Storage Lens oferece duas seleções de métricas que você pode escolher para seu painel e exportar:
métricas gratuitas e métricas e recomendações avançadas.
• Métricas gratuitas
O S3 Storage Lens oferece métricas gratuitas para todos os painéis e configurações. As métricas
gratuitas contêm métricas relevantes para o uso do armazenamento. Isso inclui o número de buckets,
os objetos em sua conta e em que estado eles estão. Todas as métricas gratuitas são coletadas
diariamente e mantidas por um período de retenção de 14 dias. Para obter mais informações sobre
quais métricas de uso são agregadas pelo S3 Storage Lens, consulte Glossário de métricas.
• Métricas e recomendações avançadas
O S3 Storage Lens oferece métricas gratuitas para todos os painéis e configurações e a opção de
atualizar para a opção de métricas e recomendações avançadas. As métricas avançadas contêm todas
as métricas de uso incluídas nas métricas gratuitas. Isso inclui o número de buckets, os objetos em sua
conta e em que estado eles estão.
Com métricas avançadas, você também pode coletar métricas de uso no nível de prefixo. Além disso,
métricas avançadas incluem métricas de atividade. Os dados de métricas de atividade são relevantes
para sua atividade de armazenamento. Isso inclui o número de solicitações, verificações e erros
em relação ao escopo de configuração e em que estado eles estão. Todas as métricas avançadas
são coletadas diariamente e mantidas por um período de retenção de 15 meses. Para obter mais
informações sobre as métricas de armazenamento agregadas pelo S3 Storage Lens, consulte Glossário
de métricas.
Essa seleção de métricas também fornece recomendações para ajudá-lo a otimizar seu
armazenamento. As recomendações são colocadas contextualmente ao lado de métricas relevantes no
painel. Aplicam-se cobranças adicionais. Para obter mais informações, consulte Definição de preço do
Amazon S3.
Note
Para obter mais informações, consulte Usando o Amazon S3 Storage Lens com o AWS
Organizations (p. 905).
• Acesso confiável
Usando a conta de gerenciamento da sua organização, você deve habilitar o acesso confiável para o S3
Storage Lens para agregar métricas de armazenamento e dados de uso para todas as contas membros
da sua organização. Em seguida, você pode criar painéis ou exportações para sua organização
usando sua conta de gerenciamento ou dando acesso ao administrador delegado a outras contas da
organização.
Você pode desativar o acesso confiável para o S3 Storage Lens a qualquer momento, o que impede o
S3 Storage Lens de agregar métricas para sua organização.
• Administrador delegado
Você pode criar painéis e métricas para o S3 Storage Lens para sua organização usando sua conta de
gerenciamento do AWS Organizations ou dando acesso de administrador delegado a outras contas em
sua organização. Você pode cancelar o registro de administradores delegados a qualquer momento, o
que impede o S3 Storage Lens de coletar dados em nível de organização.
Para obter mais informações, consulte Amazon S3 Storage Lens e AWS Organizations no Guia do usuário
do AWS Organizations.
Juntamente com o acesso confiável do AWS Organizations, o Amazon S3 Storage Lens usa funções
vinculadas ao serviço do AWS Identity and Access Management (IAM). Uma função vinculada a serviço é
um tipo exclusivo de função do IAM vinculada diretamente ao S3 Storage Lens. As funções vinculadas a
serviços são predefinidas pelo S3 Storage Lens e incluem todas as permissões necessárias para coletar
métricas diárias de uso de armazenamento e atividade de contas de membros em sua organização.
Para obter mais informações, consulte Usar funções vinculadas de serviço ao Amazon S3 Storage Lens.
Depois de habilitar o acesso confiável, você pode adicionar acesso de administrador delegado às contas
em sua organização. Essas contas podem criar painéis e configurações para toda a organização para o S3
Storage Lens.
Para obter mais informações sobre como habilitar o acesso confiável, consulte Amazon S3 Storage Lens e
AWS Organizations no Guia do usuário do AWS Organizations.
Tópicos
• Ativando acesso confiável para o S3 Storage Lens (p. 906)
• Desativação do acesso confiável para o S3 Storage Lens (p. 906)
• Registro de um administrador delegado para o S3 Storage Lens (p. 906)
• Cancelamento do registro de um administrador delegado para o S3 Storage Lens (p. 907)
Sempre que uma configuração de painel é criada, o S3 Storage Lens cria funções vinculadas a serviços
nas contas de gerenciamento ou administrador delegado da sua organização. A função vinculada ao
serviço concede permissões do S3 Storage Lens para descrever organizações, listar contas, verificar uma
lista de acesso de serviço para as organizações e obter administradores delegados para a organização. O
S3 Storage Lens pode coletar métricas de uso de armazenamento entre contas e atividades para painéis
dentro de contas em suas organizações. Para obter mais informações, consulte Usar funções vinculadas a
serviço do Amazon S3 Storage Lens.
Depois de habilitar o acesso confiável, você pode atribuir acesso de administrador delegado a contas em
sua organização. Quando uma conta é marcada como administrador delegado para um serviço, a conta
recebe autorização para acessar todas as APIs da organização somente leitura. Isso fornece visibilidade
aos membros e estruturas da sua organização para que eles possam criar painéis do S3 Storage Lens em
seu nome.
Note
Somente a conta de gerenciamento pode habilitar o acesso confiável para o Amazon S3 Storage
Lens.
A remoção de uma conta como administrador delegado limitará o acesso às métricas do painel do S3
Storage Lens para funcionar apenas em nível de conta. Todos os painéis organizacionais criados não
são mais atualizados, mas manterão seus dados históricos de acordo com seus respectivos períodos de
retenção.
Note
Para registrar um administrador delegado usando o console do Amazon S3, consulte Registro de
administradores delegados para o S3 Storage Lens (p. 929).
Você também pode registrar um administrador delegado usando a API REST do AWS Organizations,
AWS CLI ou SDKs da conta de gerenciamento. Para obter mais informações, consulte
RegisterDelegatedAdministrator na Referência da API do AWS Organizations.
Note
Antes de designar um administrador delegado usando a API REST do AWS Organizations, AWS
CLI ou SDKs, você deve chamar a operação EnableAwsOrganizationsAccess .
Para cancelar o registro de um administrador delegado usando o console do S3, consulte Cancelamento
do registro de administradores delegados para o S3 Storage Lens (p. 930).
Você também pode cancelar o registro de um administrador delegado usando a API REST do AWS
Organizations, AWS CLI ou SDKs da conta de gerenciamento. Para obter mais informações, consulte
DeRegisterDelegatedAdministrator na Referência da API do AWS Organizations.
Note
• Essa ação também impede automaticamente todos os painéis no nível da organização criados
por esse administrador delegado de agregar novas métricas de armazenamento.
• As contas de administrador delegado ainda poderão ver os dados históricos desses painéis de
acordo com seus respectivos períodos de retenção.
O usuário ou função do IAM deve pertencer à conta que criou ou possui o painel ou a configuração, a
menos que sua conta seja membro do AWS Organizations, e você tenha acesso para criar painéis no nível
da organização por sua conta de gerenciamento como administrador delegado.
Note
• Você não pode usar as credenciais de usuário raiz da sua conta para visualizar os painéis do
Amazon S3 Storage Lens. Para acessar os painéis do S3 Storage Lens, você deve conceder as
permissões do IAM necessárias a um usuário do IAM novo ou existente. Em seguida, faça login
com essas credenciais de usuário para acessar os painéis do S3 Storage Lens. Para obter mais
informações, consulte Perguntas frequentes sobre o AWS Identity and Access Management.
• O uso do S3 Storage Lens no console do Amazon S3 pode exigir várias permissões. Por
exemplo; para editar um painel no console, você precisa das seguintes permissões:
• s3:ListStorageLensConfigurations
• s3:GetStorageLensConfiguration
• s3:PutStorageLensConfiguration
Tópicos
• Definição de permissões de conta para usar o S3 Storage Lens (p. 908)
• Definir permissões para usar o S3 Storage Lens com o AWS Organizations (p. 909)
s3:GetStorageLensConfiguration
s3:PutStorageLensConfiguration
s3:PutStorageLensConfigurationTagging
s3:GetStorageLensDashboard
s3:DeleteStorageLensConfiguration
Note
• Você pode usar tags de recurso em uma política do IAM para gerenciar permissões.
• Um usuário/função do IAM com essas permissões pode ver métricas de buckets e prefixos dos
quais eles podem não ter permissão direta para ler ou listar objetos.
Permissões do IAM relacionadas a AWS Organizations para usar o Amazon S3 Storage Lens
organizations:ListAWSServiceAccessForOrganization
organizations:ListDelegatedAdministrators
iam:CreateServiceLinkedRole
As métricas e recomendações avançadas incluem métricas de uso com agregação em nível de prefixo,
métricas de atividade agregadas por bucket e recomendações contextuais (disponíveis apenas no painel).
As métricas de atividade têm uma política de retenção de dados de 15 meses. Há cobranças adicionais
pelo uso do S3 Storage Lens com métricas avançadas. Para obter mais informações, consulte Definição
de preço do Amazon S3.
Tópicos
• Exibição das métricas da lente de armazenamento do S3 nos painéis (p. 910)
• Exibição de métricas de lente de armazenamento do Amazon S3 usando uma exportação de
dados (p. 910)
O painel fornece uma visualização interativa para o uso do armazenamento e as métricas de atividade.
Você pode visualizar tendências em toda a organização ou ver tendências mais granulares por conta da
AWS, região da AWS, classe de armazenamento, bucket S3 ou prefixo.
Se sua conta for membro do AWS Organizations, você também poderá ver o uso e a atividade do
armazenamento para toda a sua organização em contas membro. Essas informações estão disponíveis
para você, desde que o S3 Storage Lens tenha recebido acesso confiável à sua organização e você seja
uma conta de gerenciamento autorizado ou administrador delegado.
Use o painel interativo para explorar suas tendências e insights de uso de armazenamento e atividades,
além de obter recomendações contextuais para práticas recomendadas para otimizar seu armazenamento.
Para obter mais informações, consulte Noções básicas do Amazon S3 Storage Lens.
O Amazon S3 preconfigura o painel padrão do S3 Storage Lens para ajudá-lo a visualizar insights
resumidos e tendências de uso agregado de armazenamento e métricas de atividade de toda a sua
conta (atualização opcional). Você não pode modificar o escopo de configuração padrão do painel, mas
a seleção de métricas pode ser atualizada de métricas gratuitas para as métricas e recomendações
avançadas pagas. Você pode configurar a exportação de métricas opcionais ou até mesmo desabilitar o
painel. No entanto, o painel padrão não pode ser excluído.
Além do painel padrão criado pelo Amazon S3, você também pode criar painéis personalizados com
escopo para as contas, regiões, buckets e prefixos da sua própria organização (somente no nível da
conta). Esses painéis personalizados podem ser editados, excluídos e desativados.
Note
O painel do Amazon S3 Storage Lens está disponível apenas no console do Amazon S3. Para
obter mais informações, consulte Exibição de um painel do Amazon S3 Storage Lens (p. 919).
Tópicos
• Usando uma CMK do AWS KMS para criptografar suas exportações de métricas (p. 911)
Usando uma CMK do AWS KMS para criptografar suas exportações de métricas
Para conceder ao Amazon S3 permissão para criptografar usando uma chave mestra de cliente (CMK)
gerenciada pelo cliente do AWS Key Management Service (AWS KMS), é necessário usar uma política
de chaves. Para atualizar sua política de chaves para que você possa usar uma CMK do AWS KMS para
criptografar as exportações de métricas do S3 Storage Lens, siga estas etapas.
1. Usando a conta da AWS que tem a CMK gerenciada pelo cliente, faça login no Console de
Gerenciamento da AWS.
2. Abra o console do AWS KMS em https://console.aws.amazon.com/kms.
3. Para alterar a região da AWS, use o Region selector (Seletor de regiões) no canto superior direito da
página.
4. No painel de navegação, escolha Customer managed keys (Chaves gerenciadas de cliente).
5. Em Customer managed keys (Chaves gerenciadas pelo cliente), escolha a chave que você deseja
usar para criptografar o arquivo de inventário. As CMKs são específicas da região e devem estar na
mesma região que o bucket S3 de destino de exportação de métricas.
6. Em Key policy (Política de chave), escolha Switch to policy view ((Alternar para visualização de
política).
7. Para atualizar a política de chave, escolha Edit (Editar).
8. Em Edit key policy (Editar política de chave), adicione a seguinte política de chave à existente.
{
"Sid": "Allow Amazon S3 Storage Lens use of the CMK",
"Effect": "Allow",
"Principal": {
"Service": "storage-lens.s3.amazonaws.com"
},
"Action": [
"kms:GenerateDataKey"
],
"Resource": "*"
}
Para obter mais informações sobre como criar CMKs gerenciadas pelo cliente do AWS KMS e usar
políticas de chaves, consulte os seguintes tópicos no Guia do desenvolvedor do AWS Key Management
Service:
• Conceitos básicos
• Usar políticas de chaves no AWS KMS
Você também pode usar a política de chaves PUT do AWS KMS (PutKeyPolicy) para copiar a política de
chaves para a CMK gerenciada pelo cliente que deseja usar para criptografar as exportações de métricas
usando a API REST, a AWS CLI e SDKs.
que exportam arquivos para esse dia estão localizadas. Sempre que uma nova exportação é entregue, ela
é acompanhada por um novo manifesto. Cada manifesto contido no manifest.json fornece metadados
e outras informações básicas sobre a exportação.
{
"sourceAccountId":"123456789012",
"configId":"my-dashboard-configuration-id",
"destinationBucket":"arn:aws:s3:::destination-bucket",
"reportVersion":"V_1",
"reportDate":"2020-11-03",
"reportFormat":"CSV",
"reportSchema":"version_number,configuration_id,report_date,aws_account_number,aws_region,storage_clas
"reportFiles":[
{
"key":"DestinationPrefix/StorageLens/123456789012/my-dashboard-configuration-id/
V_1/reports/dt=2020-11-03/a38f6bc4-2e3d-4355-ac8a-e2fdcf3de158.csv",
"size":1603959,
"md5Checksum":"2177e775870def72b8d84febe1ad3574"
}
}
{
"sourceAccountId":"123456789012",
"configId":"my-dashboard-configuration-id",
"destinationBucket":"arn:aws:s3:::destination-bucket",
"reportVersion":"V_1",
"reportDate":"2020-11-03",
"reportFormat":"Parquet",
"reportSchema":"message s3.storage.lens { required string version_number; required
string configuration_id; required string report_date; required string aws_account_number;
required string aws_region; required string storage_class; required string record_type;
required string record_value; required string bucket_name; required string metric_name;
required long metric_value; }",
"reportFiles":[
{
"key":"DestinationPrefix/StorageLens/123456789012/my-dashboard-configuration-id/
V_1/reports/dt=2020-11-03/bd23de7c-b46a-4cf4-bcc5-b21aac5be0f5.par",
"size":14714,
"md5Checksum":"b5c741ee0251cd99b90b3e8eff50b944"
}
}
Você pode configurar a exportação de métricas para serem geradas como parte da configuração do painel
no console do Amazon S3 ou usando a API REST do Amazon S3, a AWS CLI e os SDKs.
O valor do
registro
é apenas
codificado em
URL no formato
CSV
Veja a seguir um exemplo de uma exportação de métricas do S3 Storage Lens com base nesse esquema.
Métricas e recomendações avançadas incluem métricas de uso que podem ser agregadas por prefixo
e métricas de atividade . As métricas de atividade podem ser agregadas por bucket com uma política
de retenção de dados de 15 meses. Há cobranças adicionais quando você usa o S3 Storage Lens com
métricas e recomendações avançadas. Para obter mais informações, consulte Definição de preço do
Amazon S3.
Note
Os múltiplos de unidade métrica do S3 Storage Lens são escritos usando símbolos de prefixo
que são representados usando os símbolos do SI (Sistema Internacional de Unidades) que são
padronizados pelo BIPM (Bureau Internacional de Pesos e Medidas). Eles também são usados
no UCUM (Unified Code for Units of Measure). Para obter mais informações, consulte a Lista de
símbolos de prefixos do SI.
Esta seção contém exemplos de criação, atualização e exibição de configurações do S3 Storage Lens e
execução de operações relacionadas ao recurso. Se você estiver usando o S3 Storage Lens com o AWS
Organizations, esses exemplos também abordam esses casos de uso. Nos exemplos, substitua todos os
valores de variável por valores adequados às suas necessidades.
Tópicos
• Uso do Amazon S3 Storage Lens no console (p. 919)
• Exemplos de Amazon S3 Storage Lens usando a AWS CLI (p. 930)
• Exemplos do Amazon S3 Storage Lens usando o SDK para Java (p. 935)
Tópicos
• Exibição de um painel do Amazon S3 Storage Lens (p. 919)
• Criação e atualização dos painéis do Amazon S3 Storage Lens (p. 922)
• Desabilitar ou excluir painéis do Amazon S3 Storage Lens (p. 926)
• Como trabalhar com o AWS Organizations para criar painéis no nível da organização (p. 927)
práticas recomendadas de proteção de dados. É possível usar o S3 Storage Lens por meio do Console de
Gerenciamento da AWS, da AWS CLI, dos AWS SDKs ou da API REST.
O painel padrão do Amazon S3 Storage Lens é o painel de conta-padrão. Esse painel é pré-configurado
pelo Amazon S3 para ajudá-lo a visualizar insights resumidos e tendências para o uso agregado de
armazenamento e as métricas de atividade de toda a sua conta no console. Você não pode modificar
seu escopo de configuração, mas pode atualizar a seleção de métricas das Métricas gratuitas para as
Métricas e recomendações avançadas pagas, configurar a exportação de métricas opcionais ou até
mesmo desativá-la. O painel padrão não pode ser excluído.
Você também pode criar painéis adicionais do S3 Storage Lens focados em regiões específicas da AWS,
buckets do S3 ou outras contas em suas organizações.
O painel sempre é carregado para a data mais recente para a qual as métricas estão disponíveis.
No canto superior direito, você deve ver a data mais recente para a qual o S3 Storage Lens coletou
métricas de armazenamento. Você também tem acesso a filtros temporários para limitar ainda mais o
escopo dos dados do painel que você está exibindo. Há também uma opção de redefinição que você
pode usar para remover todos os filtros.
Seu painel sempre carrega a data mais recente para a qual as métricas estão disponíveis.
Note
Você não pode usar as credenciais de usuário raiz da sua conta para visualizar os painéis do
Amazon S3 Storage Lens. Para acessar os painéis do S3 Storage Lens, você deve conceder
as permissões do IAM necessárias a um usuário do IAM novo ou existente. Em seguida, faça
login com essas credenciais de usuário para acessar os painéis do S3 Storage Lens. Para
obter mais informações, consulte Definir permissões para usar o S3 Storage Lens.
O painel do S3 Storage Lens consiste em uma guia Overview (Visão geral) principal e até cinco guias
adicionais que representam cada nível de agregação:
Snapshot
Versão da API 2006-03-01
920
Amazon Simple Storage Service Guia do usuário
Exemplos e demonstração
A primeira seção é a seção Snapshot , que mostra as métricas que o S3 Storage Lens agregou para a
data anterior selecionada. Ela mostra dados agregados para as cinco métricas a seguir do escopo de
configuração do painel do S3 Storage Lens:
A seção Metrics (Métricas) da seção Snapshot mostra dados agregados das métricas de uso de
armazenamento e atividade agrupadas nas seguintes categorias:
• Resumo
• Eficiência de custos
• Proteção de dados
• Atividades
Você pode exibir as propriedades relevantes para essas métricas, incluindo totais, % tendências de
alteração (dia/dia, semana/semana e mês/mês) e recomendações.
Tendências e distribuição
As tendências fornecem duas métricas que você pode optar por comparar em um intervalo de datas
de sua escolha agregado por um período de sua escolha. Ele ajuda você a ver a relação entre as duas
tendências de métricas em relação ao escopo de armazenamento do painel. Você pode ver a classe de
armazenamento e a distribuição de região entre as duas tendências que você está rastreando.
Com as três maneiras diferentes de comparar métricas, você pode obter mais informações sobre seu
armazenamento que podem ajudá-lo a otimizar seu uso ao longo do tempo.
A terceira seção do painel S3 Storage Lens é a Top N overview (visão geral do Top N) (classificada em
ordem crescente ou decrescente). Isso permite que você veja suas métricas selecionadas nas contas topN
(se você habilitou o S3 Storage Lens para trabalhar com o AWS Organizations).
As guias Nível de dimensão fornecem uma exibição detalhada de todos os valores dentro de uma
determinada dimensão. Por exemplo, a guia Region (Região) mostra métricas para todas as regiões da
AWS e a guia Bucket mostra métricas para todos os buckets. Cada guia de dimensão contém um layout
idêntico composto por quatro seções:
• Um gráfico de tendências exibindo seus N itens principais dentro da dimensão nos últimos 30 dias para
a métrica selecionada. Por padrão, esse gráfico exibe os 10 principais itens, mas você pode aumentá-lo
para qualquer número desejado.
• Um gráfico de histograma mostra um gráfico de barras verticais para a data e a métrica selecionadas.
Talvez seja necessário rolar horizontalmente se tiver um número muito grande de itens a serem exibidos
neste gráfico.
• O gráfico de análise de bolhas representa todos os itens dentro da dimensão representando a primeira
métrica no eixo x, uma segunda métrica no eixo y e uma terceira métrica representada pelo tamanho da
bolha.
• A exibição de grade de métrica contém cada item na dimensão listada em linhas. As colunas
representam cada métrica disponível, organizadas em guias de categoria de métricas para facilitar a
navegação.
Note
Para fornecer uma experiência fluida na condução de sua análise, o painel do S3 Storage Lens
fornece um menu de ação detalhar, que aparece quando você escolhe qualquer valor de gráfico.
Escolha qualquer valor de gráfico para ver os valores de métricas associados e escolha entre
duas opções:
• A ação detalhar aplica o valor selecionado como um filtro em todas as guias do painel. Você
pode então detalhar esse valor para uma análise mais profunda.
• A ação analisar por leva você à guia de dimensão selecionada no painel e aplica esse valor
como um filtro. Em seguida, você pode visualizar esse valor no contexto da nova dimensão
para uma análise mais profunda.
As ações detalhar e analisar talvez não apareçam se o resultado produzir resultados ilógicos ou
não tiver valor. As ações detalhar e analisar por resultam na aplicação de filtros sobre quaisquer
filtros existentes em todas as guias do painel. Se necessário, você pode remover os filtros ou usar
a opção de redefinição para remover todos os filtros.
O painel padrão do Amazon S3 Storage Lens é o painel de conta-padrão. Esse painel é pré-configurado
pelo Amazon S3 para ajudá-lo a visualizar insights resumidos e tendências para o uso agregado de
armazenamento e as métricas de atividade de toda a sua conta no console. Você não pode modificar
seu escopo de configuração, mas pode atualizar a seleção de métricas das Métricas gratuitas para as
Métricas e recomendações avançadas pagas, configurar a exportação de métricas opcionais ou até
mesmo desativá-la. O painel padrão não pode ser excluído.
Você também pode criar painéis personalizados adicionais do S3 Storage Lens que podem ser escopo
para cobrir o AWS Organizations ou regiões ou buckets específicos em uma conta.
Tópicos
• Criação de um painel do Amazon S3 Storage Lens (p. 922)
• Atualização de um painel do Amazon S3 Storage Lens (p. 924)
Os nomes do painel devem ter menos de 65 caracteres e não devem conter caracteres ou
espaços especiais.
Note
Não é possível alterar o nome do painel depois que o painel for criado.
b. Escolha a região inicial do seu painel. As métricas do painel para todas as regiões incluídas neste
escopo do painel são armazenadas centralmente nesta região inicial designada.
c. Opcionalmente, você pode optar por adicionar Tags ao seu painel. Você pode usar tags para
gerenciar permissões para seu painel e rastrear os custos para o S3 Storage Lens.
Para obter mais informações, consulte Controlando o acesso usando tags de recursos no Guia
do usuário do IAM e Tags de alocação de custos geradas pela AWS no Guia do usuário do AWS
Billing and Cost Management.
Note
a. Escolha as regiões e os buckets que deseja que o S3 Storage Lens inclua ou exclua no painel.
b. Escolha os buckets nas regiões selecionadas que deseja que o S3 Storage Lens inclua ou exclua.
Você pode incluir ou excluir buckets, mas não ambos. Essa opção não está disponível quando
você cria painéis no nível da organização.
Note
• Você pode incluir ou excluir regiões e buckets. Essa opção é limitada a regiões somente ao
criar painéis no nível da organização em contas de membro na sua organização.
• Você pode escolher até 50 buckets para incluir ou excluir.
6. Na seção Metrics selection (Seleção de métricas), escolha o tipo de métricas que você deseja agregar
para este painel.
• Escolha Free Metrics (Métricas gratuitas) para incluir métricas de uso agregadas no nível de bucket
com retenção de 14 dias.
• Para obter um custo adicional, escolha Métricas e recomendações avançadas. Essa opção inclui
métricas de uso agregadas no nível de prefixo e métricas de atividade agregadas por bucket,
retenção de dados de 15 meses e recomendações contextuais que ajudam você a otimizar ainda
mais os custos de armazenamento e aplicar as práticas recomendadas de proteção de dados. Para
obter mais informações, consulte Definição de preço do Amazon S3.
a. A opção para habilitar métricas de atividade está incluída nas Métricas e recomendações
avançadas. Essa opção ajuda você a rastrear solicitações e erros de objetos no escopo do painel.
b. Escolha Ativar agregação de prefixos se quiser agregar suas métricas de uso no nível do prefixo
para que você possa receber insights detalhados para seus principais prefixos em cada bucket.
c. Se você optar por ativar aVersão
agregação de 2006-03-01
da API prefixos, você deve escolher o tamanho mínimo de limite
de prefixo que o S3 Storage Lens coletará
923 para este painel. Por exemplo, um limite de prefixo de
Amazon Simple Storage Service Guia do usuário
Exemplos e demonstração
1. Na seção Metrics Export (Exportação de métricas), escolha Enable (Ativar) para criar uma exportação
de métricas que será colocada diariamente em um bucket de destino de sua escolha.
A exportação de métricas está no formato CSV ou Apache Parquet. Ele representa o mesmo escopo
de dados que os dados do painel do S3 Storage Lens sem as recomendações.
2. Se ativado, escolha o formato de saída da exportação de métricas diárias. Você pode escolher
entre CSV ou Apache Parquet. Parquet é um formato de arquivo de código aberto para Hadoop que
armazena dados aninhados em um formato colunar plano.
3. Escolha o bucket do S3 de destino para sua exportação de métricas. Você pode escolher um bucket
na conta atual do painel do S3 Storage Lens. Ou você pode escolher outra conta da AWS se tiver as
permissões do bucket de destino e o ID da conta de proprietário do bucket de destino.
4. Escolha o destino (formato: s3://bucket/prefix) do bucket do S3 de destino. O endereço do
bucket deve estar no formato S3 na região inicial do painel de controle do S3 Storage Lens.
Note
• O nome do painel
• A região inicial
• O escopo do painel do painel padrão, que tem escopo para o armazenamento de toda a
sua conta.
4. Na página de configuração do painel, na seção General (Geral), você pode atualizar e adicionar tags
ao seu painel.
Você pode usar tags para gerenciar permissões para seu painel e rastrear os custos para o S3
Storage Lens. Para obter mais informações, consulte Controlando o acesso usando tags de recursos
no Guia do usuário do IAM e Tags de alocação de custos geradas pela AWS no Guia do usuário do
AWS Billing and Cost Management.
Note
• Atualize as regiões e os buckets que deseja que o S3 Storage Lens inclua ou exclua no painel.
Note
• Você pode incluir ou excluir regiões e buckets. Essa opção é limitada a regiões
somente ao criar painéis no nível da organização em contas de membro na sua
organização.
• Você pode escolher até 50 buckets para incluir ou excluir.
Atualize os buckets nas regiões selecionadas que deseja que o S3 Storage Lens inclua ou exclua.
Você pode incluir ou excluir buckets, mas não ambos. Esta opção não está presente ao criar
painéis no nível da organização.
6. Na seção Metrics selection(Seleção de métricas), atualize o tipo de métricas que você deseja agregar
para este painel.
Você pode escolher Métricas gratuitas para incluir métricas de uso agregadas no nível do bucket com
retenção de 14 dias.
Por um custo adicional, você pode escolher Métricas e recomendações avançadas. Isso inclui
métricas de uso agregadas no nível de prefixo, métricas de atividade agregadas por bucket, retenção
de dados de 15 meses e recomendações contextuais que ajudam você a otimizar ainda mais os
custos de armazenamento e aplicar as práticas recomendadas de proteção de dados. Para obter mais
informações, consulte Definição de preço do Amazon S3.
Se você optar por ativar Métricas e recomendações avançadas, poderá escolher opções adicionais da
seguinte forma:
a. A opção para habilitar métricas de atividade está incluída nas métricas e recomendações
avançadas. Essa opção ajuda você a rastrear solicitações e erros de objetos no escopo do painel.
b. Escolha Ativar agregação de prefixos se quiser agregar suas métricas de uso no nível do prefixo
para que você possa receber insights detalhados para seus principais prefixos em cada bucket.
c. Se você escolheu a agregação de prefixos, você deve escolher o tamanho mínimo de limite de
prefixo que o S3 Storage Lens coletará para este painel. Por exemplo, um limite de prefixo de
5% indica que os prefixos que compõem 5% ou mais em tamanho do armazenamento do bucket
serão agregados.
d. Você também deve escolher a profundidade do prefixo. Esta opção indica o número máximo de
níveis até os quais os prefixos são avaliados. A profundidade do prefixo deve ser inferior a 10.
Versão da API 2006-03-01
925
Amazon Simple Storage Service Guia do usuário
Exemplos e demonstração
e. Insira um caractere delimitador de prefixo. Este é o valor que é usado para identificar cada
nível de prefixo. O valor padrão no Amazon S3 para isso é o caractere / , mas sua estrutura de
armazenamento pode usar outros caracteres delimitadores.
a. Escolha Enable (Ativar) se quiser criar uma exportação de métricas que será colocada
diariamente em um bucket de destino de sua escolha. A exportação de métricas está no formato
CSV ou Apache Parquet e representa o mesmo escopo de dados que os dados do painel do S3
Storage Lens, sem as recomendações.
b. Se ativado, escolha o formato de saída da exportação de métricas diárias. Você pode escolher
entre CSV ou Apache Parquet. Parquet é um formato de arquivo de código aberto para Hadoop
que armazena dados aninhados em um formato colunar plano.
c. Atualize o bucket do S3 de destino da exportação de métricas. Você pode escolher entre um
bucket na conta atual do painel do S3 Storage Lens ou escolher outra conta da AWS se tiver as
permissões do bucket de destino e o ID da conta de proprietário do bucket de destino.
d. Atualize o destino (formato: s3://bucket/prefix) do bucket do S3 de destino. O endereço do
bucket deve estar no formato S3 na região inicial do painel de controle do S3 Storage Lens.
Note
O painel padrão do Amazon S3 Storage Lens é o painel de conta-padrão. Esse painel é pré-configurado
pelo Amazon S3 para ajudá-lo a visualizar insights resumidos e tendências para o uso agregado de
armazenamento e as métricas de atividade de toda a sua conta no console. Você não pode modificar
seu escopo de configuração, mas pode atualizar a seleção de métricas das Métricas gratuitas para as
Métricas e recomendações avançadas pagas, configurar a exportação de métricas opcionais ou até
mesmo desativá-la. O painel padrão não pode ser excluído.
Você pode excluir ou desativar um painel do Amazon S3 Storage Lens do console do Amazon S3.
Desativar ou excluir um painel impede que ele gere métricas no futuro. Um painel desativado ainda
mantém suas informações de configuração, para que possa ser facilmente retomado quando reativado.
Um painel desativado retém seus dados históricos até que sua política de retenção expire.
As seleções de Dados para métricas livres são mantidas por 14 dias e os dados das seleções de Métricas
e Recomendações avançadas são mantidas por 15 meses.
Tópicos
• Desativação de um painel do Amazon S3 Storage Lens (p. 927)
• Exclusão de um painel do Amazon S3 Storage Lens (p. 927)
• Como alternativa à exclusão de um painel, você pode desativar o painel para que ele esteja
disponível para ser reativado no futuro. Para obter mais informações, consulte Desativação de
um painel do Amazon S3 Storage Lens (p. 927).
• A exclusão do painel excluirá todas as configurações associadas a ele.
• A exclusão de um painel tornará todos os dados de métricas históricas indisponíveis. Esses
dados históricos ainda são mantidos até que seu período de retenção expire (14 dias ou 15
meses, dependendo se é um painel de métricas gratuito ou avançado). Se você quiser acessar
esses dados novamente, crie um painel com o mesmo nome na mesma região inicial daquele
que foi excluído.
ser baixada no formato CSV ou Parquet. Você pode usar o painel para visualizar insights e tendências,
sinalizar discrepâncias e fornecer recomendações para otimizar os custos de armazenamento e aplicar as
práticas recomendadas de proteção de dados. É possível usar o S3 Storage Lens por meio do Console de
Gerenciamento da AWS, da AWS CLI, dos AWS SDKs ou da API REST.
O painel padrão do Amazon S3 Storage Lens é o painel de conta-padrão. Esse painel é pré-configurado
pelo Amazon S3 para ajudá-lo a visualizar insights resumidos e tendências para o uso agregado de
armazenamento e as métricas de atividade de toda a sua conta no console. Você não pode modificar
seu escopo de configuração, mas pode atualizar a seleção de métricas das Métricas gratuitas para as
Métricas e recomendações avançadas pagas, configurar a exportação de métricas opcionais ou até
mesmo desativá-la. O painel padrão não pode ser excluído.
Você também pode criar painéis adicionais do S3 Storage Lens focados em regiões específicas da AWS,
buckets do S3 ou outras contas da AWS em sua organização.
O painel do Amazon S3 fornece um rico recurso de informações sobre seu escopo de armazenamento,
representando mais de 30 métricas que representam tendências e informações, incluindo resumo de
armazenamento, economia de custos, proteção de dados e atividade.
O Amazon S3 Storage Lens pode ser usado para coletar métricas de armazenamento e dados de uso de
todas as contas que fazem parte da hierarquia do AWS Organizations. Para fazer isso, você deve usar o
AWS Organizations e habilitar o acesso confiável do S3 Storage Lens usando sua conta de gerenciamento
do AWS Organizations.
Quando o acesso confiável estiver habilitado, você pode adicionar acesso de administrador delegado às
contas em sua organização. Essas contas podem criar painéis e configurações para toda a organização
para o S3 Storage Lens. Para obter mais informações sobre como habilitar o acesso confiável, consulte
Lens do Amazon S3 e AWS Organizations no Guia do usuário do AWS Organizations.
Os controles de console a seguir estão disponíveis apenas para as contas de gerenciamento do AWS
Organizations.
Tópicos
• Ativação do acesso confiável para o S3 Storage Lens em sua organização (p. 928)
• Desativação de acesso confiável do S3 Storage Lens em sua organização (p. 929)
• Registro de administradores delegados para o S3 Storage Lens (p. 929)
• Cancelamento do registro de administradores delegados para o S3 Storage Lens (p. 930)
A ativação do acesso confiável permite que o Amazon S3 Storage Lens acesse sua hierarquia, associação
e estrutura do AWS Organizations por meio de APIs da organização da AWS. O S3 Storage Lens se
torna um serviço confiável para toda a estrutura de sua organização. Ele pode criar funções vinculadas a
serviços nas contas de gerenciamento ou administrador delegado da sua organização sempre que uma
configuração de painel é criada.
A função vinculada ao serviço concede permissões do S3 Storage Lens para descrever organizações,
listar contas, verificar uma lista de acesso de serviço para as organizações e obter administradores
delegados para a organização. Isso permite que o S3 Storage Lens colete métricas de uso de
armazenamento entre contas e atividades para painéis dentro de contas em suas organizações.
Para obter mais informações, consulte Usar funções vinculadas de serviço ao Amazon S3 Storage Lens.
Note
A página Organization access (Acesso à organização) é aberta. Aqui você pode Habilitar o acesso
confiável para o S3 Storage Lens. Isso permite que você e quaisquer outros titulares de conta que
você adicionar como administradores delegados criem painéis para todas as contas e armazenamento
em sua organização.
A desativação do acesso confiável limitará o S3 Storage Lens a funcionar apenas em nível de conta. Cada
titular da conta só poderá ver os benefícios do S3 Storage Lens limitados ao escopo de sua conta e não
à sua organização. Quaisquer painéis que requerem acesso confiável não serão mais atualizados, mas
manterão seus dados históricos de acordo com seus respectivos períodos de retenção.
A remoção de uma conta como administrador delegado limita o acesso às métricas do painel do S3
Storage Lens para funcionar apenas em nível de conta. Todos os painéis organizacionais criados não
serão mais atualizados, mas manterão seus dados históricos de acordo com seus respectivos períodos de
retenção.
Note
A página Organization access (Acesso à organização) é aberta. Aqui você pode desativar o acesso
confiável para o S3 Storage Lens.
Depois de habilitar o acesso confiável, você pode registrar o acesso de administrador delegado às contas
em sua organização. Quando uma conta é registrada como administrador delegado, a conta recebe
autorização para acessar todas as APIs do AWS Organizations somente leitura. Isso fornece visibilidade
aos membros e estruturas da sua organização para que eles possam criar painéis do S3 Storage Lens em
seu nome.
A página de Delegated admin access (Acesso admin delegado) é aberta. Aqui você pode adicionar
um ID de conta da AWS como administrador delegado para criar painéis de nível de organização para
todas as contas e armazenamento em sua organização.
Você pode cancelar o registro de acesso de administrador delegado a contas em sua organização.
Quando uma conta é cancelada de registro como administrador delegado, a conta perde a autorização
para acessar todas as APIs somente leitura do AWS Organizations que fornecem visibilidade aos membros
e estruturas de sua organização.
Note
Os exemplos a seguir mostram como você pode usar o S3 Storage Lens com a interface da linha de
comando da AWS.
Tópicos
• Arquivos auxiliares para usar o Amazon S3 Storage Lens (p. 930)
• Usando configurações do Amazon S3 Storage Lens usando a AWS CLI (p. 932)
• Usando o Amazon S3 Storage Lens com o AWS Organizations usando a AWS CLI (p. 934)
Example config.json
Aplicam-se cobranças adicionais para Métricas e recomendações avançadas. Para obter mais
informações, consulte Métricas e recomendações avançadas.
{
"Id": "SampleS3StorageLensConfiguration", //Use this property to identify S3 Storage
Lens configuration.
"AwsOrg": { //Use this property when enabling S3 Storage Lens for AWS Organizations
"Arn": "arn:aws:organizations::222222222222:organization/o-abcdefgh"
},
"AccountLevel": {
"ActivityMetrics": {
"IsEnabled":true
},
"BucketLevel": {
"ActivityMetrics": {
"IsEnabled":true //Mark this as false if you only want Free Metrics metrics.
},
"PrefixLevel":{
"StorageMetrics":{
"IsEnabled":true, //Mark this as false if you only want Free Metrics
metrics.
"SelectionCriteria":{
"MaxDepth":5,
"MinStorageBytesPercentage":1.25,
"Delimiter":"/"
}
}
}
}
},
"Exclude": { //Replace with include if you prefer to include regions.
"Regions": [
"eu-west-1"
],
"Buckets": [ //This attribute is not supported for Organizations-level
configurations.
"arn:aws:s3:::source_bucket1"
]
},
"IsEnabled": true, //Whether the configuration is enabled
"DataExport": { //Details about the metrics export
"S3BucketDestination": {
"OutputSchemaVersion": "V_1",
"Format": "CSV", //You can add "Parquet" if you prefer.
"AccountId": "ExampleAWSAccountNo8",
"Arn": "arn:aws:s3:::destination-bucket-name", // The destination bucket for
your metrics export must be in the same Region as your S3 Storage Lens configuration.
"Prefix": "prefix-for-your-export-destination",
"Encryption": {
"SSES3": {}
}
}
}
}
Example tags.json
[
{
"Key": "key1",
"Value": "value1"
},
{
"Key": "key2",
"Value": "value2"
}
]
Example permissions.json
{
"Version": "2012-10-17", "Statement": [
{
"Effect": "Allow",
"Action": [
"iam:*",
"sts:AssumeRole"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action":
[
"s3:GetStorageLensConfiguration*",
"s3:DeleteStorageLensConfiguration*",
"s3:PutStorageLensConfiguration*"
],
"Condition": {
"StringEquals": {
"aws:ResourceTag/key1": "value1"
}
},
"Resource": "*"
}
]
}
Tópicos
• Colocar uma configuração do S3 Storage Lens (p. 933)
• Colocar uma configuração de S3 Storage Lens sem tags (p. 933)
• Obtém uma configuração do S3 Storage Lens (p. 933)
• Lista as configurações do S3 Storage Lens sem próximo token (p. 933)
Tópicos
• Habilitar o acesso confiável das organizações para o S3 Storage Lens (p. 934)
• Desativar o acesso confiável das organizações para o S3 Storage Lens (p. 934)
• Registrar administradores delegados das Organizações para o S3 Storage Lens (p. 935)
• Cancele o registro de administradores delegados das Organizações para o S3 Storage Lens (p. 935)
Os exemplos a seguir mostram como você pode usar o S3 Storage Lens com o AWS SDK para Java.
Tópicos
• Criar e atualizar uma configuração do S3 Storage Lens (p. 935)
• Excluir uma configuração do S3 Storage Lens (p. 937)
• Obtém uma configuração do S3 Storage Lens (p. 938)
• Lista as configurações do S3 Storage Lens (p. 939)
• Colocar tags em uma configuração do S3 Storage Lens (p. 939)
• Obter tags para uma configuração do S3 Storage Lens (p. 940)
• Excluir tags para uma configuração do S3 Storage Lens (p. 941)
• Atualizar a configuração padrão do S3 Storage Lens com Métricas e recomendações
avançadas (p. 942)
package aws.example.s3control;
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.services.s3control.AWSS3Control;
import com.amazonaws.services.s3control.AWSS3ControlClient;
import com.amazonaws.services.s3control.model.AccountLevel;
import com.amazonaws.services.s3control.model.ActivityMetrics;
import com.amazonaws.services.s3control.model.BucketLevel;
import com.amazonaws.services.s3control.model.Format;
import com.amazonaws.services.s3control.model.Include;
import com.amazonaws.services.s3control.model.OutputSchemaVersion;
import com.amazonaws.services.s3control.model.PrefixLevel;
import com.amazonaws.services.s3control.model.PrefixLevelStorageMetrics;
import com.amazonaws.services.s3control.model.PutStorageLensConfigurationRequest;
import com.amazonaws.services.s3control.model.S3BucketDestination;
import com.amazonaws.services.s3control.model.SSES3;
import com.amazonaws.services.s3control.model.SelectionCriteria;
import com.amazonaws.services.s3control.model.StorageLensAwsOrg;
import com.amazonaws.services.s3control.model.StorageLensConfiguration;
import com.amazonaws.services.s3control.model.StorageLensDataExport;
import com.amazonaws.services.s3control.model.StorageLensDataExportEncryption;
import com.amazonaws.services.s3control.model.StorageLensTag;
import java.util.Arrays;
import java.util.List;
try {
SelectionCriteria selectionCriteria = new SelectionCriteria()
.withDelimiter("/")
.withMaxDepth(5)
.withMinStorageBytesPercentage(10.0);
PrefixLevelStorageMetrics prefixStorageMetrics = new
PrefixLevelStorageMetrics()
.withIsEnabled(true)
.withSelectionCriteria(selectionCriteria);
BucketLevel bucketLevel = new BucketLevel()
.withActivityMetrics(new ActivityMetrics().withIsEnabled(true))
.withPrefixLevel(new
PrefixLevel().withStorageMetrics(prefixStorageMetrics));
AccountLevel accountLevel = new AccountLevel()
.withActivityMetrics(new ActivityMetrics().withIsEnabled(true))
.withBucketLevel(bucketLevel);
s3ControlClient.putStorageLensConfiguration(new
PutStorageLensConfigurationRequest()
.withAccountId(sourceAccountId)
.withConfigId(configurationId)
.withStorageLensConfiguration(configuration)
.withTags(tags)
);
} catch (AmazonServiceException e) {
// The call was transmitted successfully, but Amazon S3 couldn't process
// it and returned an error response.
e.printStackTrace();
} catch (SdkClientException e) {
// Amazon S3 couldn't be contacted for a response, or the client
// couldn't parse the response from Amazon S3.
e.printStackTrace();
}
}
}
package aws.example.s3control;
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.services.s3control.AWSS3Control;
import com.amazonaws.services.s3control.AWSS3ControlClient;
import com.amazonaws.services.s3control.model.DeleteStorageLensConfigurationRequest;
try {
AWSS3Control s3ControlClient = AWSS3ControlClient.builder()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(US_WEST_2)
.build();
s3ControlClient.deleteStorageLensConfiguration(new
DeleteStorageLensConfigurationRequest()
.withAccountId(sourceAccountId)
.withConfigId(configurationId)
);
} catch (AmazonServiceException e) {
// The call was transmitted successfully, but Amazon S3 couldn't process
// it and returned an error response.
e.printStackTrace();
} catch (SdkClientException e) {
// Amazon S3 couldn't be contacted for a response, or the client
// couldn't parse the response from Amazon S3.
e.printStackTrace();
}
}
}
package aws.example.s3control;
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.services.s3control.AWSS3Control;
import com.amazonaws.services.s3control.AWSS3ControlClient;
import com.amazonaws.services.s3control.model.GetStorageLensConfigurationRequest;
import com.amazonaws.services.s3control.model.GetStorageLensConfigurationResult;
import com.amazonaws.services.s3control.model.StorageLensConfiguration;
try {
AWSS3Control s3ControlClient = AWSS3ControlClient.builder()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(US_WEST_2)
.build();
System.out.println(configuration.toString());
} catch (AmazonServiceException e) {
// The call was transmitted successfully, but Amazon S3 couldn't process
// it and returned an error response.
e.printStackTrace();
} catch (SdkClientException e) {
// Amazon S3 couldn't be contacted for a response, or the client
// couldn't parse the response from Amazon S3.
e.printStackTrace();
}
}
}
package aws.example.s3control;
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.services.s3control.AWSS3Control;
import com.amazonaws.services.s3control.AWSS3ControlClient;
import com.amazonaws.services.s3control.model.ListStorageLensConfigurationEntry;
import com.amazonaws.services.s3control.model.ListStorageLensConfigurationsRequest;
import java.util.List;
try {
AWSS3Control s3ControlClient = AWSS3ControlClient.builder()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(US_WEST_2)
.build();
System.out.println(configurations.toString());
} catch (AmazonServiceException e) {
// The call was transmitted successfully, but Amazon S3 couldn't process
// it and returned an error response.
e.printStackTrace();
} catch (SdkClientException e) {
// Amazon S3 couldn't be contacted for a response, or the client
// couldn't parse the response from Amazon S3.
e.printStackTrace();
}
}
}
package aws.example.s3control;
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.services.s3control.AWSS3Control;
import com.amazonaws.services.s3control.AWSS3ControlClient;
import com.amazonaws.services.s3control.model.PutStorageLensConfigurationTaggingRequest;
import com.amazonaws.services.s3control.model.StorageLensTag;
import java.util.Arrays;
import java.util.List;
try {
List<StorageLensTag> tags = Arrays.asList(
new StorageLensTag().withKey("key-1").withValue("value-1"),
new StorageLensTag().withKey("key-2").withValue("value-2")
);
s3ControlClient.putStorageLensConfigurationTagging(new
PutStorageLensConfigurationTaggingRequest()
.withAccountId(sourceAccountId)
.withConfigId(configurationId)
.withTags(tags)
);
} catch (AmazonServiceException e) {
// The call was transmitted successfully, but Amazon S3 couldn't process
// it and returned an error response.
e.printStackTrace();
} catch (SdkClientException e) {
// Amazon S3 couldn't be contacted for a response, or the client
// couldn't parse the response from Amazon S3.
e.printStackTrace();
}
}
}
package aws.example.s3control;
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.services.s3control.AWSS3Control;
import com.amazonaws.services.s3control.AWSS3ControlClient;
import com.amazonaws.services.s3control.model.DeleteStorageLensConfigurationRequest;
import com.amazonaws.services.s3control.model.GetStorageLensConfigurationTaggingRequest;
import com.amazonaws.services.s3control.model.StorageLensTag;
import java.util.List;
System.out.println(s3Tags.toString());
} catch (AmazonServiceException e) {
// The call was transmitted successfully, but Amazon S3 couldn't process
// it and returned an error response.
e.printStackTrace();
} catch (SdkClientException e) {
// Amazon S3 couldn't be contacted for a response, or the client
// couldn't parse the response from Amazon S3.
e.printStackTrace();
}
}
}
package aws.example.s3control;
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.services.s3control.AWSS3Control;
import com.amazonaws.services.s3control.AWSS3ControlClient;
import com.amazonaws.services.s3control.model.DeleteStorageLensConfigurationTaggingRequest;
s3ControlClient.deleteStorageLensConfigurationTagging(new
DeleteStorageLensConfigurationTaggingRequest()
.withAccountId(sourceAccountId)
.withConfigId(configurationId)
);
} catch (AmazonServiceException e) {
// The call was transmitted successfully, but Amazon S3 couldn't process
// it and returned an error response.
e.printStackTrace();
} catch (SdkClientException e) {
// Amazon S3 couldn't be contacted for a response, or the client
// couldn't parse the response from Amazon S3.
e.printStackTrace();
}
}
}
package aws.example.s3control;
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.services.s3control.AWSS3Control;
import com.amazonaws.services.s3control.AWSS3ControlClient;
import com.amazonaws.services.s3control.model.AccountLevel;
import com.amazonaws.services.s3control.model.ActivityMetrics;
import com.amazonaws.services.s3control.model.BucketLevel;
import com.amazonaws.services.s3control.model.Format;
import com.amazonaws.services.s3control.model.Include;
import com.amazonaws.services.s3control.model.OutputSchemaVersion;
import com.amazonaws.services.s3control.model.PrefixLevel;
import com.amazonaws.services.s3control.model.PrefixLevelStorageMetrics;
import com.amazonaws.services.s3control.model.PutStorageLensConfigurationRequest;
import com.amazonaws.services.s3control.model.S3BucketDestination;
import com.amazonaws.services.s3control.model.SSES3;
import com.amazonaws.services.s3control.model.SelectionCriteria;
import com.amazonaws.services.s3control.model.StorageLensAwsOrg;
import com.amazonaws.services.s3control.model.StorageLensConfiguration;
import com.amazonaws.services.s3control.model.StorageLensDataExport;
import com.amazonaws.services.s3control.model.StorageLensDataExportEncryption;
import com.amazonaws.services.s3control.model.StorageLensTag;
import java.util.Arrays;
import java.util.List;
try {
SelectionCriteria selectionCriteria = new SelectionCriteria()
.withDelimiter("/")
.withMaxDepth(5)
.withMinStorageBytesPercentage(10.0);
PrefixLevelStorageMetrics prefixStorageMetrics = new
PrefixLevelStorageMetrics()
.withIsEnabled(true)
.withSelectionCriteria(selectionCriteria);
BucketLevel bucketLevel = new BucketLevel()
.withActivityMetrics(new ActivityMetrics().withIsEnabled(true))
.withPrefixLevel(new
PrefixLevel().withStorageMetrics(prefixStorageMetrics));
AccountLevel accountLevel = new AccountLevel()
.withActivityMetrics(new ActivityMetrics().withIsEnabled(true))
.withBucketLevel(bucketLevel);
s3ControlClient.putStorageLensConfiguration(new
PutStorageLensConfigurationRequest()
.withAccountId(sourceAccountId)
.withConfigId(configurationId)
.withStorageLensConfiguration(configuration)
);
} catch (AmazonServiceException e) {
// The call was transmitted successfully, but Amazon S3 couldn't process
// it and returned an error response.
e.printStackTrace();
} catch (SdkClientException e) {
// Amazon S3 couldn't be contacted for a response, or the client
// couldn't parse the response from Amazon S3.
e.printStackTrace();
}
}
}
Note
Aplicam-se cobranças adicionais para Métricas e recomendações avançadas. Para obter mais
informações, consulte Métricas e recomendações avançadas.
Para obter mais informações, consulte O que é o AWS X-Ray? no Guia do desenvolvedor do AWS X-Ray.
Tópicos
• Como o X-ray funciona com o Amazon S3 (p. 944)
• Regiões disponíveis (p. 944)
O Amazon S3 integra-se ao X-Ray para propagar o contexto de rastreamento e fornecer uma cadeia
de solicitações com nós upstream e downstream. Se um serviço upstream incluir um cabeçalho de
rastreamento formatado válido com sua solicitação do S3, o Amazon S3 passará o cabeçalho de
rastreamento ao entregar notificações de eventos para serviços downstream, como Lambda, Amazon SQS
e Amazon SNS. Se você tiver todos esses serviços ativamente integrados ao X-Ray, eles serão vinculados
em uma cadeia de solicitações para fornecer os detalhes completos de suas solicitações do Amazon S3.
Para enviar cabeçalhos de rastreamento de X-Ray por meio do Amazon S3, você deve incluir um Id de
rastreamento de X-Amzn formatado em suas solicitações. Você também pode instrumentar o cliente do
Amazon S3 usando os SDKs do AWS X-Ray. Para obter uma lista dos SDKs compatíveis, consulte a
documentação do AWS X-Ray.
Mapas de serviço
Os mapas de serviço do X-Ray mostram as relações entre o Amazon S3 e outros serviços e recursos da
AWS em sua aplicação em tempo quase real. Para ver as solicitações completas usando os mapas de
serviço X-Ray, você pode usar o console X-Ray para visualizar um mapa das conexões entre o Amazon
S3 e outros serviços que sua aplicação usa. Você pode detectar facilmente onde estão ocorrendo altas
latências, visualizar a distribuição de nós para esses serviços e, em seguida, detalhar os serviços e
caminhos específicos que afetam o desempenho da aplicação.
Análise de X-Ray
Você também pode usar o console Analytics (Análises) do X-Ray para analisar rastreamentos, visualizar
métricas como latência e taxas de falha e gerar Insights para ajudar a identificar e solucionar problemas.
Este console também mostra métricas como latência média e taxas de falha. Para obter mais informações,
consulte Console do AWS X-Ray no Guia do desenvolvedor do AWS X-Ray.
Regiões disponíveis
O suporte do AWS X-Ray para Amazon S3 está disponível em todas as regiões do AWS X-Ray. Para obter
mais informações, consulte Amazon S3 e AWS X-Ray no Guia do desenvolvedor do AWS X-Ray.
Em contrapartida, um site dinâmico usa processamento do servidor, incluindo scripts de servidor como
PHP, JSP ou ASP.NET. O Amazon S3 não oferece suporte a scripts no lado do servidor, mas a AWS tem
outros recursos para hospedar sites dinâmicos. Para saber mais sobre a hospedagem de sites na AWS,
consulte Hospedagem da Web.
Note
É possível usar o console do AWS Amplify para hospedar um aplicativo da web de página única.
O console do AWS Amplify oferece suporte a aplicativos de página única criados com estruturas
de trabalho de aplicativos de página única (por exemplo, React JS, Vue JS, Angular JS e Nuxt)
e geradores de sites estáticos (por exemplo, Gatsby JS, React-static, Jekyll e Hugo). Para obter
mais informações, consulte Conceitos básicos no Guia do usuário do console do AWS Amplify.
Para obter mais informações sobre como hospedar um site estático no Amazon S3, incluindo instruções e
demonstrações passo a passo, consulte os seguintes tópicos:
Tópicos
• Endpoints de site (p. 945)
• Habilitar a hospedagem de sites (p. 947)
• Configurar um documento de índice (p. 951)
• Configurar um documento de erro personalizado (p. 953)
• Definir permissões para acesso ao site (p. 956)
• (Opcional) Registrar em log o tráfego da web (p. 959)
• (Opcional) Configurar um redirecionamento de uma página da Web (p. 959)
• Demonstrações: hospedar sites no Amazon S3 (p. 967)
Endpoints de site
Quando você configura seu bucket como um site estático, o site fica disponível no endpoint de site
específico da região da AWS do bucket. Os endpoints de site são diferentes dos endpoints para onde você
envia solicitações de API REST. Para obter mais informações sobre as diferenças entre os endpoints,
consulte Principais diferenças entre um endpoint de site e um endpoint de API REST (p. 947).
Esses URLs retornam o documento de indexação padrão configurado para o site. Para obter uma lista
completa dos endpoints do site do Amazon S3, consulte Endpoints de site do Amazon S3.
Para que seus clientes acessem o conteúdo no endpoint de site, é necessário fazer com que seu conteúdo
seja publicamente legível. Para fazer isso, edite as configurações de bloqueio de acesso público do S3 do
bucket. Para obter mais informações, consulte Bloquear o acesso público ao armazenamento do Amazon
S3 (p. 469). Depois, use uma política de bucket ou uma lista de controle de acesso (ACL) em um objeto
para conceder as permissões necessárias. Para obter mais informações, consulte Definir permissões para
acesso ao site (p. 956).
Important
Os endpoints de site do Amazon S3 não são compatíveis com HTTPS. Para obter informações
sobre o uso de HTTPS com um bucket do Amazon S3, consulte o seguinte:
• Como uso o CloudFront para atender a solicitações HTTPS para meu bucket do Amazon S3?
• Exigir HTTPS para comunicação entre visualizadores e CloudFront
Os buckets de pagamento pelo solicitante não permitem acesso pelo endpoint do site.
Qualquer solicitação para tal bucket recebe uma resposta 403 Acesso negado. Para obter mais
informações, consulte Configuração de buckets de Pagamento pelo solicitante para transferências
de armazenamento e uso (p. 56).
Tópicos
• Exemplos de endpoint de site (p. 946)
• Adicionar um registro DNS CNAME (p. 946)
• Usar um domínio personalizado com o Route 53 (p. 947)
• Principais diferenças entre um endpoint de site e um endpoint de API REST (p. 947)
http://bucket-name.s3-website.Region.amazonaws.com/object-name
Por exemplo, o URL a seguir solicita o objeto photo.jpg que está armazenado no nível raiz do bucket.
http://example-bucket.s3-website.us-west-2.amazonaws.com/photo.jpg
http://bucket-name.s3-website.Region.amazonaws.com/folder-name/object-name
http://example-bucket.s3-website.us-west-2.amazonaws.com/docs/doc1.html
pode criar um bucket www.example-bucket.com e adicionar um registro DNS CNAME que aponte
para www.example-bucket.com.s3-website.Region.amazonaws.com. Todas as solicitações
a http://www.example-bucket.com são redirecionadas para www.example-bucket.com.s3-
website.Region.amazonaws.com.
Para obter mais informações, consulte Personalizar URLs do Amazon S3 com CNAMEs (p. 1028).
Para ver uma demonstração de exemplo, consulte Configurar um site estático usando um domínio
personalizado registrado no Route 53 (p. 973).
Controle de acesso Oferece suporte a conteúdo público e Oferece suporte apenas a conteúdo
privado publicamente legível
Solicitações com Oferece suporte a todas as operações Oferece suporte apenas a solicitações
suporte de bucket e de objeto GET e HEAD em objetos
Suporte a Secure Oferece suporte a conexões SSL Não oferece suporte a conexões SSL
Sockets Layer
(SSL)
Para obter uma lista completa dos endpoints do Amazon S3, consulte Endpoints e cotas do Amazon S3 na
Referência geral da AWS.
Você também pode ativar a hospedagem de sites estáticos usando a API REST, os AWS SDKs, a AWS
CLI ou o AWS CloudFormation.
Para configurar seu site com um domínio personalizado, consulte Configurar um site estático usando um
domínio personalizado registrado no Route 53 (p. 973).
Uso do console do S3
Como habilitar a hospedagem de sites estáticos
Por exemplo, você pode encaminhar solicitações condicionalmente de acordo com nomes de chave
de objeto ou prefixos específicos na solicitação. Para obter mais informações, consulte Configurar
redirecionamentos condicionais avançados (p. 962).
10. Selecione Save changes.
O Amazon S3 permite a hospedagem estática de sites para seu bucket. Na parte inferior da página,
em Static website hosting (Hospedagem estática de sites), você verá o endpoint do site do seu bucket.
11. Em Static website hosting (Hospedagem de sites estáticos), anote o Endpoint.
.NET
O exemplo a seguir mostra como usar o AWS SDK para .NET para gerenciar a configuração de site
para um bucket. Para adicionar uma configuração de site a um bucket, forneça um nome de bucket e
uma configuração de site. A configuração de site deve incluir um documento de índice e pode conter
um documento de erro opcional. Esses documentos devem ser armazenados no bucket. Para obter
mais informações, consulte PUT Bucket website. Para obter mais informações sobre o recurso de site
do Amazon S3, consulte Hospedagem de um site estático usando o Amazon S3 (p. 945).
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class WebsiteConfigTest
{
private const string bucketName = "*** bucket name ***";
private const string indexDocumentSuffix = "*** index object key ***"; // For
example, index.html.
private const string errorDocument = "*** error object key ***"; // For
example, error.html.
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 client;
public static void Main()
{
client = new AmazonS3Client(bucketRegion);
AddWebsiteConfigurationAsync(bucketName, indexDocumentSuffix,
errorDocument).Wait();
}
PHP
O exemplo de PHP a seguir adiciona uma configuração de site ao bucket especificado. O método
create_website_config fornece explicitamente os nomes de documentos de índice e de
documentos de erros. O exemplo também recupera a configuração de site e imprime a resposta. Para
obter mais informações sobre o recurso de site do Amazon S3, consulte Hospedagem de um site
estático usando o Amazon S3 (p. 945).
Para obter instruções sobre criar e testar um exemplo funcional, consulte Usar o AWS SDK para PHP
e executar exemplos do PHP (p. 1044).
require 'vendor/autoload.php';
use Aws\S3\S3Client;
]
]);
Depois, é necessário configurar o documento de índice e definir permissões. Para obter informações,
consulte Configurar um documento de índice (p. 951) e Definir permissões para acesso ao site (p. 956).
Também é possível configurar um documento de erro (p. 953), o registro em log do tráfego da
web (p. 959) ou um redirecionamento (p. 959).
Quando você habilita a hospedagem de sites estáticos para seu bucket, insere o nome do documento de
índice (por exemplo, index.html). Depois de habilitar a hospedagem de sites estáticos para seu bucket,
faça upload de um arquivo HTML com o nome do documento de índice para o bucket.
A barra no final do URL no nível raiz é opcional. Por exemplo, se você configurar seu site com
index.html como o documento de índice, qualquer um dos URLs a seguir retornará index.html.
http://example-bucket.s3-website.Region.amazonaws.com/
http://example-bucket.s3-website.Region.amazonaws.com
Para obter mais informações sobre endpoints de site do Amazon S3, consulte Endpoints de site (p. 945).
Por exemplo, considere um bucket com três objetos e que tenha os nomes de chaves a seguir. Embora
esses objetos sejam armazenados sem uma organização hierárquica física, você pode pressupor a
seguinte estrutura lógica de pastas com base nos nomes das chaves.
No console do Amazon S3, você também pode criar uma pasta em um bucket. Por exemplo, você pode
criar uma pasta chamada photos. Você pode fazer upload de objetos no bucket ou na pasta photos no
bucket. Se você adicionar o objeto sample.jpg ao bucket, o nome da chave será sample.jpg. Se você
fizer upload do objeto na pasta photos, o nome da chave de objeto será photos/sample.jpg.
Se você criar um estrutura de pastas em seu bucket, deverá ter um documento de índice em cada nível.
Em cada pasta, o documento de índice deve ter o mesmo nome, por exemplo, index.html. Quando um
usuário especificar um URL que se assemelhe a uma consulta de pasta, a presença ou a ausência de uma
barra no final determinará o comportamento do site. Por exemplo, o URL a seguir, com uma barra no final,
retorna o documento de índice photos/index.html.
http://bucket-name.s3-website.Region.amazonaws.com/photos/
Contudo, se você excluir a barra no final do URL anterior, o Amazon S3 procurará primeiro um objeto
photos no bucket. Se o objeto photos não for encontrado, ele procurará um documento de índice,
photos/index.html. Se esse documento for encontrado, o Amazon S3 retornará uma mensagem 302
Found e apontará para a chave photos/. Para solicitações subsequentes a photos/, o Amazon S3
retorna photos/index.html. Se o documento de índice não for encontrado, o Amazon S3 retornará um
erro.
Ao habilitar a hospedagem de sites estáticos para o bucket, insira o nome do documento de índice (por
exemplo, index.html). Depois de habilitar a hospedagem de sites estáticos para seu bucket, faça upload
de um arquivo HTML com esse nome de documento de índice para o bucket.
Se você não tiver um arquivo index.html, poderá usar o HTML a seguir para criar um:
5. Habilite a hospedagem de sites estáticos para seu bucket e insira o nome exato do documento de
índice (por exemplo, index.html). Para obter mais informações, consulte Habilitar a hospedagem de
sites (p. 947).
Para obter instruções detalhadas, consulte Fazer upload de objetos (p. 71).
7. (Opcional) Faça upload do conteúdo de outro site para o seu bucket.
Depois, é necessário definir permissões para acesso ao site. Para obter mais informações, consulte Definir
permissões para acesso ao site (p. 956).
Também é possível configurar um documento de erro (p. 953), o registro em log do tráfego da
web (p. 959) ou um redirecionamento (p. 959).
Quando um erro ocorre, alguns navegadores exibem sua própria mensagem, ignorando o
documento de erro que o Amazon S3 retorna. Por exemplo, quando ocorre um erro HTTP 404 Not
Found, o Google Chrome pode ignorar o documento de erro que o Amazon S3 retorna e exibir
seu próprio erro.
Tópicos
• Códigos de resposta HTTP do Amazon S3 (p. 953)
• Configurar um documento de erro personalizado (p. 955)
301 Moved Quando um usuário enviar uma solicitação diretamente a endpoints de site do
Permanently Amazon S3 (http://s3-website.Region.amazonaws.com/), o Amazon
(301 movido S3 retornará uma resposta 301 Moved Permanently e redirecionará essas
permanentemente) solicitações para https://aws.amazon.com/s3/.
302 Found (302 Quando o Amazon S3 recebe uma solicitação para uma chave x,
Encontrado) http://bucket-name.s3-website.Region.amazonaws.com/x, sem uma
barra no final, ele tenta localizar o objeto com o nome de chave x. Se o objeto não
400 Malformed O endpoint de site responde com 400 Malformed Request (400 Solicitação
Request (400 malformada) quando um usuário tenta acessar um bucket pelo endpoint regional
Solicitação incorreto.
malformada)
403 Forbidden (403 O endpoint de site responde com 403 Forbidden (403 Proibido) quando uma
Proibido) solicitação de usuário se traduz em um objeto que não é publicamente legível.
O proprietário do objeto deve tornar o objeto publicamente legível usando uma
política de bucket ou uma ACL.
404 Not Found (404 O endpoint de site responde com 404 Not Found (404 Não encontrado) pelos
Não encontrado) seguintes motivos:
Para obter informações sobre como o Amazon S3 interpreta o URL como uma
solicitação de um objeto ou um documento de índice, consulte Configurar um
documento de índice (p. 951).
500 Service Error O endpoint de site responde com 500 Service Error (500 Erro de serviço) quando
(500 Erro de ocorre um erro interno de servidor.
serviço)
503 Service O endpoint de site responde com 503 Service Unavailable quando o Amazon S3
Unavailable (503 determina que você precisa reduzir sua taxa de solicitações.
Serviço não
disponível)
Para cada um desses erros, o Amazon S3 retorna uma mensagem HTML predefinida. Veja a seguir uma
mensagem HTML de exemplo que é retornada para a resposta 403 Forbidden (403 Proibido).
Para configurar um documento de erro personalizado usando o console do S3, siga as etapas abaixo.
Você também pode configurar um documento de erro usando a API REST, os AWS SDKs, a CLI da AWS
ou o AWS CloudFormation. Para obter mais informações, consulte:
Ao habilitar a hospedagem de site estático para o bucket, insira o nome do documento de erro (por
exemplo, 404.html). Depois de habilitar a hospedagem de sites estáticos para seu bucket, faça upload
de um arquivo HTML com esse nome de documento de erros para o bucket.
Para obter instruções detalhadas, consulte Fazer upload de objetos (p. 71).
Tópicos
• Etapa 1: Editar configurações de bloqueio de acesso público do S3 (p. 956)
• Etapa 2: Adicionar uma política de bucket (p. 957)
Por exemplo, se você permitir o acesso público a um bucket, mas bloquear todo o acesso público no nível
da conta, o Amazon S3 continuará a bloquear o acesso público ao bucket. Neste cenário, você precisaria
editar as configurações de bloqueio de acesso público no nível do bucket e no nível da conta. Para obter
mais informações, consulte Bloquear o acesso público ao armazenamento do Amazon S3 (p. 469).
Por padrão, o Amazon S3 bloqueia o acesso público à sua conta e aos seus buckets. Se quiser usar um
bucket para hospedar um site estático, use estas etapas para editar as configurações de bloqueio de
acesso público.
Warning
Antes de concluir esta etapa, revise Bloquear o acesso público ao armazenamento do Amazon
S3 (p. 469) para garantir que você entenda e aceite os riscos envolvidos em permitir o acesso
público. Ao desativar as configurações de bloqueio de acesso público para tornar seu bucket
público, qualquer pessoa na Internet pode acessá-lo. Recomendamos que você bloqueie todo o
acesso público aos buckets.
5. Desmarque Block all public access (Bloquear todo acesso público) e escolha Save changes (Salvar
alterações).
Warning
O Amazon S3 desativa as configurações do Bloqueio de acesso público para seu bucket. Para criar
um site público e estático, você também pode ter que editar as configurações de Bloqueio de acesso
público para sua conta antes de adicionar uma política de bucket. Se as configurações da conta para
bloquear acesso público estiverem ativadas no momento, você verá uma observação em Block public
access (bucket settings) (Bloqueio de acesso público (configurações de bucket)).
Depois de editar as configurações do Bloqueio de acesso público do S3, é possível adicionar uma política
de bucket para conceder acesso público de leitura ao bucket. Ao conceder um acesso público de leitura,
qualquer pessoa na Internet pode acessar seu bucket.
Important
A política a seguir é somente um exemplo e concede acesso total aos conteúdos do bucket.
Antes de prosseguir com esta etapa, revise Como posso proteger os arquivos no meu bucket
Versão da API 2006-03-01
957
Amazon Simple Storage Service Guia do usuário
Etapa 2: Adicionar uma política de bucket
do Amazon S3? para garantir que você entende as práticas recomendadas a fim de proteger os
arquivos no bucket do S3 e os riscos envolvidos na concessão de acesso público.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::Bucket-Name/*"
]
}
]
}
Uma mensagem é exibida indicando que a política de bucket foi adicionada com sucesso.
Se você vir um erro que diz Policy has invalid resource, confirme se o nome do bucket na
política de bucket corresponde ao nome do seu bucket. Para obter informações sobre como adicionar
uma política de bucket, consulte Como adicionar uma política de bucket do S3?
Se você receber uma mensagem de erro e não puder salvar a política do bucket, verifique suas
configurações de acesso público para confirmar que você permite acesso público ao bucket.
Para tornar um objeto publicamente legível usando uma ACL, conceda a permissão READ ao grupo
AllUsers, como mostrado no elemento de concessão a seguir. Adicione esse elemento de concessão à
ACL do objeto. Para obter informações sobre o gerenciamento de ACLs, consulte Visão geral da lista de
controle de acesso (ACL) (p. 440).
<Grant>
<Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:type="Group">
<URI>http://acs.amazonaws.com/groups/global/AllUsers</URI>
</Grantee>
<Permission>READ</Permission>
</Grant>
Como habilitar o registro em log do acesso ao servidor para o bucket de site estático
Quando você agrupa seus arquivos de dados de log em uma pasta, eles são mais fáceis de localizar.
4. (Opcional) Se você quiser usar o CloudFront para melhorar o desempenho do seu site, crie uma pasta
para os arquivos de log do CloudFront (por exemplo, cdn).
5. Na lista Buckets, escolha o bucket.
6. Escolha Propriedades.
7. Em Server access logging (Registro de acesso ao servidor), selecione Edit (Editar).
8. Escolha Enable (Habilitar).
9. No Target bucket (Bucket de destino), escolha o destino do bucket e da pasta para os logs de acesso
ao servidor:
No bucket de log, agora você pode acessar seus logs. O Amazon S3 grava os logs de acesso ao site
no bucket de log a cada duas horas.
Tópicos
• Definir um redirecionamento de objeto usando o console do Amazon S3 (p. 960)
• Definir um redirecionamento de objeto usando a API REST (p. 960)
• Redirecionar solicitações de um endpoint de site de um bucket para outro host (p. 961)
• Configurar redirecionamentos condicionais avançados (p. 962)
Para reorientar uma solicitação para outro objeto, você define o local de redirecionamento como a
chave do objeto de destino. Para redirecionar uma solicitação para um URL externo, defina o local de
redirecionamento como o URL desejado. Para obter mais informações sobre metadados de objeto,
consulte Metadados do objeto definidos pelo sistema (p. 67).
Quando você define um redirecionamento de página, pode manter ou excluir o conteúdo de objeto de
origem. Por exemplo, se você tiver um objeto page1.html em seu bucket, poderá redirecionar todas as
solicitações para essa página para outro objeto, page2.html. Você tem duas opções:
Para outro objeto no mesmo bucket, o prefixo / no valor é obrigatório. Você também pode definir o
valor para um URL externo, por exemplo, http://www.example.com.
10. Escolha Edit metadata (Editar metadados).
• Objeto PUT
• Iniciar multipart upload
• Objeto POST
• Objeto PUT - Copiar
Um bucket configurado para hospedagem de sites tem o endpoint de site e o endpoint REST. Uma
solicitação para uma página que é configurada como redirecionamento 301 tem os seguintes resultados
possíveis, dependendo do endpoint da solicitação:
• Endpoint de site específico da região: o Amazon S3 redireciona a solicitação da página de acordo com o
valor da propriedade x-amz-website-redirect-location.
• Endpoint REST: o Amazon S3 não redireciona a solicitação da página. Ele retorna o objeto solicitado.
Para obter mais informações sobre os endpoints, consulte Principais diferenças entre um endpoint de site
e um endpoint de API REST (p. 947).
Quando você define um redirecionamento de página, pode manter ou excluir o conteúdo de objeto. Por
exemplo, suponha que você tenha um objeto page1.html em seu bucket.
• Para manter o conteúdo de page1.html e apenas redirecionar as solicitações de página, envie uma
solicitação PUT objeto - Copiar para criar um novo objeto page1.htmlque usa o objeto page1.html
existente como origem. Na sua solicitação, você define o cabeçalho x-amz-website-redirect-
location. Quando a solicitação for concluída, você terá a página original com o conteúdo inalterado,
mas o Amazon S3 redirecionará todas as solicitações da página para o local de redirecionamento
especificado.
• Para excluir o conteúdo do objeto page1.html e redirecionar as solicitações para a página, envie
uma solicitação PUT objeto para fazer upload de um objeto com zero byte com a mesma chave de
objeto: page1.html. Na solicitação PUT, você define x-amz-website-redirect-location para
page1.htmlcomo o novo objeto. Quando a solicitação for concluída, page1.html não terá nenhum
conteúdo, e as solicitações serão redirecionadas para o local que é especificado por x-amz-website-
redirect-location.
Quando você recupera o objeto usando a ação GET objeto com outros metadados de objeto, o Amazon S3
retorna o cabeçalho x-amz-website-redirect-location na resposta.
Por exemplo, se o seu domínio raiz for example.com, e você deseja servir solicitações para http://
example.com e http://www.example.com, será possível criar dois buckets chamados example.com
e www.example.com. Depois, mantenha o conteúdo no bucket example.com e configure o outro bucket
www.example.com para redirecionar todas as solicitações ao bucket example.com. Para obter mais
informações, consulte Configurar um site estático usando um nome de domínio personalizado.
3. Escolha Propriedades.
4. Em Static website hosting (Hospedagem estática de sites), escolha Edit (Editar).
5. Selecione Redirect requests for an object (Redirecionar solicitações de um objeto).
6. Na caixa Host name (Nome do host) insira o endpoint do site para seu bucket ou seu domínio
personalizado.
Por exemplo, se você estiver redirecionando para um endereço de domínio raiz, insira example.com.
7. Para Protocol (Protocolo), escolha o protocolo para as solicitações redirecionadas (none,http, ou
https).
Ao configurar o bucket para hospedagem de sites, você tem a opção de especificar regras avançadas de
redirecionamento. O Amazon S3 tem uma limitação de 50 regras de roteamento por configuração de site.
Se você precisar de mais de 50 regras de roteamento, poderá usar o redirecionamento de objetos. Para
obter mais informações, consulte Definir um redirecionamento de objeto usando o console do Amazon
S3 (p. 960).
Para obter mais informações sobre como configurar regras de roteamento usando a API REST, consulte
PutBucketWebsite na Referência da API do Amazon Simple Storage Service.
Important
Para criar regras de redirecionamento no novo console do Amazon S3, você deve usar o JSON.
Para exemplos de JSON, consulte Exemplos de regras de redirecionamento (p. 965).
Para adicionar regras de redirecionamento para um bucket que já tem alojamento de site estático ativado,
siga estas etapas.
No console do S3, você descreve as regras usando o JSON. Para exemplos de JSON, consulte
Exemplos de regras de redirecionamento (p. 965). O Amazon S3 tem uma limitação de 50 regras de
roteamento por configuração de site.
6. Selecione Save changes.
JSON
[
{
"Condition": {
"HttpErrorCodeReturnedEquals": "string",
"KeyPrefixEquals": "string"
},
"Redirect": {
"HostName": "string",
"HttpRedirectCode": "string",
"Protocol": "http"|"https",
"ReplaceKeyPrefixWith": "string",
"ReplaceKeyWith": "string"
}
}
]
Note: Redirect must each have at least one child element. You can have either
ReplaceKeyPrefix with or ReplaceKeyWith but not both.
XML
<RoutingRules> =
<RoutingRules>
<RoutingRule>...</RoutingRule>
[<RoutingRule>...</RoutingRule>
...]
</RoutingRules>
<RoutingRule> =
<RoutingRule>
[ <Condition>...</Condition> ]
<Redirect>...</Redirect>
</RoutingRule>
<Condition> =
<Condition>
[ <KeyPrefixEquals>...</KeyPrefixEquals> ]
[ <HttpErrorCodeReturnedEquals>...</HttpErrorCodeReturnedEquals> ]
</Condition>
Note: <Condition> must have at least one child element.
<Redirect> =
<Redirect>
[ <HostName>...</HostName> ]
[ <Protocol>...</Protocol> ]
[ <ReplaceKeyPrefixWith>...</ReplaceKeyPrefixWith> ]
[ <ReplaceKeyWith>...</ReplaceKeyWith> ]
[ <HttpRedirectCode>...</HttpRedirectCode> ]
</Redirect>
Note: <Redirect> must have at least one child element. You can have either
ReplaceKeyPrefix with or ReplaceKeyWith but not both.
Nome Descrição
Condição:
Condition O contêiner para descrever uma condição que deve ser satisfeita para
que o redirecionamento especificado seja aplicado. Se a regra de
roteamento não incluir uma condição, a regra será aplicada a todas as
solicitações.
Nome Descrição
Se um dos irmãos for fornecido, ReplaceKeyPrefixWith não será
obrigatório. Poderá ser fornecido somente se ReplaceKeyWith não
for fornecido.
Para criar regras de redirecionamento no novo console do Amazon S3, você deve usar o JSON.
• index.html
• docs/article1.html
• docs/article2.html
Você decide renomear a pasta de docs/ para documents/. Depois de fazer essa alteração, você
precisará redirecionar as solicitações do prefixo docs/ para documents/. Por exemplo, as solicitações
para docs/article1.html serão redirecionadas para documents/article1.html.
JSON
[
{
"Condition": {
"KeyPrefixEquals": "docs/"
},
"Redirect": {
"ReplaceKeyPrefixWith": "documents/"
}
}
]
XML
<RoutingRules>
<RoutingRule>
<Condition>
<KeyPrefixEquals>docs/</KeyPrefixEquals>
</Condition>
<Redirect>
<ReplaceKeyPrefixWith>documents/</ReplaceKeyPrefixWith>
</Redirect>
</RoutingRule>
</RoutingRules>
Suponha que você tenha excluído a pasta images/ (ou seja, você excluiu todos os objetos com o prefixo
de chave images/). Você pode adicionar uma regra de roteamento que redirecione as solicitações para
os objetos com o prefixo de chave images/ a uma página chamada folderdeleted.html.
JSON
[
{
"Condition": {
"KeyPrefixEquals": "images/"
},
"Redirect": {
"ReplaceKeyWith": "folderdeleted.html"
}
}
]
XML
<RoutingRules>
<RoutingRule>
<Condition>
<KeyPrefixEquals>images/</KeyPrefixEquals>
</Condition>
<Redirect>
<ReplaceKeyWith>folderdeleted.html</ReplaceKeyWith>
</Redirect>
</RoutingRule>
</RoutingRules>
Suponha que, quando um objeto solicitado não for encontrado, você queira redirecionar solicitações para
uma instância do Amazon Elastic Compute Cloud (Amazon EC2). Adicione uma regra de redirecionamento
para que, quando um código HTTP de status 404 (não encontrado) for retornado, o visitante do site seja
redirecionado para uma instância do Amazon EC2 que processa a solicitação.
JSON
{
"Condition": {
"HttpErrorCodeReturnedEquals": "404"
},
"Redirect": {
"HostName": "ec2-11-22-333-44.compute-1.amazonaws.com",
"ReplaceKeyPrefixWith": "report-404/"
}
}
]
XML
<RoutingRules>
<RoutingRule>
<Condition>
<HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals >
</Condition>
<Redirect>
<HostName>ec2-11-22-333-44.compute-1.amazonaws.com</HostName>
<ReplaceKeyPrefixWith>report-404/</ReplaceKeyPrefixWith>
</Redirect>
</RoutingRule>
</RoutingRules>
Tópicos
• Tutorial: configurar um site estático no Amazon S3 (p. 967)
• Configurar um site estático usando um domínio personalizado registrado no Route 53 (p. 973)
Tópicos
• Etapa 1: Criar um bucket (p. 968)
• Etapa 2: Habilitar hospedagem de site estático (p. 968)
• Etapa 3: editar as configurações do Bloqueio de acesso público (p. 969)
• Etapa 4: Adicionar política de bucket que torna o conteúdo do bucket publicamente
disponível (p. 970)
• Etapa 5: Configurar um documento de índice (p. 971)
• Etapa 6: configurar um documento de erros (p. 972)
• Etapa 7: testar o endpoint do site (p. 972)
• Etapa 8: Limpar (p. 973)
Escolha uma região próxima de você para minimizar a latência e os custos ou atender a requisitos
normativos. A região escolhida determina o endpoint de site do Amazon S3. Para obter mais
informações, consulte Endpoints de site (p. 945).
5. Para aceitar as configurações padrão e criar o bucket, escolha Create (Criar).
Por exemplo, você pode encaminhar solicitações condicionalmente de acordo com nomes de chave
de objeto ou prefixos específicos na solicitação. Para obter mais informações, consulte Configurar
redirecionamentos condicionais avançados (p. 962).
10. Selecione Save changes.
O Amazon S3 permite a hospedagem estática de sites para seu bucket. Na parte inferior da página,
em Static website hosting (Hospedagem estática de sites), você verá o endpoint do site do seu bucket.
11. Em Static website hosting (Hospedagem de sites estáticos), anote o Endpoint.
Antes de concluir esta etapa, revise Bloquear o acesso público ao armazenamento do Amazon
S3 (p. 469) para garantir que você entenda e aceite os riscos envolvidos em permitir o acesso
público. Ao desativar as configurações de bloqueio de acesso público para tornar seu bucket
público, qualquer pessoa na Internet pode acessá-lo. Recomendamos que você bloqueie todo o
acesso público aos buckets.
O Amazon S3 desativa as configurações do Bloqueio de acesso público para seu bucket. Para criar
um site público e estático, você também pode ter que editar as configurações de Bloqueio de acesso
público para sua conta antes de adicionar uma política de bucket. Se as configurações da conta para
bloquear acesso público estiverem ativadas no momento, você verá uma observação em Block public
access (bucket settings) (Bloqueio de acesso público (configurações de bucket)).
A política a seguir é somente um exemplo e concede acesso total aos conteúdos do bucket.
Antes de prosseguir com esta etapa, revise Como posso proteger os arquivos no meu bucket
do Amazon S3? para garantir que você entende as práticas recomendadas a fim de proteger os
arquivos no bucket do S3 e os riscos envolvidos na concessão de acesso público.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::Bucket-Name/*"
]
}
]
}
Uma mensagem é exibida indicando que a política de bucket foi adicionada com sucesso.
Se você vir um erro que diz Policy has invalid resource, confirme se o nome do bucket na
política de bucket corresponde ao nome do seu bucket. Para obter informações sobre como adicionar
uma política de bucket, consulte Como adicionar uma política de bucket do S3?
Se você receber uma mensagem de erro e não puder salvar a política do bucket, verifique suas
configurações de acesso público para confirmar que você permite acesso público ao bucket.
Se você não tiver um arquivo index.html, poderá usar o HTML a seguir para criar um:
Para obter instruções detalhadas, consulte Fazer upload de objetos (p. 71).
7. (Opcional) Faça upload do conteúdo de outro site para o seu bucket.
Para obter instruções detalhadas, consulte Fazer upload de objetos (p. 71).
Note
O Amazon S3 não oferece suporte para o acesso HTTPS ao site. Se quiser usar HTTPS, você
poderá usar o Amazon CloudFront para servir um site estático hospedado no Amazon S3.
Para obter mais informações, consulte Como uso o CloudFront para veicular um site estático
hospedado no Amazon S3? e Exigir HTTPS para comunicação entre visualizadores e CloudFront.
Agora você tem um site hospedado no Amazon S3. Esse site está disponível no endpoint de site do
Amazon S3. No entanto, você pode ter um domínio, como example.com, que deseja usar para exibir
o conteúdo do site que criou. Talvez você também queira usar o suporte ao domínio raiz do Amazon S3
para atender solicitações para http://example.com e http://www.example.com. Isso exige etapas
adicionais. Para ver um exemplo, consulte Configurar um site estático usando um domínio personalizado
registrado no Route 53 (p. 973).
Etapa 8: Limpar
Se tiver criado o site apenas como exercício de aprendizado, você poderá excluir os recursos da AWS
alocados, de maneira que deixe de acumular cobranças. Depois que você excluir os recursos da AWS, o
site deixará de estar disponível. Para obter mais informações, consulte Excluir um bucket (p. 40).
Depois de concluir esta demonstração, você tem a opção de usar o Amazon CloudFront para melhorar
a performance do seu site. Para obter mais informações, consulte Acelerar seu site com o Amazon
CloudFront (p. 985).
Note
O Amazon S3 não oferece suporte para o acesso HTTPS ao site. Se quiser usar HTTPS, você
poderá usar o Amazon CloudFront para servir um site estático hospedado no Amazon S3.
Para obter mais informações, consulte Como uso o CloudFront para veicular um site estático
hospedado no Amazon S3? e Exigir HTTPS para comunicação entre visualizadores e CloudFront.
Você pode usar um modelo do AWS CloudFormation para automatizar a configuração do site estático.
O modelo do AWS CloudFormation configura os componentes que você precisa para hospedar um site
estático seguro e se concentrar mais no conteúdo do seu site e menos na configuração de componentes.
• Amazon S3: cria um bucket do Amazon S3 para hospedar seu site estático.
• CloudFront: cria uma distribuição do CloudFront para acelerar seu site estático.
• Lambda@Edge: usa o Lambda@Edge para adicionar cabeçalhos de segurança a cada resposta do
servidor. Os cabeçalhos de segurança são um grupo de cabeçalhos na resposta do servidor web
que dizem aos navegadores da web para tomarem precauções de segurança extras. Para obter mais
informações, consulte a publicação do blog: Adding HTTP security headers using Lambda@Edge and
Amazon CloudFront.
Este modelo do AWS CloudFormation está disponível para download e uso. Para obter informações e
instruções, consulte Conceitos básicos de um site estático seguro no Guia do desenvolvedor do Amazon
CloudFront.
Tópicos
• Antes de começar (p. 974)
• Etapa 1: Registrar um domínio personalizado no Route 53 (p. 974)
• Etapa 2: Criar dois buckets (p. 974)
• Etapa 3: Configurar o bucket de domínio raiz para hospedagem de sites (p. 975)
• Etapa 4: Configurar o bucket de subdomínio para redirecionamento de sites (p. 976)
• Etapa 5: Configurar o registro em log para o tráfego do site (p. 977)
• Etapa 6: Fazer upload do conteúdo do site e do índice (p. 977)
• Etapa 7: carregar um documento de erros (p. 978)
• Etapa 7: Editar configurações de bloqueio de acesso público do S3 (p. 979)
• Etapa 8: Anexar uma política de bucket (p. 980)
• Etapa 9: Testar o endpoint de domínio (p. 981)
• Etapa 10: Adicionar registros de alias para seu domínio e subdomínio (p. 982)
• Etapa 11: Testar o site (p. 985)
• Acelerar seu site com o Amazon CloudFront (p. 985)
• Limpar seus recursos de exemplo (p. 988)
Antes de começar
Ao seguir as etapas deste exemplo, você trabalha com os seguintes serviços:
Amazon Route 53: você pode usar o Route 53 para registrar domínios e definir onde você deseja rotear o
tráfego de internet para o seu domínio. O exemplo mostra como criar registros de alias do Route 53 que
roteiam o tráfego para do domínio (example.com) e do subdomínio (www.example.com) para um bucket
do Amazon S3 que contém um arquivo HTML.
Amazon S3: você usa o Amazon S3 para criar buckets, fazer upload de uma página de site de exemplo,
configurar permissões para que todos possam visualizar conteúdo e, em seguida, configurar os buckets
para hospedagem do site.
Esses nomes de bucket devem corresponder exatamente ao seu nome de domínio. Neste exemplo,
o nome de domínio é example.com. Você hospeda seu conteúdo fora do bucket de domínio
raiz (example.com). Crie uma solicitação de redirecionamento para o bucket de subdomínio
(www.example.com). Em outras palavras, se uma pessoa insere www.example.com no navegador, ela é
redirecionada para example.com e vê o conteúdo hospedado no bucket do Amazon S3 com esse nome.
Escolha uma região próxima de você para minimizar a latência e os custos ou atender a requisitos
normativos. A região escolhida determina o endpoint de site do Amazon S3. Para obter mais
informações, consulte Endpoints de site (p. 945).
d. Para aceitar as configurações padrão e criar o bucket, escolha Create (Criar).
3. Crie o bucket de subdomínio:
Escolha uma região próxima de você para minimizar a latência e os custos ou atender a requisitos
normativos. A região escolhida determina o endpoint de site do Amazon S3. Para obter mais
informações, consulte Endpoints de site (p. 945).
d. Para aceitar as configurações padrão e criar o bucket, escolha Create (Criar).
Por exemplo, você pode encaminhar solicitações condicionalmente de acordo com nomes de chave
de objeto ou prefixos específicos na solicitação. Para obter mais informações, consulte Configurar
redirecionamentos condicionais avançados (p. 962).
10. Selecione Save changes.
O Amazon S3 permite a hospedagem estática de sites para seu bucket. Na parte inferior da página,
em Static website hosting (Hospedagem estática de sites), você verá o endpoint do site do seu bucket.
11. Em Static website hosting (Hospedagem de sites estáticos), anote o Endpoint.
Depois de editar as configurações de acesso público de bloqueio e adicionar uma política de bucket que
permita acesso público de leitura, você pode usar o endpoint do site para acessar seu site.
5. Na caixa Target bucket (Bucket de destino), insira o domínio raiz (por exemplo, example.com).
6. Em Protocol (Protocolo), selecione http.
7. Selecione Save changes.
Como habilitar o registro em log do acesso ao servidor para o bucket de domínio raiz
No bucket de log, agora você pode acessar seus logs. O Amazon S3 grava os logs de acesso ao site
no bucket de log a cada duas horas.
Ao habilitar a hospedagem de sites estáticos para o bucket, insira o nome do documento de índice (por
exemplo, index.html). Depois de habilitar a hospedagem de sites estáticos para seu bucket, faça upload
de um arquivo HTML com esse nome de documento de índice para o bucket.
Se você não tiver um arquivo index.html, poderá usar o HTML a seguir para criar um:
<head>
<title>My Website Home Page</title>
</head>
<body>
<h1>Welcome to my website</h1>
<p>Now hosted on Amazon S3!</p>
</body>
</html>
Para obter instruções detalhadas, consulte Fazer upload de objetos (p. 71).
7. (Opcional) Faça upload do conteúdo de outro site para o seu bucket.
Para obter instruções detalhadas, consulte Fazer upload de objetos (p. 71).
Por padrão, o Amazon S3 bloqueia o acesso público à sua conta e aos seus buckets. Se quiser usar um
bucket para hospedar um site estático, use estas etapas para editar as configurações de bloqueio de
acesso público.
Warning
Antes de concluir esta etapa, revise Bloquear o acesso público ao armazenamento do Amazon
S3 (p. 469) para garantir que você entenda e aceite os riscos envolvidos em permitir o acesso
público. Ao desativar as configurações de bloqueio de acesso público para tornar seu bucket
público, qualquer pessoa na Internet pode acessá-lo. Recomendamos que você bloqueie todo o
acesso público aos buckets.
O Amazon S3 desativa as configurações do Bloqueio de acesso público para seu bucket. Para criar
um site público e estático, você também pode ter que editar as configurações de Bloqueio de acesso
público para sua conta antes de adicionar uma política de bucket. Se as configurações da conta para
bloquear acesso público estiverem ativadas no momento, você verá uma observação em Block public
access (bucket settings) (Bloqueio de acesso público (configurações de bucket)).
Depois de editar as configurações do Bloqueio de acesso público do S3, é possível adicionar uma política
de bucket para conceder acesso público de leitura ao bucket. Ao conceder um acesso público de leitura,
qualquer pessoa na Internet pode acessar seu bucket.
Important
A política a seguir é somente um exemplo e concede acesso total aos conteúdos do bucket.
Antes de prosseguir com esta etapa, revise Como posso proteger os arquivos no meu bucket
do Amazon S3? para garantir que você entende as práticas recomendadas a fim de proteger os
arquivos no bucket do S3 e os riscos envolvidos na concessão de acesso público.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::Bucket-Name/*"
]
}
]
}
Uma mensagem é exibida indicando que a política de bucket foi adicionada com sucesso.
Se você vir um erro que diz Policy has invalid resource, confirme se o nome do bucket na
política de bucket corresponde ao nome do seu bucket. Para obter informações sobre como adicionar
uma política de bucket, consulte Como adicionar uma política de bucket do S3?
Se você receber uma mensagem de erro e não puder salvar a política do bucket, verifique suas
configurações de acesso público para confirmar que você permite acesso público ao bucket.
Na próxima etapa, você usa o Amazon Route 53 para permitir que os clientes usem ambos os URLs
personalizados para navegar até o site.
Se você ainda não usa o Route 53, consulte Etapa 1: registrar um domínio no Guia do
desenvolvedor do Amazon Route 53. Após concluir a configuração, é possível retomar as
instruções.
2. Selecione Hosted zones (Zonas hospedadas).
3. Na lista de zonas hospedadas, escolha o nome da zona hospedada que corresponde ao nome de
domínio.
4. Escolha Create record (Criar registro).
5. Escolha Switch to wizard (Alternar para assistente).
Note
Se você quiser usar a criação rápida para criar seus registros de alias, consulte Configurar o
Route 53 para rotear o tráfego para um bucket do S3.
6. Escolha Simple routing (Roteamento simples) e Next (Próximo).
7. Escolha Define simple record (Definir registro simples).
8. Em Record name (Nome do registro), aceite o valor padrão, que é o nome da zona hospedada e do
domínio.
9. Em Value/Route traffic to (Valor/Encaminhar tráfego para), escolha Alias to S3 website endpoint (Alias
para o endpoint do site do S3).
10. Escolha a região.
11. Escolha o bucket do S3.
O nome do bucket deve corresponder ao nome que aparece na caixa Name (Nome). Na lista Choose
S3 bucket (Escolher bucket do S3), o nome do bucket aparece com o endpoint do site do Amazon S3
para a região onde o bucket foi criado, por exemplo, s3-website-us-west-1.amazonaws.com
(example.com).
Se o bucket não aparecer na lista Choose S3 bucket (Escolher bucket do S3), insira o endpoint
de site do Amazon S3 da região em que o bucket foi criado, por exemplo, s3-website-us-
west-2.amazonaws.com. Para obter uma lista completa dos endpoints do site do Amazon S3,
Versão da API 2006-03-01
982
Amazon Simple Storage Service Guia do usuário
Configurar um site estático
usando um domínio personalizado
consulte Endpoints de site do Amazon S3. Para obter mais informações sobre o destino de alias,
consulte Valor/rotear tráfego para no Guia do desenvolvedor do Amazon Route 53.
12. Em Record type (Tipo de registro), escolha A - Routes traffic to an IPv4 address and some AWS
resources (Encaminha o tráfego para um endereço IPv4 e alguns recursos da AWS).
13. Em Evaluate target health (Avaliar integridade do destino), escolha No (Não).
14. Escolha Define simple record (Definir registro simples).
1. Em Configure records (Configurar registros), escolha Define simple record (Definir registro simples).
2. Em Record name (Nome do registro) para seu subdomínio, digite www.
3. Em Value/Route traffic to (Valor/Encaminhar tráfego para), escolha Alias to S3 website endpoint (Alias
para o endpoint do site do S3).
4. Escolha a região.
5. Escolha o bucket do S3, por exemplo, s3-website-us-west-2.amazonaws.com
(example.com).
Se o bucket não aparecer na lista Choose S3 bucket (Escolher bucket do S3), insira o endpoint
de site do Amazon S3 da região em que o bucket foi criado, por exemplo, s3-website-us-
west-2.amazonaws.com. Para obter uma lista completa dos endpoints do site do Amazon S3,
consulte Endpoints de site do Amazon S3. Para obter mais informações sobre o destino de alias,
consulte Valor/rotear tráfego para no Guia do desenvolvedor do Amazon Route 53.
6. Em Record type (Tipo de registro), escolha A - Routes traffic to an IPv4 address and some AWS
resources (Encaminha o tráfego para um endereço IPv4 e alguns recursos da AWS).
7. Em Evaluate target health (Avaliar integridade do destino), escolha No (Não).
8. Escolha Define simple record (Definir registro simples).
9. Na página Configure records (Configurar registros), escolha Create records (Criar registros).
Note
Adicionar um registro de alias para seu domínio raiz e subdomínio (antigo console do Route 53)
O console do Route 53 foi reprojetado. No console do Route 53, você pode usar temporariamente o
console antigo. Se você optar por trabalhar com o console do Route 53 antigo, use o procedimento abaixo.
Se você ainda não usa o Route 53, consulte Etapa 1: registrar um domínio no Guia do
desenvolvedor do Amazon Route 53. Após concluir a configuração, é possível retomar as
instruções.
2. Selecione Hosted Zones (Zonas hospedadas).
3. Na lista de zonas hospedadas, escolha o nome da zona hospedada que corresponde ao nome de
domínio.
4. Escolha Create Record Set (Criar conjunto de registros).
5. Especifique os seguintes valores:
Nome
Para o domínio raiz, não é necessário inserir nenhuma informação adicional no campo Name
(Nome).
Tipo
Na seção S3 website endpoints (Endpoints de site do S3) da lista, escolha o nome do bucket.
O nome do bucket deve corresponder ao nome que aparece na caixa Name (Nome). Na listagem
Alias Target (Destino do alias), o nome do bucket é seguido pelo endpoint de site do Amazon
S3 para a região onde o bucket foi criado, por exemplo, example.com (s3-website-us-
west-2.amazonaws.com). Alias Target (Alvo do alias) lista um bucket se:
• Você configurou o bucket como um site estático.
• O nome do bucket é o mesmo que o nome do registro que você está criando.
• A conta da AWS atual criou o bucket.
Se o bucket não aparecer na listagem Alias Target (Destino do alias), insira o endpoint de site
do Amazon S3 da região em que o bucket foi criado, por exemplo, s3-website-us-west-2.
Para obter uma lista completa dos endpoints do site do Amazon S3, consulte Endpoints de site do
Amazon S3. Para obter mais informações sobre o destino de alias, consulte Valor/rotear tráfego
para no Guia do desenvolvedor do Amazon Route 53.
Política de roteamento
1. Na zona hospedada do domínio raiz (example.com), selecione Create Record Set (Criar conjunto de
registros).
2. Especifique os seguintes valores:
Nome
Alvo do alias
Na seção S3 website endpoints (Endpoints de site do S3) da lista, escolha o mesmo nome
de bucket que é exibido no campo Name (Nome), por exemplo, www.example.com (s3-
website-us-west-2.amazonaws.com).
Política de roteamento
Note
Depois de testar com êxito o domínio raiz e o subdomínio, você pode configurar uma distribuição do
Amazon CloudFront para melhorar a performance do seu site e fornecer logs que você possa usar
para revisar o tráfego do site. Para obter mais informações, consulte Acelerar seu site com o Amazon
CloudFront (p. 985).
de expiração, o CloudFront verificará o servidor de origem para saber se há uma versão mais nova
do conteúdo disponível. Se houver uma versão mais nova à disposição, o CloudFront copiará a nova
versão para o ponto de presença. As alterações feitas no conteúdo original são replicadas para pontos de
presença à medida que os visitantes solicitam o conteúdo.
Para obter mais informações sobre como usar um modelo do AWS CloudFormation para configurar um site
estático seguro que cria uma distribuição do CloudFront para veicular seu site, consulte Introdução a um
site estático seguro no Guia do desenvolvedor do Amazon CloudFront.
Tópicos
• Etapa 1: Criar uma distribuição do CloudFront (p. 986)
• Etapa 2: Atualizar os conjuntos de registros do domínio e do subdomínio (p. 987)
• (Opcional) Etapa 3: verificar os arquivos de log (p. 988)
a. Deixe Price Class (Classe de preço) definida como Use All Edge Locations (Best Performance)
(Usar todos os pontos de presença [melhor desempenho]).
b. Defina Alternate Domain Names (CNAMEs) Nomes de domínio alternativos (CNAMEs) para o
domínio raiz e para o subdomínio www. Neste tutorial, são example.com e www.example.com.
Important
Antes de executar essa etapa, veja os requisitos para o uso de nomes de domínio
alternativos, principalmente a necessidade de um certificado SSL/TLS válido.
c. Em SSL Certificate (Certificado SSL), selecione Custom SSL Certificate (example.com)
(Certificado SSL personalizado (exemplo.com)) e escolha o certificado personalizado que contém
os nomes de domínio e subdomínio.
Para obter mais informações, consulte Certificado SSL no Guia do desenvolvedor do Amazon
CloudFront.
d. Em Default Root Object (Objeto raiz padrão), insira o nome do documento de índice, por exemplo,
index.html.
Se o URL usado para acessar a distribuição não contiver um nome de arquivo, a distribuição do
CloudFront retornará o documento de índice. O Default Root Object (Objeto raiz padrão) deve
corresponder exatamente ao nome do documento de índice do seu site estático. Para obter mais
informações, consulte Configurar um documento de índice (p. 951).
e. Defina Logging (Registro em log) como On (Ligado).
f. Em Bucket for Logs (Bucket para logs), escolha o bucket para o registro em log que você criou.
Para obter mais informações sobre como configurar um bucket de log, consulte (Opcional)
Registrar em log o tráfego da web (p. 959).
g. Se quiser armazenar os logs gerados pelo tráfego para a distribuição do CloudFront em uma
pasta, em Log Prefix (Prefixo de log), insira o nome da pasta.
h. Mantenha todas as outras configurações segundo seus valores predefinidos.
7. Escolha Create Distribution (Criar distribuição).
8. Para ver o status atual da distribuição, localize a distribuição no console e verifique a coluna Status.
Um status InProgress indica que a distribuição ainda não foi totalmente implantada.
Depois que a distribuição estiver implantada, você pode fazer referência ao conteúdo com o novo
nome do domínio do CloudFront.
9. Registre o valor de Domain Name (Nome do domínio) mostrado no console do CloudFront, por
exemplo, dj4p1rv6mvubz.cloudfront.net.
10. Para verificar se a distribuição do CloudFront está funcionando, insira o nome de domínio da
distribuição em um navegador da Web.
Se o seu site estiver visível, a distribuição do CloudFront funciona. Se o seu site tiver um domínio
personalizado registrado no Amazon Route 53, você precisará do nome de domínio do CloudFront
para atualizar o conjunto de registros na próxima etapa.
Para atualizar o registro de alias para apontar para uma distribuição do CloudFront
novo registro A para a distribuição do CloudFront não é redirecionado para o domínio raiz. Qualquer
visitante que faça referência ao site usando http://www.example.com ou http://example.com
é redirecionado para o ponto de presença do CloudFront mais próximo, onde ele aproveita tempos de
download menores.
Tip
Os logs do CloudFront são armazenados no bucket e na pasta escolhidos ao criar uma distribuição do
CloudFront e habilitar o registro em log. O CloudFront grava logs em seu bucket de log dentro de 24 horas
a partir do momento em que as solicitações correspondentes são feitas.
Se tiver criado o site apenas como um exercício de aprendizado, você poderá excluir os recursos
alocados, para não acumular mais cobranças. Para fazer isto, consulte Limpar seus recursos de
exemplo (p. 988). Depois que você excluir os recursos da AWS, o site deixará de estar disponível.
Tarefas
• Etapa 1: exclua a distribuição do Amazon CloudFront (p. 988)
• Etapa 2: exclua a zona hospedada do Route 53 (p. 989)
• Etapa 3: Desabilitar o registro em log e excluir o bucket do S3 (p. 989)
1. Continuando o procedimento anterior, escolha Back to Hosted Zones (Voltar para zonas hospedadas).
2. Selecione o nome do seu domínio e escolha Delete Hosted Zone (Excluir zona hospedada).
3. Quando a confirmação for solicitada, escolha Confirm (Confirmar).
Agora, você pode excluir seu bucket. Para obter mais informações, consulte Excluir um bucket (p. 40).
Tópicos
• Fazer solicitações (p. 990)
• Desenvolvimento com o Amazon S3 usando a AWS CLI (p. 1033)
• Desenvolvimento com o Amazon S3 usando os AWS SDKs e exploradores (p. 1034)
• Desenvolver com o Amazon S3 usando a API REST (p. 1047)
• Tratar erros de REST e SOAP (p. 1052)
• Referência do desenvolvedor (p. 1055)
Fazer solicitações
O Amazon S3 é um serviço REST. Você pode enviar solicitações para o Amazon S3 usando a API REST
ou as bibliotecas wrapper do SDK da AWS (consulte Código de exemplo e bibliotecas) que envolvem a API
REST estrutural do Amazon S3, simplificando as tarefas de programação.
Se você estiver usando o SDK da AWS, as bibliotecas calcularão a assinatura a partir das chaves
fornecidas. No entanto, se fizer chamadas diretas da API REST no aplicativo, você deverá escrever o
código para calcular a assinatura e adicioná-la à solicitação.
Tópicos
• Sobre as chaves de acesso (p. 990)
• Endpoints de solicitações (p. 992)
• Fazer solicitações para o Amazon S3 por meio do IPv6 (p. 992)
• Fazer solicitações usando os AWS SDKs (p. 998)
• Fazer solicitações usando a API REST (p. 1024)
O ID de chave de acesso identifica uma conta da AWS de maneira única. Use essas chaves de acesso
para enviar solicitações autenticadas para o Amazon S3.
Em tais cenários, use o AWS Identity and Access Management (IAM) para criar usuários na conta da AWS
com suas próprias chaves de acesso e anexe políticas de usuário do IAM concedendo as permissões de
acesso aos recursos apropriados. Para gerenciar melhor esses usuários, o IAM permite que você crie
grupos de usuários e conceda permissões no nível de grupo que se aplicam a todos os usuário do grupo.
Esses usuários são conhecidos como usuários do IAM criados e gerenciados dentro da AWS. A conta pai
controla a capacidade que um usuário tem de acessar a AWS. Quaisquer recursos que um usuário do
IAM cria estão sob o controle da conta pai da AWS e são pagos para ela. Esses usuários do IAM podem
enviar solicitações autenticadas para o Amazon S3 usando as próprias credenciais de segurança. Para
obter mais informações sobre como criar e gerenciar usuários em sua conta da AWS, acesse a página de
detalhes do produto do AWS Identity and Access Management.
O IAM fornece a API do AWS Security Token Service para que você solicite credenciais de segurança
temporárias. Use a API da AWS STS ou o SDK da AWS para solicitar essas credenciais. A API retorna
as credenciais de segurança temporárias (ID de chave de acesso e chave de acesso secreta) e um token
de segurança. Essas credenciais são válidas apenas pela duração especificada ao solicitá-las. Use o ID
de chave de acesso e a chave secreta da mesma forma que os usa ao enviar solicitações usando a conta
da AWS ou as chaves de acesso do usuário do IAM. Além disso, é necessário incluir o token em cada
solicitação enviada para o Amazon S3.
Um usuário do IAM pode solicitar essas credenciais de segurança temporárias para seu próprio uso
ou enviá-las para usuários federados ou aplicações. Ao solicitar credenciais de segurança temporárias
para usuários federados, você deve fornecer um nome de usuário e uma política do IAM definindo as
permissões que deseja associar a essas credenciais. O usuário federado não pode obter mais permissões
que o usuário pai do IAM que solicitou as credenciais temporárias.
Use as credenciais de segurança temporárias para fazer solicitações ao Amazon S3. As bibliotecas de API
calculam o valor de assinatura necessário usando essas credenciais para autenticar sua solicitação. Se
você enviar solicitações usando credenciais vencidas, o Amazon S3 negará a solicitação.
Para obter informações sobre a assinatura de solicitações usando credenciais de segurança temporárias
nas solicitações da API REST, consulte Assinar e autenticar as solicitações REST (p. 1061). Para obter
informações sobre o envio de solicitações usando SDKs da AWS, consulte Fazer solicitações usando os
AWS SDKs (p. 998).
Para obter mais informações sobre o suporte do IAM para credenciais de segurança temporárias, consulte
Credenciais de segurança temporárias no Guia do usuário do IAM.
Para maior segurança, é possível exigir autenticação multifator (MFA) ao acessar os recursos do Amazon
S3 configurando uma política do bucket. Para obter mais informações, consulte Adicionar uma política
de bucket para exigir MFA (p. 384). Depois de exigir a MFA para acesso aos recursos do Amazon S3, a
única maneira de acessar esses recursos é fornecendo credenciais temporárias criadas com uma chave
MFA. Para obter mais informações, consulte a página de detalhes do AWS Multi-Factor Authentication e
Configurar o acesso à API com proteção MFA no Guia do usuário do IAM.
Endpoints de solicitações
Envie solicitações REST para o endpoint predefinido do serviço. Para obter uma lista de todos os serviços
da AWS e os endpoints correspondentes, acesse Regiões e endpoints na Referência geral da AWS.
Tópicos
• Conceitos básicos para fazer solicitações por meio do IPv6 (p. 992)
• Como usar endereços do IPv6 em políticas do IAM (p. 993)
• Testar a compatibilidade com endereços IP (p. 994)
• Usar endpoints de pilha dupla do Amazon S3 (p. 995)
Estas são algumas coisas sobre as quais você deve estar ciente antes de tentar acessar um bucket por
meio do IPv6:
• O cliente e a rede que estão acessando o bucket devem ter permissão para usar o IPv6.
• As solicitações de estilo hospedado virtual e de estilo de caminho são compatíveis para acessarem o
IPv6. Para obter mais informações, consulte Endpoints de pilha dupla do Amazon S3 (p. 995).
• Se você usar a filtragem de endereços IP de origem em suas políticas de usuário ou bucket do AWS
Identity and Access Management (IAM), precisará atualizar as políticas para incluir intervalos de
endereços IPv6. Para obter mais informações, consulte Como usar endereços do IPv6 em políticas do
IAM (p. 993).
• Ao usar o IPv6, os arquivos de log de acesso ao servidor fornecem endereços IP em um formato do
IPv6. Você precisa atualizar as ferramentas, os scripts e o software existentes que usa para analisar os
arquivos de log do Amazon S3 para que eles possam analisar os endereços Remote IP formatados
para IPv6. Para obter mais informações, consulte Formato dos logs de acesso ao servidor do Amazon
S3 (p. 841) e Registrar em log as solicitações com registro em log de acesso ao servidor (p. 833).
Note
Se você tiver problemas relacionados à presença de endereços IPv6 nos arquivos de log, entre
em contato com o AWS Support.
Como fazer solicitações por meio do IPv6 usando endpoints de pilha dupla
Você faz solicitações com chamadas da API do Amazon S3 por meio do IPv6 usando endpoints de pilha
dupla. As operações de API do Amazon S3 funcionam da mesma maneira se você estiver acessando o
Amazon S3 por IPv6 ou por IPv4. O desempenho deve ser o mesmo também.
Ao usar a API REST, você acessa um endpoint de pilha dupla diretamente. Para obter mais informações,
consulte Endpoints de pilha dupla (p. 995).
Ao usar a Interface da linha de comando da AWS (CLI da AWS) e os AWS SDKs, você pode usar um
parâmetro ou sinalizador para mudar para um endpoint de pilha dupla. Você também pode especificar
o endpoint de pilha dupla diretamente como uma substituição do endpoint do Amazon S3 no arquivo de
configuração.
Você pode usar um endpoint de pilha dupla para acessar um bucket por meio do IPv6 de qualquer um dos
seguintes:
• A AWS CLI, consulte Usar endpoints de pilha dupla da AWS CLI (p. 996).
• Os AWS SDKs, consulte Usar endpoints de pilha dupla dos AWS SDKs (p. 996).
• A API REST, consulte Fazer solicitações para endpoints de pilha dupla usando a API REST (p. 1025).
As políticas do IAM que filtram endereços IP usam Operadores de condição de endereço IP. A política de
bucket a seguir identifica o intervalo 54.240.143.* de endereços IPv4 permitidos usando operadores de
condição de endereço IP. Todos os endereços IP fora deste intervalo terão o acesso ao bucket negado
(examplebucket). Como todos os endereços do IPv6 estão fora do intervalo permitido, essa política
impede que os endereços do IPv6 possam acessar o examplebucket.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "IPAllow",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::examplebucket/*",
"Condition": {
"IpAddress": {"aws:SourceIp": "54.240.143.0/24"}
}
}
]
}
Você pode modificar o elemento Condition da política do bucket para permitir os intervalos de endereços
do IPv4 (54.240.143.0/24) e do IPv6 (2001:DB8:1234:5678::/64), conforme mostrado no exemplo
a seguir. Você pode usar o mesmo tipo de bloqueio de Condition mostrado no exemplo para atualizar as
políticas de usuário e de bucket do IAM.
"Condition": {
"IpAddress": {
"aws:SourceIp": [
"54.240.143.0/24",
"2001:DB8:1234:5678::/64"
]
}
}
Antes de usar o IPv6, você deve atualizar todas as políticas de usuário e de bucket do IAM que usam
a filtragem de endereços IP para permitir os intervalos de endereços do IPv6. Recomendamos que
você atualize as políticas do IAM com os intervalos de endereços do IPv6 de sua organização além dos
intervalos de endereços do IPv4 existentes. Para obter um exemplo de uma política de bucket que permite
acesso por meio do IPv6 e do IPv4, consulte Limitar o acesso a endereços IP específicos (p. 381).
Você pode revisar suas políticas de usuário do IAM usando o console do IAM em https://
console.aws.amazon.com/iam/. Para obter mais informações sobre o IAM, consulte o Guia do usuário do
IAM. Para obter informações sobre políticas de bucket do S3, consulte Adicionar uma política de bucket
usando o console do Amazon S3 (p. 377).
Example
curl -v http://s3.dualstack.us-west-2.amazonaws.com/
Você recebe de volta informações semelhantes ao exemplo a seguir. Se estiver conectado por meio do
IPv6 o endereço IP conectado será um endereço do IPv6.
Se estiver usando o Microsoft Windows 7 ou 10, você poderá testar se é possível acessar um endpoint
de pilha dupla por meio do IPv6 ou do IPv4 usando o comando ping conforme mostrado no exemplo a
seguir:
ping ipv6.s3.dualstack.us-west-2.amazonaws.com
Tópicos
• Endpoints de pilha dupla do Amazon S3 (p. 995)
• Usar endpoints de pilha dupla da AWS CLI (p. 996)
• Usar endpoints de pilha dupla dos AWS SDKs (p. 996)
• Usar endpoints de pilha dupla da API REST (p. 998)
Ao usar a API REST, você acessa diretamente um endpoint do Amazon S3 usando o nome do endpoint
(URI). Você pode acessar um bucket do S3 por meio de um endpoint de pilha dupla usando um nome de
endpoint de estilo de hospedagem virtual ou de estilo de caminho. O Amazon S3 oferece suporte apenas a
nomes regionais de endpoint de pilha dupla, o que significa que você deve especificar a região como parte
do nome.
bucketname.s3.dualstack.aws-region.amazonaws.com
• Endpoint de pilha dupla de estilo de caminho:
s3.dualstack.aws-region.amazonaws.com/bucketname
Para obter mais informações sobre estilo de nome de endpoints, consulte Acessar um bucket (p. 36). Para
obter uma lista de todos os endpoints da Amazon S3, consulte Regiões e endpoints na Referência geral da
AWS.
Important
Você pode usar a aceleração de transferência com endpoints de pilha dupla. Para obter mais
informações, consulte Conceitos básicos do Amazon S3 Transfer Acceleration (p. 50).
Ao usar a Interface da linha de comando da AWS (CLI da AWS) e os AWS SDKs, você pode usar um
parâmetro ou sinalizador para mudar para um endpoint de pilha dupla. Você também pode especificar
o endpoint de pilha dupla diretamente como uma substituição do endpoint do Amazon S3 no arquivo de
configuração. As seções a seguir descrevem como usar endpoints de pilha dupla da AWS CLI e dos AWS
SDKs.
Você define o valor de configuração use_dualstack_endpoint para true em um perfil no seu arquivo
do AWS Config para direcionar todas as solicitações do Amazon S3 feitas pelos comandos s3 e s3api
da AWS CLI ao endpoint de pilha dupla para a região especificada. Especifique a região no arquivo de
configuração ou em um comando usando a opção --region.
Quando se usa endpoints de pilha dupla com a AWS CLI, os estilos de endereçamento path e virtual
são compatíveis. O estilo de endereçamento, definido no arquivo de configuração, controla se o nome
do bucket está no hostname ou em parte do URL. Por padrão, a CLI tentará usar o estilo virtual sempre
que possível, mas voltará ao estilo de caminho se necessário. Para obter mais informações, consulte
Configuração do Amazon S3 da AWS CLI.
Você também pode fazer alterações de configuração usando um comando, conforme mostrado no
exemplo a seguir que define use_dualstack_endpoint para true e addressing_style para
virtual no perfil padrão.
Se quiser usar um endpoint de pilha dupla apenas para comandos especificados da AWS CLI, (nem todos
os comandos), você pode usar qualquer um dos métodos a seguir:
• Você pode usar o endpoint de pilha dupla por comando, definindo o parâmetro --endpoint-url
como https://s3.dualstack.aws-region.amazonaws.com ou http://s3.dualstack.aws-
region.amazonaws.com para qualquer comando s3 ou s3api.
• Você pode configurar perfis separados em seu arquivo AWS Config. Por exemplo, crie
um perfil que defina use_dualstack_endpoint como true e um perfil que não defina
use_dualstack_endpoint. Quando executar um comando, especifique qual perfil deseja usar,
dependendo de querer ou não usar o endpoint de pilha dupla.
Note
Atualmente, ao usar a AWS CLI, você não pode usar a aceleração de transferência com
endpoints de pilha dupla. Contudo, o suporte para a CLI da AWS estará disponível em breve.
Para obter mais informações, consulte Usar a CLI da AWS (p. 52).
Para obter instruções sobre criar e testar um exemplo funcional Java, consulte Testar exemplos de código
Java no Amazon S3 (p. 1042).
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
try {
// Create an Amazon S3 client with dual-stack endpoints enabled.
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.withDualstackEnabled(true)
.build();
s3Client.listObjects(bucketName);
} catch (AmazonServiceException e) {
// The call was transmitted successfully, but Amazon S3 couldn't process
// it, so it returned an error response.
e.printStackTrace();
} catch (SdkClientException e) {
// Amazon S3 couldn't be contacted for a response, or the client
// couldn't parse the response from Amazon S3.
e.printStackTrace();
}
}
}
Se estiver usando o AWS SDK para Java no Windows, você talvez tenha de definir a seguinte propriedade
da máquina virtual Java (JVM):
java.net.preferIPv6Addresses=true
Ao usar o AWS SDK para .NET você, você usa a classe AmazonS3Config para permitir o uso de um
endpoint de pilha dupla, como mostrado no exemplo a seguir.
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class DualStackEndpointTest
{
private const string bucketName = "*** bucket name ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 client;
UseDualstackEndpoint = true,
RegionEndpoint = bucketRegion
};
client = new AmazonS3Client(config);
Console.WriteLine("Listing objects stored in a bucket");
ListingObjectsAsync().Wait();
}
Para uma amostra completa da .NET para objetos de listagem, consulte Listar chaves de objeto
programaticamente (p. 150).
Para obter informações sobre como criar e testar um exemplo funcional .NET, consulte Executar os
exemplos de código do Amazon S3 .NET (p. 1044).
Você pode enviar solicitações autenticadas para o Amazon S3 usando o AWS SDK ou fazendo chamadas
de API REST diretamente em sua aplicação. A API do SDK da AWS usa as credenciais que você fornece
para computar a assinatura para autenticação. Se você usar a API REST diretamente em seus aplicativos,
deverá gravar o código necessário para computar a assinatura para autenticar sua solicitação. Para obter
uma lista de AWS SDKs disponíveis, acesse Código de exemplo e bibliotecas.
Cada um desses SDKs da AWS usa uma cadeia de provedor de credenciais específicas do SDK para
encontrar e usar credenciais, além de realizar ações em nome do proprietário das credenciais. O que todas
essas cadeias de provedor de credenciais têm em comum é que elas procuram por seu arquivo local de
credenciais da AWS.
Tópicos
• Para criar um arquivo de credenciais local da AWS (p. 999)
• Enviar solicitações autenticadas usando os AWS SDKs (p. 1000)
• Recursos relacionados (p. 1005)
~/.aws
%HOMEPATH%\.aws
[default]
aws_access_key_id = your_access_key_id
aws_secret_access_key = your_secret_access_key
7. Salve o arquivo credentials e exclua o arquivo .csv que você baixou na etapa 3.
Seu arquivo de credenciais compartilhado agora está configurado em seu computador local, e ele está
pronto para ser usado com os SDKs da AWS.
Java
Para enviar solicitações autenticadas para o Amazon S3 usando as credenciais de conta da AWS ou
de usuário do IAM, faça o seguinte:
O exemplo a seguir realiza as tarefas anteriores. Para obter informações sobre como criar e testar um
exemplo funcional, consulte Testar exemplos de código Java no Amazon S3 (p. 1042).
Example
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.ListObjectsRequest;
import com.amazonaws.services.s3.model.ObjectListing;
import com.amazonaws.services.s3.model.S3ObjectSummary;
import java.io.IOException;
import java.util.List;
try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();
.NET
Para enviar solicitações autenticadas usando as credenciais de conta da AWS ou de usuário do IAM:
Para obter mais informações, consulte Fazer solicitações usando credenciais de usuário do IAM ou da
conta da AWS (p. 999).
Note
• Você pode criar o cliente AmazonS3Client sem fornecer suas credenciais de segurança.
As solicitações enviadas usando esse cliente são solicitações anônimas, sem uma
assinatura. O Amazon S3 retorna um erro se você enviar solicitações anônimas para um
recurso que não esteja disponível publicamente.
• Você pode criar uma conta da AWS e criar as contas de usuário necessárias. Você
também pode gerenciar credenciais para essas contas de usuário. Você precisa dessas
credenciais para executar a tarefa no exemplo a seguir. Para obter mais informações,
consulte Configurar credenciais da AWS no Guia do desenvolvedor do AWS SDK
para .NET.
Em seguida, você também pode configurar seu aplicativo para recuperar ativamente perfis
e credenciais e, em seguida, usar explicitamente essas credenciais ao criar um cliente de
serviço da AWS. Para obter mais informações, consulte Acessando credenciais e perfis em
um aplicativo no Guia do desenvolvedor do AWS SDK para .NET.
O exemplo de C# a seguir mostra como realizar as tarefas anteriores. Para obter informações
sobre como executar exemplos .NET neste guia e para instruções sobre como armazenar suas
credenciais em um arquivo de configuração, consulte Executar os exemplos de código do Amazon
S3 .NET (p. 1044).
Example
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class MakeS3RequestTest
{
private const string bucketName = "*** bucket name ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 client;
}
}
Para obter exemplos funcionais, consulte Visão geral de objetos Amazon S3 (p. 62) e Visão geral dos
buckets (p. 26). É possível testar esses exemplos usando as credenciais de sua conta da AWS ou de
um usuário do IAM.
Por exemplo, para listar todas as chaves de objetos em seu bucket, consulte Listar chaves de objeto
programaticamente (p. 150).
PHP
Esta seção explica como usar uma classe da versão 3 do AWS SDK para PHP para enviar
solicitações autenticadas usando suas credenciais da conta da AWS ou de usuário do IAM.
Pressupõe-se que você já esteja seguindo as instruções de Usar o AWS SDK para PHP e executar
exemplos do PHP (p. 1044) e tenha o AWS SDK para PHP devidamente instalado.
O exemplo de PHP a seguir mostra como o cliente faz uma solicitação usando suas credenciais de
segurança para listar todos os buckets para a sua conta.
Example
require 'vendor/autoload.php';
use Aws\Sts\StsClient;
use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;
try {
// Retrieve a paginator for listing objects.
$objects = $s3->getPaginator('ListObjects', [
'Bucket' => $bucket
]);
Note
Você pode criar o cliente S3Client sem fornecer suas credenciais de segurança. As
solicitações enviadas usando esse cliente são solicitações anônimas, sem uma assinatura.
O Amazon S3 retorna um erro se você enviar solicitações anônimas para um recurso que
não esteja disponível publicamente. Para obter mais informações, consulte Criar clientes
anônimos na Documentação do AWS SDK para PHP.
Para ver um exemplo funcional, consulte Visão geral de objetos Amazon S3 (p. 62). É possível testar
esses exemplos usando suas credenciais de usuário do IAM ou da conta da AWS.
Para um exemplo de listagem de chaves de objeto em um bucket, consulte Listar chaves de objeto
programaticamente (p. 150).
Ruby
Para poder usar a versão 3 do AWS SDK para Ruby para fazer chamadas para o Amazon S3, defina
as credenciais de acesso da AWS que o SDK usa para verificar acesso aos seus buckets e objetos.
Se você compartilhou credenciais configuradas no perfil de credenciais da AWS no sistema local,
a versão 3 do SDK para Ruby poderá usar essas credenciais sem que você precise declará-las no
código. Para obter mais informações sobre como configurar credenciais compartilhadas, consulte
Fazer solicitações usando credenciais de usuário do IAM ou da conta da AWS (p. 999).
Example
require 'aws-sdk-s3'
if objects.count.positive?
puts 'The object keys in this bucket are (first 50 objects):'
objects.contents.each do |object|
puts object.key
end
else
puts 'No objects found in this bucket.'
end
return true
rescue StandardError => e
puts "Error while accessing the bucket named '#{bucket_name}': #{e.message}"
return false
end
Se você não tiver um arquivo de credenciais da AWS local, ainda poderá criar o recurso
Aws::S3::Client e executar o código nos buckets e objetos do Amazon S3. As solicitações
enviadas usando a versão 3 do SDK para Ruby são anônimas, sem assinatura por padrão. O Amazon
S3 retornará um erro se você enviar solicitações anônimas para um recurso que não esteja disponível
publicamente.
É possível usar e expandir o trecho de código anterior para aplicações do SDK para Ruby, como no
seguinte exemplo mais robusto.
require 'aws-sdk-s3'
if objects.count.positive?
puts 'The object keys in this bucket are (first 50 objects):'
objects.contents.each do |object|
puts object.key
end
else
puts 'No objects found in this bucket.'
end
return true
rescue StandardError => e
puts "Error while accessing the bucket named '#{bucket_name}': #{e.message}"
end
Recursos relacionados
• Desenvolvimento com o Amazon S3 usando os AWS SDKs e exploradores (p. 1034)
• AWS SDK para PHP para a classe Aws\S3\S3Client do Amazon S3
• Documentação do AWS SDK para PHP
SDK para Java, .NET e PHP para obter credenciais de segurança temporárias e usá-las para autenticar
suas solicitações para o Amazon S3.
Java
Um usuário do IAM ou uma conta da AWS pode solicitar credenciais de segurança temporárias
(consulte Fazer solicitações (p. 990)) usando o AWS SDK para Java e usá-las para acessar o
Amazon S3. Essas credenciais expiram após a duração da sessão especificada.
Por padrão, a duração da sessão é de uma hora. Se usar credenciais de usuário do IAM, você
poderá especificar a duração ao solicitar as credenciais de segurança temporárias de 15 minutos
até a duração máxima de sessão para a função. Para obter mais informações sobre credenciais de
segurança temporárias, consulte Credenciais de segurança temporárias no Guia do usuário do IAM.
Para mais informações sobre fazer solicitações, consulte Fazer solicitações (p. 990).
Note
O exemplo a seguir lista um conjunto de chaves de objeto no bucket especificado. O exemplo obtém
credenciais de segurança temporárias para uma sessão e usa essas credenciais para enviar uma
solicitação autenticada ao Amazon S3.
Se você desejar testar o exemplo usando credenciais de usuário do IAM, crie um usuário do IAM em
sua conta da AWS. Para obter mais informações sobre como criar um usuário do IAM, consulte Criar o
primeiro usuário do IAM e grupo de administradores no Guia do usuário do IAM.
Para obter instruções sobre criar e testar um exemplo funcional, consulte Testar exemplos de código
Java no Amazon S3 (p. 1042).
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicSessionCredentials;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.ObjectListing;
import com.amazonaws.services.securitytoken.AWSSecurityTokenService;
import com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClientBuilder;
import com.amazonaws.services.securitytoken.model.AssumeRoleRequest;
import com.amazonaws.services.securitytoken.model.AssumeRoleResult;
import com.amazonaws.services.securitytoken.model.Credentials;
try {
// Creating the STS client is part of your trusted code. It has
// the security credentials you use to obtain temporary security
credentials.
AWSSecurityTokenService stsClient =
AWSSecurityTokenServiceClientBuilder.standard()
.withCredentials(new
ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();
// Obtain credentials for the IAM role. Note that you cannot assume the
role of an AWS root account;
// Amazon S3 will deny access. You must use credentials for an IAM user or
an IAM role.
AssumeRoleRequest roleRequest = new AssumeRoleRequest()
.withRoleArn(roleARN)
.withRoleSessionName(roleSessionName);
AssumeRoleResult roleResponse = stsClient.assumeRole(roleRequest);
Credentials sessionCredentials = roleResponse.getCredentials();
// Verify that assuming the role worked and the permissions are set
correctly
// by getting a set of object keys from the bucket.
ObjectListing objects = s3Client.listObjects(bucketName);
System.out.println("No. of Objects: " +
objects.getObjectSummaries().size());
}
catch(AmazonServiceException e) {
// The call was transmitted successfully, but Amazon S3 couldn't process
// it, so it returned an error response.
e.printStackTrace();
}
catch(SdkClientException e) {
// Amazon S3 couldn't be contacted for a response, or the client
// couldn't parse the response from Amazon S3.
e.printStackTrace();
}
}
}
.NET
Um usuário do IAM ou uma conta da AWS pode solicitar credenciais de segurança temporárias
usando o AWS SDK para .NET e usá-las para acessar o Amazon S3. Essas credenciais expiram após
a duração da sessão.
Por padrão, a duração da sessão é de uma hora. Se usar credenciais de usuário do IAM, você
poderá especificar a duração ao solicitar as credenciais de segurança temporárias de 15 minutos
até a duração máxima de sessão para a função. Para obter mais informações sobre credenciais de
segurança temporárias, consulte Credenciais de segurança temporárias no Guia do usuário do IAM.
Para mais informações sobre fazer solicitações, consulte Fazer solicitações (p. 990).
Note
O exemplo do C# a seguir lista chaves de objeto no bucket especificado. Como ilustração, o exemplo
obtém credenciais de segurança temporárias para uma sessão padrão de uma hora e usa essas
credenciais para enviar uma solicitação autenticada ao Amazon S3.
Para testar o exemplo usando credenciais de usuário do IAM, crie um usuário do IAM em sua conta
da AWS. Para obter mais informações sobre como criar um usuário do IAM, consulte Criar o primeiro
usuário do IAM e grupo de administradores no Guia do usuário do IAM. Para mais informações sobre
fazer solicitações, consulte Fazer solicitações (p. 990).
Para obter instruções sobre criar e testar um exemplo funcional, consulte Executar os exemplos de
código do Amazon S3 .NET (p. 1044).
using Amazon;
using Amazon.Runtime;
using Amazon.S3;
using Amazon.S3.Model;
using Amazon.SecurityToken;
using Amazon.SecurityToken.Model;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class TempCredExplicitSessionStartTest
{
private const string bucketName = "*** bucket name ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 s3Client;
public static void Main()
{
ListObjectsAsync().Wait();
}
GetSessionTokenResponse sessionTokenResponse =
await
stsClient.GetSessionTokenAsync(getSessionTokenRequest);
var sessionCredentials =
new SessionAWSCredentials(credentials.AccessKeyId,
credentials.SecretAccessKey,
credentials.SessionToken);
return sessionCredentials;
}
}
}
}
PHP
Este exemplo pressupõe que você já esteja seguindo as instruções para Usar o AWS SDK para PHP
e executar exemplos do PHP (p. 1044) e tenha o AWS SDK para PHP devidamente instalado.
Um usuário do IAM ou uma conta da AWS pode solicitar credenciais de segurança temporárias
usando a versão 3 do AWS SDK para PHP. Posteriormente, as credenciais temporárias podem ser
usadas para acessar o Amazon S3. As credenciais expiram quando a duração da sessão expira.
Por padrão, a duração da sessão é de uma hora. Se usar credenciais de usuário do IAM, você
poderá especificar a duração ao solicitar as credenciais de segurança temporárias de 15 minutos
até a duração máxima de sessão para a função. Para obter mais informações sobre credenciais de
segurança temporárias, consulte Credenciais de segurança temporárias no Guia do usuário do IAM.
Para mais informações sobre fazer solicitações, consulte Fazer solicitações (p. 990).
Note
Example
O exemplo de PHP a seguir lista as chaves de objeto no bucket especificado usando credenciais de
segurança temporárias. O exemplo obtém credenciais de segurança temporárias para uma sessão
padrão de uma hora e usa essas credenciais para enviar uma solicitação autenticada ao Amazon
S3. Para obter informações sobre a execução dos exemplos de PHP neste guia, consulte Executar
exemplos do PHP (p. 1045).
Para testar o exemplo usando credenciais de usuário do IAM, crie um usuário do IAM em sua conta da
AWS. Para obter informações sobre como criar um usuário do IAM, consulte Criar o primeiro usuário
do IAM e grupo de administradores no Guia do usuário do IAM. Para obter exemplos de definição de
duração de sessão usando credenciais de usuário do IAM para solicitar uma sessão, consulte Fazer
solicitações usando credenciais temporárias de usuário do IAM (p. 1005).
require 'vendor/autoload.php';
use Aws\Sts\StsClient;
use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;
$sessionToken = $sts->getSessionToken();
$result = $s3->listBuckets();
try {
// Retrieve a paginator for listing objects.
$objects = $s3->getPaginator('ListObjects', [
'Bucket' => $bucket
]);
// List objects
foreach ($objects as $object) {
echo $object['Key'] . PHP_EOL;
}
} catch (S3Exception $e) {
echo $e->getMessage() . PHP_EOL;
}
Ruby
Um usuário do IAM ou uma conta da AWS pode solicitar credenciais de segurança temporárias
usando o AWS SDK para Ruby e usá-las para acessar o Amazon S3. Essas credenciais expiram após
a duração da sessão.
Por padrão, a duração da sessão é de uma hora. Se usar credenciais de usuário do IAM, você
poderá especificar a duração ao solicitar as credenciais de segurança temporárias de 15 minutos
até a duração máxima de sessão para a função. Para obter mais informações sobre credenciais de
segurança temporárias, consulte Credenciais de segurança temporárias no Guia do usuário do IAM.
Para mais informações sobre fazer solicitações, consulte Fazer solicitações (p. 990).
Note
O seguinte exemplo de Ruby cria um usuário temporário para listar os itens em um bucket
especificado por uma hora. Para usar este exemplo, você deve ter credenciais da AWS que tenham as
permissões necessárias para criar novos clientes do AWS Security Token Service (AWS STS) e listar
buckets do Amazon S3.
require 'aws-sdk-core'
require 'aws-sdk-s3'
require 'aws-sdk-iam'
# Lists the keys and ETags for the objects in an Amazon S3 bucket.
#
# @param s3_client [Aws::S3::Client] An initialized Amazon S3 client.
# @param bucket_name [String] The bucket's name.
# @return [Boolean] true if the objects were listed; otherwise, false.
# @example
# s3_client = Aws::S3::Client.new(region: 'us-east-1')
# exit 1 unless list_objects_in_bucket?(s3_client, 'doc-example-bucket')
def list_objects_in_bucket?(s3_client, bucket_name)
puts "Accessing the contents of the bucket named '#{bucket_name}'..."
response = s3_client.list_objects_v2(
bucket: bucket_name,
max_keys: 50
)
if response.count.positive?
puts "Contents of the bucket named '#{bucket_name}' (first 50 objects):"
puts 'Name => ETag'
response.contents.each do |obj|
puts "#{obj.key} => #{obj.etag}"
end
else
puts "No objects in the bucket named '#{bucket_name}'."
end
return true
Recursos relacionados
• Desenvolvimento com o Amazon S3 usando os AWS SDKs e exploradores (p. 1034)
• AWS SDK para PHP para a classe Aws\S3\S3Client do Amazon S3
• Documentação do AWS SDK para PHP
Tanto a conta da AWS quanto um usuário do IAM podem solicitar credenciais de segurança
temporárias para usuários federados. No entanto, para melhor segurança, somente um usuário
do IAM com as permissões necessárias deve solicitar essas credenciais temporárias para
garantir que o usuário federado obtenha, no máximo, as mesmas permissões do usuário do
IAM solicitante. Em algumas aplicações, pode ser apropriado criar um usuário do IAM com
permissões específicas com o único propósito de conceder credenciais de segurança temporárias
às aplicações e aos usuários federados.
Java
Para fornecer credenciais de segurança e enviar solicitações autenticadas para acessar recursos, faça
o seguinte:
Example
O exemplo lista chaves no bucket especificado do S3. No exemplo, você obtém credenciais de
segurança temporárias para uma sessão de duas horas para o usuário federado e usa as credenciais
para enviar solicitações autenticadas ao Amazon S3. Para executar o exemplo, crie um usuário do
IAM com a política anexada que permita ao usuário solicitar as credenciais de segurança temporárias
e listar os recursos da AWS. A política seguinte faz isso:
{
"Statement":[{
"Action":["s3:ListBucket",
"sts:GetFederationToken*"
],
"Effect":"Allow",
"Resource":"*"
}
]
}
Para obter mais informações sobre como criar um usuário do IAM, consulte Criar o primeiro usuário do
IAM e grupo de administradores no Guia do usuário do IAM.
Após criar um usuário do IAM e anexar a política anterior, você poderá executar o exemplo a seguir.
Para obter instruções sobre criar e testar um exemplo funcional, consulte Testar exemplos de código
Java no Amazon S3 (p. 1042).
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicSessionCredentials;
import com.amazonaws.auth.policy.Policy;
import com.amazonaws.auth.policy.Resource;
import com.amazonaws.auth.policy.Statement;
import com.amazonaws.auth.policy.Statement.Effect;
import com.amazonaws.auth.policy.actions.S3Actions;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.ObjectListing;
import com.amazonaws.services.securitytoken.AWSSecurityTokenService;
import com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClientBuilder;
import com.amazonaws.services.securitytoken.model.Credentials;
import com.amazonaws.services.securitytoken.model.GetFederationTokenRequest;
import com.amazonaws.services.securitytoken.model.GetFederationTokenResult;
import java.io.IOException;
try {
AWSSecurityTokenService stsClient = AWSSecurityTokenServiceClientBuilder
.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();
.NET
Faça o seguinte:
Example
• Neste exercício, você criará um usuário do IAM com permissões mínimas. Usando as credenciais
desse usuário do IAM, solicite credenciais temporárias para terceiros. Este exemplo lista somente
os objetos em um bucket específico. Crie um usuário do IAM com a política a seguir anexada:
{
"Statement":[{
"Action":["s3:ListBucket",
"sts:GetFederationToken*"
],
"Effect":"Allow",
"Resource":"*"
}
]
}
A política permite que o usuário do IAM solicite credenciais de segurança temporárias e permissão
de acesso apenas para listar os recursos da AWS. Para obter mais informações sobre como criar
um usuário do IAM, consulte Criar o primeiro usuário do IAM e grupo de administradores no Guia do
usuário do IAM.
• Use as credenciais de segurança do usuário do IAM para testar o exemplo a seguir. O exemplo
envia a solicitação autenticada ao Amazon S3 usando credenciais de segurança temporárias. O
exemplo especifica a política a seguir ao solicitar credenciais de segurança temporárias para o
usuário federado (User1), que restringe o acesso aos objetos de lista em um bucket específico
(YourBucketName). É necessário atualizar a política e fornecer um nome de bucket existente.
{
"Statement":[
{
"Sid":"1",
"Action":["s3:ListBucket"],
"Effect":"Allow",
"Resource":"arn:aws:s3:::YourBucketName"
}
]
}
• Example
using Amazon;
using Amazon.Runtime;
using Amazon.S3;
using Amazon.S3.Model;
using Amazon.SecurityToken;
using Amazon.SecurityToken.Model;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class TempFederatedCredentialsTest
{
private const string bucketName = "*** bucket name ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 client;
GetFederationTokenRequest federationTokenRequest =
new GetFederationTokenRequest();
federationTokenRequest.DurationSeconds = 7200;
federationTokenRequest.Name = "User1";
federationTokenRequest.Policy = @"{
""Statement"":
[
{
""Sid"":""Stmt1311212314284"",
""Action"":[""s3:ListBucket""],
""Effect"":""Allow"",
""Resource"":""arn:aws:s3:::" + bucketName + @"""
}
]
}
";
GetFederationTokenResponse federationTokenResponse =
await
stsClient.GetFederationTokenAsync(federationTokenRequest);
Credentials credentials = federationTokenResponse.Credentials;
SessionAWSCredentials sessionCredentials =
new SessionAWSCredentials(credentials.AccessKeyId,
credentials.SecretAccessKey,
credentials.SessionToken);
return sessionCredentials;
}
}
}
PHP
Este tópico explica como usar classes da versão 3 do AWS SDK para PHP para solicitar credenciais
de segurança temporárias para aplicações e usuários federados, e usá-las para acessar recursos
armazenados no Amazon S3. Pressupõe-se que você já esteja seguindo as instruções de Usar o AWS
SDK para PHP e executar exemplos do PHP (p. 1044) e tenha o AWS SDK para PHP devidamente
instalado.
Para garantir segurança adicional ao solicitar credenciais de segurança temporárias para usuários
federados e aplicações, recomendamos usar um usuário dedicado do IAM apenas com as permissões
de acesso necessárias. O usuário temporário criado nunca pode ter mais permissões que o usuário do
IAM que solicitou as credenciais de segurança temporárias. Para obter informações sobre a federação
de identidades, consulte Perguntas frequentes sobre o AWS Identity and Access Management.
Para obter informações sobre a execução dos exemplos de PHP neste guia, consulte Executar
exemplos do PHP (p. 1045).
Example
O exemplo PHP a seguir lista chaves no bucket especificado. No exemplo, você obtém credenciais de
segurança temporárias para uma sessão de uma hora para o usuário federado (User1). Depois, use
as credenciais de segurança temporárias para enviar solicitações autenticadas ao Amazon S3.
Para maior segurança, ao solicitar credenciais temporárias para terceiros, use as credenciais
de segurança de um usuário do IAM com permissões para solicitar credenciais de segurança
temporárias. Para garantir que o usuário do IAM conceda apenas as permissões mínimas específicas
da aplicação ao usuário federado, você também pode limitar as permissões de acesso desse usuário
do IAM. Este exemplo lista somente objetos em um bucket específico. Crie um usuário do IAM com a
política a seguir anexada:
{
"Statement":[{
"Action":["s3:ListBucket",
"sts:GetFederationToken*"
],
"Effect":"Allow",
"Resource":"*"
}
]
}
A política permite que o usuário do IAM solicite credenciais de segurança temporárias e permissão
de acesso apenas para listar os recursos da AWS. Para obter mais informações sobre como criar
um usuário do IAM, consulte Criar o primeiro usuário do IAM e grupo de administradores no Guia do
usuário do IAM.
Agora é possível usar as credenciais de segurança do usuário do IAM para testar o exemplo a seguir.
O exemplo envia uma solicitação autenticada ao Amazon S3 usando credenciais de segurança
temporárias. Ao solicitar credenciais de segurança temporárias para o usuário federado (User1),
o exemplo especifica a política a seguir, que restringe o acesso aos objetos de lista em um bucket
específico. Atualizar a política com o nome do seu bucket.
"Statement":[
{
"Sid":"1",
"Action":["s3:ListBucket"],
"Effect":"Allow",
"Resource":"arn:aws:s3:::YourBucketName"
}
]
}
require 'vendor/autoload.php';
use Aws\Sts\StsClient;
use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;
// In real applications, the following code is part of your trusted code. It has
// the security credentials that you use to obtain temporary security credentials.
$sts = new StsClient(
[
'version' => 'latest',
'region' => 'us-east-1']
);
// The following will be part of your less trusted code. You provide temporary
// security credentials so the code can send authenticated requests to Amazon S3.
try {
$result = $s3->listObjects([
'Bucket' => $bucket
]);
} catch (S3Exception $e) {
echo $e->getMessage() . PHP_EOL;
}
Ruby
Example
O exemplo de código Ruby a seguir permite que um usuário federado com um conjunto limitado de
permissões listar as chaves no bucket específico.
require 'aws-sdk-s3'
require 'aws-sdk-iam'
require 'json'
# Gets temporary AWS credentials for an IAM user with the specified permissions.
#
# @param sts [Aws::STS::Client] An initialized AWS STS client.
# @param duration_seconds [Integer] The number of seconds for valid credentials.
# @param user_name [String] The user's name.
# Lists the keys and ETags for the objects in an Amazon S3 bucket.
#
# @param s3_client [Aws::S3::Client] An initialized Amazon S3 client.
# @param bucket_name [String] The bucket's name.
# @return [Boolean] true if the objects were listed; otherwise, false.
# @example
# s3_client = Aws::S3::Client.new(region: 'us-east-1')
# exit 1 unless list_objects_in_bucket?(s3_client, 'doc-example-bucket')
def list_objects_in_bucket?(s3_client, bucket_name)
puts "Accessing the contents of the bucket named '#{bucket_name}'..."
response = s3_client.list_objects_v2(
bucket: bucket_name,
max_keys: 50
)
if response.count.positive?
puts "Contents of the bucket named '#{bucket_name}' (first 50 objects):"
puts 'Name => ETag'
response.contents.each do |obj|
puts "#{obj.key} => #{obj.etag}"
end
else
puts "No objects in the bucket named '#{bucket_name}'."
end
return true
rescue StandardError => e
puts "Error while accessing the bucket named '#{bucket_name}': #{e.message}"
end
Recursos relacionados
• Desenvolvimento com o Amazon S3 usando os AWS SDKs e exploradores (p. 1034)
• AWS SDK para PHP para a classe Aws\S3\S3Client do Amazon S3
• Documentação do AWS SDK para PHP
s3.Region.amazonaws.com
Os endpoints de pontos de acesso do Amazon S3 e endpoints de pilha dupla também seguem a estrutura
padrão:
Para obter uma lista completa de regiões e endpoints do Amazon S3, consulte Endpoints e cotas do
Amazon S3 na Referência geral da AWS.
Veja a seguir um exemplo de uma solicitação de estilo de hospedagem virtual para excluir o arquivo
puppy.jpg do bucket examplebucket na região Oeste dos EUA (Oregon). Para obter mais informações
sobre solicitações de estilo hosted virtual, consulte Solicitações no estilo de hospedagem virtual (p. 1026).
Para obter mais informações sobre solicitações de estilo virtual, consulte Solicitações no estilo de
caminho (p. 1026).
Important
Conforme mostrado no exemplo a seguir, use um endpoint no estilo de hospedagem virtual na solicitação
REST que recupera o objeto do bucket chamado puppy.jpg do bucket examplebucket na região Oeste
dos EUA (Oregon).
Para obter mais informações sobre endpoints de pilha dupla, consulte Usar endpoints de pilha dupla do
Amazon S3 (p. 995).
Para obter mais informações sobre como fazer solicitações usando a API REST, consulte os tópicos
abaixo.
Tópicos
• Hospedagem virtual de buckets (p. 1025)
• Redirecionamento de solicitação e a API REST (p. 1031)
Além disso, a hospedagem virtual tem outros benefícios. Ao nomear o bucket com o nome do domínio
registrado e ao tornar esse nome um alias do DNS para o Amazon S3, você pode personalizar totalmente
o URL dos recursos do Amazon S3, por exemplo, http://my.bucketname.com/. Você também
pode publicar no “diretório raiz” do servidor virtual do bucket. Esta habilidade pode ser importante pois
muitos aplicativos buscam arquivos nesse local padrão. Por exemplo, favicon.ico, robots.txt,
crossdomain.xml serão todos encontrados na raiz.
Important
Ao usar buckets no estilo de hospedagem virtual com SSL, o certificado curinga SSL corresponde
apenas a buckets que não contêm pontos ("."). Para contornar isso, use HTTP ou escreva a
sua própria lógica de verificação do certificado. Para obter mais informações, consulte Plano de
depreciação de caminhos do Amazon S3.
Tópicos
• Solicitações no estilo de caminho (p. 1026)
• Solicitações no estilo de hospedagem virtual (p. 1026)
• Especificação de bucket do cabeçalho de host HTTP (p. 1027)
• Exemplos (p. 1027)
• Personalizar URLs do Amazon S3 com CNAMEs (p. 1028)
• Limitações (p. 1030)
• Compatibilidade retroativa (p. 1030)
https://s3.Region.amazonaws.com/bucket-name/key name
Por exemplo, se você criar um bucket chamado mybucket na região Oeste dos EUA (Oregon) e quiser
acessar o objeto puppy.jpg nele, use o seguinte URL no estilo de caminho:
https://s3.us-west-2.amazonaws.com/mybucket/puppy.jpg
Important
https://bucket-name.s3.Region.amazonaws.com/key name
Neste exemplo, my-bucket é o nome do bucket, Oeste dos EUA (Oregon) é a região, e puppy.png é o
nome da chave.
https://my-bucket.s3.us-west-2.amazonaws.com/puppy.png
Exemplos
Esta seção fornece exemplos de URLs e solicitações.
O URL é o seguinte:
http://s3.us-east-1.amazonaws.com/awsexamplebucket1.net/homepage.html
A solicitação é a seguinte:
Para obter informações sobre nomes compatíveis do DNS, consulte Limitações (p. 1030). Para obter mais
informações sobre chaves, consulte Chaves (p. 3).
O URL é o seguinte:
http://awsexamplebucket1.eu.s3.eu-west-1.amazonaws.com/homepage.html
A solicitação é a seguinte:
Para usar este método, é necessário configurar o nome de DNS como um alias CNAME para
bucketname.s3.us-east-1.amazonaws.com. Para obter mais informações, consulte Personalizar
URLs do Amazon S3 com CNAMEs (p. 1028). Este exemplo usa o seguinte:
O URL é o seguinte:
http://www.awsexamplebucket1.net/homepage.html
O exemplo é o seguinte:
O nome do bucket deve ser o mesmo que o CNAME. Por exemplo, se você criar um CNAME para
mapear images.awsexamplebucket1.net para images.awsexamplebucket1.net.s3.us-
east-1.amazonaws.com, http://images.awsexamplebucket1.net/filename e http://
images.awsexamplebucket1.net.s3.us-east-1.amazonaws.com/filename serão o mesmo.
O registro DNS do CNAME deve apelidar o nome do domínio para o nome de host apropriado
do estilo de hospedagem virtual. Por exemplo, se o nome do bucket e o nome do domínio forem
images.awsexamplebucket1.net e o bucket estiver na região Leste dos EUA (Norte da
Virgínia), o alias do registro do CNAME deverá ser images.awsexamplebucket1.net.s3.us-
east-1.amazonaws.com.
O Amazon S3 usa o nome de host para determinar o nome do bucket. O nome do CNAME e o nome do
bucket devem ser os mesmos. Por exemplo, suponha que você tenha configurado www.example.com
como um CNAME para www.example.com.s3.us-east-1.amazonaws.com. Quando você acessa
http://www.example.com, o Amazon S3 recebe uma solicitação semelhante à seguinte:
Example
GET / HTTP/1.1
Host: www.example.com
Date: date
Authorization: signatureValue
Qualquer endpoint do Amazon S3 pode ser usado em um CNAME. Por exemplo, s3.ap-
southeast-1.amazonaws.com pode ser usado em CNAMEs. Para obter mais informações sobre
endpoints, consulte Endpoints de solicitações (p. 992).
Por exemplo:
O procedimento para configurar o DNS depende do servidor DNS ou do provedor DNS. Para obter
informações específicas, consulte a documentação do servidor ou entre em contato com o provedor.
Versão da API 2006-03-01
1029
Amazon Simple Storage Service Guia do usuário
Fazer solicitações usando a API REST
Limitações
O suporte de SOAP via HTTP está obsoleto, mas continua disponível via HTTPS. Novos recursos do
Amazon S3 não serão compatíveis com o SOAP. Recomendamos que você use a API REST ou os AWS
SDKs.
Compatibilidade retroativa
Endpoints legados
Algumas regiões oferecem suporte a endpoints legados. Você pode ver esses endpoints nos logs de
acesso do servidor ou nos logs do CloudTrail. Para obter mais informações, revise as informações abaixo.
Para obter uma lista completa de regiões e endpoints do Amazon S3, consulte Endpoints e cotas do
Amazon S3 na Referência geral da AWS.
Important
Embora você possa ver endpoints legados nos seus logs, recomendamos que você sempre use a
sintaxe do endpoint padrão para acessar os buckets.
Os URLs de estilo hospedados virtualmente do Amazon S3 usam o formato a seguir.
https://bucket-name.s3.Region.amazonaws.com/key name
https://s3.Region.amazonaws.com/bucket-name/key name
s3‐Region
Algumas regiões mais antigas do Amazon S3 oferecem suporte a endpoints que contêm um traço entre
o S3 e a região (por exemplo, S3#us-west-2), em vez de um ponto (por exemplo, S3.us-west-2). Se
o bucket estiver em uma dessas regiões, você poderá ver o seguinte formato de endpoint nos logs de
acesso ao servidor ou nos logs do CloudTrail:
https://bucket-name.s3-Region.amazonaws.com
Neste exemplo, o nome do bucket é my-bucket e a região é Oeste dos EUA (Oregon):
https://my-bucket.s3-us-west-2.amazonaws.com
bucket-name.s3.amazonaws.com
Nos logs de acesso ao servidor ou nos logs do CloudTrail, você poderá ver solicitações que usam o
endpoint global legado. Neste exemplo, o nome do bucket é my-bucket e o endpoint global legado é
exibido:
https://my-bucket.s3.amazonaws.com
Solicitações de estilo de hospedagem virtual para Leste dos EUA (Norte da Virgínia)
As solicitações feitas com o endpoint global legado vão, por padrão, para o Leste dos EUA (Norte da
Virgínia). Portanto, o endpoint global legado às vezes é usado no lugar do endpoint regional para o Leste
dos EUA (Norte da Virgínia). Se você criar um bucket no Leste dos EUA (Norte da Virgínia) e usar o
endpoint global, o Amazon S3 roteará sua solicitação para essa região por padrão.
O endpoint global legado também é usado para solicitações no estilo de hospedagem virtual em outras
regiões compatíveis. Se você criar um bucket em uma região lançada antes de 20 de março de 2019 e
usar o endpoint global legado, o Amazon S3 atualizará o DNS para rotear a solicitação para o local correto,
o que pode levar algum tempo. Enquanto isso, a regra padrão se aplica e sua solicitação de estilo de
hospedagem virtual vai para a região Leste dos EUA (Norte da Virgínia). Em seguida, o Amazon S3 a
redireciona com um redirecionamento HTTP 307 para a região correta. Para buckets do S3 em regiões
lançadas após 20 de março de 2019, o DNS não roteia a solicitação diretamente à região da AWS na qual
o bucket reside. Em vez disso, ele retorna um erro de solicitação incorreta HTTP 400. Para obter mais
informações, consulte Fazer solicitações (p. 990).
Para a região Leste dos EUA (Norte da Virgínia), o endpoint global legado pode ser usado para
solicitações de estilo de caminho.
Para todas as outras regiões, a sintaxe de caminho exige usar o endpoint específico da região ao tentar
acessar um bucket. Se você tentar acessar um bucket com o endpoint global legado ou outro endpoint
diferente daquele para a região onde reside o bucket, você receberá um erro de redirecionamento
temporário com código 307 de resposta HTTP e uma mensagem indicando o URI correto para o seu
recurso. Por exemplo, se você usar https://s3.amazonaws.com/bucket-name para um bucket
criado na região Oeste dos EUA (Oregon), você receberá um erro de redirecionamento temporário HTTP
307.
Esta seção descreve como processar redirecionamentos HTTP usando a API REST do Amazon S3. Para
obter informações gerais sobre redirecionamentos do Amazon S3, consulte Fazer solicitações (p. 990) na
Referência da API do Amazon Simple Storage Service.
Antes de confiar em uma biblioteca para atender aos requisitos de redirecionamento, teste os seguintes
casos:
Os agentes de usuário HTTP que se conformam estritamente a RFC 2616 podem exigir confirmação
explícita antes de seguir um redirecionamento quando o método de solicitação HTTP não for GET nem
HEAD. Em geral, é seguro seguir redirecionamentos gerados pelo Amazon S3 automaticamente, pois
o sistema emitirá redirecionamentos somente para hosts no domínio amazonaws.com e o efeito da
solicitação redirecionada será igual ao da solicitação original.
Redirecionamentos e 100-Continue
Para simplificar o processamento de redirecionamentos, aumentar a eficiência e evitar custos associados
com o envio de um corpo de solicitação redirecionado duas vezes, configure seu aplicativo para usar
100-continues para operações PUT. Quando seu aplicativo usa 100-continue, ele não envia o corpo da
solicitação até receber uma confirmação. Se a mensagem for rejeitada com base nos cabeçalhos, o corpo
da mensagem não será enviado. Para obter mais informações sobre 100-continue, acesse RFC 2616
Section 8.2.3.
Note
De acordo com o RFC 2616, ao usar Expect: Continue com um servidor HTTP desconhecido,
você não deve esperar um período indefinido antes de enviar o corpo da solicitação. Isso porque
alguns servidores HTTP não reconhecem 100-continue. Porém, o Amazon S3 reconhecerá se
sua solicitação contiver um Expect: Continue e responderá com um status 100-continue
temporário ou um código de status final. Além disso, um erro de não redirecionamento ocorrerá
depois de receber o 100-continue temporário. Isto ajudará a evitar que você receba uma resposta
de redirecionamento enquanto ainda estiver escrevendo o corpo da solicitação.
Exemplo de redirecionamento
Esta seção fornece um exemplo de interação de servidor cliente usando redirecionamento HTTP e 100-
continue.
Content-Length: 6
Expect: 100-continue
Server: AmazonS3
O cliente segue a resposta de redirecionamento e emite uma nova solicitação ao endpoint temporário
quotes.s3-4c25d83b.amazonaws.com.
Content-Length: 6
Expect: 100-continue
O Amazon S3 retorna um 100-continue indicando que o cliente deve continuar com o envio de corpo da
solicitação.
ha ha\n
HTTP/1.1 200 OK
Date: Mon, 15 Oct 2007 22:18:48 GMT
ETag: "a2c8d6b872054293afd41061e93bc289"
Content-Length: 0
Server: AmazonS3
Para obter uma lista de comandos da AWS CLI do Amazon S3, consulte as seguintes páginas na
Referência de comandos da AWS CLI:
• s3
• s3api
• s3control
Note
1. Faça download e configure a AWS CLI. Para obter instruções, consulte os seguintes tópicos no Guia
do usuário da interface de linha de comando da AWS:
[adminuser]
aws_access_key_id = adminuser access key ID
aws_secret_access_key = adminuser secret access key
region = aws-region
Para obter uma lista de regiões da AWS disponíveis, consulte Regiões e endpoints na Referência
geral da AWS.
3. Verifique a configuração digitando os comandos a seguir no prompt de comando.
• Teste o comando help para verificar se a CLI da AWS está instalada no computador:
aws help
• Teste um comando do S3 para verificar se o usuário pode acessar o Amazon S3. Esse comando
lista os buckets de sua conta. A CLI da AWS usa as credenciais do adminuser para autenticar a
solicitação.
Esta seção fornece uma visão geral dos AWS SDKs para desenvolver aplicações do Amazon S3. Esta
seção também descreve como você pode testar os exemplos de código do SDK da AWS fornecidos neste
guia.
Tópicos
• Especificar a versão da assinatura na autenticação de solicitações (p. 1035)
• Usar o AWS SDK para Java (p. 1041)
• Usar o AWS SDK para .NET (p. 1043)
• Usar o AWS SDK para PHP e executar exemplos do PHP (p. 1044)
• Usar o AWS SDK para Ruby versão 3 (p. 1045)
• Usar o AWS SDK para Python (Boto) (p. 1046)
• Usar os AWS Mobile SDKs para iOS e Android (p. 1047)
Além dos AWS SDKs, os AWS Explorers estão disponíveis para Visual Studio e Eclipse para Java IDE.
Nesse caso, os SDKs e os Explorers estão disponíveis em um pacote como toolkits da AWS.
Você também pode usar a interface de linha de comando da AWS (CLI da AWS) para gerenciar buckets e
objetos do Amazon S3.
O AWS Toolkit for Eclipse inclui o AWS SDK para Java e o AWS Explorer for Eclipse. O AWS Explorer
for Eclipse é um plug-in de código aberto para o Eclipse para IDE de Java que facilita o desenvolvimento,
a depuração e a implantação de aplicações Java para os desenvolvedores que usam a AWS. A GUI
fácil de usar permite acessar e administrar a infraestrutura da AWS, incluindo o Amazon S3. É possível
executar operações comuns, como gerenciar buckets e objetos, além de definir políticas do IAM ao mesmo
tempo que desenvolve aplicações, tudo no contexto do IDE do Eclipse for Java. Para obter instruções de
configuração, consulte Configurar o toolkit. Para obter exemplos de como usar o Explorer, consulte Como
acessar o AWS Explorer.
O AWS Explorer para Visual Studio é uma extensão do Microsoft Visual Studio que facilita o
desenvolvimento, a depuração e a implantação de aplicativos .NET para os desenvolvedores que usam
a Amazon Web Services. A GUI fácil de usar permite acessar e administrar a infraestrutura da AWS,
incluindo o Amazon S3. É possível executar operações comuns, como gerenciar buckets e objetos
ou definir políticas do IAM ao desenvolver aplicações, tudo no contexto do Visual Studio. Para obter
instruções de configuração, acesse Configurar o AWS Toolkit for Visual Studio. Para obter exemplos sobre
como usar o Amazon S3 utilizando o Explorer, consulte Usar o Amazon S3 no AWS Explorer.
SDKs da AWS
Você pode fazer download somente dos SDKs. Para obter informações sobre como fazer download de
bibliotecas de SDKs, consulte Bibliotecas de códigos de exemplo.
CLI da AWS
A CLI da AWS é uma ferramenta unificada para gerenciar os serviços da AWS, incluindo o Amazon
S3. Para obter informações sobre como fazer download da CLI da AWS, consulte Interface da linha de
comando da AWS.
Para obter uma lista de todas as regiões do Amazon S3 e das versões do Signature com as quais elas são
compatíveis, consulte Regiões e endpoints na Referência geral da AWS.
Para todas as regiões da AWS, por padrão, os SDKs da AWS usam o Signature versão 4 para autenticar
solicitações. Ao usar os SDKs da AWS liberados antes de maio de 2016, talvez seja necessário solicitar o
Signature versão 4 conforme mostrado na tabela a seguir:
System.setProperty(SDKGlobalConfiguration.ENABLE_S3_SIGV4_SYSTEM_PROPERT
"true");
-Dcom.amazonaws.services.s3.enableV4
<?php
$client = S3Client::factory([
'region' => 'YOUR-REGION',
'version' => 'latest',
'signature' => 'v4'
]);
<?php
$s3 = new Aws\S3\S3Client([
'version' => '2006-03-01',
'region' => 'YOUR-REGION',
'signature_version' => 'v4'
]);
s3 = Aws::S3::Client.new(signature_version: 'v4')
SDK do .NET Adicione o código a seguir antes de criar o cliente do Amazon S3:
AWSConfigsS3.UseSignatureVersion4 = true;
<appSettings>
<add key="AWS.S3.UseSignatureVersion4" value="true" />
</appSettings>
Esta seção apresenta respostas às perguntas mais comuns relacionadas ao fim do suporte ao Signature
versão 2.
Para obter mais informações sobre a assinatura de solicitações AWS, consulte Assinar solicitações de API
da AWS na Referência geral da AWS.
Para obter mais informações sobre a assinatura de solicitações da AWS, consulte Alterações no Signature
versão 4 na Referência geral da AWS.
O Signature versão 4 oferece maior segurança porque usa uma chave de assinatura em vez de sua chave
de acesso secreta. No momento, o Signature versão 4 é compatível com todas as regiões da AWS. O
Signature versão 2 só é compatível com as regiões lançadas antes de janeiro de 2014. Essa atualização
nos permite oferecer uma experiência mais consistente em todas as regiões.
Como posso ter certeza de que estou usando o Signature versão 4 e quais atualizações são necessárias?
Normalmente, a versão utilizada para assinar suas solicitações é definida pela ferramenta ou pelo SDK no
lado do cliente. Por padrão, as versões mais recentes dos SDKs da AWS usam o Signature versão 4. Para
software de terceiro, entre em contato com a equipe de suporte dele para confirmar a versão necessária.
Para enviar chamadas REST diretamente para o Amazon S3, modifique a aplicação para usar o processo
de assinatura do Signature versão 4.
Para obter informações sobre qual versão dos AWS SDKs deve ser usada depois da transição para o
Signature versão 4, consulte Migração do Signature versão 2 para o Signature versão 4 (p. 1038).
Para obter informações sobre como usar o Signature versão 4 com a API REST do Amazon S3, consulte
Autenticar solicitações (AWS Signature versão 4) na Referência da API do Amazon Simple Storage
Service.
As solicitações assinadas com o Signature versão 2 feitas após essa data não autenticarão com o Amazon
S3. Os solicitantes verão erros com a mensagem de que a solicitação deve ser assinada com o Signature
versão 4.
Devo fazer alterações mesmo se estiver usando um pre-signed URL que exige a assinatura por mais de
sete dias?
Se você estiver usando um pre-signed URL que exige a assinatura por mais de sete dias, não é necessário
fazer nada. Você pode continuar usando o AWS Signature versão 2 para assinar e autenticar pre-signed
URLs. Vamos fazer um acompanhamento e fornecer mais detalhes sobre como migrar para o Signature
versão 4 para pre-signed URL.
Mais informações
• Para obter mais informações sobre como usar o Signature versão 4, consulte Assinar solicitações de API
da AWS.
• Visualize a lista de alterações entre o Signature versão 2 e o Signature versão 4 em Alterações no
Signature versão 4.
• Visualize a publicação AWS Signature Version 4 to replace AWS Signature Version 2 for signing Amazon
S3 API requests nos fóruns da AWS.
• Em caso de dúvidas, entre em contato com o AWS Support.
Para obter informações sobre como usar o Signature versão 4 com a API REST do Amazon S3, consulte
Autenticar solicitações (AWS Signature versão 4) na Referência da API do Amazon Simple Storage
Service.
A tabela a seguir contém os SDKs que exigem a utilização do Signature versão 4 (SigV4).
Se você utilizar pre-signed URLs com os SDKs AWS Java, JavaScript (Node.js) ou Python (Boto/CLI),
deverá definir a região da AWS correta e o Signature versão 4 na configuração do cliente. Para obter mais
informações sobre como definir o SigV4 na configuração do cliente, consulte Especificar a versão da
assinatura na autenticação de solicitações (p. 1035).
AWS SDK para Atualize para Sim Especificar a versão da assinatura na autenticação
Java v1 Java 1.11.201+ de solicitações (p. 1035)
ou v2 no 4º
trimestre de
2018.
AWS SDK para Atualize para Sim AWS SDK para JavaScript
JavaScript v1 o 2.68.0
ou versão
superior.
AWS SDK para Atualize para Sim AWS SDK para JavaScript
JavaScript v2 o 2.68.0
ou versão
superior.
AWS Tools for Windows PowerShell ou AWS Tools for PowerShell Core
Se você estiver usando versões de módulo anteriores à 3.3.0.0, deverá atualizar para a 3.3.0.0.
É possível enviar o tráfego do Signature versão 2 para pre-signed URLs válidas por mais de sete dias.
Tópicos
• A organização da API Java (p. 1042)
• Testar exemplos de código Java no Amazon S3 (p. 1042)
O AWS SDK para Java dá a opção de usar uma API de alto nível ou de baixo nível.
As APIs de baixo nível correspondem às operações REST subjacentes do Amazon S3, como operações
de criação, atualização e exclusão que se aplicam a buckets e objetos. Quando você faz upload de
objetos grandes usando a API de multipart upload de baixo nível, ela proporciona mais controle. Por
exemplo, ela permite pausar e retomar multipart uploads, variar tamanhos de parte durante o upload ou
começar uploads quando você não sabe o tamanho dos dados com antecedência. Se você não tiver esses
requisitos, use a API de alto nível para fazer upload de objetos.
Para fazer upload de objetos, o SDK fornece um nível superior de abstração fornecendo a classe
TransferManager. A API de alto nível é uma API mais simples, na qual em apenas algumas linhas de
código, você pode fazer upload de arquivos e streams no Amazon S3. Você deve usar essa API para fazer
upload dos dados a menos que você precise controlar o upload conforme descrito na seção API de baixo
nível anterior.
Para dados menores, a API TransferManager faz upload dos dados em uma única operação. No
entanto, o TransferManager alterna para o uso da API de multipart upload quando os dados atingem
um determinado limite. Quando possível, o TransferManager usa vários threads para fazer upload das
partes simultaneamente. Se houver falha no upload de uma parte, a API repetirá o upload da parte até três
vezes. Contudo, essas são opções configuráveis usando a classe TransferManagerConfiguration.
Note
Quando você está usando um streaming na fonte dos dados, a classe TransferManager não
faz uploads simultâneos.
Essa API de alto nível é projetada para simplificar a transferência de objetos para o Amazon S3 e vice-
versa. Ela inclui a classe TransferManager, que fornece métodos assíncronos para trabalhar com,
consultar e manipular transferências. Também inclui a classe TransferManagerConfiguration que
você pode usar para configurar o tamanho mínimo das partes para upload e o limite em bytes de quando
usar multipart uploads.
• com.amazonaws.services.s3.model: fornece as classes da API de baixo nível para criar solicitações e
respostas a processos. Por exemplo, inclui a classe GetObjectRequest para descrever sua solicitação
para obter objetos, a classe ListObjectsRequest para descrever suas solicitações para listar chaves,
e a classe InitiateMultipartUploadRequest para criar multipart uploads.
Para obter mais informações sobre a API do AWS SDK para Java, consulte Referência da API do AWS
SDK para Java API.
Tópicos
• A organização da API .NET (p. 1043)
• Executar os exemplos de código do Amazon S3 .NET (p. 1044)
O AWS SDK para .NET fornece a opção de usar uma API de alto ou de baixo nível.
As APIs de baixo nível correspondem às operações REST subjacentes do Amazon S3 incluindo operações
de criação, atualização e exclusão que se aplicam a buckets e objetos. Quando você faz upload de
objetos grandes usando a API de multipart upload de baixo nível (consulte Carregar e copiar objetos
usando multipart upload (p. 80)), ela proporciona mais controle. Por exemplo, ela permite pausar e retomar
multipart uploads, variar tamanhos de parte durante o upload ou começar uploads quando você não sabe o
tamanho dos dados com antecedência. Se você não tiver essas necessidades, use a API de alto nível para
fazer upload de objetos.
Para fazer upload de objetos, o SDK fornece um nível superior de abstração fornecendo a classe
TransferUtility. A API de alto nível é uma API mais simples, na qual em apenas algumas linhas de
código, você pode fazer upload de arquivos e streams no Amazon S3. Você deve usar essa API para fazer
upload dos dados a menos que você precise controlar o upload conforme descrito na seção API de baixo
nível anterior.
Para dados menores, a API TransferUtility faz upload dos dados em uma única operação. No
entanto, o TransferUtility alterna para o uso da API de multipart upload quando os dados atingem um
determinado limite. Por padrão, ele usa vários threads para fazer upload das partes simultaneamente. Se
houver falha no upload de uma parte, a API repetirá o upload da parte até três vezes. Contudo, essas são
opções configuráveis.
Note
Quando você está usando um streaming na fonte dos dados, a classe TransferUtility não
faz uploads simultâneos.
Fornece métodos que correspondem à API REST multipart upload do Amazon S3 (consulte Uso dos
REST API (p. 99)).
• Amazon.S3.Model: fornece as classes da API de baixo nível para criar solicitações e respostas
a processos. Por exemplo, fornece as classes InitiateMultipartUploadRequest e
InitiateMultipartUploadResponse que você pode usar ao iniciar um multipart upload, e as
classes UploadPartRequest e UploadPartResponse ao fazer o upload das partes.
• Amazon.S3.Encryption: fornece o AmazonS3EncryptionClient.
• Amazon.S3.Util: fornece várias classes de utilitários, como AmazonS3Util e
BucketRegionDetector.
Para obter mais informações sobre a API do AWS SDK para .NET, consulte a Referência da API do AWS
SDK para .NET versão 3.
O SDK está disponível no AWS SDK para PHP, que também tem instruções para instalar e começar a usar
o SDK.
A configuração para usar o AWS SDK para PHP depende do ambiente e de como você deseja executar a
aplicação. Para configurar o ambiente para executar os exemplos desta documentação, consulte o Guia de
conceitos básicos do AWS SDK para PHP.
Tópicos
• Níveis do AWS SDK para PHP (p. 1044)
• Executar exemplos do PHP (p. 1045)
• Recursos relacionados (p. 1045)
Outro exemplo é, ao enumerar objetos em um bucket, você pode usar o recurso de iteradores do AWS
SDK para PHP para retornar todas as chaves de objetos, independentemente de quantos objetos foram
armazenados no bucket. Se você usar a API de baixo nível, a resposta retornará, no máximo, 1.000
chaves. Se o bucket contiver mais de 1.000 objetos, o resultado ficará truncado e você terá que gerenciar
a resposta e verificar o truncamento.
Recursos relacionados
• AWS SDK para PHP para o Amazon S3
• Documentação do AWS SDK para PHP
• API do AWS SDK para PHP para o Amazon S3
• Exemplos de código do AWS SDK para PHP versão 3
• Aws::S3::Resource: representa a interface para o Amazon S3 para o SDK do Ruby e fornece métodos
para criar e enumerar buckets.
A classe S3 fornece o método da instância #buckets para acessar buckets existentes ou criar novos.
• Aws::S3::Bucket representa um bucket do Amazon S3.
A classe Object fornece métodos para obter e definir as propriedades de um objeto, especificando a
classe storage para armazenar objetos, e definindo permissões de objetos usando listas de controle de
acesso. A classe Object também tem métodos para exclusão, upload e cópia de objetos. Ao carregar
objetos em partes, essa classe fornece opções para especificar a ordem das partes carregadas e o
tamanho das partes.
Para obter mais informações sobre o AWS SDK para a API do Ruby, acesse AWS SDK para Ruby versão
2.
1 Para acessar a AWS, você deve fornecer um conjunto de credenciais para sua aplicação do
AWS SDK para PHP. Para obter mais informações, consulte Configurar o AWS SDK para
Ruby.
2 Crie um script do SDK para Ruby e adicione as seguintes linhas à parte superior do script.
#!/usr/bin/env ruby
require 'rubygems'
require 'aws-sdk-s3'
4 Atualize o código fornecendo todos os dados necessários. Por exemplo, se estiver fazendo
o upload de um arquivo, forneça o caminho do arquivo e o nome do bucket.
Exemplos do Ruby
Os links a seguir contêm exemplos para ajudar você a começar a usar o SDK para Ruby versão 3:
Os AWS Mobile SDKs oferecem acesso fácil ao Amazon S3 e a muitos outros serviços da AWS. Para
começar a usar os AWS Mobile SDKs, consulte Conceitos básicos dos AWS Mobile SDKs.
Mais informações
Usar a biblioteca JavaScript do AWS Amplify (p. 1047)
Para começar a usar a biblioteca JavaScript do AWS Amplify, escolha um dos links a seguir:
Para obter mais informações sobre o AWS Amplify, consulte AWS Amplify no GitHub.
Mais informações
Usar os AWS Mobile SDKs para iOS e Android (p. 1047)
Para obter mais informações sobre como usar o AWS SDK para JavaScript para Amazon S3, consulte
abaixo.
No momento, o Amazon S3 fornece uma interface REST. Com a REST, os metadados são retornados em
cabeçalhos HTTP. Como só oferecemos suporte a solicitações HTTP de até 4 KB (sem incluir o corpo),
a quantidade de metadados que você pode fornecer é restrita. A API REST é uma interface HTTP para o
Amazon S3. Usando REST, você usa solicitações HTTP padrão criar, buscar e excluir bucket e objetos.
Você pode usar qualquer toolkit compatível com HTTP para usar a API REST. Você pode até usar um
navegador para buscar objetos, desde que eles possam ser lidos anonimamente.
A API REST usa os cabeçalhos padrão e os códigos de status HTTP, para que os navegadores e os
toolkits padrão funcionem como esperado. Em algumas áreas, adicionamos funcionalidade ao HTTP (por
exemplo, adicionamos cabeçalhos para oferecer suporte ao controle de acesso). Nesses casos, fizemos o
melhor para adicionar nova funcionalidade de uma forma que correspondesse ao estilo de uso padrão do
HTTP.
Para obter mais informações sobre como usar a API REST para desenvolver com o Amazon S3, consulte
os tópicos abaixo.
Tópicos
• Roteamento de solicitação (p. 1048)
Roteamento de solicitação
Os programas que fazem solicitações em buckets criados usando a API <CreateBucketConfiguration>
devem oferecer suporte a redirecionamentos. Além disso, alguns clientes que não respeitam TTLs DNS
podem encontrar problemas.
Esta seção descreve problemas de roteamento e DNS a serem considerados ao projetar seu serviço ou
aplicação para uso com o Amazon S3.
Para usar esse recurso, você deve ter uma aplicação que possa lidar com respostas
de redirecionamento do Amazon S3. A única exceção é para aplicativos que funcionam
exclusivamente com buckets criados sem <CreateBucketConfiguration>. Para obter mais
informações sobre restrições de localização, consulte Acessar um bucket (p. 36).
Para todas as regiões lançadas após 20 de março de 2019, se uma solicitação chega no local
errado do Amazon S3, o Amazon S3 retorna um erro de solicitação incorreta HTTP 400.
Para obter mais informações sobre como habilitar ou desabilitar uma região da AWS, consulte
Regiões e endpoints da AWS na Referência geral da AWS.
Tópicos
• Roteamento de DNS (p. 1049)
• Redirecionamento de solicitação temporário (p. 1049)
• Redirecionamento permanente de solicitação (p. 1051)
• Exemplos de redirecionamento de solicitação (p. 1051)
Roteamento de DNS
O roteamento de DNS encaminha solicitações para instalações apropriadas do Amazon S3. A figura e o
procedimento a seguir mostram um exemplo de roteamento de DNS.
1. O cliente faz uma solicitação de DNS para obter um objeto armazenado no Amazon S3.
2. O cliente recebe um ou mais endereços IP para instalações capazes de processar a solicitação. Neste
exemplo, o endereço IP é para a instalação B.
3. O cliente faz uma solicitação à instalação B do Amazon S3.
4. A instalação B retorna uma cópia do objeto ao cliente.
Por exemplo, se você criar um bucket novo e, em seguida, fizer uma solicitação a esse bucket, é possível
que receba um redirecionamento temporário dependendo da restrição de localização do bucket. Se você
criou o bucket na região da AWS Leste dos EUA (Norte da Virgínia), você não verá o redirecionamento já
que esse também é o endpoint padrão do Amazon S3.
No entanto, se o bucket for criado em qualquer outra região, todas as solicitações feitas ao bucket
vão para o endpoint padrão enquanto a entrada do DNS do bucket é propagada. O endpoint padrão
redireciona a solicitação para o endpoint correto com uma resposta HTTP 302. Os redirecionamentos
temporários contêm um URI para a instalação correta, que pode ser usado para reenviar a solicitação
imediatamente.
Important
Não reutilize um endpoint fornecido por uma resposta de redirecionamento anterior. Ele
pode parecer funcionar (até mesmo durante longos períodos), mas pode fornecer resultados
imprevisíveis e eventualmente falhará sem aviso.
1. O cliente faz uma solicitação de DNS para obter um objeto armazenado no Amazon S3.
2. O cliente recebe um ou mais endereços IP para instalações capazes de processar a solicitação.
3. O cliente faz uma solicitação à instalação B do Amazon S3.
4. A instalação B retorna um redirecionamento indicando que o objeto está disponível na localização C.
5. O cliente reenvia a solicitação para a instalação C.
Para ajudar a encontrar esses erros durante o desenvolvimento, esse tipo de redirecionamento não
contém um cabeçalho HTTP de localização que permite o acompanhamento automático da solicitação
para a localização correta. Consulte o documento de erros XML resultante para obter ajuda no uso do
endpoint correto do Amazon S3.
<soapenv:Body>
<soapenv:Fault>
<Faultcode>soapenv:Client.TemporaryRedirect</Faultcode>
<Faultstring>Please re-send this request to the specified temporary endpoint.
Continue to use the original request endpoint for future requests.</Faultstring>
<Detail>
<Bucket>images</Bucket>
<Endpoint>s3-gztb4pa9sq.amazonaws.com</Endpoint>
</Detail>
</soapenv:Fault>
</soapenv:Body>
Considerações de DNS
Um dos requisitos de design do Amazon S3 é uma disponibilidade extremamente alta. Uma das maneiras
de cumprirmos esse requisito é atualizando os endereços IP associados com o endpoint do Amazon S3
no DNS, conforme necessário. Essas alterações são refletidas automaticamente em clientes com tempo
de vida curto, mas não em alguns clientes com tempo de vida longo. Os clientes com tempo de vida longo
precisarão realizar uma ação especial para resolver de novo o endpoint do Amazon S3 periodicamente
para se beneficiar com essas alterações. Para obter mais informações sobre Virtual Machines (VMs –
Máquinas virtuais), consulte o seguinte:
• Para Java, por padrão, o JVM do Sun armazena em cache as pesquisas de DNS para sempre; acesse
a seção "InetAddress Caching" da documentação do InetAddress para obter informações sobre como
alterar esse comportamento.
• Para PHP, a VM PHP persistente que é executada nas configurações de implantação mais populares
armazena em cache as pesquisas do DNS até a VM ser reiniciada. Acesse os docs getHostByName
PHP.
Para obter mais informações sobre erros do Amazon S3, visite ErrorCodeList.
Cabeçalhos de resposta
Os seguintes são cabeçalhos de resposta retornados por todas as operações:
Resposta de erro
Quando uma solicitação do Amazon S3 está em erro, o cliente recebe uma resposta de erro. O formato
exato de resposta de erro é específico à API: por exemplo, a resposta de erro de REST difere da resposta
de erro de SOAP. Contudo, todas as respostas de erro têm elementos comuns.
Note
O suporte de SOAP via HTTP está obsoleto, mas continua disponível via HTTPS. Novos recursos
do Amazon S3 não serão compatíveis com o SOAP. Recomendamos que você use a API REST
ou os AWS SDKs.
Código de erro
O código de erro é uma sequência que identifica exclusivamente uma condição de erro. O objetivo desse
código é ser lido e compreendido pelos programas que detectam e tratam erros por tipo. Muitos códigos
de erro são comuns entre as APIs SOAP e REST, mas alguns são específicos à API. Por exemplo,
NoSuchKey é universal, mas UnexpectedContent pode ocorrer apenas em resposta a uma solicitação
inválida do REST. Em todos os casos, os códigos com falha de SOAP têm um prefixo, conforme indicado
na tabela de códigos de erro, para que um erro de NoSuchKey seja realmente retornado em SOAP como
Client.NoSuchKey.
Note
O suporte de SOAP via HTTP está obsoleto, mas continua disponível via HTTPS. Novos recursos
do Amazon S3 não serão compatíveis com o SOAP. Recomendamos que você use a API REST
ou os AWS SDKs.
A mensagem de erro
A mensagem de erro contém uma descrição genérica da condição do erro em inglês. Ela é destinada ao
público humano. Programas simples exibem a mensagem diretamente ao usuário final se encontrarem
uma condição de erro que não conhecem ou não tratam. Programas sofisticados com tratamento de erro
mais exaustivo e internacionalização própria são mais de prováveis de ignorar a mensagem de erro.
Detalhes adicionais
Muitas respostas de erro contêm dados estruturados adicionais para serem lidos e compreendidos
pelo desenvolvedor que diagnostica erros de programação. Por exemplo, se você enviar um cabeçalho
Content-MD5 com uma solicitação PUT de REST que não corresponde ao resumo calculado no servidor,
você receberá um erro BadDigest. A resposta do erro também inclui como elementos de detalhes o
resumo que calculamos, e o resumo que você nos informou para esperar. Durante o desenvolvimento,
você pode usar essas informações para diagnosticar o erro. Em produção, um programa bem-comportado
pode incluir essas informações em seu log de erros.
O suporte de SOAP via HTTP está obsoleto, mas continua disponível via HTTPS. Novos recursos
do Amazon S3 não serão compatíveis com o SOAP. Recomendamos que você use a API REST
ou os AWS SDKs.
Em SOAP, um resultado de erro será retornado ao cliente como uma falha de SOAP, com o código de
resposta HTTP 500. Se você não receber uma falha de SOAP, sua solicitação terá sido bem-sucedida.
O código de falha de SOAP do Amazon S3 é composto de um código de falha padrão de SOAP 1.1
("servidor" ou "cliente") concatenado com o código de erro específico ao Amazon S3. Por exemplo:
“Server.InternalError” ou “Client.NoSuchBucket”. O elemento da sequência da falha de SOAP contém uma
mensagem de erro genérica, legível pelo usuário em inglês. Finalmente, o elemento de detalhes da falha
de SOAP contém informações diversas relevantes para o erro.
Por exemplo, se você tentar excluir o objeto “Fred”, que não existe, o corpo da resposta de SOAP conterá
uma falha de SOAP “NoSuchKey”.
Example
<soapenv:Body>
<soapenv:Fault>
<Faultcode>soapenv:Client.NoSuchKey</Faultcode>
<Faultstring>The specified key does not exist.</Faultstring>
<Detail>
<Key>Fred</Key>
</Detail>
</soapenv:Fault>
</soapenv:Body>
Para obter mais informações sobre erros do Amazon S3, visite ErrorCodeList.
Solicitações que recebem uma resposta de InternalError podem não ter sido processadas. Por exemplo, se
uma solicitação PUT retornar um InternalError, um GET subsequente poderá recuperar o valor antigo ou o
valor atualizado.
Erros isolados
Note
O suporte de SOAP via HTTP está obsoleto, mas continua disponível via HTTPS. Novos recursos
do Amazon S3 não serão compatíveis com o SOAP. Recomendamos que você use a API REST
ou os AWS SDKs.
O Amazon S3 fornece um conjunto de códigos de erro que são usados pelas APIs SOAP e REST. A
API SOAP retorna códigos de erro padrão do Amazon S3. A API REST é desenvolvida para parecer um
servidor HTTP padrão e interagir com clientes HTTP existentes (por exemplo, navegadores, bibliotecas
de cliente HTTP, proxies, caches etc.) Para garantir que os clientes HTTP tratem erros corretamente,
mapeamos cada erro do Amazon S3 para um código de status HTTP.
Os códigos de status HTTP são menos expressivos que os códigos de erro do Amazon S3 e contêm
menos informações sobre o erro. Por exemplo, os erros NoSuchKey e NoSuchBucket do Amazon S3 são
mapeados para o código de status HTTP 404 Not Found.
Embora os códigos de status HTTP contenham menos informações sobre o erro, os clientes que entendem
HTTP, mas não a API do Amazon S3, geralmente tratam o erro corretamente.
Portanto, para lidar com erros ou para relatar erros do Amazon S3 para os usuários finais, use o código de
erro do Amazon S3 em vez do código de status HTTP, uma vez que ele contém a maioria das informações
sobre o erro. Além disso, ao depurar o aplicativo, você também deve consultar o elemento <Details>
legível pelo usuário da resposta de erro XML.
Referência do desenvolvedor
Este apêndice inclui as seções a seguir.
Tópicos
• Apêndice A: Usar a API SOAP (p. 1055)
• Apêndice B: Autenticar solicitações (AWS Signature versão 2) (p. 1058)
O suporte de SOAP via HTTP está obsoleto, mas continua disponível via HTTPS. Novos recursos
do Amazon S3 não serão compatíveis com o SOAP. Recomendamos que você use a API REST
ou os AWS SDKs.
As solicitações SOAP, autenticadas e anônimas, devem ser enviadas para o Amazon S3 usando
SSL. O Amazon S3 retorna um erro quando você envia uma solicitação SOAP via HTTP.
Tópicos
• Elementos comuns da API SOAP (p. 1055)
• Autenticar solicitações SOAP (p. 1056)
• Configurar políticas de acesso padrão com SOAP (p. 1057)
O suporte de SOAP via HTTP está obsoleto, mas continua disponível via HTTPS. Novos recursos
do Amazon S3 não serão compatíveis com o SOAP. Recomendamos que você use a API REST
ou os AWS SDKs.
Você pode interagir com o Amazon S3 usando SOAP 1.1 via HTTP. O WSDL do Amazon S3,
que descreve a API do Amazon S3 de maneira legível por máquina, está disponível em: https://
doc.s3.amazonaws.com/2006-03-01/AmazonS3.wsdl. O esquema do Amazon S3 está disponível em
https://doc.s3.amazonaws.com/2006-03-01/AmazonS3.xsd.
A maioria dos usuários vai interagir com o Amazon S3 usando um toolkit SOAP personalizado para sua
linguagem e ambiente de desenvolvimento. Diferentes toolkits expõem a API do Amazon S3 de diferentes
maneiras. Consulte a documentação específica do toolkit para entender como usá-la. Esta seção ilustra as
operações SOAP do Amazon S3 de um modo independente do toolkit exibindo as solicitações XML e as
respostas como elas aparecem "na rede".
Elementos comuns
Você pode incluir os seguintes elementos relacionados a autorização com qualquer solicitação SOAP:
O suporte de SOAP via HTTP está obsoleto, mas continua disponível via HTTPS. Novos recursos
do Amazon S3 não serão compatíveis com o SOAP. Recomendamos que você use a API REST
ou os AWS SDKs.
Cada solicitação não anônima deve conter informações de autenticação para estabelecer a identidade do
principal que faz a solicitação. Em SOAP, as informações de autenticação são colocadas nos seguintes
elementos da solicitação SOAP:
Example
<CreateBucket xmlns="https://doc.s3.amazonaws.com/2006-03-01">
<Bucket>quotes</Bucket>
<Acl>private</Acl>
<AWSAccessKeyId>AKIAIOSFODNN7EXAMPLE</AWSAccessKeyId>
<Timestamp>2009-01-01T12:00:00.000Z</Timestamp>
<Signature>Iuyz3d3P0aTou39dzbqaEXAMPLE=</Signature>
</CreateBucket>
Note
As solicitações SOAP, autenticadas e anônimas, devem ser enviadas para o Amazon S3 usando
SSL. O Amazon S3 retorna um erro quando você envia uma solicitação SOAP via HTTP.
Important
O suporte de SOAP via HTTP está obsoleto, mas continua disponível via HTTPS. Novos recursos
do Amazon S3 não serão compatíveis com o SOAP. Recomendamos que você use a API REST
ou os AWS SDKs.
O controle de acesso pode ser definido no momento em que um bucket ou um objeto são gravados ao
se incluir o elemento “AccessControlList” com a solicitação para CreateBucket, PutObjectInline ou
PutObject. O elemento AccessControlList está descrito em Identity and Access Management no Amazon
S3 (p. 252). Se nenhuma lista de controle de acesso for especificada com essas operações, o recurso será
criado com uma política de acesso padrão que dá ao solicitante acesso FULL_CONTROL (esse é o caso
mesmo que a solicitação seja uma solicitação PutObjectInline ou PutObject para um objeto que já exista).
A seguir está uma solicitação que grava dados em um objeto, torna o objeto legível por administradores
anônimos e dá ao usuário especificado direitos FULL_CONTROL sobre o bucket (a maioria dos
desenvolvedores vai querer dar a si mesmo acesso FULL_CONTROL a seu próprio bucket).
Example
A seguir está uma solicitação que grava dados em um objeto e torna o objeto legível por administradores
anônimos.
Sample Request
<PutObjectInline xmlns="https://doc.s3.amazonaws.com/2006-03-01">
<Bucket>quotes</Bucket>
<Key>Nelson</Key>
<Metadata>
<Name>Content-Type</Name>
<Value>text/plain</Value>
</Metadata>
<Data>aGEtaGE=</Data>
<ContentLength>5</ContentLength>
<AccessControlList>
<Grant>
<Grantee xsi:type="CanonicalUser">
<ID>75cc57f09aa0c8caeab4f8c24e99d10f8e7faeebf76c078efc7c6caea54ba06a</ID>
<DisplayName>chriscustomer</DisplayName>
</Grantee>
<Permission>FULL_CONTROL</Permission>
</Grant>
<Grant>
<Grantee xsi:type="Group">
<URI>http://acs.amazonaws.com/groups/global/AllUsers<URI>
</Grantee>
<Permission>READ</Permission>
</Grant>
</AccessControlList>
<AWSAccessKeyId>AKIAIOSFODNN7EXAMPLE</AWSAccessKeyId>
<Timestamp>2009-03-01T12:00:00.183Z</Timestamp>
<Signature>Iuyz3d3P0aTou39dzbqaEXAMPLE=</Signature>
</PutObjectInline>
Sample Response
<PutObjectInlineResponse xmlns="https://s3.amazonaws.com/doc/2006-03-01">
<PutObjectInlineResponse>
<ETag>"828ef3fdfa96f00ad9f27c383fc9ac7f"</ETag>
<LastModified>2009-01-01T12:00:00.000Z</LastModified>
</PutObjectInlineResponse>
</PutObjectInlineResponse>
A política de controle de acesso pode ser lida ou configurada para um bucket ou objeto existentes
usando os métodos GetBucketAccessControlPolicy, GetObjectAccessControlPolicy,
SetBucketAccessControlPolicy e SetObjectAccessControlPolicy. Para obter mais
informações, consulte a explicação detalhada desses métodos.
Esta seção descreve como autenticar solicitações usando o AWS Signature versão 2. O Signature
versão 2 está sendo desativado (defasado), o Amazon S3 aceitará somente solicitações de API
assinadas usando o Signature versão 4. Para obter mais informações, consulte AWS Signature
versão 2 desativado (defasado) para o Amazon S3 (p. 1037)
O Signature versão 4 oferece suporte para todas as regiões da AWS; é a única versão compatível
com novas regiões. Para obter mais informações, consulte Autenticar solicitações (AWS Signature
versão 4) na Referência de APIs do Amazon Simple Storage Service.
O Amazon S3 oferece a possibilidade de identificar qual versão da assinatura de API foi usada
para assinar uma solicitação. É importante identificar se algum dos fluxos de trabalho estão
utilizando as assinaturas do Signature versão 2 e atualizá-los para que usem o Signature versão 4
para evitar que seus negócios sejam impactados.
Tópicos
• Autenticar solicitações usando a API REST (p. 1059)
• Assinar e autenticar as solicitações REST (p. 1061)
• Uploads baseados no navegador usando POST (Signature versão 2 da AWS) (p. 1071)
Elementos da solicitação
• ID de chave de acesso da AWS: cada solicitação deve conter o ID de chave de acesso da identidade
que você estiver usando para enviar a solicitação.
• Assinatura: cada solicitação deve conter uma assinatura de solicitação válida. Caso contrário, a
solicitação será rejeitada.
Uma assinatura de solicitação é calculada com a chave de acesso secreta, um segredo compartilhado
conhecido apenas por você e pela AWS.
• Time stamp: cada solicitação deve conter a data e a hora de criação da solicitação, representada como
uma string em UTC.
• Data: cada solicitação deve conter o time stamp da solicitação.
Dependendo da ação da API que você está usando, é possível fornecer uma data e hora de expiração
para a solicitação em vez (ou além) do time stamp. Consulte o tópico de autenticação da respectiva ação
para determinar o que é necessário.
Veja a seguir as etapas gerais para autenticar solicitações ao Amazon S3. Pressupõe-se que você tem as
credenciais de segurança necessárias, o ID de chave de acesso e a chave de acesso secreta.
5 O Amazon S3 calcula uma assinatura a partir dos dados da solicitação e da chave de acesso
secreta usando o mesmo algoritmo usado para calcular a assinatura enviada na solicitação.
Note
O conteúdo nesta seção não se aplica a HTTP POST. Para obter mais informações, consulte
Uploads baseados no navegador usando POST (Signature versão 2 da AWS) (p. 1071).
A API REST do Amazon S3 usa um esquema HTTP personalizado com base em um HMAC de chave
(código de autenticação de mensagem hash) para autenticação. Para autenticar uma solicitação, você
primeiro concatena elementos selecionados da solicitação para formar uma string. Depois, você pode
usar sua chave de acesso secreta da AWS para calcular o HMAC dessa string. Informalmente, chamamos
desse processo de “assinar a solicitação” e chamamos o resultado do algoritmo do HMAC de assinatura,
pois ele simula as propriedades de segurança de uma assinatura real. Finalmente, você adiciona esta
assinatura como um parâmetro da solicitação usando a sintaxe descrita nesta seção.
Quando o sistema recebe uma solicitação autenticada, ele busca a chave de acesso secreta da AWS que
você afirma ter e a usa da mesma forma para computar uma assinatura para a mensagem que recebeu.
Então, ele compara a assinatura que calculou com a assinatura apresentada pelo solicitante. Se houver
correspondência entre as duas assinaturas, o sistema conclui que o solicitante deve ter acesso à chave
de acesso secreta da AWS e, portanto, age com a autoridade do principal para quem a chave foi emitida.
Se as duas assinaturas não correspondem, a solicitação é abandonada e o sistema responde com uma
mensagem de erro.
Host: awsexamplebucket1.us-west-1.s3.amazonaws.com
Date: Tue, 27 Mar 2007 19:36:42 +0000
Quando você obtém credenciais de segurança temporárias usando a API do AWS Security Token Service,
a resposta inclui credenciais de segurança temporárias e um token de sessão. Forneça o valor do token
de sessão no cabeçalho x-amz-security-token ao enviar solicitações ao Amazon S3. Para obter
informações sobre a API do AWS Security Token Service fornecida pelo IAM, acesse Ação no Guia de
referência de APIs do AWS Security Token Service.
Cabeçalho de autenticação
A API REST do Amazon S3 usa o cabeçalho padrão HTTP Authorization para passar informações de
autenticação. (O nome do cabeçalho padrão é infeliz porque ele carrega informações de autenticação, não
de autorização.) No esquema de autenticação do Amazon S3, o cabeçalho Autorização tem a seguinte
forma:
Um ID de chave de acesso da AWS e uma chave de acesso secreta da AWS são emitidos para
os desenvolvedores quando eles se registram. Para autenticação de solicitação, o elemento
AWSAccessKeyId identifica o ID de chave de acesso que foi usado para computar a assinatura e,
indiretamente, o desenvolvedor que fez a solicitação.
A seguir está uma pseudogramática que ilustra a criação do cabeçalho da solicitação Authorization.
(No exemplo, \n significa o ponto do código Unicode U+000A, geralmente chamado de nova linha).
O HMAC-SHA1 é um algoritmo definido pelo hash de chave RFC 2104 para autenticação de mensagem.
O algoritmo recebe como input duas strings de byte, uma chave e uma mensagem. Para a autenticação de
solicitação do Amazon S3, use sua chave de acesso secreta da AWS (YourSecretAccessKey) como a
chave e a codificação UTF-8 de StringToSign como a mensagem. A saída de HMAC-SHA1 também é
uma string de byte, chamada de resumo. O parâmetro de solicitação Signature é criado pela codificação
Base64 desse resumo.
Iniciar processo
2 Se a solicitação especificar um bucket usando o cabeçalho de host HTTP (estilo hosted virtual),
adicione o nome do bucket precedido por uma "/" (por exemplo, “/bucketname”). Para solicitações
de estilo de caminho e solicitações que não seja endereçada a um bucket, não faça nada. Para
obter mais informações sobre solicitações de estilo hosted virtual, consulte Hospedagem virtual de
buckets (p. 1025).
3 Adicione a parte do caminho de um URI de solicitação HTTP descodificado, até a query string, mas
sem incluí-la.
Para uma solicitação que não seja endereçada a um bucket, como GET Service, adicione “/”.
Os sub-recursos que devem ser incluídos ao criar o elemento de CanonicalizedResource são acl,
ciclo de vida, local, registro, notificação, partNumber, política, requestPayment, torrent, uploadId,
uploads, versionId, versionamento, versões e site.
O parâmetro de query string delete deve ser incluído ao criar o CanonicalizedResource para uma
solicitação de exclusão de vários objetos.
Os elementos do CanonicalizedResource que vêm da URI da solicitação HTTP devem ser assinados
literalmente como aparecem na solicitação HTTP, incluindo metacaracteres de codificação de URL.
Processo de CanonicalizedAmzHeaders
1 Converta cada nome de cabeçalho HTTP para minúsculas. Por exemplo, 'X-Amz-Date' torna-se
'x-amz-date'.
4 “Desdobre” os cabeçalhos longos que abrangem várias linhas (como permitido em RFC 2616,
seção 4.2) substituindo o espaço de dobramento (incluindo a nova linha) por um único espaço.
5 Remova todos os espaços ao redor dos dois pontos no cabeçalho. Por exemplo, o cabeçalho 'x-
amz-meta-username: fred,barney' iria se tornar 'x-amz-meta-username:fred,barney'
6 Finalmente, adicione um caractere de nova linha (U+000A) para cada cabeçalho canonizado
na lista resultante. Crie o elemento CanonicalizedResource concatenando todos os cabeçalhos
dessa lista em uma única string.
Se um cabeçalho posicional chamado para a definição de StringToSign não estiver presente na sua
solicitação (por exemplo, Content-Type ou Content-MD5 são opcionais para solicitações PUT e sem
sentido para solicitações GET), substitua a string vazia ("") para essa posição.
Algumas bibliotecas de clientes HTTP não expõem a capacidade para configurar o cabeçalho Date para
uma solicitação. Se tiver problemas para incluir o valor do cabeçalho "Data" nos cabeçalhos canonizados,
você pode configurar o time stamp para a solicitação usando um cabeçalho 'x-amz-date'. O valor do
cabeçalho x-amz-date deve estar em um dos formatos RFC 2616 (http://www.ietf.org/rfc/rfc2616.txt).
Quando um cabeçalho x-amz-date está presente em uma solicitação, o sistema ignorará qualquer
cabeçalho Date ao calcular a assinatura da solicitação. Portanto, se você incluir o cabeçalho x-amz-
date, use a string vazia para o Date quando criar o StringToSign. Consulte a próxima seção para ver
um exemplo.
Exemplos de autenticação
Os exemplos nesta seção usam as credenciais (não trabalho) na tabela a seguir.
Parâmetro Valor
AWSAccessKeyId AKIAIOSFODNN7EXAMPLE
AWSSecretAccessKey wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Objeto GET
Solicitação StringToSign
Solicitação StringToSign
Authorization: AWS
AKIAIOSFODNN7EXAMPLE:
qgk2+6Sv9/oM7G3qLEjTH1a1l1g=
Observe que o CanonicalizedResource inclui o nome do bucket, mas a URI da solicitação HTTP não o
inclui. (O bucket é especificado pelo cabeçalho de host.)
Note
import base64
import hmac
from hashlib import sha1
access_key = 'AKIAIOSFODNN7EXAMPLE'.encode("UTF-8")
secret_key = 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY'.encode("UTF-8")
print(f"AWS {access_key.decode()}:{signature.decode()}")
PUT objeto
Solicitação StringToSign
Lista
Solicitação StringToSign
Fetch
Este exemplo busca o sub-recurso de política de controle de acesso para o bucket “awsexamplebucket1”
bucket.
Solicitação StringToSign
Excluir
Este exemplo exclui um objeto do bucket “awsexamplebucket1” usando o estilo de caminho e a alternativa
de data.
Solicitação StringToSign
Observe como usamos o método alternativo 'x-amz- data' de especificar a data (porque a biblioteca de
cliente nos impediu de configurar a data, por exemplo). Nesse caso, o x-amz-date tem precedência
sobre o cabeçalho Date. Portanto, entrada de data na assinatura deve conter o valor de cabeçalho x-
amz-date.
Carregar
Este exemplo faz upload de um objeto para um bucket de estilo hosted virtual CNAME com metadados.
Solicitação StringToSign
Observe como os cabeçalhos 'x-amz-' são classificados, os espaços são removidos e os cabeçalhos são
convertidos em minúsculas. Observe também que vários cabeçalhos com o mesmo nome foram unidos
usando vírgulas para separar valores.
Mais uma vez, observe que o CanonicalizedResource inclui o nome do bucket, mas a URI da
solicitação HTTP não o inclui. (O bucket é especificado pelo cabeçalho de host.)
Solicitação StringToSign
Chaves Unicode
Solicitação StringToSign
Note
Alguns toolkits inserem silenciosamente os cabeçalhos que você não conhece antecipadamente, como a
adição do cabeçalho Content-Type durante um PUT. Na maioria desses casos, o valor do cabeçalho
inserido permanece constante, permitindo que você descubra os cabeçalhos que faltam, usando
ferramentas como Ethereal ou o tcpmon.
Para obter mais informações sobre como usar parâmetros de consulta para autenticar solicitações,
consulte Autenticar solicitações: usar parâmetros de consulta (AWS Signature versão 4) na Referência
de APIs do Amazon Simple Storage Service. Para obter exemplos de uso de AWS SDKs para gerar pre-
signed URLs, consulte Compartilhar um objeto com uma pre-signed URL (p. 159).
Veja a seguir um exemplo de solicitação REST do Amazon S3 autenticada por query string.
GET /photos/puppy.jpg
?AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&Expires=1141889120&Signature=vjbyPxybdZaNmGa
%2ByT272YEAiv4%3D HTTP/1.1
Host: awsexamplebucket1.s3.us-west-1.amazonaws.com
Date: Mon, 26 Mar 2007 19:37:58 +0000
O método de autenticação por query string não requer nenhum cabeçalho especial HTTP. Em vez disso,
os elementos de autenticação exigidos são especificados como parâmetros de query string:
O método de autenticação de solicitação por query string difere ligeiramente do método comum, mas
somente no formato do parâmetro da solicitação Signature e no elemento StringToSign. A seguir está
a pseudogramática que ilustra o método de autenticação de solicitação por query string.
No método de autenticação por query string, você não utiliza o cabeçalho Date nem o x-amz-
date request para calcular o string para assinar.
Solicitação StringToSign
Supomos que quando um navegador faz a solicitação GET, ele não fornece um cabeçalho Content-
MD5 ou Content-Type, nem define os cabeçalhos x-amz- e assim essas partes de StringToSign são
deixadas em branco.
As assinaturas de solicitação HMAC devem ser codificadas em Base64. A codificação Base64 converte a
assinatura em uma string simples ASCII que pode ser anexada à solicitação. Os caracteres que poderiam
aparecer na string da assinatura como mais (+), barra (/) e igual (=) devem ser codificados se forem
usados em uma URI. Por exemplo, se o código de autenticação inclui um sinal de mais (+), codifique-o
como %2B na solicitação. Codifique uma barra como %2F e o sinal de igual como %3D.
Para obter exemplos de codificação Base64, consulte Exemplos de autenticação (p. 1065) do Amazon S3.
2 A página da web tem um formulário HTTP que contém toda as informações necessárias para
que o usuário faça upload de conteúdo no Amazon S3.
Note
Não há suporte para autenticação por query string para POST.
Ao se comunicar com o Amazon S3, você normalmente usa as APIs REST ou SOAP para executar as
operações “put”, “get”, “delete”, entre outras. Com POST, os usuários fazem upload dos dados diretamente
para o Amazon S3 por meios dos navegadores, que não são capazes de processar a API SOAP ou criar
uma solicitação PUT de REST.
Note
O suporte de SOAP via HTTP está obsoleto, mas continua disponível via HTTPS. Novos recursos
do Amazon S3 não serão compatíveis com o SOAP. Recomendamos que você use a API REST
ou os AWS SDKs.
Para permitir que os usuários façam upload de conteúdo para o Amazon S3 usando os navegadores, use
formulários HTML. Os formulários HTML são formados por uma declaração de formulário e campos de
formulário. A declaração de formulário contém informações de alto nível sobre a solicitação. Os campos de
formulário contêm informações detalhadas sobre a solicitação, bem como a política usada para autenticá-
la e garantir que ela satisfaça as condições especificadas.
Note
Os dados e os limites do formulário (excluindo o conteúdo do arquivo) não podem exceder 20 KB.
<html>
<head>
...
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
...
</head>
<body>
A ação especifica o URL que processa a solicitação, que deve ser definido como o URL do bucket. Por
exemplo, se o nome do seu bucket for awsexamplebucket1 e a região for Oeste dos EUA (Norte da
Califórnia), o URL será https://awsexamplebucket1.s3.us-west-1.amazonaws.com/.
Note
O nome chave é especificado em um campo do formulário.
O tipo de compartimento (enctype) deve ser especificado e definido como multipart/form-data para uploads
de arquivos e de áreas de texto. Para obter mais informações, acesse RFC 1867.
Example
O exemplo a seguir é uma declaração de formulário para o bucket "awsexamplebucket1".
enctype="multipart/form-data">
Tipo: string
Padrão: privado
Criação de política
Tópicos
• Expiração (p. 1077)
• Condições (p. 1077)
• Correspondência de condição (p. 1078)
• Caracteres de escape (p. 1079)
A política é um documento JSON codificado em Base64 e UTF-8 que especifica as condições que a
solicitação deve satisfazer, sendo usado para autenticar o conteúdo. Dependendo de como os documentos
de política forem elaborados, eles podem ser usados por upload, por usuário, para todos os uploads ou de
acordo com outros formatos que atendam as suas necessidades.
Note
Embora o documento de política seja opcional, o recomendamos fortemente em vez de tornar um
bucket aberto ao público para gravação.
{ "expiration": "2007-12-01T12:00:00.000Z",
"conditions": [
{"acl": "public-read" },
{"bucket": "awsexamplebucket1" },
Expiração
O elemento expiração especifica a data de expiração da política no formato de data UTC ISO 8601. Por
exemplo, "2007-12-01T12:00:00.000Z" especifica que a política não tem mais validade depois da meia-
noite UTC do dia 1° de dezembro de 2007. A expiração é necessária em uma política.
Condições
As condições no documento de política validam o conteúdo do objeto carregado. Cada campo especificado
no formulário (exceto AWSAccessKeyId, assinatura, arquivo, política e nomes de campos com o prefixo x-
ignore-) deve estar incluso na lista de condições.
Note
Caso existam vários campos com o mesmo nome, os valores devem ser separados por
vírgulas. Por exemplo, se existem dois campos chamados "x-amz-meta-tag", o primeiro tem o
valor "Ninja" e o segundo tem o valor "Stallman", o documento de política seria definido como
Ninja,Stallman.
Todas as variáveis dentro do formulário são expandidas antes da validação da política. Portanto,
qualquer correspondência de condição deve ser realizada nos campos expandidos. Por
exemplo, se o campo chave for definido como user/betty/${filename}, a política deve ser
[ "starts-with", "$key", "user/betty/" ]. Não insira [ "starts-with", "$key",
"user/betty/${filename}" ]. Para obter mais informações, consulte Correspondência de
condição (p. 1078).
Note
Se o seu toolkit traz campos adicionais (por exemplo, o Flash adiciona nome do arquivo), é
necessário adicioná-los ao documento de política. Se essa funcionalidade puder ser controlada,
adicione o prefixo x-ignore- ao campo para que o Amazon S3 ignore o recurso e para que
futuras versões não sejam afetadas.
Correspondência de condição
A tabela a seguir descreve os tipos de correspondência de condição. Embora seja necessário especificar
uma condição para cada campo especificado no formulário, é possível criar critérios de correspondência
mais complexos especificando várias condições para um campo.
Condição Descrição
{"acl": "public-read" }
Este exemplo é uma forma alternativa para indicar que a ACL deve ser definida como
pública para leitura:
Condição Descrição
Inicia com Se o valor deve iniciar com um certo valor, use starts-with. Este exemplo indica que a
chave deve iniciar com user/betty:
Corresponder Para configurar a política para permitir qualquer conteúdo em um campo, use starts-
qualquer with com um valor vazio. Este exemplo permite qualquer success_action_redirect:
conteúdo
["starts-with", "$success_action_redirect", ""]
Especificar Para os campos que aceitam intervalos, separe os limites superior e inferior do
intervalos intervalo com uma vírgula. Este exemplo permite um tamanho de arquivo entre 1 e 10
megabytes:
Caracteres de escape
A tabela a seguir descreve os caracteres de escape dentro de um documento de política.
Sequência Descrição
de escape
\\ Barra invertida
\$ Sinal de dólar
\b Apagar
\f Feed do formulário
\n Nova linha
\r Carriage return
\t Guia horizontal
\v Guia vertical
Etapa Descrição
Etapa Descrição
Para obter informações gerais sobre a autenticação, consulte Identity and Access Management no Amazon
S3 (p. 252).
Redirecionamento
Redirecionamento geral
Após a conclusão da solicitação POST, o usuário é redirecionado para o local especificado no campo
success_action_redirect. Se o Amazon S3 não for capaz de interpretar o URL, o campo
success_action_redirect será ignorado.
Se houver falha na solicitação POST, o Amazon S3 exibirá um erro e não fará o redirecionamento.
Redirecionamento pré-upload
Note
Upload de arquivo
Este exemplo mostra o processo completo para criação de uma política e um formulário que pode ser
usado para carregar um arquivo anexo.
A política a seguir é compatível com uploads para o bucket awsexamplebucket1 do Amazon S3.
{ "expiration": "2007-12-01T12:00:00.000Z",
"conditions": [
{"bucket": "awsexamplebucket1"},
["starts-with", "$key", "user/eric/"],
{"acl": "public-read"},
{"success_action_redirect": "https://awsexamplebucket1.s3.us-west-1.amazonaws.com/
successful_upload.html"},
["starts-with", "$Content-Type", "image/"],
{"x-amz-meta-uuid": "14365123651274"},
["starts-with", "$x-amz-meta-tag", ""]
]
}
eyAiZXhwaXJhdGlvbiI6ICIyMDA3LTEyLTAxVDEyOjAwOjAwLjAwMFoiLAogICJjb25kaXRpb25zIjogWwogICAgeyJidWNrZXQiOiA
O formulário a seguir oferece suporte a uma solicitação POST para o bucket awsexamplebucket1.net que
usa essa política.
<html>
<head>
...
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
...
</head>
<body>
...
<form action="https://awsexamplebucket1.s3.us-west-1.amazonaws.com/" method="post"
enctype="multipart/form-data">
Key to upload: <input type="input" name="key" value="user/eric/" /><br />
<input type="hidden" name="acl" value="public-read" />
<input type="hidden" name="success_action_redirect" value="https://
awsexamplebucket1.s3.us-west-1.amazonaws.com/successful_upload.html" />
Content-Type: <input type="input" name="Content-Type" value="image/jpeg" /><br />
<input type="hidden" name="x-amz-meta-uuid" value="14365123651274" />
Tags for File: <input type="input" name="x-amz-meta-tag" value="" /><br />
<input type="hidden" name="AWSAccessKeyId" value="AKIAIOSFODNN7EXAMPLE" />
<input type="hidden" name="Policy" value="POLICY" />
<input type="hidden" name="Signature" value="SIGNATURE" />
File: <input type="file" name="file" /> <br />
<!-- The elements after this will be ignored -->
<input type="submit" name="submit" value="Upload to Amazon S3" />
</form>
...
</html>
Exemplo de solicitação
Essa solicitação pressupões que a imagem carregada tem 117.108 bytes; os dados da imagem não estão
inclusos.
POST / HTTP/1.1
Host: awsexamplebucket1.s3.us-west-1.amazonaws.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.10) Gecko/20071115
Firefox/2.0.0.10
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/
plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Content-Type: multipart/form-data; boundary=9431149156168
Content-Length: 118698
--9431149156168
Content-Disposition: form-data; name="key"
user/eric/MyPicture.jpg
--9431149156168
Content-Disposition: form-data; name="acl"
public-read
--9431149156168
Content-Disposition: form-data; name="success_action_redirect"
https://awsexamplebucket1.s3.us-west-1.amazonaws.com/successful_upload.html
--9431149156168
Content-Disposition: form-data; name="Content-Type"
image/jpeg
--9431149156168
Content-Disposition: form-data; name="x-amz-meta-uuid"
14365123651274
--9431149156168
Content-Disposition: form-data; name="x-amz-meta-tag"
Some,Tag,For,Picture
--9431149156168
Content-Disposition: form-data; name="AWSAccessKeyId"
AKIAIOSFODNN7EXAMPLE
--9431149156168
Content-Disposition: form-data; name="Policy"
eyAiZXhwaXJhdGlvbiI6ICIyMDA3LTEyLTAxVDEyOjAwOjAwLjAwMFoiLAogICJjb25kaXRpb25zIjogWwogICAgeyJidWNrZXQiOiA
--9431149156168
Content-Disposition: form-data; name="Signature"
0RavWzkygo6QX9caELEqKi9kDbU=
--9431149156168
Content-Disposition: form-data; name="file"; filename="MyFilename.jpg"
Content-Type: image/jpeg
...file content...
--9431149156168
Content-Disposition: form-data; name="submit"
Upload to Amazon S3
--9431149156168--
Exemplo de resposta
Tópicos
• Criação de política e formulário (p. 1083)
• Exemplo de solicitação (p. 1084)
• Exemplo de resposta (p. 1085)
O exemplo a seguir mostra o processo completo para criação de uma política e um formulário para
carregar uma área de texto. Fazer upload de uma área de texto é útil para o envio de conteúdo criado pelo
usuário, como postagens de um blog.
A política a seguir é compatível com uploads de área de texto para o bucket awsexamplebucket1 do
Amazon S3.
{ "expiration": "2007-12-01T12:00:00.000Z",
"conditions": [
{"bucket": "awsexamplebucket1"},
["starts-with", "$key", "user/eric/"],
{"acl": "public-read"},
{"success_action_redirect": "https://awsexamplebucket1.s3.us-west-1.amazonaws.com/
new_post.html"},
["eq", "$Content-Type", "text/html"],
{"x-amz-meta-uuid": "14365123651274"},
["starts-with", "$x-amz-meta-tag", ""]
]
}
eyAiZXhwaXJhdGlvbiI6ICIyMDA3LTEyLTAxVDEyOjAwOjAwLjAwMFoiLAogICJjb25kaXR
pb25zIjogWwogICAgeyJidWNrZXQiOiAiam9obnNtaXRoIn0sCiAgICBbInN0YXJ0cy13aXRoIiwgIiRrZXkiLCAidXNlci9lcmljLy
LAogICAgeyJhY2wiOiAicHVibGljLXJlYWQifSwKICAgIHsic3VjY2Vzc19hY3Rpb25fcmVkaXJlY3QiOiAiaHR0cDovL2pvaG5zbWl
C5zMy5hbWF6b25hd3MuY29tL25ld19wb3N0Lmh0bWwifSwKICAgIFsiZXEiLCAiJENvbnRlbnQtVHlwZSIsICJ0ZXh0L2h0bWwiXSwK
CAgIHsieC1hbXotbWV0YS11dWlkIjogIjE0MzY1MTIzNjUxMjc0In0sCiAgICBbInN0YXJ0cy13aXRoIiwgIiR4LWFtei1tZXRhLXRh
IsICIiXQogIF0KfQo=
O formulário a seguir oferece suporte a uma solicitação POST para o bucket awsexamplebucket1.net que
usa essa política.
<html>
<head>
...
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
...
</head>
<body>
...
<form action="https://awsexamplebucket1.s3.us-west-1.amazonaws.com/" method="post"
enctype="multipart/form-data">
Key to upload: <input type="input" name="key" value="user/eric/" /><br />
<input type="hidden" name="acl" value="public-read" />
<input type="hidden" name="success_action_redirect" value="https://
awsexamplebucket1.s3.us-west-1.amazonaws.com/new_post.html" />
<input type="hidden" name="Content-Type" value="text/html" />
<input type="hidden" name="x-amz-meta-uuid" value="14365123651274" />
Tags for File: <input type="input" name="x-amz-meta-tag" value="" /><br />
<input type="hidden" name="AWSAccessKeyId" value="AKIAIOSFODNN7EXAMPLE" />
<input type="hidden" name="Policy" value="POLICY" />
<input type="hidden" name="Signature" value="SIGNATURE" />
Entry: <textarea name="file" cols="60" rows="10">
</textarea><br />
<!-- The elements after this will be ignored -->
<input type="submit" name="submit" value="Upload to Amazon S3" />
</form>
...
</html>
Exemplo de solicitação
Essa solicitação pressupões que a imagem carregada tem 117.108 bytes; os dados da imagem não estão
inclusos.
POST / HTTP/1.1
Host: awsexamplebucket1.s3.us-west-1.amazonaws.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.10) Gecko/20071115
Firefox/2.0.0.10
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/
plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Content-Type: multipart/form-data; boundary=178521717625888
Content-Length: 118635
-178521717625888
Content-Disposition: form-data; name="key"
ser/eric/NewEntry.html
--178521717625888
Content-Disposition: form-data; name="acl"
public-read
--178521717625888
Content-Disposition: form-data; name="success_action_redirect"
https://awsexamplebucket1.s3.us-west-1.amazonaws.com/new_post.html
--178521717625888
Content-Disposition: form-data; name="Content-Type"
text/html
--178521717625888
Content-Disposition: form-data; name="x-amz-meta-uuid"
14365123651274
--178521717625888
Content-Disposition: form-data; name="x-amz-meta-tag"
Interesting Post
--178521717625888
Content-Disposition: form-data; name="AWSAccessKeyId"
AKIAIOSFODNN7EXAMPLE
--178521717625888
Content-Disposition: form-data; name="Policy"
eyAiZXhwaXJhdGlvbiI6ICIyMDA3LTEyLTAxVDEyOjAwOjAwLjAwMFoiLAogICJjb25kaXRpb25zIjogWwogICAgeyJidWNrZXQiOiA
--178521717625888
Content-Disposition: form-data; name="Signature"
qA7FWXKq6VvU68lI9KdveT1cWgF=
--178521717625888
Content-Disposition: form-data; name="file"
Upload to Amazon S3
--178521717625888--
Exemplo de resposta
Por padrão, o modelo de segurança do Adobe Flash Player proíbe que os Adobe Flash Players realizem
conexões de rede com servidores fora do domínio que serve o arquivo SWF.
Para substituir o padrão, é necessário carregar um arquivo crossdomain.xml de leitura pública no bucket
que aceitará uploads POST. Veja a seguir um exemplo de arquivo crossdomain.xml.
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM
"http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="*" secure="false" />
</cross-domain-policy>
Note
Para obter mais informações sobre o modelo de segurança do Adobe Flash, acesse o site da
Adobe.
Adicionar o arquivo crossdomain.xml ao bucket permite que qualquer Adobe Flash Player se
conecte ao arquivo crossdomain.xml no bucket. No entanto, isso não concede acesso ao bucket
do Amazon S3 em si.
A API FileReference no Adobe Flash adiciona o campo de formulário Filename à solicitação POST.
Ao compilar aplicações do Adobe Flash que fazem upload para o Amazon S3 usando a ação da API
FileReference, inclua a seguinte condição na política:
Algumas versões do Adobe Flash Player não lidam muito bem com respostas HTTP que têm
um corpo vazio. Para configurar a POST para retornar uma resposta sem corpo vazio, defina
success_action_status para 201. O Amazon S3 retornará um documento XML com um código de
status 201. Para obter informações sobre o conteúdo do documento XML, consulte Objeto POST. Para
obter informações campos de formulário, consulte Campos do formulário HTML (p. 1073).
Por exemplo, algumas aplicações de data lake no Amazon S3 verificam milhões ou bilhões de objetos para
consultas que são executadas em petabytes de dados. Essas aplicações de data lake atingem taxas de
transferência de instância única que maximizam o uso da interface de rede para a instância do Amazon
EC2, que podem ser de até 100 Gb/s em uma única instância. Esses aplicativos então agregam a taxa de
transferência em várias instâncias para obter vários terabits por segundo.
Outros aplicativos são sensíveis à latência, como aplicativos de mensagem de mídias sociais. Essas
aplicações podem atingir latências consistentes de objetos pequenos (e latências de saída de primeiro
byte para objetos maiores) de aproximadamente 100 a 200 milissegundos.
Outros serviços da AWS também podem ajudar a acelerar o desempenho para diferentes arquiteturas
de aplicativo. Por exemplo, para obter taxas de transferência mais altas em uma única conexão HTTP
ou latências de um dígito de milissegundos, use o Amazon CloudFront ou o Amazon ElastiCache para
armazenar em cache com o Amazon S3.
Além disso, se você quiser um transporte de dados rápido em longas distâncias entre um cliente e um
bucket do S3, use Configurar transferências de arquivos rápidas e seguras usando o Amazon S3 Transfer
Acceleration (p. 48). O Transfer Acceleration usa os pontos de presença distribuídos globalmente no
CloudFront para acelerar o transporte de dados em distâncias geográficas. Se a carga de trabalho no
Amazon S3 usar criptografia no lado do servidor com AWS Key Management Service (SSE-KMS), consulte
Limites do AWS KMS no Guia do desenvolvedor do AWS Key Management Service para obter mais
informações sobre as taxas de solicitações compatíveis com seu caso de uso.
Os tópicos a seguir descrevem as diretrizes de melhores práticas e os padrões de design para otimizar
a performance de aplicações que usam o Amazon S3. Essas diretrizes prevalecem sobre as diretrizes
anteriores relacionadas à otimização da performance do Amazon S3. Por exemplo, as diretrizes anteriores
de performance do Amazon S3 recomendavam a randomização da nomenclatura de prefixos com
caracteres com hash para otimizar a performance de recuperações de dados frequentes. Não é mais
necessário randomizar a nomeação de prefixos para o desempenho, e você pode usar nomeação
sequencial baseada em datas para seus prefixos. Consulte Diretrizes de performance do Amazon
S3 (p. 1088) e Padrões de design de performance do Amazon S3 (p. 1090) para obter as informações
mais recentes sobre a otimização de performance do Amazon S3.
Tópicos
• Diretrizes de performance do Amazon S3 (p. 1088)
• Padrões de design de performance do Amazon S3 (p. 1090)
Para obter a melhor performance para a aplicação no Amazon S3, recomendamos as seguintes diretrizes.
Tópicos
• Avaliar o desempenho (p. 1088)
• Dimensionar conexões de armazenamento na horizontal (p. 1088)
• Usar consulta na escala de bytes (p. 1088)
• Solicitações de repetição para aplicativos sensíveis à latência (p. 1089)
• Combinar o Amazon S3 (armazenamento) e o Amazon EC2 (computação) na mesma região da
AWS (p. 1089)
• Usar o Amazon S3 Transfer Acceleration para minimizar a latência causada pela distância (p. 1089)
• Usar a versão mais recente dos AWS SDKs (p. 1089)
Avaliar o desempenho
Ao otimizar o desempenho, observe os requisitos de throughput de rede, CPU e DRAM. Dependendo da
combinação de demandas desses recursos diferentes, convém avaliar os diferentes tipos de instância do
Amazon EC2. Para obter mais informações sobre tipos de instância, consulte Tipos de instância no Guia
do usuário do Amazon EC2 para instâncias do Linux.
Também é útil observar o tempo de pesquisa de DNS, a latência e a velocidade de transferência dos
dados usando ferramentas de análise de HTTP ao avaliar o desempenho.
Os tamanhos típicos das solicitações de escala de bytes são 8 MB ou 16 MB. Se os objetos usarem a
solicitação PUT com um upload de várias partes, é recomendado usar a solicitação GET nos mesmos
tamanhos de parte (ou pelo menos de acordo com os limites de parte) para obter o melhor desempenho.
As solicitações GET podem abordar partes individuais diretamente; por exemplo, GET ?partNumber=N.
Para obter mais informações sobre custos de transferência de dados, consulte Definição de preço do
Amazon S3.
Você pode usar a Ferramenta de comparação de velocidade do Amazon S3 Transfer Acceleration para
comparar velocidades de upload aceleradas e não aceleradas em regiões do Amazon S3. A ferramenta
de comparação de velocidade usa multipart uploads para transferir um arquivo do navegador para várias
regiões do Amazon S3 com e sem o uso do Amazon S3 Transfer Acceleration.
Também é possível otimizar o desempenho ao usar solicitações de API REST HTTP. Ao usar a API REST,
siga as mesmas práticas recomendadas que fazem parte dos SDKs. Permita tempo limite e repetição em
solicitações lentas e que várias conexões consultem dados de objeto em paralelo. Para obter informações
sobre como usar a API REST, consulte a Referência da API do Amazon Simple Storage Service.
Tópicos
• Usar o cache para conteúdo acessado com frequência (p. 1090)
• Tempo limite e repetição para aplicativos sensíveis à latência (p. 1090)
• Dimensionamento horizontal e paralelização de solicitações para alto throughput (p. 1091)
• Usar o Amazon S3 Transfer Acceleration para acelerar transferências de dados geograficamente
dispersas (p. 1092)
O Amazon CloudFront é uma rede de entrega de conteúdo (CDN) rápida que armazena os dados
do Amazon S3 em cache com transparência em um grande conjunto de pontos de presença (PoPs)
distribuídos geograficamente. Quando os objetos podem ser acessados em várias regiões ou pela
Internet, o CloudFront permite que os dados sejam armazenados em cache perto dos usuários que estão
acessando os objetos. Isso pode resultar na entrega de alta performance de conteúdo popular do Amazon
S3. Para obter mais informações sobre o CloudFront, consulte o Guia do desenvolvedor do Amazon
CloudFront.
objeto associados a eles. Se um aplicativo gerar altas taxas de solicitação (normalmente taxas constantes
de mais de 5.000 solicitações por segundo para um pequeno número de objetos), ele poderá receber
respostas HTTP 503 de lentidão. Se esses erros ocorrerem, cada SDK da AWS implementará uma lógica
de repetição automática usando o recuo exponencial. Se você não estiver usando um SDK da AWS,
implemente a lógica de repetição ao receber o erro HTTP 503. Para obter informações sobre técnicas de
recuo, consulte Repetições de erro e recuo exponencial na AWS na Referência geral da Amazon Web
Services.
Ao fazer solicitações de tamanhos variavelmente grandes (por exemplo, mais de 128 MB), recomendamos
rastrear o throughput atingido e repetir os 5% mais lentos das solicitações. Ao fazer solicitações menores
(por exemplo, menos de 512 KB), onde latências medianas geralmente estão na faixa de dezenas de
milissegundos, é recomendado repetir uma operação GET ou PUT depois de 2 segundos. Se outras
repetições forem necessárias, é recomendado recuar. Por exemplo, recomendamos emitir uma repetição
depois de 2 segundos e uma segunda repetição depois de mais 4 segundos.
Se a aplicação fizer solicitações de tamanho fixo para o Amazon S3, espere tempos de resposta mais
consistentes para cada uma dessas solicitações. Nesse caso, uma estratégia simples é identificar o 1%
mais lento de solicitações e repetí-las. Uma única repetição consegue reduzir a latência.
Se estiver usando o AWS Key Management Service (AWS KMS) para a criptografia no lado do servidor,
consulte Limites no Guia do desenvolvedor do AWS Key Management Service para obter informações
sobre as taxas de solicitações compatíveis com seu caso de uso.
Para obter altas taxas de transferência, o Amazon S3 recomenda usar aplicações com várias conexões
para executar solicitações GET ou PUT paralelas de dados. Por exemplo, isso é compatível com o
Amazon S3 Transfer Manager no AWS SDK para Java, e a maioria dos outros AWS SDKs fornece
construções semelhantes. Para alguns aplicativos, você pode atingir conexões paralelas iniciando várias
solicitações ao mesmo tempo em diferentes threads de aplicativo ou em diferentes instâncias de aplicativo.
A melhor abordagem depende do aplicativo e da estrutura dos objetos acessados.
Você pode usar os AWS SDKs para emitir solicitações GET e PUT diretamente em vez de empregar o
gerenciamento de transferências no AWS SDK. Essa abordagem permite ajustar a carga de trabalho
mais diretamente, além de ainda aproveitar o suporte do SDK para repetições e o processamento das
eventuais respostas HTTP 503. Como regra geral, ao fazer download de grandes objetos em uma região
do Amazon S3 para o Amazon EC2, sugerimos fazer solicitações simultâneas em escalas de bytes de um
objeto na granularidade de 8 a 16 MB. Faça uma solicitação simultânea para cada 85 a 90 MB/s da taxa de
transferência de rede desejada. Para saturar uma placa de interface de rede (NIC) de 10 Gb/s, você pode
usar cerca de 15 solicitações simultâneas em conexões separadas. É possível dimensionar as solicitações
simultâneas em mais conexões para saturar NICs mais rápidas, como NICs de 25 Gb/s ou 100 Gb/s.
Se a aplicação emitir solicitações diretamente para o Amazon S3 usando a API REST, recomendamos
usar um grupo de conexões HTTP e reutilizar cada conexão para uma série de solicitações. Evitar a
configuração de conexão por solicitação elimina a necessidade de realizar handshakes Secure Sockets
Layer (SSL) e TCP de inicialização lenta em cada solicitação. Para obter informações sobre como usar a
API REST, consulte a Referência da API do Amazon Simple Storage Service.
Finalmente, vale prestar atenção ao DNS e verificar novamente se as solicitações estão sendo distribuídas
em um grande grupo de endereços IP do Amazon S3. As consultas de DNS para o Amazon S3 percorrem
uma grande lista de endpoints IP. No entanto, o armazenamento em cache de solucionadores ou
código do aplicativo que reutiliza um único endereço IP não aproveita a diversidade de endereços e o
balanceamento de carga associados. Ferramentas de utilitário de rede, como a ferramenta de linha de
comando netstat, podem mostrar os endereços IP usados para comunicação com o Amazon S3, e nós
fornecemos diretrizes para as configurações de DNS que devem ser usadas. Para obter mais informações
sobre essas diretrizes, consulte Fazer solicitações (p. 990).
A rede de borda também ajuda a acelerar transferências de dados enviadas e recebidas do Amazon
S3. Ela é ideal para aplicativos que transferem dados em ou entre continentes, possuem uma rápida
conexão com a Internet, usam objetos grandes ou possuem muito conteúdo para upload. Conforme os
dados chegam em um ponto de presença, eles são roteados para o Amazon S3 por um caminho de rede
otimizado. Em geral, quanto mais distante você está de uma região do Amazon S3, maior a melhoria de
velocidade que pode esperar do uso do Transfer Acceleration.
Você pode configurar o Transfer Acceleration em buckets novos ou existentes. Use um endpoint separado
do Amazon S3 Transfer Acceleration para usar os pontos de presença da AWS. A melhor maneira de
testar se o Transfer Acceleration ajuda a performance da solicitação do cliente é usar a Ferramenta de
comparação de velocidade do Amazon S3 Transfer Acceleration. As configurações e condições de rede
variam periodicamente e de um lugar para outro. Portanto, você só é cobrado para transferências em
que o Amazon S3 Transfer Acceleration pode melhorar a performance do upload. Para obter informações
sobre o uso do Transfer Acceleration com diferentes AWS SDKs, consulte Habilitar e usar o S3 Transfer
Acceleration (p. 51).
Com o Amazon S3 no Outposts, é possível criar buckets do S3 no AWS Outposts, além de armazenar e
recuperar facilmente objetos no local para aplicações que exigem acesso a dados locais, processamento
de dados local e residência de dados. O S3 no Outposts fornece uma nova classe de armazenamento,
OUTPOSTS, que usa as APIs do S3 e é projetada para armazenar dados de forma duradoura e redundante
em vários dispositivos e servidores em seu AWS Outposts. Você se comunica com o bucket do Outposts
usando um ponto de acesso e uma conexão de endpoint em uma Virtual Private Cloud (VPC). É possível
usar as mesmas APIs e recursos nos buckets do Outposts da mesma maneira que no Amazon S3, como
políticas de acesso, criptografia e marcação. É possível usar o S3 no Outposts por meio do Console de
Gerenciamento da AWS, da CLI da AWS, dos AWS SDKs ou da API REST.
Você pode usar o S3 on Outposts para implantar o armazenamento de objetos on-premise que é
monitorado, corrigido e atualizado pela AWS. Com Outposts, você pode reduzir o tempo, os recursos, o
risco operacional e o tempo de inatividade de manutenção necessários para gerenciar a infraestrutura de
TI. Você pode processar e armazenar dados com segurança localmente em seu ambiente local e transferir
dados para o Amazon S3 em uma região da AWS para processamento ou arquivamento adicional. O S3
no Outposts permite que você atenda aos requisitos regulamentares ou de residência de dados, mantendo
os dados em um Outpost local dentro de um país, estado/província ou local onde não existe uma região da
AWS hoje.
Para aplicativos locais que exigem processamento local de alto rendimento, o S3 no Outposts fornece
armazenamento de objetos no local para minimizar transferências de dados e buffer de variações de
rede, ao mesmo tempo que oferece a você a capacidade de transferir dados facilmente entre Outposts
e regiões da AWS. O S3 no Outposts é integrado ao AWS DataSync. Assim, é possível automatizar a
transferência de dados entre os Outposts e as regiões da AWS, escolhendo o que transferir, quando
transferir e quanta largura de banda de rede usar. Para obter mais informações sobre como transferir
dados do S3 em buckets do Outposts usando o DataSync, consulte Conceitos básicos do AWS DataSync
no Guia do usuário do AWS DataSync.
Tópicos
• Conceitos básicos do Amazon S3 on Outposts (p. 1093)
• Restrições e limitações do Amazon S3 no Outposts (p. 1094)
• Usar o AWS Identity and Access Management com o Amazon S3 no Outposts (p. 1097)
• Acessar o Amazon S3 no Outposts (p. 1099)
• Monitoramento do Amazon S3 on Outposts (p. 1102)
• Como gerenciar buckets e objetos do Amazon S3 no Outposts (p. 1103)
Para obter informações sobre o AWS Outposts, consulte O que é o AWS Outposts? no Guia do usuário do
AWS Outposts.
Tópicos
• Pedir seu AWS Outpost (p. 1094)
• Configurar o S3 on Outposts (p. 1094)
Depois de selecionar a configuração, siga as etapas em Criar um Outpost e pedir a capacidade do Outpost
no Guia do usuário do AWS Outposts.
Configurar o S3 on Outposts
Depois que a capacidade do S3 on Outposts for provisionada, você poderá criar buckets e pontos de
acesso do S3 no seu Outpost usando o console do AWS Outposts, a API REST do Amazon S3 on
Outposts, a Interface da linha de comando da AWS (CLI da AWS) ou os AWS SDKs. Depois, você pode
usar APIs para armazenar e recuperar objetos desses buckets. Você também pode usar o AWS DataSync
para transferir dados entre o Outpost e a região da AWS. Para obter mais informações, consulte Acessar o
Amazon S3 no Outposts (p. 1099).
Depois que a AWS habilitar a capacidade do S3 no Outposts, você poderá acessar o S3 no Outpost
usando consoles do AWS Outposts ou Amazon S3, a API REST do Amazon S3, a AWS CLI ou os AWS
SDKs.
Tópicos
O Amazon S3 oferece consistência eventual para substituir PUTS e DELETES em todas as regiões.
As atualizações em uma única chave são atômicas. Por exemplo, se você executar PUT para uma chave
existente, uma leitura subsequente poderá retornar os dados antigos ou os dados atualizados, mas nunca
retornará dados corrompidos ou parciais. Com o modelo de consistência eventual, você pode observar os
seguintes comportamentos:
• Um processo grava um novo objeto no S3 on Outposts e imediatamente lista as chaves em seu bucket.
Até que a alteração seja totalmente propagada, o objeto poderá não aparecer na lista.
• Um processo substitui um objeto existente e imediatamente tenta lê-lo. Até que a alteração seja
totalmente propagada, o S3 on Outposts poderá retornar os dados anteriores.
• Um processo exclui um objeto existente e imediatamente tenta lê-lo. Até que a exclusão seja totalmente
propagada, o S3 on Outposts poderá retornar os dados excluídos.
• Um processo exclui um objeto existente e imediatamente lista as chaves em seu bucket. Até que a
exclusão seja totalmente propagada, o S3 on Outposts poderá listar o objeto excluído.
• AbortMultipartUpload
• CompleteMultipartUpload
• CopyObject
• CreateMultipartUpload
• DeleteObject
• DeleteObjects
• DeleteObjectTagging
• GetObject
• GetObjectTagging
• HeadObject
• HeadBucket
• ListMultipartUploads
• ListObjects
• ListObjectsV2
• ListParts
• PutObject
• PutObjectTagging
• UploadPart
• UploadPartCopy
• SSE-KMS
• Replicação
• Controle do tempo de replicação
• Métricas de solicitação do Amazon CloudWatch
• Configuração de métricas
• Aceleração de transferência
• Notificações de eventos
• Buckets de pagamento pelo solicitante
• Seleção do S3
• Torrent
• Eventos do Lambda
• Server access logging (Registro em log de acesso ao servidor)
• Pre-signed URLs
• Solicitações HTTP POST
• SOAP
• Acesso ao site
As solicitações feitas ao S3 na API de controle do Outposts em uma região da AWS são autenticadas
usando o IAM e autorizados no namespace do IAM s3-outposts:*. As solicitações feitas aos endpoints
da API do objeto no Outpost são autenticadas.
• O S3 em Outposts usa como padrão o proprietário do bucket como proprietário do objeto, para
ajudar a garantir que o proprietário de um bucket não possa ser impedido de acessar ou excluir
objetos.
• O S3 em Outposts sempre tem o Bloqueio de acesso público do S3 habilitado para ajudar a
garantir que os objetos nunca tenham acesso público.
• O S3 em Outposts usa o prefixo de serviço s3-outposts:<ACTION>. Para obter mais
informações, consulte Ações, recursos e chaves de condição para o Amazon S3 no Guia do
usuário do IAM.
Tópicos
• Como acessar recursos do S3 no Outposts usando ARNs (p. 1099)
• Como acessar o Amazon S3 no Outposts usando pontos de acesso somente para VPC (p. 1101)
Os pontos de acesso simplificam o gerenciamento do acesso a dados em escala para conjuntos de dados
compartilhados no S3. Os pontos de acesso são endpoints de rede nomeados e anexados a buckets que
você pode usar para realizar operações de objeto do Amazon S3, como GetObject e PutObject. Com o
S3 on Outposts, o endpoint do bucket e o endpoint de API de objeto são diferentes. Assim, diferentemente
dos buckets no Amazon S3 que podem ser acessados diretamente, você deve usar pontos de acesso para
acessar qualquer objeto em um bucket do Outposts. Os pontos de acesso são compatíveis apenas com o
endereçamento em estilo de host virtual.
Veja a seguir o formato do nome de recurso da Amazon (ARN) para buckets do S3 no Outposts.
arn:aws:s3-outposts:<region>:<account>:outpost/<outpost-id>/bucket/<bucket-name>
arn:aws:s3-outposts:<region>:<account>:outpost/<outpost-id>/accesspoint/<accesspoint-name>
As APIs de gerenciamento de bucket existentes não são compatíveis com o conceito de localização
além das regiões. Portanto, você não pode usar essas APIs para criar e gerenciar buckets que têm como
escopo conta, Outpost e região. O S3 on Outposts hospeda um endpoint separado para gerenciar APIs de
bucket do Outposts distintas do S3. Este endpoint é s3-outposts.<region>.amazonaws.com. Você
deve criar esses endpoints para poder acessar seu bucket do Outposts e executar operações de objeto.
Isso também permite que o modelo e os comportamentos da API sejam os mesmos, permitindo que as
mesmas ações funcionem no S3 e no S3 on Outposts. Isso é feito assinando o bucket e os objetos usando
os ARNs corretos.
Você deve passar ARNs para a API para que o Amazon S3 possa determinar se a solicitação
é para Amazon S3 (s3-control.<region>.amazonaws.com) ou S3 on Outposts (s3-
Sempre que a solicitação é enviada para o plano de controle do Amazon S3, o SDK extrai os componentes
do ARN e inclui um cabeçalho adicional “x-amz-outpost-id” com o valor de “outpost-id” extraído do
ARN. O nome do serviço do ARN é usado para assinar a solicitação antes de ser roteada para o endpoint
do S3 on Outposts. Isso é aplicável a todas as APIs tratadas pelo cliente s3control.
A tabela a seguir lista as APIs estendidas para o Amazon S3 on Outposts e suas alterações em relação ao
Amazon S3.
As instâncias na sua VPC não exigem que endereços IP públicos se comuniquem com recursos no
Outposts. Isso mantém o tráfego entre a VPC e os buckets do S3 on Outposts na rede da Amazon.
Os endpoints do S3 no Outposts são dispositivos virtuais. Eles são componentes de VPC escalados
horizontalmente, redundantes e altamente disponíveis. Permitem a comunicação entre instâncias na VPC
e o S3 no Outposts, sem impor riscos de disponibilidade ou restrições de largura de banda ao tráfego de
rede.
Note
Tópicos
• Gerenciar conexões para o S3 on Outposts usando interfaces de rede elástica entre contas (p. 1101)
• Permissões necessárias para endpoints (p. 1101)
• Opções de criptografia com o S3 on Outposts (p. 1102)
Tópicos
• Como gerenciar a capacidade do S3 no Outposts com as métricas do Amazon CloudWatch (p. 1102)
• Gerenciamento da capacidade do S3 on Outposts com logs do AWS CloudTrail (p. 1102)
• Como receber notificações de eventos do S3 no Outposts usando o Amazon CloudWatch
Events (p. 1102)
Você pode usar este método para liberar espaço excluindo explicitamente os dados, usando uma política
de expiração do ciclo de vida ou copiando os dados do seu bucket do S3 on Outposts para um bucket
do S3 em uma região da AWS usando AWS DataSync. Para obter mais informações sobre como usar o
DataSync, consulte Conceitos básicos do AWS DataSync no Guia do usuário do AWS DataSync.
Além disso, é possível habilitar o registro em log para eventos de dados no CloudTrail opcionalmente.
Para obter mais informações, consulte Habilitar o registro em log de objetos em um bucket usando o
console (p. 825).
Amazon SQS, Amazon SNS e AWS Lambda. Para obter mais informações, consulte a lista de produtos
da AWS que podem ser destinos para o CloudWatch Events. Para escolher um serviço de destino para
trabalhar com o S3 no Outposts, consulte Criação de uma regra do CloudWatch Events que aciona uma
chamada de API da AWS usando o AWS CloudTrail.
Note
Example
{
"source": [
"aws.s3-outposts"
],
"detail-type": [
"AWS API call via CloudTrail"
],
"detail": {
"eventSource": [
"s3-outposts.amazonaws.com"
],
"eventName": [
"DeleteObject"
],
"requestParameters": {
"bucketName": [
"DOC-EXAMPLE-BUCKET1"
]
}
}
}
Tópicos
• Como gerenciar buckets e objetos do S3 no Outposts usando o console (p. 1104)
• Como gerenciar buckets e objetos do S3 no Outposts usando a AWS CLI (p. 1113)
• Como gerenciar buckets e objetos do S3 no Outposts usando o AWS SDK para Java (p. 1118)
As seções a seguir descrevem como usar o console do Amazon S3 para criar e gerenciar buckets do S3
no Outposts.
Tópicos
• Como criar um bucket do Amazon S3 no Outposts usando o console (p. 1104)
• Como exibir e editar propriedades de buckets do Amazon S3 no Outposts usando o console (p. 1106)
• Como excluir um bucket do Amazon S3 no Outposts usando o console (p. 1111)
• Como gerenciar pontos de acesso do Amazon S3 no Outposts usando o console (p. 1112)
Antes de fazer upload de dados para o S3 on Outposts, você deve criar um bucket do Outposts em um
de seus AWS Outposts. Depois de criar um bucket, você pode fazer upload e download e gerenciar seus
objetos de dados no bucket do Outposts.
Note
A conta da AWS que cria o bucket é proprietária dele e é a única que pode confirmar suas
ações. Os buckets têm propriedades de configuração, como Outpost, tags, criptografia padrão e
configurações de ponto de acesso. As configurações do ponto de acesso incluem a política de
VPC e ponto de acesso para acessar os objetos no bucket e outros metadados. Para obter mais
informações, consulte Especificações do Amazon S3 no Outposts (p. 1095).
O console do Amazon S3 não oferece suporte a ações de objeto do S3 on Outposts. Para isso,
você deve usar a API REST, AWS CLI ou AWS SDKs.
Depois de criado o bucket, você não pode mudar seu nome. Para obter informações sobre
nomeação de buckets, consulte Regras de nomeação de bucket (p. 30).
Important
Todos os objetos armazenados em seu bucket do Outposts são armazenados usando criptografia do
lado do servidor com chaves de criptografia gerenciadas do Amazon S3 (SSE-S3) por padrão. Você
também pode explicitamente optar por armazenar objetos usando criptografia no lado do servidor com
chaves de criptografia fornecidas pelo cliente (SSE-C). Para isso, você deve usar a API REST, AWS
CLI ou AWS SDKs.
7. Na seção Outposts access point settings (Configurações do ponto de acesso do Outposts), insira o
nome do ponto de acesso.
Os nomes de pontos de acesso devem ser exclusivos dentro da conta para esta região e Outpost,
além de cumprir com o Restrições e limitações de pontos de acesso (p. 495).
8. Escolha a VPC para este ponto de acesso do Amazon S3 no Outposts.
A Amazon Virtual Private Cloud (Amazon VPC) permite executar recursos da AWS em uma rede
virtual definida por você. Essa rede virtual se assemelha a uma rede tradicional que você operaria no
seu próprio datacenter, com os benefícios de usar a infraestrutura dimensionável da AWS.
Se você não tiver uma VPC, escolha Create VPC (Criar VPC). Para obter mais informações, consulte
Criar pontos de acesso restritos a uma nuvem privada virtual (p. 487).
9. Escolha uma sub-rede para o seu endpoint.
Versão da API 2006-03-01
1105
Amazon Simple Storage Service Guia do usuário
Uso do console
Uma sub-rede é uma gama de endereços IP na VPC. Se você não tiver a sub-rede desejada, escolha
Create subnet (Criar sub-rede). Para obter mais informações, consulte Acessar buckets do S3 no
Outposts.
10. (Opcional) Especifique a política de ponto de acesso. O console exibe automaticamente o nome do
recurso da Amazon (ARN) do ponto de acesso, que você pode usar na política.
11. Escolha Create Outposts bucket (Criar bucket do Outposts).
Note
Pode levar até cinco minutos para que seu endpoint do Outposts seja criado e seu bucket
esteja pronto para uso. Para definir configurações de bucket adicionais, escolha View details
(Visualizar detalhes).
Como proprietário do bucket, você pode alterar o seguinte para o bucket do S3 on Outposts:
Tópicos
• Como adicionar e remover tags de buckets do Amazon S3 no Outposts usando o console (p. 1106)
• Como adicionar um bucket do Amazon S3 no Outposts ao AWS CloudTrail usando o console (p. 1107)
• Como gerenciar permissões de bucket do Amazon S3 no Outposts usando o console (p. 1107)
• Como gerenciar regras de ciclo de vida do bucket do S3 no Outposts usando o console (p. 1108)
• Como gerenciar os pontos de acesso do bucket do S3 no Outposts usando o console (p. 1110)
A conta da AWS que cria o bucket é proprietária dele e é a única que pode configurar eventos de
dados do Amazon S3 a serem enviados para o AWS CloudTrail.
Para obter mais informações, consulte Habilitar o log de eventos do CloudTrail para buckets e objetos
do S3 (p. 825).
A conta da AWS que cria o bucket do Outposts é proprietária dele e é a única que pode alterar as
permissões de bucket.
Tópicos
• Como criar ou editar uma política de bucket do S3 no Outposts (p. 1107)
• Como excluir uma política de bucket do S3 no Outposts (p. 1108)
Em seguida, você pode adicionar ou editar a política de bucket do S3 on Outposts. Para obter
mais informações, consulte Usar o AWS Identity and Access Management com o Amazon S3 no
Outposts (p. 1097).
A conta da AWS que cria o bucket é proprietária dele e é a única que pode criar, habilitar,
desabilitar e excluir uma regra de ciclo de vida.
Tópicos
• Como criar uma regra de ciclo de vida do bucket do S3 no Outposts (p. 1108)
• Como habilitar e desabilitar uma regra de ciclo de vida do bucket do S3 no Outposts (p. 1109)
• Como excluir uma regra de ciclo de vida do bucket do S3 no Outposts (p. 1109)
• Como editar uma regra de ciclo de vida do bucket do S3 no Outposts (p. 1109)
Se você quiser que a regra se aplique a objetos específicos, você deve usar um filtro
para identificar esses objetos. Selecione Limit the scope to specific objects or tags
(Limitar o escopo a objetos ou tags específicos). Se selecionado, faça o seguinte:
• Adicione um filtro de prefixo para limitar o escopo dessa regra a um único prefixo.
• Adicione tags para limitar o escopo dessa regra aos pares de chave/valor adicionados
abaixo.
6. Na seção lifecycle rule trigger (acionador de regra de ciclo de vida), escolha o rule trigger (acionador
de regra) com base em uma data específica ou na idade do objeto.
Warning
Se você quiser que a regra se aplique a objetos específicos, você deve usar um filtro
para identificar esses objetos. Escolha “Limitar o escopo a objetos ou tags específicos”.
• Adicione um filtro de prefixo para limitar o escopo dessa regra a um único prefixo.
• Adicione tags para limitar o escopo dessa regra aos pares de chave/valor adicionados abaixo.
6. Na seção do lifecycle rule trigger (acionador de regra de ciclo de vida), atualize o rule trigger
(acionador de regra) com base em uma data específica ou na idade do objeto.
A conta da AWS que cria o bucket do Outposts é proprietária dele e é a única que pode atribuir
pontos de acesso a ele.
Tópicos
• Como criar seus pontos de acesso do bucket do S3 no Outposts (p. 1110)
• Como gerenciar uma política do ponto de acesso do bucket do S3 no Outposts (p. 1110)
• Excluir o ponto de acesso do S3 no Outposts (p. 1108)
Para usar um ponto de acesso com uma VPC, é necessário modificar a política de acesso
do VPC endpoint. Para obter mais informações, consulte Como acessar o Amazon S3 no
Outposts usando pontos de acesso somente para VPC (p. 1101).
7. Se você quiser adicionar uma política para o seu ponto de acesso, adicione-a na seção Outposts
access point policy (Política de ponto de acesso do Outposts). Para obter mais informações, consulte
Usar o AWS Identity and Access Management com o Amazon S3 no Outposts (p. 1097).
A conta da AWS que cria o bucket é proprietária dele e é a única que pode excluí-lo.
Note
Você não pode recuperar um bucket depois que ele foi excluído.
Tópicos
• Como criar seus pontos de acesso do bucket do S3 no Outposts (p. 1110)
• Como gerenciar uma política do ponto de acesso do S3 no Outposts (p. 1112)
• Excluir o ponto de acesso do S3 no Outposts (p. 1108)
Para usar um ponto de acesso com uma VPC, é necessário modificar a política de acesso
do VPC endpoint. Para obter mais informações, consulte Como acessar o Amazon S3 no
Outposts usando pontos de acesso somente para VPC (p. 1101).
5. Para adicionar uma política para o seu ponto de acesso, insira-a na seção Outposts access point
policy (Política de ponto de acesso do Outposts). Para obter mais informações, consulte Usar o AWS
Identity and Access Management com o Amazon S3 no Outposts (p. 1097).
Os exemplos a seguir mostram como você pode usar o S3 no Outposts com a interface da linha de
comando da AWS.
Tópicos
• Criar e gerenciar o bucket do Amazon S3 no Outposts (p. 1113)
• Trabalhar com objetos usando o Amazon S3 no Outposts (p. 1117)
Tópicos
• Criar um bucket do S3 no Outposts (p. 1113)
• Obter o bucket do S3 no Outposts (p. 1114)
• Obter uma lista de buckets do S3 no Outposts (p. 1114)
• Criar um ponto de acesso para um bucket do S3 no Outposts (p. 1114)
• Obter um ponto de acesso para um bucket do S3 no Outposts (p. 1114)
• Listar pontos de acesso para um Outpost (p. 1114)
• Put uma configuração de ciclo de vida para um bucket do S3 no Outposts (p. 1114)
• Obtenha uma configuração de ciclo de vida de um bucket do S3 no Outposts (p. 1115)
• Put uma política em um bucket do S3 no Outposts (p. 1115)
• Obter uma política para um bucket do S3 no Outposts (p. 1116)
• Colocar uma política em um ponto de acesso do S3 no Outposts (p. 1116)
• Obter uma política para um ponto de acesso do S3 no Outposts (p. 1117)
• Criar um endpoint em um Outpost (p. 1117)
• Listar endpoints para um Outpost (p. 1117)
• Excluir um endpoint em um Outpost (p. 1117)
{
"Rules": [
{
"ID": "id-1",
"Filter": {
"And": {
"Prefix": "myprefix",
"Tags": [
{
"Value": "mytagvalue1",
"Key": "mytagkey1"
},
{
"Value": "mytagvalue2",
"Key": "mytagkey2"
}
]
}
},
"Status": "Enabled",
"Expiration": {
"Days": 10
}
}
]
}
2. Envie o arquivo JSON como parte do comando da CLI de colocar configuração do ciclo de vida.
{
"Version":"2012-10-17",
"Id":"testBucketPolicy",
"Statement":[
{
"Sid":"st1",
"Effect":"Allow",
"Principal":{
"AWS":"123456789012"
},
"Action":"s3-outposts:*",
"Resource":"arn:aws:s3-outposts:<your-
region>:123456789012:outpost/op-01ac5d28a6a232904/bucket/example-outpost-bucket"
}
]
}
2. Envie o arquivo JSON como parte do comando da CLI de colocar a política de bucket.
{
"Version":"2012-10-17",
"Id":"exampleAccessPointPolicy",
"Statement":[
{
"Sid":"st1",
"Effect":"Allow",
"Principal":{
"AWS":"123456789012"
},
"Action":"s3-outposts:*",
"Resource":"arn:aws:s3-outposts:<your-
region>:123456789012:outpost/op-01ac5d28a6a232904/accesspoint/example-Outposts-Access-
Point
}
]
}
2. Envie o arquivo JSON como parte do comando da CLI da política de ponto de acesso.
Tópicos
• Colocar um objeto em um bucket do S3 no Outposts (p. 1117)
• Obter o bucket do S3 no Outposts (p. 1118)
• Listar objetos em um bucket do S3 no Outposts (p. 1118)
Os exemplos a seguir mostram como você pode usar o S3 no Outposts com o AWS SDK para Java.
Tópicos
• Como criar e gerenciar buckets do Amazon S3 no Outposts (p. 1118)
• Trabalhar com objetos usando o Amazon S3 no Outposts (p. 1124)
Tópicos
• Configurar o cliente de controle do S3 para S3 no Outposts (p. 1119)
• Criar um bucket do S3 no Outposts (p. 1119)
• Obter um bucket do S3 no Outposts (p. 1119)
• Obter uma lista de buckets em um Outpost (p. 1120)
• Criar um ponto de acesso para um bucket do S3 no Outposts (p. 1120)
• Obter um ponto de acesso para um bucket do S3 no Outposts (p. 1120)
• Listar pontos de acesso para um AWS Outpost (p. 1121)
• Adicionar uma configuração de ciclo de vida a um bucket do Outposts (p. 1121)
• Obtenha uma configuração de ciclo de vida de um bucket do S3 no Outposts (p. 1122)
• Colocar uma política no bucket do Outposts (p. 1122)
• Obter uma política para um bucket do S3 no Outposts (p. 1122)
• Colocar uma política no ponto de acesso do Outposts (p. 1123)
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.s3control.AWSS3Control;
import com.amazonaws.services.s3control.AWSS3ControlClient;
return AWSS3ControlClient.builder().enableUseArnRegion()
.withCredentials(new AWSStaticCredentialsProvider(awsCreds))
.build();
import com.amazonaws.services.s3control.model.*;
return respCreateBucket.getBucketArn();
import com.amazonaws.services.s3control.model.*;
import com.amazonaws.services.s3control.model.*;
ListRegionalBucketsResult respListBuckets =
s3ControlClient.listRegionalBuckets(reqListBuckets);
System.out.printf("ListRegionalBuckets Response: %s%n", respListBuckets.toString());
import com.amazonaws.services.s3control.model.*;
return respCreateAP.getAccessPointArn();
import com.amazonaws.services.s3control.model.*;
import com.amazonaws.services.s3control.model.*;
import com.amazonaws.services.s3control.model.*;
PutBucketLifecycleConfigurationResult respPutBucketLifecycle =
s3ControlClient.putBucketLifecycleConfiguration(reqPutBucketLifecycle);
System.out.printf("PutBucketLifecycleConfiguration Response: %s%n",
respPutBucketLifecycle.toString());
import com.amazonaws.services.s3control.model.*;
GetBucketLifecycleConfigurationResult respGetBucketLifecycle =
s3ControlClient.getBucketLifecycleConfiguration(reqGetBucketLifecycle);
System.out.printf("GetBucketLifecycleConfiguration Response: %s%n",
respGetBucketLifecycle.toString());
import com.amazonaws.services.s3control.model.*;
PutBucketPolicyResult respPutBucketPolicy =
s3ControlClient.putBucketPolicy(reqPutBucketPolicy);
System.out.printf("PutBucketPolicy Response: %s%n", respPutBucketPolicy.toString());
import com.amazonaws.services.s3control.model.*;
GetBucketPolicyResult respGetBucketPolicy =
s3ControlClient.getBucketPolicy(reqGetBucketPolicy);
System.out.printf("GetBucketPolicy Response: %s%n", respGetBucketPolicy.toString());
import com.amazonaws.services.s3control.model.*;
PutAccessPointPolicyResult respPutAccessPointPolicy =
s3ControlClient.putAccessPointPolicy(reqPutAccessPointPolicy);
System.out.printf("PutAccessPointPolicy Response: %s%n",
respPutAccessPointPolicy.toString());
printWriter.printf("PutAccessPointPolicy Response: %s%n",
respPutAccessPointPolicy.toString());
import com.amazonaws.services.s3control.model.*;
GetAccessPointPolicyResult respGetAccessPointPolicy =
s3ControlClient.getAccessPointPolicy(reqGetAccessPointPolicy);
System.out.printf("GetAccessPointPolicy Response: %s%n",
respGetAccessPointPolicy.toString());
printWriter.printf("GetAccessPointPolicy Response: %s%n",
respGetAccessPointPolicy.toString());
import com.amazonaws.services.s3outposts.AmazonS3Outposts;
import com.amazonaws.services.s3outposts.AmazonS3OutpostsClientBuilder;
import com.amazonaws.services.s3outposts.model.CreateEndpointRequest;
import com.amazonaws.services.s3outposts.model.CreateEndpointResult;
import com.amazonaws.arn.Arn;
import com.amazonaws.services.s3outposts.AmazonS3Outposts;
import com.amazonaws.services.s3outposts.AmazonS3OutpostsClientBuilder;
import com.amazonaws.services.s3outposts.model.DeleteEndpointRequest;
import com.amazonaws.services.s3outposts.AmazonS3Outposts;
import com.amazonaws.services.s3outposts.AmazonS3OutpostsClientBuilder;
import com.amazonaws.services.s3outposts.model.ListEndpointsRequest;
import com.amazonaws.services.s3outposts.model.ListEndpointsResult;
Tópicos
• Colocar um objeto em um bucket do S3 no Outposts (p. 1125)
• Obter um bucket do S3 no Outposts (p. 1126)
• Copiar um objeto no S3 no Outposts (p. 1127)
• Excluir um objeto do S3 no Outposts (p. 1128)
• Excluir objetos do S3 no Outposts (p. 1128)
• Listar objetos em um bucket do S3 no Outposts (p. 1129)
• Iniciar um multipart upload de objetos em um bucket do S3 no Outposts (p. 1130)
• Copiar um objeto em um bucket do S3 no Outposts (p. 1132)
• Listar partes de um objeto em um bucket do S3 no Outposts (p. 1133)
• Recuperar uma lista de multipart uploads em andamento em um bucket do S3 no Outposts (p. 1134)
• Abortar um multipart upload de um objeto em um bucket do Amazon S3 no Outposts (p. 1135)
• Usar a operação HeadBucket para um bucket do S3 no Outposts (p. 1136)
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.ObjectMetadata;
import com.amazonaws.services.s3.model.PutObjectRequest;
import java.io.File;
try {
// This code expects that you have AWS credentials set up per:
// https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-
credentials.html
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.enableUseArnRegion()
.build();
} catch (SdkClientException e) {
// Amazon S3 couldn't be contacted for a response, or the client
// couldn't parse the response from Amazon S3.
e.printStackTrace();
}
}
}
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.GetObjectRequest;
import com.amazonaws.services.s3.model.ResponseHeaderOverrides;
import com.amazonaws.services.s3.model.S3Object;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
// Get an entire object, overriding the specified response headers, and print
the object's content.
ResponseHeaderOverrides headerOverrides = new ResponseHeaderOverrides()
.withCacheControl("No-cache")
.withContentDisposition("attachment; filename=example.txt");
GetObjectRequest getObjectRequestHeaderOverride = new
GetObjectRequest(accessPointArn, key)
.withResponseHeaders(headerOverrides);
headerOverrideObject = s3Client.getObject(getObjectRequestHeaderOverride);
displayTextInputStream(headerOverrideObject.getObjectContent());
} catch (AmazonServiceException e) {
// The call was transmitted successfully, but Amazon S3 couldn't process
// it, so it returned an error response.
e.printStackTrace();
} catch (SdkClientException e) {
// Amazon S3 couldn't be contacted for a response, or the client
// couldn't parse the response from Amazon S3.
e.printStackTrace();
} finally {
// To ensure that the network connection doesn't remain open, close any open
input streams.
if (fullObject != null) {
fullObject.close();
}
if (objectPortion != null) {
objectPortion.close();
}
if (headerOverrideObject != null) {
headerOverrideObject.close();
}
}
}
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.CopyObjectRequest;
try {
// This code expects that you have AWS credentials set up per:// https://
docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-credentials.html
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.enableUseArnRegion()
.build();
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.DeleteObjectRequest;
try {
// This code expects that you have AWS credentials set up per:
// https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-
credentials.html
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.enableUseArnRegion()
.build();
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.DeleteObjectsRequest;
import com.amazonaws.services.s3.model.DeleteObjectsRequest.KeyVersion;
import com.amazonaws.services.s3.model.DeleteObjectsResult;
import java.util.ArrayList;
try {
// This code expects that you have AWS credentials set up per:
// https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-
credentials.html
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.enableUseArnRegion()
.build();
Esta seção descreve a revisão mais recente da API. Recomendamos que você use essa API
revisada para o desenvolvimento de aplicações. Para compatibilidade com versões anteriores, o
Amazon S3 continua a oferecer suporte à versão anterior desta API, ListObjects.
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.ListObjectsV2Request;
import com.amazonaws.services.s3.model.ListObjectsV2Result;
import com.amazonaws.services.s3.model.S3ObjectSummary;
try {
// This code expects that you have AWS credentials set up per:
// https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-
credentials.html
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.enableUseArnRegion()
.build();
System.out.println("Listing objects");
do {
result = s3Client.listObjectsV2(req);
Esta seção descreve a revisão mais recente da API. Recomendamos que você use essa API
revisada para o desenvolvimento de aplicações. Para compatibilidade com versões anteriores, o
Amazon S3 continua a oferecer suporte à versão anterior desta API, ListObjects.
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.*;
import java.util.ArrayList;
import java.util.List;
try {
// This code expects that you have AWS credentials set up per:
// https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-
credentials.html
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.enableUseArnRegion()
.build();
// Get the object size to track the end of the copy operation.
GetObjectMetadataRequest metadataRequest = new
GetObjectMetadataRequest(accessPointArn, sourceObjectKey);
ObjectMetadata metadataResult = s3Client.getObjectMetadata(metadataRequest);
long objectSize = metadataResult.getContentLength();
// Complete the upload request to concatenate all uploaded parts and make the
copied object available.
CompleteMultipartUploadRequest completeRequest = new
CompleteMultipartUploadRequest(
accessPointArn,
destObjectKey,
initResult.getUploadId(),
getETags(copyResponses));
s3Client.completeMultipartUpload(completeRequest);
System.out.println("Multipart copy complete.");
} catch (AmazonServiceException e) {
// The call was transmitted successfully, but Amazon S3 couldn't process
// it, so it returned an error response.
e.printStackTrace();
} catch (SdkClientException e) {
// Amazon S3 couldn't be contacted for a response, or the client
// couldn't parse the response from Amazon S3.
e.printStackTrace();
}
}
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.*;
import java.util.ArrayList;
import java.util.List;
try {
// This code expects that you have AWS credentials set up per:
// https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-
credentials.html
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.enableUseArnRegion()
.build();
// Get the object size to track the end of the copy operation.
GetObjectMetadataRequest metadataRequest = new
GetObjectMetadataRequest(accessPointArn, sourceObjectKey);
ObjectMetadata metadataResult = s3Client.getObjectMetadata(metadataRequest);
long objectSize = metadataResult.getContentLength();
// Complete the upload request to concatenate all uploaded parts and make the
copied object available.
CompleteMultipartUploadRequest completeRequest = new
CompleteMultipartUploadRequest(
accessPointArn,
destObjectKey,
initResult.getUploadId(),
getETags(copyResponses));
s3Client.completeMultipartUpload(completeRequest);
System.out.println("Multipart copy complete.");
} catch (AmazonServiceException e) {
// The call was transmitted successfully, but Amazon S3 couldn't process
// it, so it returned an error response.
e.printStackTrace();
} catch (SdkClientException e) {
// Amazon S3 couldn't be contacted for a response, or the client
// couldn't parse the response from Amazon S3.
e.printStackTrace();
}
}
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.*;
import java.util.List;
try {
// This code expects that you have AWS credentials set up per:
// https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-
credentials.html
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.enableUseArnRegion()
.build();
} catch (AmazonServiceException e) {
// The call was transmitted successfully, but Amazon S3 couldn't process
// it, so it returned an error response.
e.printStackTrace();
} catch (SdkClientException e) {
// Amazon S3 couldn't be contacted for a response, or the client
// couldn't parse the response from Amazon S3.
e.printStackTrace();
}
}
}
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.ListMultipartUploadsRequest;
import com.amazonaws.services.s3.model.MultipartUpload;
import com.amazonaws.services.s3.model.MultipartUploadListing;
import java.util.List;
try {
// This code expects that you have AWS credentials set up per:
// https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-
credentials.html
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.enableUseArnRegion()
.build();
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.ListMultipartUploadsRequest;
import com.amazonaws.services.s3.model.MultipartUpload;
import com.amazonaws.services.s3.model.MultipartUploadListing;
import java.util.List;
try {
// This code expects that you have AWS credentials set up per:
// https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-
credentials.html
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.enableUseArnRegion()
.build();
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.HeadBucketRequest;
try {
// This code expects that you have AWS credentials set up per:
// https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-
credentials.html
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.enableUseArnRegion()
.build();
s3Client.headBucket(new HeadBucketRequest(accessPointArn));
} catch (AmazonServiceException e) {
// The call was transmitted successfully, but Amazon S3 couldn't process
// it, so it returned an error response.
e.printStackTrace();
} catch (SdkClientException e) {
// Amazon S3 couldn't be contacted for a response, or the client
// couldn't parse the response from Amazon S3.
e.printStackTrace();
}
}
}
Solução de problemas
Esta seção descreve como solucionar problemas do Amazon S3 e explica como obter os IDs de solicitação
necessários quando você entrar em contato com o AWS Support.
Tópicos
• Solução de problemas do Amazon S3 por sintoma (p. 1137)
• Como obter os IDs da solicitação do Amazon S3 para o AWS Support (p. 1138)
• Tópicos relacionados (p. 1141)
Para obter outros tópicos de como solucionar problemas e obter suporte, consulte o seguinte:
Para obter informações de como solucionar problemas relacionados a ferramentas de terceiros, consulte
Como obter os IDs de solicitação do Amazon S3 nos Fóruns do desenvolvedor da AWS.
Sintomas
• Aumentos significativos em respostas HTTP 503 para solicitações do Amazon S3 para buckets com o
versionamento habilitado (p. 1137)
• Comportamento inesperado ao acessar buckets definidos com CORS (p. 1138)
Para determinar quais objetos do S3 têm milhões de versões, use a ferramenta de inventário do Amazon
S3. A ferramenta de inventário gera um relatório que fornece uma lista de arquivos simples dos objetos em
um bucket. Para obter mais informações, consulte Inventário do Amazon S3 (p. 605).
a aplicação está funcionando conforme o esperado. Se você tiver um caso de uso que exija milhões
de versões para um ou mais objetos do S3, entre em contato com a equipe do AWS Support em AWS
Support para discutir seu caso de uso, para que possamos ajudá-lo a determinar a solução ideal para o
cenário do seu caso de uso.
• Habilite uma política de expiração “NonCurrentVersion” de gerenciamento do ciclo de vida e uma política
“ExpiredObjectDeleteMarker” para expirar as versões anteriores de objetos e marcadores de exclusão
sem objetos de dados associados no bucket.
• Mantenha sua estrutura de diretórios o mais plana possível e torne cada nome de diretório exclusivo.
Depois de recuperar esses logs, copie e mantenha esses dois valores, pois você precisará deles ao entrar
em contato com o AWS Support. Para obter informações sobre o AWS Support, consulte Entre em contato
conosco.
Tópicos
• Usar o HTTP para obter IDs de solicitação (p. 1138)
• Usar um navegador da web para obter IDs de solicitação (p. 1139)
• Usar os AWS SDKs para obter IDs de solicitação (p. 1139)
• Como usar a AWS CLI para obter IDs de solicitação (p. 1141)
Para solicitações HTTP, o par de IDs da solicitação será parecido com os exemplos a seguir.
x-amz-request-id: 79104EXAMPLEB723
x-amz-id-2: IOWQ4fDEXAMPLEQM+ey7N9WgVhSnQ6JEXAMPLEZb7hSQDASK+Jd1vEXAMPLEa3Km
Note
Para solicitações baseadas em navegador da web que retornam um erro, o par de IDs de solicitações será
parecido com os exemplos a seguir.
<Error><Code>AccessDenied</Code><Message>Access Denied</Message>
<RequestId>79104EXAMPLEB723</RequestId><HostId>IOWQ4fDEXAMPLEQM
+ey7N9WgVhSnQ6JEXAMPLEZb7hSQDASK+Jd1vEXAMPLEa3Km</HostId></Error>
Para obter o par de IDs de solicitações bem-sucedidas, você precisa usar as ferramentas de
desenvolvedor para ver os cabeçalhos das respostas HTTP. Para obter informações sobre as ferramentas
de desenvolvedor para navegadores específicos, consulte Solução de problemas do Amazon S3 - como
recuperar os IDs de solicitações do S3 nos Fóruns do desenvolvedor da AWS.
Para solicitações do AWS SDK, o par de IDs da solicitação será parecido com os exemplos a seguir.
Status Code: 403, AWS Service: Amazon S3, AWS Request ID: 79104EXAMPLEB723
AWS Error Code: AccessDenied AWS Error Message: Access Denied
S3 Extended Request ID: IOWQ4fDEXAMPLEQM+ey7N9WgVhSnQ6JEXAMPLEZb7hSQDASK+Jd1vEXAMPLEa3Km
Example
s3.putObject(req);
S3ResponseMetadata md = s3.getCachedResponseMetadata(req);
System.out.println("Host ID: " + md.getHostId() + " RequestID: " + md.getRequestId());
Como alternativa, você pode usar log detalhado de cada solicitação e resposta de Java. Para obter mais
informações, consulte Registro em log detalhado no tópico Registro de AWS SDK para Chamadas de Java
no Guia do desenvolvedor para o AWS SDK para Java.
Por padrão, o log retornado contém somente informações de erros. O arquivo de configuração
precisa ter AWSLogMetrics (e, opcionalmente, AWSResponseLogging) adicionado para obter
os IDs de solicitação.
import logging
import boto3
logging.basicConfig(filename='logfile.txt', level=logging.INFO)
logger = logging.getLogger(__name__)
s3 = boto3.resource('s3')
response = s3.Bucket(bucket_name).Object(object_key).put()
logger.info("HTTPStatusCode: %s", response['ResponseMetadata']['HTTPStatusCode'])
logger.info("RequestId: %s", response['ResponseMetadata']['RequestId'])
logger.info("HostId: %s", response['ResponseMetadata']['HostId'])
logger.info("Date: %s", response['ResponseMetadata']['HTTPHeaders']['date'])
Também é possível capturar exceções e registrar em log informações relevantes quando uma exceção
é gerada. Para obter detalhes, consulte Discernir informações úteis de respostas de erro no Guia do
desenvolvedor do Boto3.
Além disso, é possível configurar o Boto3 para gerar logs de depuração detalhados usando o seguinte
código:
import boto3
boto3.set_stream_logger('', logging.DEBUG)
• Como usar o SDK para Ruby - versão 1 – você pode habilitar o log da conexão HTTP globalmente com a
linha de código a seguir.
• Como usar o SDK para Ruby - versão 2 ou 3 – Você pode habilitar o log da conexão HTTP globalmente
com a linha de código a seguir.
Tópicos relacionados
Para obter outros tópicos de como solucionar problemas e obter suporte, consulte o seguinte:
Para obter informações de como solucionar problemas relacionados a ferramentas de terceiros, consulte
Como obter os IDs de solicitação do Amazon S3 nos Fóruns do desenvolvedor da AWS.
Histórico do documento
• Versão atual da API: 2006-03-01
A tabela a seguir descreve as alterações importantes em cada versão da Referência da API do Amazon
Simple Storage Service e do Guia do usuário do Amazon S3. Para receber notificações sobre atualizações
dessa documentação, você pode se inscrever em um feed RSS.
S3 Object Lambda (p. 1142) Com o S3 Object Lambda, você 18 de março de 2021
pode adicionar seu próprio
código às solicitações GET
do Amazon S3 para modificar
e processar dados, conforme
eles são retornados para uma
aplicação. Você pode usar
o código personalizado para
modificar os dados retornados
por solicitações S3 GET padrão
para filtrar linhas, redimensionar
imagens dinamicamente, editar
dados confidenciais e muito mais.
Para obter mais informações,
consulte Transformar objetos.
AWS PrivateLink (p. 1142) Com o AWS PrivateLink para 2 de fevereiro de 2021
Amazon S3, você pode se
conectar diretamente ao S3
usando um endpoint de interface
em sua VPC em vez de se
conectar pela Internet. Os
endpoints de interface são
diretamente acessíveis a partir
de aplicativos que estão no
local ou em uma região da
Forte consistência (p. 1142) O Amazon S3 oferece uma forte 1º de dezembro de 2020
consistência de leitura após
gravação para PUTs e exclusões
de objetos no bucket do Amazon
S3 em todas as regiões da AWS.
Além disso, as operações de
leitura no Amazon S3 Select,
Listas de controle de acesso
do Amazon S3, Tags de objeto
do Amazon S3 e metadados
de objeto (por exemplo, objeto
HEAD) são muito consistentes.
Para obter mais informações,
consulte Modelo de consistência
de dados do Amazon S3.
Suporte a operações em lote do Agora você pode usar operações 4 de maio de 2020
S3 para retenção de bloqueio de em lote com bloqueio de objeto
objetos (p. 1142) do S3 para aplicar configurações
de retenção a muitos objetos do
Amazon S3 de uma só vez. Para
obter mais informações, consulte
Definir datas de retenção do S3
Object Lock com o S3 Batch
Operations.
Suporte a operações em lote Agora você pode usar operações 4 de maio de 2020
do S3 para retenção legal de em lote com bloqueio de objeto
bloqueio de objetos (p. 1142) do S3 para adicionar retenção
legal a muitos objetos do Amazon
S3 de uma só vez. Para obter
mais informações, consulte Usar
o S3 Batch Operations para
definir o S3 Object Lock Legal
Hold.
Tags de trabalho para operações Você pode adicionar tags aos 16 de março de 2020
em lote do S3 (p. 1142) trabalhos de operações em lote
do S3 para controlar e rotular
esses trabalhos. Para obter mais
informações, consulte Tags
para trabalhos do S3 Batch
Operations.
Atualizações anteriores
A tabela a seguir descreve as alterações importantes em cada versão do Guia do usuário do Amazon S3
antes de 19 de junho de 2018.
O Amazon S3 agora Além de relatar bytes reais, essas métricas de armazenamento 30 de abril
reporta classes de incluem sobrecarga de bytes por objeto para classes de de 2018
armazenamento S3 armazenamento aplicáveis (ONEZONE_IA, STANDARD_IA, e
Glacier e ONEZONE_IA S3 Glacier):
para métricas de
armazenamento do • Para objetos da classe de armazenamento ONEZONE_IA e
Amazon CloudWatch STANDARD_IA, o Amazon S3 relata objetos com menos de
Logs 128 KB como tendo 128 KB. Para obter mais informações,
consulte Uso de classes de armazenamento do Amazon
S3 (p. 563).
• Para objetos da classe de armazenamento S3 Glacier,
as métricas de armazenamento relatam as seguintes
sobrecargas:
• Uma sobrecarga de 32 KB por objeto, cobrada de acordo
com a definição de preço da classe de armazenamento S3
Glacier
• Uma sobrecarga de 8 KB por objeto, cobrada de acordo
com a definição de preço da classe de armazenamento
STANDARD
Região Europa (Paris) O Amazon S3 já está disponível na região Europa (Paris). Para 18 de
obter mais informações sobre regiões e endpoints do Amazon dezembro
S3, consulte Regiões e endpoints na Referência geral da AWS. de 2017
Análise do Amazon S3: O novo recurso de análise do Amazon S3: análise de classe 29 de
análise de classe de de armazenamento observa padrões de acesso de dados novembro
armazenamento para ajudar você a determinar quando fazer a transição do de 2016
armazenamento STANDARD acessado menos frequentemente
para a classe de armazenamento STANDARD_IA (IA,
para acesso raro). Depois que a análise de classe de
armazenamento observa os padrões incomuns de acesso a um
conjunto filtrado de dados em um período, você pode usar os
resultados da análise para ajudá-lo a melhorar suas políticas
de ciclo de vida. Esse recurso também inclui uma análise
diária detalhada do uso de armazenamento no nível de bucket,
prefixo ou tag especificado que você pode exportar para um
bucket do S3.
Região do Leste dos O Amazon S3 já está disponível na região Leste dos EUA 17 de
EUA (Ohio) (Ohio). Para obter mais informações sobre regiões e endpoints outubro de
do Amazon S3, consulte Regiões e endpoints na Referência 2016
geral da AWS.
Nova chave de condição As políticas do IAM agora oferecem suporte para a chave 14 de
e uma alteração do de condição s3:x-amz-storage-class do Amazon S3. dezembro
multipart upload Para obter mais informações, consulte Exemplos de chave de de 2015
condição do Amazon S3 (p. 278).
Região Padrão dos EUA A string de nome de região mudou de "Padrão dos EUA" 11 de
renomeada para "Leste dos EUA (Norte da Virgínia)". Essa é só uma dezembro
atualização de nome de região, não há nenhuma alteração na de 2015
funcionalidade.
Aumento do limite do O Amazon S3 agora oferece suporte para aumentos de limite 4 de agosto
bucket de bucket. Por padrão, os clientes podem criar até 100 buckets de 2015
na conta da AWS. Os clientes que precisarem de buckets
adicionais poderão aumentar esse limite enviando um aumento
de limite de serviço. Para obter informações sobre como
aumentar o limite do seu bucket, consulte AWS Service Quotas
na Referência geral da AWS. Para obter mais informações,
consulte Uso dos AWS SDKs (p. 32) e Restrições e limitações
do bucket (p. 60).
Suporte para excluir e O Amazon S3 agora oferece suporte para excluir e esvaziar 16 de julho
esvaziar buckets não buckets não vazios. Para obter mais informações, consulte de 2015
vazios Esvaziar um bucket (p. 38).
Políticas de bucket para O Amazon S3 adicionou suporte para políticas de bucket para 29 de abril
VPC endpoints Amazon VPC endpoints. Você pode usar políticas de bucket do S3 para de 2015
controlar o acesso a buckets de VPC endpoints específicos ou
VPCs específicas. Os VPC endpoints são fáceis de configurar,
são extremamente confiáveis e fornecem uma conexão segura
com o Amazon S3 sem exigir um gateway ou uma instância
NAT. Para obter mais informações, consulte Controlar o acesso
a partir de VPC endpoints com políticas de bucket (p. 377).
Suporte de ciclo de vida Antes dessa versão, a configuração de ciclo de vida era 20 de maio
para versionamento permitida somente em buckets sem versões. Agora você pode de 2014
configurar o ciclo de vida em buckets sem versões e com o
versionamento ativado. Para obter mais informações, consulte
Gerenciando seu ciclo de vida de armazenamento (p. 569).
Suporte de SOAP via O suporte de SOAP via HTTP está obsoleto, mas continua 20 de
HTTP obsoleto disponível via HTTPS. Novos recursos do Amazon S3 não setembro
serão compatíveis com o SOAP. Recomendamos que você use de 2013
a API REST ou os AWS SDKs.
Suporte para variáveis Agora, a linguagem de política de acesso do IAM oferece 3 de abril
de política do IAM suporte para variáveis. Quando uma política é avaliada, todas de 2013
as variáveis de política são substituídas por valores fornecidos
por informações baseadas no contexto da sessão do usuário
autenticado. Você pode usar variáveis de política para definir
políticas de uso geral sem, explicitamente, listar todos os
componentes da política. Para obter mais informações sobre
variáveis de política, consulte Visão geral das variáveis de
política do IAM no Guia do usuário do IAM.
Suporte do console Agora você pode configurar seu bucket para pagamentos pelo 31 de
para Pagamento pelo solicitante usando o console do Amazon S3. Para obter mais dezembro
solicitante informações, consulte Configuração de buckets de Pagamento de 2012
pelo solicitante para transferências de armazenamento e
uso (p. 56).
Suporte para tags de O Amazon S3 agora oferece suporte para tags de alocação de 21 de
alocação de custos custos, o que permite identificar buckets do S3 para facilitar agosto de
o acompanhamento de custos de projetos ou outros critérios. 2012
Para obter mais informações sobre o uso de tags para buckets,
consulte Usar tags de alocação de custos para buckets do
S3 (p. 693).
Suporte para acesso à O Amazon S3 agora oferece suporte para acesso à API 10 de julho
API protegido por MFA protegido por MFA, um recurso que pode impor a AWS Multi- de 2012
nas políticas de bucket Factor Authentication para um nível de segurança extra
ao acessar os recursos do Amazon S3. É um recurso de
segurança que exige que os usuários comprovem a posse
física de um dispositivo MFA fornecendo um código válido de
MFA. Para obter mais informações, consulte AWS Multi-Factor
Authentication. Agora você pode exigir a autenticação de MFA
para todas as solicitações de acesso aos recursos do Amazon
S3.
Suporte para expiração Você pode usar a expiração de objeto para programar a 27 de
de objeto remoção automática de dados após um período configurado. dezembro
Para definir a expiração de objeto, adicione a configuração de de 2011
ciclo de vida a um bucket.
Nova região compatível O Amazon S3 agora oferece suporte à região do Oeste dos 8 de
EUA (Oregon). Para obter mais informações, consulte Buckets novembro
e regiões (p. 36). de 2011
Suporte para enviar Além de usar suas credenciais de segurança de conta da AWS 3 de agosto
solicitações usando e de usuário do IAM para enviar solicitações autenticadas de 2011
credenciais de ao Amazon S3, agora você pode enviar solicitações usando
segurança temporárias credenciais de segurança temporárias obtidas no AWS Identity
and Access Management (IAM). Você pode usar a API do AWS
Security Token Service ou bibliotecas de wrapper do SDK da
AWS para solicitar essas credenciais temporárias no IAM. Você
pode solicitar essas credenciais de segurança temporárias para
seu próprio uso ou para enviá-las para usuários federados e
aplicativos. Esse recurso permite que você gerencie usuários
fora da AWS e forneça a eles as credenciais de segurança
temporárias para acessar os recursos da AWS.
API de multipart upload Antes dessa versão, a API do Amazon S3 permitia a cópia 21 de junho
estendida para permitir a de objetos de até 5 GB. Para permitir a cópia de objetos com de 2011
cópia de objetos de até mais de 5 GB, o Amazon S3 agora estende a API de multipart
5 TB upload com uma nova operação, Upload Part (Copy).
Você pode usar essa operação do multipart upload para copiar
objetos com até 5 TB. Para obter mais informações, consulte
Cópia de objetos (p. 114).
Chamadas de API Para aumentar a segurança, as chamadas de API SOAP via 6 de junho
SOAP via HTTP HTTP são desativadas. As solicitações SOAP autenticadas e de 2011
desativadas anônimas devem ser enviadas para o Amazon S3 usando SSL.
Suporte para API do A API REST do objeto GET agora permite alterar os 14 de
cabeçalho de resposta cabeçalhos de resposta da solicitação REST do objeto GET janeiro de
para cada solicitação. Isto é, você pode alterar metadados 2011
de objeto na resposta, sem modificar o objeto em si. Para
obter mais informações, consulte Fazer download de um
objeto (p. 122).
O Amazon S3 funciona Esse serviço agora se integra ao AWS Identity and Access 2 de
com o IAM Management (IAM). Para obter mais informações, acesse setembro
Serviços da AWS que trabalham com o IAM no Guia do usuário de 2010
do IAM.
Sintaxe de estilo de O Amazon S3 agora oferece suporte para a sintaxe de caminho 9 de junho
caminho disponível em para qualquer bucket na região clássica dos EUA ou se o de 2010
todas as regiões bucket estiver na mesma região do endpoint da solicitação.
Para obter mais informações, consulte Hospedagem
virtual (p. 1025).
Novo endpoint para a O Amazon S3 agora fornece um endpoint para a Europa 9 de junho
Europa (Irlanda) (Irlanda): http://s3-eu-west-1.amazonaws.com. de 2010
Console Agora você pode usar o Amazon S3 por meio do Console 9 de junho
de Gerenciamento da AWS. Você pode ler sobre toda a de 2010
funcionalidade do Amazon S3 no console no Guia do usuário
do console do Amazon Simple Storage Service.
Nova região compatível O Amazon S3 agora oferece suporte à região Ásia-Pacífico 28 de abril
(Cingapura). Para obter mais informações, consulte Buckets e de 2010
regiões (p. 36).
Nova região compatível O Amazon S3 agora oferece suporte à região Oeste dos EUA 2 de
(Norte da Califórnia). O novo endpoint para solicitações para dezembro
essa região é s3-us-west-1.amazonaws.com. Para obter mais de 2009
informações, consulte Buckets e regiões (p. 36).
AWS SDK para .NET A AWS agora fornece bibliotecas, códigos de exemplo, tutoriais 11 de
e outros recursos para os desenvolvedores de software novembro
que preferem criar aplicativos usando operações de API de 2009
específicas da linguagem .NET em vez de REST ou SOAP.
Essas bibliotecas oferecem as funções básicas (não incluídas
nas APIs REST ou SOAP), como autenticação de solicitação,
novas tentativas de solicitação e processamento de erros,
para que você possa começar a usar com mais facilidade.
Para obter mais informações sobre bibliotecas e recursos
específicos da linguagem, consulte Desenvolvimento com o
Amazon S3 usando os AWS SDKs e exploradores (p. 1034).
Glossário da AWS
Para obter a terminologia mais recente da AWS, consulte o Glossário da AWS na Referência geral da
AWS.