

# Proteger dados com criptografia
<a name="UsingEncryption"></a>

**Importante**  
O Amazon S3 agora aplica criptografia do lado do servidor com chaves gerenciadas do Amazon S3 (SSE-S3) como nível básico de criptografia para cada bucket no Amazon S3. Desde 5 de janeiro de 2023, todos os novos uploads de objetos para o Amazon S3 são automaticamente criptografados sem custo adicional e sem impacto na performance. O status de criptografia automática para a configuração de criptografia padrão do bucket do S3 e para novos uploads de objetos está disponível em logs do CloudTrail, no Inventário S3, na Lente de Armazenamento do S3, no console do Amazon S3 e como cabeçalho adicional de resposta da API do Amazon S3 na AWS CLI e em SDKs da AWS. Para obter mais informações, consulte [Perguntas frequentes sobre criptografia padrão](https://docs.aws.amazon.com/AmazonS3/latest/userguide/default-encryption-faq.html).

A proteção de dados refere-se à proteção enquanto eles estão em trânsito (à medida que são transferidos para e do Amazon S3) e em repouso (enquanto estão armazenados em discos em datacenters do Amazon S3). É possível proteger dados em trânsito usando Secure Socket Layer/Transport Layer Security (SSL/TLS), inclusive a troca de chaves híbrida pós-quântica ou a criptografia do lado do cliente. Para proteger dados em repouso no Amazon S3, você tem as seguintes opções:
+ **Criptografia do lado do servidor**: o Amazon S3 criptografa os objetos antes de salvá-los em discos em seus datacenters da AWS e descriptografa-os quando você os baixa.

  Todos os buckets do Amazon S3 têm criptografia configurada por padrão e todos os novos objetos que são carregados em um bucket do S3 são automaticamente criptografados em repouso. A criptografia do lado do servidor com chaves gerenciadas pelo Amazon S3 (SSE-S3) é a configuração de criptografia padrão para todos os buckets no Amazon S3. Para usar um tipo diferente de criptografia, você pode especificar a criptografia do lado do servidor a ser usada nas solicitações `PUT` do S3 ou atualizar a configuração de criptografia padrão no bucket de destino. 

  Se quiser especificar um tipo de criptografia diferente nas solicitações `PUT`, você pode usar a criptografia do lado do servidor com chaves do AWS Key Management Service (AWS KMS) (SSE-KMS), criptografia de camada dupla do lado do servidor com chaves do AWS KMS (DSSE-KMS) ou criptografia do lado do servidor com chaves fornecidas pelo cliente (SSE-C). Se quiser definir uma configuração de criptografia padrão diferente no bucket de destino, você pode usar SSE-KMS ou DSSE-KMS.

  Para ter mais informações sobre a alteração da configuração padrão de criptografia para buckets de uso geral, consulte [Configurar a criptografia padrão](default-bucket-encryption.md). 

  Quando você altera a configuração de criptografia padrão do bucket para SSE-KMS, o tipo de criptografia dos objetos do Amazon S3 existentes no bucket não é alterado. Para alterar o tipo de criptografia de objetos preexistentes depois de atualizar a configuração padrão de criptografia para SSE-KMS, use o recurso Operações em Lote do Amazon S3. Basta fornecer uma lista de objetos ao recurso Operações em Lote do S3 para que ele chame a respectiva operação de API. É possível usar a ação [Copiar objetos](batch-ops-copy-object.md) para copiar objetos existentes, gravando-os de volta no mesmo bucket que os objetos criptografados por SSE-KMS. Um único trabalho do Batch Operations pode realizar a operação especificada em bilhões de objetos. Para ter mais informações, consulte [Executar operações de objetos em massa com o Operações em Lote](batch-ops.md) e a publicação [How to retroactively encrypt existing objects in Amazon S3 using S3 Inventory, Amazon Athena, and S3 Batch Operations](https://aws.amazon.com/blogs/security/how-to-retroactively-encrypt-existing-objects-in-amazon-s3-using-s3-inventory-amazon-athena-and-s3-batch-operations/) do *Blog do AWS Storage*. 

  Para obter mais informações sobre cada opção de criptografia do lado do servidor, consulte [Proteger os dados usando criptografia do lado do servidor](serv-side-encryption.md).

  Para configurar a criptografia do lado do servidor, consulte:
  + [Especificar a criptografia do lado do servidor com chaves gerenciadas pelo Amazon S3 (SSE-S3)](specifying-s3-encryption.md)
  + [Especificação de criptografia no lado do servidor com o AWS KMS (SSE-KMS)](specifying-kms-encryption.md)
  + [Especificar criptografia de camada dupla do lado do servidor com chaves do AWS KMS (DSSE-KMS)](specifying-dsse-encryption.md)
  + [Especificação de criptografia no lado do servidor com chaves fornecidas pelo cliente (SSE-C).](specifying-s3-c-encryption.md)

  
+ **Criptografia do lado do cliente**: você criptografa dados do lado do cliente e faz 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 do lado do cliente](UsingClientSideEncryption.md).

Para ver qual porcentagem dos seus bytes de armazenamento estão criptografados, você pode usar as métricas da Lente de Armazenamento do Amazon S3. A Lente de Armazenamento do S3 é um recurso de análise de armazenamento em nuvem que você pode usar para obter visibilidade em toda a organização sobre o uso e a atividade do armazenamento de objetos. Para obter mais informações, consulte [ Avaliar a atividade e o uso do armazenamento com o S3 Storage Lens](https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage_lens?icmpid=docs_s3_user_guide_UsingEncryption.html). Para obter uma lista completa de métricas, consulte o [Glossário de métricas da Lente de Armazenamento do S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage_lens_metrics_glossary.html?icmpid=docs_s3_user_guide_UsingEncryption).

Para ter mais informações sobre criptografia do lado do servidor, criptografia do lado do cliente e criptografia em trânsito, analise os tópicos a seguir.

**Topics**
+ [Proteger os dados usando criptografia do lado do servidor](serv-side-encryption.md)
+ [Proteger dados usando a criptografia do lado do cliente](UsingClientSideEncryption.md)
+ [Proteger dados em trânsito com criptografia](UsingEncryptionInTransit.md)

# Proteger os dados usando criptografia do lado do servidor
<a name="serv-side-encryption"></a>

**Importante**  
A partir de abril de 2026, a AWS desabilitará a criptografia do lado do servidor com chaves fornecidas pelo cliente (SSE-C) para todos os buckets novos. Além disso, a criptografia SSE-C será desabilitada para todos os buckets existentes em Contas da AWS que não tenham dados criptografados por SSE-C. Com essas mudanças, as poucas aplicações que precisam da criptografia SSE-C deverão habilitar deliberadamente o uso do SSE-C por meio da API [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html) após a criação do bucket. Nesses casos, talvez seja necessário atualizar scripts de automação, modelos do CloudFormation ou outras ferramentas de configuração de infraestrutura para definir essas configurações. Para ter mais informações, consulte a publicação do [Blog do AWS Storage](https://aws.amazon.com/blogs/storage/advanced-notice-amazon-s3-to-disable-the-use-of-sse-c-encryption-by-default-for-all-new-buckets-and-select-existing-buckets-in-april-2026/).

**Importante**  
O Amazon S3 agora aplica criptografia do lado do servidor com chaves gerenciadas do Amazon S3 (SSE-S3) como nível básico de criptografia para cada bucket no Amazon S3. Desde 5 de janeiro de 2023, todos os novos uploads de objetos para o Amazon S3 são automaticamente criptografados sem custo adicional e sem impacto na performance. O status de criptografia automática para a configuração de criptografia padrão do bucket do S3 e para novos uploads de objetos está disponível em logs do CloudTrail, no Inventário S3, na Lente de Armazenamento do S3, no console do Amazon S3 e como cabeçalho adicional de resposta da API do Amazon S3 na AWS CLI e em SDKs da AWS. Para obter mais informações, consulte [Perguntas frequentes sobre criptografia padrão](https://docs.aws.amazon.com/AmazonS3/latest/userguide/default-encryption-faq.html).

A criptografia do lado do servidor é a criptografia de dados em seu destino pela aplicação ou serviço que os recebe. O Amazon S3 criptografa os dados no nível do objeto no momento em que os grava em discos nos datacenters da AWS e descriptografa-os quando você os acessa. 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. Por exemplo, se você compartilhar seus objetos usando um URL pré-assinado, esse URL funcionará da mesma forma para objetos criptografados e não criptografados. Além disso, quando você lista objetos no bucket, as operações de API de lista retornam uma lista de todos os objetos, independentemente de estarem ou não criptografados.

Todos os buckets do Amazon S3 têm criptografia configurada por padrão e todos os novos objetos que são carregados em um bucket do S3 são automaticamente criptografados em repouso. A criptografia do lado do servidor com chaves gerenciadas pelo Amazon S3 (SSE-S3) é a configuração de criptografia padrão para todos os buckets no Amazon S3. Para usar um tipo diferente de criptografia, você pode especificar a criptografia do lado do servidor a ser usada nas solicitações `PUT` do S3 ou atualizar a configuração de criptografia padrão no bucket de destino. 

Se quiser especificar um tipo de criptografia diferente nas solicitações `PUT`, você pode usar a criptografia do lado do servidor com chaves do AWS Key Management Service (AWS KMS) (SSE-KMS), criptografia de camada dupla do lado do servidor com chaves do AWS KMS (DSSE-KMS) ou criptografia do lado do servidor com chaves fornecidas pelo cliente (SSE-C). Se quiser definir uma configuração de criptografia padrão diferente no bucket de destino, você pode usar SSE-KMS ou DSSE-KMS.

Para ter mais informações sobre a alteração da configuração padrão de criptografia para buckets de uso geral, consulte [Configurar a criptografia padrão](default-bucket-encryption.md). 

Quando você altera a configuração de criptografia padrão do bucket para SSE-KMS, o tipo de criptografia dos objetos do Amazon S3 existentes no bucket não é alterado. Para alterar o tipo de criptografia de objetos preexistentes depois de atualizar a configuração padrão de criptografia para SSE-KMS, use o recurso Operações em Lote do Amazon S3. Basta fornecer uma lista de objetos ao recurso Operações em Lote do S3 para que ele chame a respectiva operação de API. É possível usar a ação [Copiar objetos](batch-ops-copy-object.md) para copiar objetos existentes, gravando-os de volta no mesmo bucket que os objetos criptografados por SSE-KMS. Um único trabalho do Batch Operations pode realizar a operação especificada em bilhões de objetos. Para ter mais informações, consulte [Executar operações de objetos em massa com o Operações em Lote](batch-ops.md) e a publicação [How to retroactively encrypt existing objects in Amazon S3 using S3 Inventory, Amazon Athena, and S3 Batch Operations](https://aws.amazon.com/blogs/security/how-to-retroactively-encrypt-existing-objects-in-amazon-s3-using-s3-inventory-amazon-athena-and-s3-batch-operations/) do *Blog do AWS Storage*. 

**nota**  
Não é possível aplicar diferentes tipos de criptografia de servidor ao mesmo objeto simultaneamente.

Se você precisar criptografar os objetos existentes, use as operações em lote do S3 e o inventário do S3. Para obter mais informações, consulte [Criptografar objetos com as operações em lote do Amazon S3](https://aws.amazon.com/blogs/storage/encrypting-objects-with-amazon-s3-batch-operations/) e [Executar operações de objetos em massa com o Operações em Lote](batch-ops.md).

Ao armazenar dados no Amazon S3, há quatro opções mutuamente excludentes de criptografia do lado do servidor, dependendo de como você opta por gerenciar as chaves de criptografia e do número de camadas de criptografia que deseja aplicar.

**Criptografia do lado do servidor com chaves gerenciadas pelo Amazon S3 (SSE-S3)**  
Todos os buckets do Amazon S3 têm criptografia configurada por padrão. A opção padrão para a criptografia do lado do servidor é com as chaves gerenciadas pelo Amazon S3 (SSE-S3). Cada objeto é criptografado com uma chave exclusiva. Como uma proteção adicional, a SSE-S3 criptografa a própria chave com uma chave-raiz que alterna regularmente. A SSE-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 os dados. Para obter mais informações, consulte [Usar a criptografia do lado do servidor com chaves gerenciadas pelo Amazon S3 (SSE-S3)](UsingServerSideEncryption.md).

**Criptografia no lado do servidor com chaves do AWS Key Management Service (AWS KMS) (SSE-KMS)**  
A criptografia do lado do servidor com o AWS KMS keys (SSE-KMS) é fornecida por meio de uma integração do serviço AWS KMS com o Amazon S3. Com o AWS KMS, você tem mais controle sobre suas chaves. Por exemplo, você pode visualizar chaves separadas, editar políticas de controle e seguir as chaves no AWS CloudTrail. Além disso, é possível criar e gerenciar chaves gerenciadas pelo cliente ou usar Chaves 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 [Usar criptografia do lado do servidor com o AWS KMS (SSE-KMS)](UsingKMSEncryption.md).

**Criptografia de camada dupla do lado do servidor com chaves do AWS Key Management Service (AWS KMS) (DSSE-KMS)**  
A criptografia de camada dupla do lado do servidor com AWS KMS keys (DSSE-KMS) é semelhante ao SSE-KMS, mas o DSSE-KMS aplica duas camadas independentes de criptografia AES-256 em vez de apenas uma: primeiro usando uma chave de criptografia de dados do AWS KMS e, depois, usando uma chave de criptografia separada gerenciada pelo Amazon S3. Como as duas camadas de criptografia são aplicadas a um objeto do lado do servidor, você pode usar uma grande variedade de ferramentas e Serviços da AWS para analisar dados no S3 enquanto usa um método de criptografia capaz de atender aos seus requisitos de conformidade. Para obter mais informações, consulte [Usar criptografia de camada dupla do lado do servidor com chaves do AWS KMS (DSSE-KMS)](UsingDSSEncryption.md).

**Criptografia do lado do servidor com chaves fornecidas pelo cliente (SSE-C)**  
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, ao gravar em discos, e a descriptografia, quando você acessa os objetos. Para obter mais informações, consulte [Como usar criptografia do lado do servidor com chaves fornecidas pelo cliente (SSE-C)](ServerSideEncryptionCustomerKeys.md).

**nota**  
Ao usar pontos de acesso para sistemas de arquivos do Amazon FSx utilizando o recurso Pontos de Acesso S3, você tem uma opção para criptografia do lado do servidor.  
Todos os sistemas de arquivos do Amazon FSx têm criptografia configurada por padrão e são criptografados em repouso com chaves gerenciadas por meio do AWS Key Management Service. Os dados são automaticamente criptografados e descriptografados pelo sistema de arquivos à medida que são gravados e lidos no sistema de arquivos. Esses processos são tratados de maneira transparente pelo Amazon FSx.

# Definir o comportamento padrão da criptografia para os buckets do Amazon S3
<a name="bucket-encryption"></a>

**Importante**  
O Amazon S3 agora aplica criptografia do lado do servidor com chaves gerenciadas do Amazon S3 (SSE-S3) como nível básico de criptografia para cada bucket no Amazon S3. Desde 5 de janeiro de 2023, todos os novos uploads de objetos para o Amazon S3 são automaticamente criptografados sem custo adicional e sem impacto na performance. O status de criptografia automática para a configuração de criptografia padrão do bucket do S3 e para novos uploads de objetos está disponível em logs do CloudTrail, no Inventário S3, na Lente de Armazenamento do S3, no console do Amazon S3 e como cabeçalho adicional de resposta da API do Amazon S3 na AWS CLI e em SDKs da AWS. Para obter mais informações, consulte [Perguntas frequentes sobre criptografia padrão](https://docs.aws.amazon.com/AmazonS3/latest/userguide/default-encryption-faq.html).

Todos os buckets do Amazon S3 têm a criptografia configurada por padrão, e os objetos são automaticamente criptografados usando criptografia do lado do servidor, com chaves gerenciadas do Amazon S3 (SSE-S3). Essa configuração de criptografia se aplica a todos os objetos em seus buckets do Amazon S3.

Se você precisar de maior controle sobre suas chaves, como gerenciar a alternância de chaves e as concessões de políticas de acesso, poderá optar por usar a criptografia do lado do servidor chaves do AWS Key Management Service (AWS KMS) (SSE-KMS) ou a criptografia de camada dupla do lado do servidor com chaves do AWS KMS (DSSE-KMS). Para ter mais informações sobre edição de chaves do KMS, consulte [Editar chaves](https://docs.aws.amazon.com/kms/latest/developerguide/editing-keys.html) no *Guia do desenvolvedor do AWS Key Management Service*. 

**nota**  
Alteramos os buckets para criptografar automaticamente uploads de novos objetos. Se você criou anteriormente um bucket sem criptografia padrão, o Amazon S3 ativará a criptografia por padrão para o bucket usando SSE-S3. Não haverá nenhuma alteração na configuração de criptografia padrão para um bucket existente que já tenha a criptografia SSE-S3 ou SSE-KMS configurada. Se quiser criptografar seus objetos com a SSE-KMS, deverá alterar o tipo de criptografia nas configurações do bucket. Para obter mais informações, consulte [Usar criptografia do lado do servidor com o AWS KMS (SSE-KMS)](UsingKMSEncryption.md). 

Ao configurar seu bucket para usar criptografia padrão com a SSE-KMS, você também pode ativar o recurso de chaves de bucket do S3 para diminuir o tráfego de solicitações do Amazon S3 para o 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](bucket-key.md).

Para identificar buckets que têm SSE-KMS habilitada como criptografia padrão, você pode usar as métricas da Lente de Armazenamento do Amazon S3. A Lente de Armazenamento do S3 é um recurso de análise de armazenamento em nuvem que você pode usar para obter visibilidade em toda a organização sobre o uso e a atividade do armazenamento de objetos. Para obter mais informações, consulte [Como usar a Lente de Armazenamento do S3 para proteger seus dados](https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-lens-data-protection.html?icmpid=docs_s3_user_guide_bucket-encryption.html).

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ê o baixa. Para ter mais informações sobre como proteger dados usando a criptografia no lado do servidor e o gerenciamento de chaves de criptografia, consulte [Proteger os dados usando criptografia do lado do servidor](serv-side-encryption.md).

Para ter mais informações sobre permissões necessárias para criptografia padrão, consulte [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html) na *Referência da API do Amazon Simple Storage Service*.

Você pode configurar o comportamento da 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 AWS Command Line Interface (AWS CLI).

**Criptografar objetos existentes**  
Para criptografar objetos existentes não criptografados do Amazon S3, você pode usar 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 Copy do Batch Operations](https://docs.aws.amazon.com/AmazonS3/latest/userguide/batch-ops-copy-object.html) para copiar objetos não criptografados existentes e gravá-los de volta no mesmo bucket que os objetos criptografados. Um único trabalho do Batch Operations pode realizar a operação especificada em bilhões de objetos. Para obter mais informações, consulte [Executar operações de objetos em massa com o Operações em Lote](batch-ops.md) e a publicação do *Blog de armazenamento da AWS* [Criptografia de objetos existentes com o Amazon S3 Batch Operations](https://aws.amazon.com/blogs/storage/encrypting-objects-with-amazon-s3-batch-operations/).

Você também pode criptografar objetos existentes usando a operação de API `CopyObject` ou o comando `copy-object` da AWS CLI. Para obter mais informações, consulte a publicação do *Blog de armazenamento da AWS* [Criptografia de objetos existentes do Amazon S3 com a AWS CLI](https://aws.amazon.com/blogs/storage/encrypting-existing-amazon-s3-objects-with-the-aws-cli/).

**nota**  
Os buckets do Amazon S3 com criptografia definida como SSE-KMS não podem ser usados como buckets de destino para [Registrar em log as solicitações com registro em log de acesso ao servidor](ServerLogs.md). Somente a criptografia padrão SSE-S3 é suportada para buckets de destino do log de acesso do servidor.

## Usar criptografia SSE-KMS para operações entre contas
<a name="bucket-encryption-update-bucket-policy"></a>

Ao utilizar a criptografia para operações entre contas, esteja ciente do seguinte:
+ Se o nome do recurso da Amazon (ARN) da AWS KMS key ou alias não for fornecido no momento da solicitação nem por meio da configuração de criptografia padrão do bucket, a Chave gerenciada pela AWS (`aws/s3`) será utilizada.
+ Se você estiver fazendo upload ou acessando objetos do S3 usando entidades principais do AWS Identity and Access Management (IAM) que estão na mesma Conta da AWS que a sua chave do KMS, poderá usar a Chave gerenciada pela AWS (`aws/s3`). 
+ Se quiser conceder acesso entre contas aos seus objetos do S3, use uma chave gerenciada pelo cliente. Você pode configurar a política de uma chave gerenciada pelo cliente para permitir o acesso de outra conta.
+ Se estiver especificando uma chave do KMS gerenciada pelo cliente, recomendamos usar um ARN de chave do KMS totalmente qualificado. Se você usar um alias da chave do KMS, o AWS KMS resolverá a chave na conta do solicitante. Isso pode resultar em dados criptografados com uma chave do KMS pertencente ao solicitante, e não ao proprietário do bucket.
+ É necessário especificar uma chave para a qual você (o solicitante) recebeu a permissão `Encrypt`. Para ter mais informações, consulte [Permitir que os usuários da chave usem uma chave do KMS para operações criptográficas](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html#key-policy-users-crypto) no *Guia do desenvolvedor do AWS Key Management Service*.

Para ter mais informações sobre quando usar as chaves gerenciadas pelo cliente e as chaves do KMS gerenciadas pela AWS, consulte [Devo usar uma Chave gerenciada pela AWS ou uma chave pelo cliente para criptografar meus objetos no Amazon S3?](https://aws.amazon.com/premiumsupport/knowledge-center/s3-object-encryption-keys/)

## Como usar a criptografia padrão com a replicação
<a name="bucket-encryption-replication"></a>

Ao habilitar a criptografia padrão para um bucket de destino de replicação, o seguinte comportamento de criptografia será aplicado:
+ Se os objetos no bucket de origem não estiverem criptografados, os objetos de réplica no bucket de destino serão criptografados usando as configurações de criptografia padrão do bucket de destino. Como resultado, as tags de entidade (ETags) dos objetos de origem diferem dos ETags dos objetos de réplica. Se você tiver aplicações que usam ETags, será necessário atualizar essas aplicações para considerar essa diferença.
+ Se os objetos no bucket de origem forem criptografados usando a criptografia do lado do servidor com chaves gerenciadas do Amazon S3 (SSE-S3), a criptografia do lado do servidor com chaves do AWS Key Management Service (AWS KMS) (SSE-KMS) ou a criptografia de camada dupla do lado do servidor com chaves do AWS KMS (DSSE-KMS), os objetos de réplica no bucket de destino usarão o mesmo tipo de criptografia que os objetos de origem. As configurações de criptografia padrão do bucket de destino não são usadas.

Para obter mais informações sobre como usar a criptografia padrão com SSE-KMS, consulte [Replicar objetos criptografados](replication-config-for-kms-objects.md).

## Usar Chaves de bucket do Amazon S3 com criptografia padrão
<a name="bucket-key-default-encryption"></a>

Quando você configura seu bucket para usar a SSE-KMS como o comportamento de criptografia padrão para novos objetos, você também pode configurar chaves de bucket do S3. As chaves de bucket do S3 diminuem o número de transações do Amazon S3 para o AWS KMS a fim de reduzir o custo da SSE-KMS. 

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 uma [chave de dados](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#data-keys) exclusiva para objetos no 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. 

Para obter mais informações sobre como usar Chaves de bucket do S3, consulte [Uso de chaves de bucket do Amazon S3](bucket-key.md).

# Configurar a criptografia padrão
<a name="default-bucket-encryption"></a>

**Importante**  
O Amazon S3 agora aplica criptografia do lado do servidor com chaves gerenciadas do Amazon S3 (SSE-S3) como nível básico de criptografia para cada bucket no Amazon S3. Desde 5 de janeiro de 2023, todos os novos uploads de objetos para o Amazon S3 são automaticamente criptografados sem custo adicional e sem impacto na performance. O status de criptografia automática para a configuração de criptografia padrão do bucket do S3 e para novos uploads de objetos está disponível em logs do CloudTrail, no Inventário S3, na Lente de Armazenamento do S3, no console do Amazon S3 e como cabeçalho adicional de resposta da API do Amazon S3 na AWS CLI e em SDKs da AWS. Para obter mais informações, consulte [Perguntas frequentes sobre criptografia padrão](https://docs.aws.amazon.com/AmazonS3/latest/userguide/default-encryption-faq.html).

Os buckets do Amazon S3 têm a criptografia configurada por padrão, e os novos objetos são automaticamente criptografados usando criptografia do lado do servidor, com chaves gerenciadas do Amazon S3 (SSE-S3). Essa criptografia se aplica a todos os novos objetos em seus buckets do Amazon S3 e não tem nenhum custo para você.

Se você precisar de maior controle sobre suas chaves de criptografia, como gerenciar a alternância de chaves e as concessões de políticas de acesso, poderá optar por usar a criptografia do lado do servidor com chaves do AWS Key Management Service (AWS KMS) (SSE-KMS) ou a criptografia de camada dupla do lado do servidor com chaves do AWS KMS (DSSE-KMS). Para obter mais informações sobre SSE-KMS, consulte [Especificação de criptografia no lado do servidor com o AWS KMS (SSE-KMS)](specifying-kms-encryption.md). Para ter mais informações sobre DSSE-KMS, consulte [Usar criptografia de camada dupla do lado do servidor com chaves do AWS KMS (DSSE-KMS)](UsingDSSEncryption.md). 

Se quiser usar uma chave do KMS que seja de propriedade de outra conta, você deverá ter permissão para usar a chave. Para obter mais informações sobre permissões entre contas para chaves do KMS, consulte [Criar chaves do KMS que outras contas podem usar](https://docs.aws.amazon.com//kms/latest/developerguide/key-policy-modifying-external-accounts.html#cross-account-console) no *Guia do desenvolvedor do AWS Key Management Service*. 

Ao definir a criptografia do bucket padrão como SSE-KMS, você também pode configurar uma chave de bucket do S3 para reduzir os custos de solicitação do AWS KMS. Para obter mais informações, consulte [Redução do custo do SSE-KMS com chaves de bucket do Amazon S3](bucket-key.md).

**nota**  
Se você usa [PutBucketEncryption](https://docs.aws.amazon.com//AmazonS3/latest/API/API_PutBucketEncryption.html) para definir a criptografia de bucket padrão como SSE-KMS, é necessário verificar se o ID da chave do KMS está correto. O Amazon S3 não valida o ID da chave do KMS fornecido nas solicitações PutBucketEncryption.

Não há cobranças adicionais para usar a criptografia padrão para buckets do S3. As solicitações para configurar o comportamento de criptografia padrão geram cobranças padrão de solicitação do Amazon S3. Para obter mais informações sobre preços, consulte [Preços do Amazon S3](https://aws.amazon.com/s3/pricing/). Para a SSE-KMS e DSSE-KMS, tarifas do AWS KMS podem ser aplicadas. Elas estão listadas em [Preços do AWS KMS](https://aws.amazon.com/kms/pricing/). 

A criptografia no lado do servidor com chaves fornecidas pelo cliente (SSE-C) não é compatível para criptografia padrão.

Você pode configurar 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 AWS Command Line Interface (AWS CLI).

**Alterações feitas às observações antes de habilitar a criptografia padrão**  
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 ou a DSSE-KMS em sua configuração de criptografia padrão, poderão ser cobradas cotas de solicitações por segundo (RPS) do AWS KMS. Para ter mais informações sobre as cotas do AWS KMS e como solicitar um aumento de cota, consulte [Cotas](https://docs.aws.amazon.com/kms/latest/developerguide/limits.html) no *Guia do desenvolvedor do AWS Key Management Service*. 

**nota**  
Os objetos carregados antes da ativação da criptografia padrão não serão criptografados. Para ter informações sobre criptografia de objetos existentes, consulte [Definir o comportamento padrão da criptografia para os buckets do Amazon S3](bucket-encryption.md).

## Usar o console do S3
<a name="bucket-encryption-how-to-set-up-console"></a>

**Como configurar a criptografia padrão em um bucket do Amazon 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/](https://console.aws.amazon.com/s3/).

1. No painel de navegação à esquerda, escolha **Buckets**.

1. Na lista de **Buckets**, escolha o nome do bucket desejado. 

1. Escolha a guia **Properties (Propriedades)**.

1. Em **Default encryption (Criptografia padrão)**, escolha **Edit (Editar)**.

1. Para configurar a criptografia padrão, em **Tipo de criptografia**, selecione uma das seguintes opções: 
   + **Criptografia do lado do servidor com chaves gerenciadas pelo Amazon S3 (SSE-S3)**
   + **Criptografia no lado do servidor com chaves do AWS Key Management Service (SSE-KMS)**
   + **Criptografia de camada dupla do lado do servidor com chaves do AWS Key Management Service (DSSE-KMS)**
**Importante**  
Se você usar a opção SSE-KMS ou a DSSE-KMS em sua configuração de criptografia padrão, poderão ser cobradas cotas de solicitações por segundo (RPS) do AWS KMS. Para obter mais informações sobre as cotas do AWS KMS e como solicitar um aumento de cota, consulte [Cotas](https://docs.aws.amazon.com/kms/latest/developerguide/limits.html) no *Guia do desenvolvedor do AWS Key Management Service*. 

   Os buckets e novos objetos são criptografados por padrão com o SSE-S3, a menos que você especifique outro tipo de criptografia padrão para eles. Para obter mais informações sobre criptografia padrão, consulte [Definir o comportamento padrão da criptografia para os buckets do Amazon S3](bucket-encryption.md).

   Para obter mais informações sobre como usar a criptografia no lado do servidor do Amazon S3 para criptografar seus dados, consulte [Usar a criptografia do lado do servidor com chaves gerenciadas pelo Amazon S3 (SSE-S3)](UsingServerSideEncryption.md).

1. Se você escolheu **Criptografia do lado do servidor com chaves do AWS Key Management Service (SSE-KMS)** ou **Criptografia de camada dupla do lado do servidor com chaves do AWS Key Management Service (DSSE-KMS)**, faça o seguinte: 

   1. Em **Chave do AWS KMS**, especifique sua chave do KMS de uma das seguintes maneiras:
      + Para escolher entre uma lista de chaves do KMS disponíveis, selecione **Escolher entre suas AWS KMS keys** e escolha sua **chave do KMS** na lista de chaves disponíveis.

        As chaves Chave gerenciada pela AWS (`aws/s3`) e as chaves gerenciadas pelo cliente são exibidas nessa lista. Para ter mais informações sobre chaves gerenciadas pelo cliente, consulte [Chaves de clientes e chaves da AWS](https://docs.aws.amazon.com//kms/latest/developerguide/concepts.html#key-mgmt) no *Guia do desenvolvedor do AWS Key Management Service*.
      + Para inserir o ARN da chave do KMS, escolha **Inserir ARN da AWS KMS key** e insira o ARN da chave do KMS no campo exibido. 
      + Para criar uma chave gerenciada pelo cliente no console do AWS KMS, selecione **Criar uma chave do KMS**.

        Para ter mais informações sobre como criar uma AWS KMS key, consulte [Criação de chaves](https://docs.aws.amazon.com//kms/latest/developerguide/create-keys.html) no * Guia do desenvolvedor do AWS Key Management Service*.
**Importante**  
Você só pode usar chaves do KMS habilitadas na mesma Região da AWS que o bucket. Quando você seleciona **Choose from your KMS keys **, (Escolher de suas chaves do KMS), o console do S3 lista somente 100 chaves do KMS por região. Se você tiver mais de 100 chaves do KMS na mesma região, será possível ver somente as primeiras 100 chaves do KMS no console do S3. Para usar uma chave do KMS que não esteja listada no console, escolha **Inserir o ARN da AWS KMS key** e insira o ARN da chave do KMS.  
Ao usar uma AWS KMS key para criptografia no lado do servidor no Amazon S3, você deve escolher uma chave de criptografia do KMS simétrica. O Amazon S3 só é compatível com chaves do KMS de criptografia simétrica. Para obter mais informações sobre essas chaves, consulte [Chaves do KMS de criptografia simétrica](https://docs.aws.amazon.com//kms/latest/developerguide/concepts.html#symmetric-cmks) no *Guia do desenvolvedor do AWS Key Management Service*.

      Para ter mais informações sobre como usar a SSE-KMS com o Amazon S3, consulte [Usar criptografia do lado do servidor com o AWS KMS (SSE-KMS)](UsingKMSEncryption.md). Para ter mais informações sobre como usar a DSSE-KMS, consulte [Usar criptografia de camada dupla do lado do servidor com chaves do AWS KMS (DSSE-KMS)](UsingDSSEncryption.md).

   1. Ao configurar seu bucket para usar a criptografia padrão com a SSE-KMS, você também pode ativar a chave de bucket do S3. As chaves de bucket do S3 diminuem o custo de criptografia reduzindo 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](bucket-key.md).

      Para usar Chaves de bucket do S3, em **Bucket Key (Chave de bucket)**, escolha **Enable (Habilitar)**.
**nota**  
As chaves de bucket do S3 não comportam DSSE-KMS.

1. Escolha **Salvar alterações**.

## Como usar o AWS CLI
<a name="default-bucket-encryption-cli"></a>

Esses exemplos mostram como configurar a criptografia padrão usando SSE-S3 ou usando a SSE-KMS com uma chave de bucket do S3.

Para obter mais informações sobre criptografia padrão, consulte [Definir o comportamento padrão da criptografia para os buckets do Amazon S3](bucket-encryption.md). Para obter mais informações sobre o uso da AWS CLI para configurar a criptografia padrão, consulte [put-bucket-encryption](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/put-bucket-encryption.html).

**Example – Criptografia padrão com SSE-S3**  
Esse exemplo configura a criptografia de bucket padrão com chaves gerenciadas pelo Amazon S3.  

```
aws s3api put-bucket-encryption --bucket amzn-s3-demo-bucket --server-side-encryption-configuration '{
    "Rules": [
        {
            "ApplyServerSideEncryptionByDefault": {
                "SSEAlgorithm": "AES256"
            }
        }
    ]
}'
```

**Example – Criptografia padrão com SSE-KMS usando uma chave de bucket do S3**  
Esse exemplo configura a criptografia de bucket padrão com o SSE-KMS usando uma chave de bucket do S3.   

```
aws s3api put-bucket-encryption --bucket amzn-s3-demo-bucket --server-side-encryption-configuration '{
    "Rules": [
            {
                "ApplyServerSideEncryptionByDefault": {
                    "SSEAlgorithm": "aws:kms",
                    "KMSMasterKeyID": "KMS-Key-ARN"
                },
                "BucketKeyEnabled": true
            }
        ]
    }'
```

## Uso da API REST
<a name="bucket-encryption-how-to-set-up-api"></a>

Use a operação `PutBucketEncryption` da API REST para habilitar a criptografia padrão e definir o tipo de criptografia do lado do servidor a ser utilizado, ou seja, SSE-S3, SSE-KMS ou DSSE-KMS. 

Para obter mais informações, consulte [https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTencryption.html](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTencryption.html) na *Referência da API do Amazon Simple Storage Service*.

# Monitorar a criptografia padrão com o AWS CloudTrail e o Amazon EventBridge
<a name="bucket-encryption-tracking"></a>

**Importante**  
O Amazon S3 agora aplica criptografia do lado do servidor com chaves gerenciadas do Amazon S3 (SSE-S3) como nível básico de criptografia para cada bucket no Amazon S3. Desde 5 de janeiro de 2023, todos os novos uploads de objetos para o Amazon S3 são automaticamente criptografados sem custo adicional e sem impacto na performance. O status de criptografia automática para a configuração de criptografia padrão do bucket do S3 e para novos uploads de objetos está disponível em logs do CloudTrail, no Inventário S3, na Lente de Armazenamento do S3, no console do Amazon S3 e como cabeçalho adicional de resposta da API do Amazon S3 na AWS CLI e em SDKs da AWS. Para obter mais informações, consulte [Perguntas frequentes sobre criptografia padrão](https://docs.aws.amazon.com/AmazonS3/latest/userguide/default-encryption-faq.html).

Você pode rastrear solicitações de configuração de criptografia padrão para buckets do Amazon S3 usando eventos do AWS CloudTrail. Os seguintes nomes de eventos de API são usados nos logs do CloudTrail:
+ `PutBucketEncryption`
+ `GetBucketEncryption`
+ `DeleteBucketEncryption`

Você também pode criar regras do EventBridge que correspondam aos eventos do CloudTrail para essas chamadas de API. Para obter mais informações sobre eventos do CloudTrail, consulte [Habilitar o registro em log de objetos em um bucket usando o console](enable-cloudtrail-logging-for-s3.md#enable-cloudtrail-events). Para ter mais informações sobre eventos do EventBridge, consulte [Eventos de Serviços da AWS](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-service-event.html).

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 as configurações de criptografia padrão, o log inclui um dos seguintes campos como o par de nome-valor: `"SSEApplied":"Default_SSE_S3"`, `"SSEApplied":"Default_SSE_KMS"` ou `"SSEApplied":"Default_DSSE_KMS"`.

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"`, `"SSEApplied":"DSSE_KMS"` ou `"SSEApplied":"SSE_C"`. 

Para multipart uploads, essas informações estão incluídas nas solicitações de operação de API `InitiateMultipartUpload`. Para obter mais informações sobre como usar o CloudTrail e o CloudWatch, consulte [Registrar em log e monitorar no Amazon S3](monitoring-overview.md).

# Perguntas frequentes sobre criptografia padrão
<a name="default-encryption-faq"></a>

O Amazon S3 agora aplica criptografia do lado do servidor com chaves gerenciadas do Amazon S3 (SSE-S3) como nível básico de criptografia para cada bucket no Amazon S3. Desde 5 de janeiro de 2023, todos os novos uploads de objetos para o Amazon S3 são automaticamente criptografados sem custo adicional e sem impacto na performance. A SSE-S3, que usa criptografia AES-256 (Advanced Encryption Standard de 256 bits), é aplicada automaticamente a todos os novos buckets e a todos os buckets do S3 existentes que ainda não tenham a criptografia padrão configurada. O status de criptografia automática para a configuração de criptografia padrão do bucket do S3 e para novos uploads de objetos está disponível em logs do AWS CloudTrail, no Inventário do S3, na Lente de Armazenamento do S3, no console do Amazon S3 e como cabeçalho adicional de resposta da API do Amazon S3 na AWS Command Line Interface (AWS CLI) e nos AWS SDKs.

As seções a seguir respondem a perguntas sobre essa atualização. 

**O Amazon S3 altera as configurações de criptografia padrão para meus buckets existentes que já têm a criptografia padrão configurada?**  
Não. Não há nenhuma alteração na configuração de criptografia padrão para um bucket existente que já tenha a criptografia SSE-S3 ou a criptografia do lado do servidor com chaves do AWS Key Management Service (AWS KMS) (SSE-KMS) configuradas. Para obter mais informações sobre como definir o comportamento de criptografia padrão para buckets, consulte [Definir o comportamento padrão da criptografia para os buckets do Amazon S3](bucket-encryption.md). Para obter mais informações sobre configurações de criptografia SSE-S3 e SSE-KMS, consulte [Proteger os dados usando criptografia do lado do servidor](serv-side-encryption.md).

**A criptografia padrão é ativada em meus buckets existentes que não têm a criptografia padrão configurada?**  
Sim. O Amazon S3 agora configura a criptografia padrão em todos os buckets não criptografados para aplicar a criptografia do lado do servidor com chaves gerenciadas do S3 (SSE-S3) como o nível básico de criptografia para novos objetos carregados nesses buckets. Objetos que já estão em um bucket não criptografado existente não serão criptografados automaticamente.

**Como posso ver o status de criptografia padrão de novos uploads de objetos?**  
Atualmente, é possível visualizar o status de criptografia padrão de novos uploads de objetos em logs do AWS CloudTrail, no Inventário do S3, na Lente de Armazenamento do S3, no console do Amazon S3 e como cabeçalho adicional de resposta da API do Amazon S3 na AWS Command Line Interface (AWS CLI) e em AWS SDKs.
+ Para ver seus eventos do CloudTrail, consulte [Visualizar eventos do CloudTrail no console do CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/view-cloudtrail-events-console.html) no *Guia do usuário do AWS CloudTrail*. Os logs do CloudTrail fornecem monitoramento de API para solicitações `PUT` e `POST` para o Amazon S3. Quando a criptografia padrão está sendo usada para criptografar objetos nos buckets, os logs do CloudTrail para solicitações de API `PUT` e `POST` incluem o seguinte campo como o par de nome-valor: `"SSEApplied":"Default_SSE_S3"`. 
+ Para visualizar o status de criptografia automática de novos uploads de objetos no Inventário do S3, configure um relatório do Inventário do S3 para incluir o campo de metadados **Encryption** (Criptografia), depois veja o status de criptografia de cada novo objeto no relatório. Para obter mais informações, consulte [Configurar o Inventário do Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/configure-inventory.html#storage-inventory-setting-up).
+ Para ver o status de criptografia automática de novos uploads de objetos na Lente de Armazenamento do S3, configure um painel da Lente de Armazenamento do S3 e veja as métricas **Encrypted bytes** (Bytes criptografados) **Encrypted object count** (Contagem de objetos criptografados) na categoria **Data protection** (Proteção de dados) do painel. Para obter mais informações, consulte [Usar o console do S3](storage_lens_creating_dashboard.md#storage_lens_console_creating) e [Exibição das métricas da lente de armazenamento do S3 nos painéis](storage_lens_view_metrics_dashboard.md).
+ Para ver o status da criptografia automática no nível do bucket no console do Amazon S3, verifique a **criptografia padrão** dos buckets do Amazon S3 no console do Amazon S3. Para obter mais informações, consulte [Configurar a criptografia padrão](default-bucket-encryption.md).
+ Para ver o status de criptografia automática como cabeçalho adicional de resposta da API do Amazon S3 na AWS Command Line Interface (AWS CLI) e em AWS SDKs, verifique o cabeçalho de resposta `x-amz-server-side-encryption` ao usar APIs de ação do objeto, como [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) e [GetObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html). 

**O que preciso fazer para aproveitar essa mudança?**  
Você não precisa fazer nenhuma alteração em suas aplicações existentes. Como a criptografia padrão está habilitada para todos os seus buckets, todos os novos objetos enviados para o Amazon S3 serão criptografados automaticamente.

**Posso desativar a criptografia para os novos objetos que serão gravados no meu bucket?**  
Não. A SSE-S3 é o novo nível básico de criptografia aplicado a todos os novos objetos que são enviados para o bucket. Não é mais possível desativar a criptografia para novos uploads de objetos.

**Minhas cobranças serão afetadas?**  
Não. A criptografia padrão com SSE-S3 está disponível sem nenhum custo adicional. Serão cobrados o armazenamento, as solicitações e outros recursos do S3, como de costume. Para obter informações sobre preços, consulte [Definição de preços do Amazon S3](https://aws.amazon.com/s3/pricing/).

**O Amazon S3 vai criptografar meus objetos existentes que não estão criptografados?**  
Não. A partir de 5 de janeiro de 2023, o Amazon S3 criptografa automaticamente somente novos uploads de objetos. Para criptografar objetos existentes, você pode usar o recurso Operações em Lote do S3 para criar cópias criptografadas de seus objetos. Essas cópias criptografadas reterão os dados e o nome do objeto existente e serão criptografadas usando as chaves de criptografia que você especificar. Para obter mais detalhes, consulte [Criptografia de objetos com o recurso Operações em Lote do Amazon S3](https://aws.amazon.com/blogs/storage/encrypting-objects-with-amazon-s3-batch-operations/) no *blog de armazenamento da AWS*.

**Eu não habilitei a criptografia para meus buckets antes desse lançamento. Preciso mudar a forma como acesso os objetos?**  
Não. A criptografia padrão com SSE-S3 criptografa automaticamente seus dados à medida que são gravados no Amazon S3 e os descriptografa para você quando os acessa. Não há nenhuma alteração na forma como você acessa objetos que são criptografados automaticamente.

**Preciso mudar a forma como acesso meus objetos com criptografia do lado do cliente?**  
Não. Todos os objetos criptografados do lado do cliente antes de serem carregados no Amazon S3 chegam como objetos de texto cifrado criptografados no Amazon S3. Esses objetos agora terão uma camada adicional de criptografia SSE-S3. Suas workloads que usam objetos criptografados do lado do cliente não exigirão nenhuma alteração nos serviços do cliente ou nas configurações de autorização.

**nota**  
Os usuários da Terraform da HashiCorp que não usam uma versão atualizada do AWS Provider talvez vejam uma mudança inesperada depois de criar buckets do S3 sem nenhuma configuração de criptografia definida pelo cliente. Para evitar esse desvio, atualize sua versão do AWS Provider para Terraform para uma das seguintes versões: qualquer versão 4.x, 3.76.1 ou 2.70.4.

# Atualizar a criptografia do lado do servidor para dados existentes
<a name="update-sse-encryption"></a>

Todos os buckets do Amazon S3 têm a criptografia configurada por padrão, e os objetos são automaticamente criptografados usando criptografia do lado do servidor, com chaves gerenciadas do Amazon S3 (SSE-S3). Essa configuração de criptografia padrão se aplica a todos os novos objetos em seus buckets do Amazon S3.

Usando a operação de API `UpdateObjectEncryption`, é possível atualizar atomicamente o tipo de criptografia do lado do servidor de um objeto criptografado de um bucket de uso geral da criptografia do lado do servidor com chaves de criptografia gerenciadas pelo Amazon S3 (SSE-S3) para a criptografia do lado do servidor com chaves de criptografia do AWS Key Management Service (AWS KMS) (SSE-KMS). A operação de API `UpdateObjectEncryption` usa a [criptografia envelopada](https://docs.aws.amazon.com/kms/latest/developerguide/kms-cryptography.html#enveloping) para criptografar novamente a chave de dados utilizada para criptografar e descriptografar seu objeto com o tipo de criptografia do lado do servidor recém-especificado. 

O Amazon S3 executa essa atualização do tipo de criptografia sem precisar realizar nenhuma movimentação de dados. Em outras palavras, ao usar a operação `UpdateObjectEncryption`, os dados não são copiados, os objetos arquivados no S3 Glacier Flexible Retrieval ou no S3 Glacier Deep Archive não são restaurados e os objetos na classe de armazenamento S3 Intelligent-Tiering não são movidos entre níveis. Além disso, a operação `UpdateObjectEncryption` preserva todas as propriedades de metadados do objeto, como classe de armazenamento, data de criação, data da última modificação, ETag e soma de verificação.

É possível usar a operação `UpdateObjectEncryption` com todas as classes de armazenamento do S3 aceitas por buckets de uso geral. Você pode usar a operação `UpdateObjectEncryption` para fazer o seguinte: 
+ Alterar o tipo de criptografia de objetos da criptografia do lado do servidor com chaves de criptografia gerenciadas pelo Amazon S3 (SSE-S3) para a criptografia do lado do servidor com chaves de criptografia do AWS Key Management Service (AWS KMS) (SSE-KMS).
+ Atualizar os objetos criptografados com SSE-KMS em nível de objeto para usar chaves de bucket do S3, o que diminui o tráfego de solicitações do AWS KMS 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](bucket-key.md).
+ Alterar a chave do KMS gerenciada pelo cliente que é usada para criptografar seus dados para que você possa cumprir padrões personalizados de alternância de chaves.

**nota**  
Não é possível usar essa operação com objetos de origem que não são criptografados ou são criptografados com a criptografia de camada dupla do lado do servidor com AWS KMS keys (DSSE-KMS) ou chaves de criptografia fornecidas pelo cliente (SSE-C).

A operação `UpdateObjectEncryption` normalmente é concluída em milissegundos, independentemente do tamanho objeto ou da classe de armazenamento, como S3 Glacier Flexible Retrieval ou S3 Glacier Deep Archive. Como essa operação não é contabilizada como um acesso para o S3 Intelligent-Tiering, os objetos no nível Infrequent Access ou Archive Instant Access não voltarão automaticamente para o nível Frequent Access o tipo de criptografia do lado do servidor do objeto for alterado. 

`UpdateObjectEncryption` é uma operação de API em nível de objeto (plano de dados) que é registrada em logs de acesso ao servidor do Amazon S3 e em eventos de dados do AWS CloudTrail. Para obter mais informações, consulte [Opções de registro em log para o Amazon S3](logging-with-S3.md). 

 A operação `UpdateObjectEncryption` tem o mesmo preço das solicitações `PUT`, `COPY`, `POST` e `LIST` (por 1.000 solicitações) e é sempre cobrada como uma solicitação da classe de armazenamento S3 Standard, independentemente da classe de armazenamento do objeto subjacente. Para obter mais informações, consulte [Preço do Amazon S3](https://aws.amazon.com/s3/pricing/).

## Restrições e considerações
<a name="update-sse-encryption-restrictions"></a>

Ao usar a operação `UpdateObjectEncryption`, as seguintes restrições e considerações se aplicam:
+ A operação `UpdateObjectEncryption` não permite objetos não criptografados ou objetos criptografados com a criptografia de camada dupla do lado do servidor com AWS KMS keys (DSSE-KMS) ou chaves de criptografia fornecidas pelo cliente (SSE-C). Além disso, não é possível especificar SSE-S3 como o novo tipo de criptografia na solicitação `UpdateObjectEncryption`.
+ É possível usar a operação `UpdateObjectEncryption` para atualizar objetos em buckets que têm o Versionamento do S3 habilitado. Para atualizar o tipo de criptografia de uma versão específica, é necessário especificar um ID de versão na solicitação `UpdateObjectEncryption`. Se você não especificar um ID de versão, a solicitação `UpdateObjectEncryption` atuará na versão atual do objeto. Para obter mais informações sobre o S3 Versioning, consulte [Reter várias versões de objetos com o Versionamento do S3](Versioning.md).
+ A operação `UpdateObjectEncryption` falha em qualquer objeto que tenha um modo de retenção do Bloqueio de Objetos do S3 ou uma retenção jurídica aplicados a ele. Se um objeto tiver um período de retenção no modo de governança ou uma retenção jurídica, primeiro será necessário remover o status de bloqueio de objetos para emitir a solicitação `UpdateObjectEncryption`. Não é possível usar a operação `UpdateObjectEncryption` com objetos que tenham um período de retenção do modo de conformidade do Bloqueio de Objetos aplicado a eles. Para obter mais informações sobre bloqueio de objetos do S3, consulte [Bloquear objetos com o Bloqueio de Objetos](object-lock.md).
+ As solicitações `UpdateObjectEncryption` em buckets de origem com replicação em tempo real habilitada não iniciarão eventos de réplica no bucket de destino. Se você quiser alterar o tipo de criptografia dos objetos nos buckets de origem e destino, será necessário iniciar solicitações `UpdateObjectEncryption` separadas nos objetos nos buckets de origem e destino.
+ Por padrão, todas as solicitações `UpdateObjectEncryption` que especificam uma chave do KMS gerenciada pelo cliente são restritas às chaves do KMS pertencentes à Conta da AWS do proprietário do bucket. Se você estiver usando o AWS Organizations, existe a possibilidade de usar AWS KMS keys pertencentes a outras contas de membro em sua organização. Para isso, entre em contato com o AWS Support para fazer essa solicitação.
+ Se você usa o recurso Replicação em Lote do S3 para replicar conjuntos de dados entre regiões e já tiver atualizado o tipo de criptografia do lado do servidor de SSE-S3 para SSE-KMS, pode ser que você precise de permissões adicionais. No bucket da região de origem, é necessário ter a permissão `kms:decrypt`. Em seguida, é necessário ter as permissões `kms:decrypt` e `kms:encrypt` para o bucket na região de destino. 
+ É necessário fornecer um ARN completo da chave do KMS na solicitação `UpdateObjectEncryption`. Não é possível usar um nome de alias ou ARN de alias. É possível determinar o ARN completo da chave do KMS no console do AWS KMS ou usando a API `DescribeKey` do AWS KMS.

## Permissões obrigatórias
<a name="update-sse-encryption-permissions"></a>

Para realizar a operação `UpdateObjectEncryption`, você deve ter as seguintes permissões: 
+ `s3:PutObject`
+ `s3:UpdateObjectEncryption`
+ `kms:Encrypt`
+ `kms:Decrypt`
+ `kms:GenerateDataKey`
+ `kms:ReEncrypt*`

Se você estiver usando o AWS Organizations, para usar essa operação com chaves do KMS gerenciadas pelo cliente de outras Contas da AWS em sua organização, será necessário ter a permissão `organizations:DescribeAccount`. Também será necessário entrar em contato com o AWS Support se quiser usar AWS KMS keys pertencentes a outras contas de membro em sua organização.

Para realizar a operação `UpdateObjectEncryption`, adicione a política do AWS Identity and Access Management (IAM) a seguir ao seu perfil do IAM. Para usar essa política, substitua `amzn-s3-demo-bucket` pelo nome do seu bucket de uso geral e substitua os outros `user input placeholders` por usas próprias informações.

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [{
            "Sid": "AllowUpdateObjectEncryption",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:UpdateObjectEncryption",
                "kms:Encrypt",
                "kms:Decrypt",
                "kms:GenerateDataKey",
                "kms:ReEncrypt*",
                "organizations:DescribeAccount"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket",
                "arn:aws:s3:::amzn-s3-demo-bucket/*",
                "arn:aws:kms:us-east-1:111122223333:key/01234567-89ab-cdef-0123-456789abcdef"
            ]
        }
    ]
}
```

## Atualizar tipos de criptografia em massa
<a name="update-sse-encryption-bulk"></a>

Para atualizar o tipo de criptografia do lado do servidor de mais de um objeto do Amazon S3 com uma única solicitação, você pode usar o recurso Operações em Lote do S3. É possível fornecer à funcionalidade Operações em Lote do S3 uma lista de objetos nos quais operar ou instruir essa funcionalidade para que gere uma lista de objetos com base em metadados de objeto, como prefixo, classe de armazenamento, data de criação, tipo de criptografia, ARN da chave do KMS ou status da chave de bucket do S3. O S3 Batch Operations chama a respectiva operação de 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 em um bucket contendo exabytes de dados. Para obter mais informações sobre o recurso Operações em lote, consulte [Executar operações de objetos em massa com o Operações em Lote](batch-ops.md). 

O recurso S3 Batch Operations rastreia o progresso, envia notificações e armazena um relatório de conclusão detalhado de todas as ações, fornecendo uma experiência totalmente gerenciada, auditável e sem servidor. É possível usar o recurso Operações em Lote do S3 por meio do console do Amazon S3, da AWS Command Line Interface (AWS CLI), de SDKs da AWS ou da API REST do Amazon S3. Para obter mais informações, consulte [Atualizar a criptografia de objetos](batch-ops-update-encryption.md).

## Atualizar a criptografia de objetos
<a name="update-sse-encryption-single-object"></a>

É possível atualizar o tipo de criptografia do lado do servidor para um objeto por meio da AWS Command Line Interface (AWS CLI), de SDKs da AWS ou da API REST do Amazon S3. 

### Atualizar a criptografia de um objeto
<a name="update-sse-encryption-single-object-procedure"></a>

#### Como usar o AWS CLI
<a name="update-sse-encryption-single-object-cli"></a>

Para executar os comandos a seguir, você deve ter a AWS CLI instalada e configurada. Se ainda não tiver a AWS CLI instalada, consulte [Instalar ou atualizar a versão mais recente da AWS CLI](https://docs.aws.amazon.com//cli/latest/userguide/getting-started-install.html) no *Guia do usuário da AWS Command Line Interface*.

Também é possível executar comandos da AWS CLI pelo console usando o AWS CloudShell. O AWS CloudShell é um shell pré-autenticado e baseado em navegador que você pode iniciar diretamente do Console de gerenciamento da AWS. Para ter mais informações, consulte [What is CloudShell?](https://docs.aws.amazon.com//cloudshell/latest/userguide/welcome.html) e [Getting started with AWS CloudShell](https://docs.aws.amazon.com//cloudshell/latest/userguide/getting-started.html) no *Guia do usuário do AWS CloudShell*.

**Como atualizar a criptografia de um objeto usando a AWS CLI**

Para usar o comando a seguir, substitua os `user input placeholders` por suas próprias informações. 

1. Use o seguinte comando para atualizar a criptografia de um único objeto (`index.html`) em seu bucket de uso geral (por exemplo, `amzn-s3-demo-bucket`) e usar o SSE-KMS com uma chave de bucket do S3:

   ```
   aws s3api update-object-encryption \
   --bucket amzn-s3-demo-bucket \
   --key index.html \
   --object-encryption '{"SSEKMS": { "KMSKeyArn": "arn:aws:kms:us-east-1:111122223333:key/f12a345a-678e-9bbb-1025-62e317037583", "BucketKeyEnabled": true }}'
   ```
**nota**  
É necessário especificar o nome do recurso da Amazon (ARN) completo da AWS KMS key. Não é possível usar o ID da chave do KMS e o alias da chave do KMS.

1. Execute o comando `head-object` para visualizar o tipo de criptografia atualizado do seu objeto:

   ```
   aws s3api head-object --bucket amzn-s3-demo-bucket --key index.html
   ```

#### Uso da API REST
<a name="update-sse-encryption-single-object-rest-api"></a>

É possível enviar solicitações REST para atualizar a criptografia de um objeto. Para obter mais informações, consulte [https://docs.aws.amazon.com/AmazonS3/latest/API/API_UpdateObjectEncryption.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UpdateObjectEncryption.html).

#### Uso da SDKs AWS
<a name="update-sse-encryption-single-object-sdk"></a>

É possível usar os SDKs da AWS para atualizar a criptografia de um objeto. Para ter mais informações, consulte a [lista de SDKs compatíveis](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UpdateObjectEncryption.html#API_UpdateObjectEncryption_SeeAlso).

------
#### [ Java ]

**Example**  
O exemplo do AWS SDK for Java 2.x a seguir atualiza o tipo de criptografia de um objeto em um bucket de uso geral para SSE-KMS.  

```
    public void updateObjectEncryption(String bucketName,
                                       String objectKey,
                                       String versionId,
                                       String kmsKeyArn,
                                       boolean bucketKeyEnabled) {
        // Create the target object encryption type.
        ObjectEncryption objectEncryption = ObjectEncryption.builder()
                .ssekms(SSEKMSEncryption.builder()
                        .kmsKeyArn(kmsKeyArn)
                        .bucketKeyEnabled(bucketKeyEnabled)
                        .build())
                .build();

        // Create the UpdateObjectEncryption request.
        UpdateObjectEncryptionRequest request = UpdateObjectEncryptionRequest.builder()
                .bucket(bucketName)
                .key(objectKey)
                .versionId(versionId)
                .objectEncryption(objectEncryption)
                .build();

        // Update the object encryption.
        try {
            getS3Client().updateObjectEncryption(request);
            logger.info("Object encryption updated to SSE-KMS for {} in bucket {}", objectKey, bucketName);
        } catch (S3Exception e) {
            logger.error("Failed to update to object encryption: {} - Error code: {}", e.awsErrorDetails().errorMessage(),
                    e.awsErrorDetails().errorCode());
            throw e;
        }
    }
```

------
#### [ Python ]

**Example**  
O exemplo do AWS SDK para Python (Boto3) a seguir mostra como atualizar o tipo de criptografia de um objeto em um bucket de uso geral para SSE-KMS.   

```
response = client.update_object_encryption(
    Bucket='string',
    Key='string',
    VersionId='string',
    ObjectEncryption={
        'SSEKMS': {
                'KMSKeyArn': 'string',
                'BucketKeyEnabled': True|False
        }
    }
)
```

------

# Usar a criptografia do lado do servidor com chaves gerenciadas pelo Amazon S3 (SSE-S3)
<a name="UsingServerSideEncryption"></a>

**Importante**  
O Amazon S3 agora aplica criptografia do lado do servidor com chaves gerenciadas do Amazon S3 (SSE-S3) como nível básico de criptografia para cada bucket no Amazon S3. Desde 5 de janeiro de 2023, todos os novos uploads de objetos para o Amazon S3 são automaticamente criptografados sem custo adicional e sem impacto na performance. O status de criptografia automática para a configuração de criptografia padrão do bucket do S3 e para novos uploads de objetos está disponível em logs do CloudTrail, no Inventário S3, na Lente de Armazenamento do S3, no console do Amazon S3 e como cabeçalho adicional de resposta da API do Amazon S3 na AWS CLI e em SDKs da AWS. Para obter mais informações, consulte [Perguntas frequentes sobre criptografia padrão](https://docs.aws.amazon.com/AmazonS3/latest/userguide/default-encryption-faq.html).

Todos os uploads de novos objetos para buckets do Amazon S3 são criptografados por padrão com criptografia do lado do servidor com chaves gerenciadas pelo Amazon S3 (SSE-S3).

A criptografia no lado do servidor protege dados em repouso. O Amazon S3 criptografa cada objeto com uma chave exclusiva. Como uma proteção adicional, ela criptografa a si mesma utilizando uma chave que alterna regularmente. A criptografia do lado do servidor do Amazon S3 usa o Advanced Encryption Standard Galois/Counter Mode (AES-GCM) de 256 bits para criptografar todos os objetos carregados.

Não existem taxas adicionais pelo uso da criptografia do lado do servidor com chaves gerenciadas pelo Amazon S3 (SSE-S3). Mas, as solicitações de configuração do recurso de criptografia padrão geram os encargos de solicitação padrão do Amazon S3. Para obter mais informações sobre preços, consulte [Preços do Amazon S3](https://aws.amazon.com/s3/pricing/).

Se você precisar que os uploads de dados sejam criptografados usando somente chaves gerenciadas pelo Amazon S3, poderá usar a política de bucket a seguir. 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:

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Id": "PutObjectPolicy",
  "Statement": [
    {
      "Sid": "DenyObjectsThatAreNotSSES3",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
      "Condition": {
        "StringNotEquals": {
          "s3:x-amz-server-side-encryption": "AES256"
        }
      }
    }
   ]
}
```

------

**nota**  
A criptografia no lado do servidor criptografa somente os dados de objeto, não os metadados de objeto. 

## Suporte de API para criptografia do lado do servidor
<a name="APISupportforServer-SideEncryption"></a>

Todos os buckets do Amazon S3 têm criptografia configurada por padrão e todos os novos objetos que são carregados em um bucket do S3 são automaticamente criptografados em repouso. A criptografia do lado do servidor com chaves gerenciadas pelo Amazon S3 (SSE-S3) é a configuração de criptografia padrão para todos os buckets no Amazon S3. Para usar um tipo diferente de criptografia, você pode especificar a criptografia do lado do servidor a ser usada nas solicitações `PUT` do S3 ou atualizar a configuração de criptografia padrão no bucket de destino. 

Se quiser especificar um tipo de criptografia diferente nas solicitações `PUT`, você pode usar a criptografia do lado do servidor com chaves do AWS Key Management Service (AWS KMS) (SSE-KMS), criptografia de camada dupla do lado do servidor com chaves do AWS KMS (DSSE-KMS) ou criptografia do lado do servidor com chaves fornecidas pelo cliente (SSE-C). Se quiser definir uma configuração de criptografia padrão diferente no bucket de destino, você pode usar SSE-KMS ou DSSE-KMS.

Para ter mais informações sobre a alteração da configuração padrão de criptografia para buckets de uso geral, consulte [Configurar a criptografia padrão](default-bucket-encryption.md). 

Quando você altera a configuração de criptografia padrão do bucket para SSE-KMS, o tipo de criptografia dos objetos do Amazon S3 existentes no bucket não é alterado. Para alterar o tipo de criptografia de objetos preexistentes depois de atualizar a configuração padrão de criptografia para SSE-KMS, use o recurso Operações em Lote do Amazon S3. Basta fornecer uma lista de objetos ao recurso Operações em Lote do S3 para que ele chame a respectiva operação de API. É possível usar a ação [Copiar objetos](batch-ops-copy-object.md) para copiar objetos existentes, gravando-os de volta no mesmo bucket que os objetos criptografados por SSE-KMS. Um único trabalho do Batch Operations pode realizar a operação especificada em bilhões de objetos. Para ter mais informações, consulte [Executar operações de objetos em massa com o Operações em Lote](batch-ops.md) e a publicação [How to retroactively encrypt existing objects in Amazon S3 using S3 Inventory, Amazon Athena, and S3 Batch Operations](https://aws.amazon.com/blogs/security/how-to-retroactively-encrypt-existing-objects-in-amazon-s3-using-s3-inventory-amazon-athena-and-s3-batch-operations/) do *Blog do AWS Storage*. 

Para configurar a criptografia do lado do servidor usando as APIs REST de criação de objetos, é necessário fornecer o cabeçalho de solicitação `x-amz-server-side-encryption`. Para obter informações sobre as APIs REST, consulte [Uso da API REST](specifying-s3-encryption.md#SSEUsingRESTAPI).

As APIs do Amazon S3 a seguir são compatíveis com este cabeçalho:
+ **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](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html).
+ **Iniciar upload de várias partes**: especifique o cabeçalho na solicitação de inicialização ao fazer upload de objetos grandes usando a operação de API de upload de várias partes. Para obter mais informações, consulte [Iniciar Multipart Upload](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadInitiate.html).
+ **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](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectCOPY.html).

**nota**  
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](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html). 

Os AWS SDKs 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.

Para obter mais informações gerais, consulte [Conceitos do AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html) no *Guia do desenvolvedor do AWS Key Management Service*.

**Topics**
+ [Suporte de API para criptografia do lado do servidor](#APISupportforServer-SideEncryption)
+ [Especificar a criptografia do lado do servidor com chaves gerenciadas pelo Amazon S3 (SSE-S3)](specifying-s3-encryption.md)

# Especificar a criptografia do lado do servidor com chaves gerenciadas pelo Amazon S3 (SSE-S3)
<a name="specifying-s3-encryption"></a>

Todos os buckets do Amazon S3 têm criptografia configurada por padrão e todos os novos objetos que são carregados em um bucket do S3 são automaticamente criptografados em repouso. A criptografia do lado do servidor com chaves gerenciadas pelo Amazon S3 (SSE-S3) é a configuração de criptografia padrão para todos os buckets no Amazon S3. Para usar um tipo diferente de criptografia, você pode especificar a criptografia do lado do servidor a ser usada nas solicitações `PUT` do S3 ou atualizar a configuração de criptografia padrão no bucket de destino. 

Se quiser especificar um tipo de criptografia diferente nas solicitações `PUT`, você pode usar a criptografia do lado do servidor com chaves do AWS Key Management Service (AWS KMS) (SSE-KMS), criptografia de camada dupla do lado do servidor com chaves do AWS KMS (DSSE-KMS) ou criptografia do lado do servidor com chaves fornecidas pelo cliente (SSE-C). Se quiser definir uma configuração de criptografia padrão diferente no bucket de destino, você pode usar SSE-KMS ou DSSE-KMS.

Para ter mais informações sobre a alteração da configuração padrão de criptografia para buckets de uso geral, consulte [Configurar a criptografia padrão](default-bucket-encryption.md). 

Quando você altera a configuração de criptografia padrão do bucket para SSE-KMS, o tipo de criptografia dos objetos do Amazon S3 existentes no bucket não é alterado. Para alterar o tipo de criptografia de objetos preexistentes depois de atualizar a configuração padrão de criptografia para SSE-KMS, use o recurso Operações em Lote do Amazon S3. Basta fornecer uma lista de objetos ao recurso Operações em Lote do S3 para que ele chame a respectiva operação de API. É possível usar a ação [Copiar objetos](batch-ops-copy-object.md) para copiar objetos existentes, gravando-os de volta no mesmo bucket que os objetos criptografados por SSE-KMS. Um único trabalho do Batch Operations pode realizar a operação especificada em bilhões de objetos. Para ter mais informações, consulte [Executar operações de objetos em massa com o Operações em Lote](batch-ops.md) e a publicação [How to retroactively encrypt existing objects in Amazon S3 using S3 Inventory, Amazon Athena, and S3 Batch Operations](https://aws.amazon.com/blogs/security/how-to-retroactively-encrypt-existing-objects-in-amazon-s3-using-s3-inventory-amazon-athena-and-s3-batch-operations/) do *Blog do AWS Storage*. 

Você pode especificar o SSE-S3 usando o console do S3, APIs REST, AWS SDKs e a AWS Command Line Interface (AWS CLI). Para obter mais informações, consulte [Definir o comportamento padrão da criptografia para os buckets do Amazon S3](bucket-encryption.md).

## Usar o console do S3
<a name="add-object-encryption-s3"></a>

Este tópico descreve como definir ou alterar o tipo de criptografia de um objeto usando o Console de gerenciamento da AWS. Ao copiar um objeto usando o console, o Amazon S3 copia o objeto como está. Isso significa que se o objeto de origem é criptografado, o objeto de destino também será criptografado. É possível usar o console para adicionar ou alterar a criptografia para um objeto. 

**nota**  
Você pode alterar a criptografia de um objeto se ele tiver menos de 5 GB. Se o objeto tiver mais de 5 GB, você deve usar a [AWS CLI](mpu-upload-object.md#UsingCLImpUpload) ou [SDKs da AWS](CopyingObjectsMPUapi.md) para alterar a criptografia de um objeto.
Para obter uma lista das permissões adicionais necessárias para alterar a criptografia de um objeto, consulte [Permissões obrigatórias para operações de API do Amazon S3](using-with-s3-policy-actions.md). Para ver exemplos das políticas que concedem essas permissões, consulte [Exemplos de políticas baseadas em identidade para o Amazon S3](example-policies-s3.md).
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. O perfil que altera a propriedade também se torna o proprietário do novo objeto (ou versão do objeto). 

**Para alterar a criptografia de um objeto**

1. Faça login no Console de gerenciamento da AWS e abra o console do Amazon S3 em [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. No painel de navegação, escolha **Buckets** e selecione a guia **Buckets de uso geral**. Acesse o bucket ou pasta do Amazon S3 que contém os objetos que você quer alterar.

1. Marque a caixa de seleção referente aos objetos que você quer alterar.

1. No menu **Ações**, escolha **Editar criptografia no lado do servidor** na lista de opções exibida.

1. Role até a seção **Criptografia do lado do servidor.**

1. Em **Configurações de criptografia**, escolha **Usar configurações de bucket para criptografia padrão** ou **Substituir configurações de bucket para criptografia padrão**.

1. Se você escolher **Substituir configurações do bucket para criptografia padrão**, defina as configurações de criptografia a seguir.

   1. Em **Tipo de criptografia**, escolha **Criptografia do lado do servidor com chaves de criptografia gerenciadas pelo Amazon S3 (SSE-S3)**. A SSE-S3 usa uma das criptografias de bloco mais fortes: o padrão de criptografia avançada de 256 bits (AES-256) para criptografar cada objeto. Para obter mais informações, consulte [Usar a criptografia do lado do servidor com chaves gerenciadas pelo Amazon S3 (SSE-S3)](UsingServerSideEncryption.md).

1. Em **Configurações adicionais de cópia**, escolha se você quer **Copiar configurações de origem**, **Não especificar configurações** ou **Especificar configurações**. **Copiar configurações de origem** é a opção padrão. Se você quiser copiar o objeto somente sem os atributos das configurações de origem, escolha **Não especificar configurações**. Escolha **Especificar configurações** para especificar configurações referentes a classes de armazenamento, ACLs, tags de objeto, metadados, criptografia do lado do servidor e somas de verificação adicionais.

1. Escolha **Salvar alterações**.

**nota**  
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.

## Uso da API REST
<a name="SSEUsingRESTAPI"></a>

No momento da criação do objeto (quando você faz upload de um objeto novo ou faz uma cópia de um objeto existente), é possível especificar se deseja que o Amazon S3 criptografe seus dados com as chaves gerenciadas pelo Amazon S3 (SSE-S3) adicionando o cabeçalho `x-amz-server-side-encryption` à solicitação. Defina o valor do cabeçalho como o algoritmo de criptografia `AES256`, que é compatível com o Amazon S3. O Amazon S3 confirma que o objeto foi armazenado com SSE-S3 retornando o cabeçalho de resposta `x-amz-server-side-encryption`. 

As seguintes operações de APIs de upload REST aceitam o cabeçalho de solicitação `x-amz-server-side-encryption`.
+ [Objeto PUT](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html)
+ [Objeto PUT - Copiar](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectCOPY.html)
+ [Objeto POST](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html)
+ [Iniciar multipart upload](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadInitiate.html)

Ao fazer upload de objetos grandes usando a operação de API de upload de várias partes, você pode especificar a criptografia do lado do servidor adicionando o cabeçalho `x-amz-server-side-encryption` à solicitação Iniciar upload de várias partes. 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 do lado do servidor.

Os cabeçalhos de resposta das operações de API REST a seguir retornam o cabeçalho `x-amz-server-side-encryption` quando um objeto é armazenado usando SSE-S3. 
+ [Objeto PUT](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html)
+ [Objeto PUT - Copiar](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectCOPY.html)
+ [Objeto POST](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html)
+ [Iniciar multipart upload](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadInitiate.html)
+ [Carregar parte](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadUploadPart.html)
+ [Carregamento de parte: copiar](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadUploadPartCopy.html)
+ [Concluir carregamento fracionado](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadComplete.html)
+ [Objeto Get](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGET.html)
+ [Objeto Head](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectHEAD.html)

**nota**  
Não envie cabeçalhos de solicitação de criptografia para solicitações `GET` e `HEAD` se o objeto usa SSE-S3, ou você receberá um erro 400 (Solicitação inválida) de status HTTP.

## Usar SDKs da AWS
<a name="s3-using-sdks"></a>

Ao usar AWS SDKs, é possível solicitar que o Amazon S3 use criptografia do lado do servidor com chaves de criptografia gerenciadas pelo Amazon S3 (SSE-S3). Esta seção fornece exemplos de uso dos AWS SDKs em várias linguagens. Para obter informações sobre outros SDKs, consulte [Código de exemplo e bibliotecas](https://aws.amazon.com/code). 

------
#### [ Java ]

Ao usar o AWS SDK para Java para fazer upload de um objeto, você pode usar SSE-S3 para criptografá-lo. 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 SSE-S3 ao fazer upload de objetos com a operação de API de upload de várias partes: 
+ Ao usar a operação de API de alto nível de upload de várias partes, 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](mpu-upload-object.md).
+ Ao usar a operação de API de upload de várias partes de baixo nível, você especifica a criptografia de servidor ao iniciar o upload de várias partes. Você adiciona a propriedade `ObjectMetadata` chamando o método `InitiateMultipartUploadRequest.setObjectMetadata()`. Para obter mais informações, consulte [Uso dos AWS SDKs (API de baixo nível)](mpu-upload-object.md#mpu-upload-low-level).

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 do lado do servidor usando o AWS SDK para Java. Ele mostra como executar as seguintes tarefas:  
+ Faça upload de um novo objeto usando SSE-S3.
+ Alterar o estado de criptografia de um objeto (neste exemplo, criptografar um objeto anteriormente não criptografado) fazendo uma cópia do objeto.
+ Verificar o estado de criptografia do objeto.
Para obter mais informações sobre criptografia no lado do servidor, consulte [Uso da API REST](#SSEUsingRESTAPI). Consulte instruções sobre como criar e testar uma amostra funcional em [Getting Started](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/getting-started.html) no Guia do desenvolvedor do AWS SDK para Java.  

```
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;

public class SpecifyServerSideEncryption {

    public static void main(String[] args) {
        Regions clientRegion = Regions.DEFAULT_REGION;
        String bucketName = "*** Bucket name ***";
        String keyNameToEncrypt = "*** Key name for an object to upload and encrypt ***";
        String keyNameToCopyAndEncrypt = "*** Key name for an unencrypted object to be encrypted by copying ***";
        String copiedObjectKeyName = "*** Key name for the encrypted copy of the unencrypted object ***";

        try {
            AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
                    .withRegion(clientRegion)
                    .withCredentials(new ProfileCredentialsProvider())
                    .build();

            // Upload an object and encrypt it with SSE.
            uploadObjectWithSSEEncryption(s3Client, bucketName, keyNameToEncrypt);

            // Upload a new unencrypted object, then change its encryption state
            // to encrypted by making a copy.
            changeSSEEncryptionStatusByCopying(s3Client,
                    bucketName,
                    keyNameToCopyAndEncrypt,
                    copiedObjectKeyName);
        } 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();
        }
    }

    private static void uploadObjectWithSSEEncryption(AmazonS3 s3Client, String bucketName, String keyName) {
        String objectContent = "Test object encrypted with SSE";
        byte[] objectBytes = objectContent.getBytes();

        // Specify server-side encryption.
        ObjectMetadata objectMetadata = new ObjectMetadata();
        objectMetadata.setContentLength(objectBytes.length);
        objectMetadata.setSSEAlgorithm(ObjectMetadata.AES_256_SERVER_SIDE_ENCRYPTION);
        PutObjectRequest putRequest = new PutObjectRequest(bucketName,
                keyName,
                new ByteArrayInputStream(objectBytes),
                objectMetadata);

        // Upload the object and check its encryption status.
        PutObjectResult putResult = s3Client.putObject(putRequest);
        System.out.println("Object \"" + keyName + "\" uploaded with SSE.");
        printEncryptionStatus(putResult);
    }

    private static void changeSSEEncryptionStatusByCopying(AmazonS3 s3Client,
            String bucketName,
            String sourceKey,
            String destKey) {
        // Upload a new, unencrypted object.
        PutObjectResult putResult = s3Client.putObject(bucketName, sourceKey, "Object example to encrypt by copying");
        System.out.println("Unencrypted object \"" + sourceKey + "\" uploaded.");
        printEncryptionStatus(putResult);

        // 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.");
    }

    private static void printEncryptionStatus(SSEResultBase response) {
        String encryptionStatus = response.getSSEAlgorithm();
        if (encryptionStatus == null) {
            encryptionStatus = "Not encrypted with SSE";
        }
        System.out.println("Object encryption status is: " + encryptionStatus);
    }
}
```

------
#### [ .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 SSE-S3 no `CopyObjectRequest`, adicione o seguinte:

```
 ServerSideEncryptionMethod = ServerSideEncryptionMethod.AES256
```

Para obter uma amostra funcional de como copiar um objeto, consulte [Usar SDKs da AWS](copy-object.md#CopyingObjectsUsingSDKs). 

O exemplo a seguir faz upload de um objeto. Na solicitação, o exemplo instrui o Amazon S3 a criptografar o objeto. O exemplo então recupera metadados do objeto e verifica o método de criptografia que foi usado. Para obter informações sobre como configurar e executar exemplos de código, consulte [Conceitos básicos do AWS SDK for .NET](https://docs.aws.amazon.com/sdk-for-net/latest/developer-guide/net-dg-setup.html) no *Guia do desenvolvedor do AWS SDK for .NET*. 

```
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;

        public static void Main()
        {
            client = new AmazonS3Client(bucketRegion);
            WritingAnObjectAsync().Wait();
        }

        static async Task WritingAnObjectAsync()
        {
            try
            {
                var putRequest = new PutObjectRequest
                {
                    BucketName = bucketName,
                    Key = keyName,
                    ContentBody = "sample text",
                    ServerSideEncryptionMethod = ServerSideEncryptionMethod.AES256
                };

                var putResponse = await client.PutObjectAsync(putRequest);

                // Determine the encryption state of an object.
                GetObjectMetadataRequest metadataRequest = new GetObjectMetadataRequest
                {
                    BucketName = bucketName,
                    Key = keyName
                };
                GetObjectMetadataResponse response = await client.GetObjectMetadataAsync(metadataRequest);
                ServerSideEncryptionMethod objectEncryption = response.ServerSideEncryptionMethod;

                Console.WriteLine("Encryption method used: {0}", objectEncryption.ToString());
            }
            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);
            }
        }
    }
}
```

------
#### [ PHP ]

Este tópico mostra como usar classes da versão 3 do AWS SDK para PHP para adicionar SSE-S3 a objetos que você carrega no Amazon S3. Para obter mais informações sobre a API do AWS SDK for Ruby, acesse [AWS SDK for Ruby Version 2](https://docs.aws.amazon.com/sdkforruby/api/index.html).

Para fazer upload de um objeto no Amazon S3, use o método [Aws\$1S3\$1S3Client::putObject()](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#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 da API REST](#SSEUsingRESTAPI).

```
 require 'vendor/autoload.php';

use Aws\S3\S3Client;

$bucket = '*** Your Bucket Name ***';
$keyname = '*** Your Object Key ***';

// $filepath should be an absolute path to a file on disk.
$filepath = '*** Your File Path ***';

$s3 = new S3Client([
    'version' => 'latest',
    'region'  => 'us-east-1'
]);

// Upload a file with server-side encryption.
$result = $s3->putObject([
    'Bucket'               => $bucket,
    'Key'                  => $keyname,
    'SourceFile'           => $filepath,
    'ServerSideEncryption' => 'AES256',
]);
```

Em resposta, o Amazon S3 retorna o cabeçalho `x-amz-server-side-encryption` com o valor do algoritmo de criptografia que foi usado para criptografar os dados de objeto. 

Ao fazer upload de objetos grandes usando a operação de API de upload de várias partes, você pode especificar a SSE-S3 para os objetos que estiver carregando, conforme segue: 
+ Ao usar a operação de API de upload de várias partes de baixo nível, especifique a criptografia do lado do servidor ao chamar o método [Aws\$1S3\$1S3Client::createMultipartUpload()](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#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 operação de API de upload de várias partes de baixo nível, consulte [Uso dos AWS SDKs (API de baixo nível)](mpu-upload-object.md#mpu-upload-low-level).
+ Ao usar a operação de API de upload de várias partes de alto nível, especifique a criptografia do lado do servidor usando o parâmetro `ServerSideEncryption` da operação de API [CreateMultipartUpload](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#createmultipartupload). Para ver um exemplo de uso do método `setOption()` com a operação de API de upload de várias partes de alto nível, consulte [Fazer upload de um objeto usando multipart upload](mpu-upload-object.md).

Para determinar o estado de criptografia de um objeto existente, recupere os metadados de objeto chamando o método [Aws\$1S3\$1S3Client::headObject()](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#headobject) conforme exibido no seguinte exemplo de código PHP.

```
 require 'vendor/autoload.php';

use Aws\S3\S3Client;

$bucket = '*** Your Bucket Name ***';
$keyname = '*** Your Object Key ***';

$s3 = new S3Client([
    'version' => 'latest',
    'region'  => 'us-east-1'
]);

// Check which server-side encryption algorithm is used.
$result = $s3->headObject([
    'Bucket' => $bucket,
    'Key'    => $keyname,
]);
echo $result['ServerSideEncryption'];
```

Para alterar o estado de criptografia de um objeto existente, faça uma cópia do objeto usando o método [Aws\$1S3\$1S3Client::copyObject()](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#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 do lado do 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;

$sourceBucket = '*** Your Source Bucket Name ***';
$sourceKeyname = '*** Your Source Object Key ***';

$targetBucket = '*** Your Target Bucket Name ***';
$targetKeyname = '*** Your Target Object Key ***';

$s3 = new S3Client([
    'version' => 'latest',
    'region'  => 'us-east-1'
]);

// Copy an object and add server-side encryption.
$s3->copyObject([
    'Bucket'               => $targetBucket,
    'Key'                  => $targetKeyname,
    'CopySource'           => "$sourceBucket/$sourceKeyname",
    'ServerSideEncryption' => 'AES256',
]);
```

Para saber mais, consulte os seguintes tópicos:
+ [AWS SDK para PHP for Amazon S3, classe Aws\$1S3\$1S3Client](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.S3.S3Client.html) 
+ [AWS SDK para PHP documentação da](https://aws.amazon.com/documentation/sdk-for-php/)

------
#### [ 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 SSE-S3. Ao ler o objeto de volta, ele é descriptografado automaticamente.

O exemplo do 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'

# Wraps Amazon S3 object actions.
class ObjectPutSseWrapper
  attr_reader :object

  # @param object [Aws::S3::Object] An existing Amazon S3 object.
  def initialize(object)
    @object = object
  end

  def put_object_encrypted(object_content, encryption)
    @object.put(body: object_content, server_side_encryption: encryption)
    true
  rescue Aws::Errors::ServiceError => e
    puts "Couldn't put your content to #{object.key}. Here's why: #{e.message}"
    false
  end
end

# Example usage:
def run_demo
  bucket_name = "amzn-s3-demo-bucket"
  object_key = "my-encrypted-content"
  object_content = "This is my super-secret content."
  encryption = "AES256"

  wrapper = ObjectPutSseWrapper.new(Aws::S3::Object.new(bucket_name, object_content))
  return unless wrapper.put_object_encrypted(object_content, encryption)

  puts "Put your content into #{bucket_name}:#{object_key} and encrypted it with #{encryption}."
end

run_demo if $PROGRAM_NAME == __FILE__
```

O exemplo de código a seguir demonstra como determinar o estado de criptografia de um objeto existente.

```
require 'aws-sdk-s3'

# Wraps Amazon S3 object actions.
class ObjectGetEncryptionWrapper
  attr_reader :object

  # @param object [Aws::S3::Object] An existing Amazon S3 object.
  def initialize(object)
    @object = object
  end

  # Gets the object into memory.
  #
  # @return [Aws::S3::Types::GetObjectOutput, nil] The retrieved object data if successful; otherwise nil.
  def object
    @object.get
  rescue Aws::Errors::ServiceError => e
    puts "Couldn't get object #{@object.key}. Here's why: #{e.message}"
  end
end

# Example usage:
def run_demo
  bucket_name = "amzn-s3-demo-bucket"
  object_key = "my-object.txt"

  wrapper = ObjectGetEncryptionWrapper.new(Aws::S3::Object.new(bucket_name, object_key))
  obj_data = wrapper.get_object
  return unless obj_data

  encryption = obj_data.server_side_encryption.nil? ? 'no' : obj_data.server_side_encryption
  puts "Object #{object_key} uses #{encryption} encryption."
end

run_demo if $PROGRAM_NAME == __FILE__
```

Se a criptografia do lado do servidor não for usada para o objeto que é armazenado no Amazon S3, o método retornará `null`.

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 mostrado no seguinte exemplo de código Ruby. O exemplo de código demonstra como copiar um objeto e criptografar a cópia com SSE-S3. 

```
require 'aws-sdk-s3'

# Wraps Amazon S3 object actions.
class ObjectCopyEncryptWrapper
  attr_reader :source_object

  # @param source_object [Aws::S3::Object] An existing Amazon S3 object. This is used as the source object for
  #                                        copy actions.
  def initialize(source_object)
    @source_object = source_object
  end

  # Copy the source object to the specified target bucket, rename it with the target key, and encrypt it.
  #
  # @param target_bucket [Aws::S3::Bucket] An existing Amazon S3 bucket where the object is copied.
  # @param target_object_key [String] The key to give the copy of the object.
  # @return [Aws::S3::Object, nil] The copied object when successful; otherwise, nil.
  def copy_object(target_bucket, target_object_key, encryption)
    @source_object.copy_to(bucket: target_bucket.name, key: target_object_key, server_side_encryption: encryption)
    target_bucket.object(target_object_key)
  rescue Aws::Errors::ServiceError => e
    puts "Couldn't copy #{@source_object.key} to #{target_object_key}. Here's why: #{e.message}"
  end
end

# Example usage:
def run_demo
  source_bucket_name = "amzn-s3-demo-bucket1"
  source_key = "my-source-file.txt"
  target_bucket_name = "amzn-s3-demo-bucket2"
  target_key = "my-target-file.txt"
  target_encryption = "AES256"

  source_bucket = Aws::S3::Bucket.new(source_bucket_name)
  wrapper = ObjectCopyEncryptWrapper.new(source_bucket.object(source_key))
  target_bucket = Aws::S3::Bucket.new(target_bucket_name)
  target_object = wrapper.copy_object(target_bucket, target_key, target_encryption)
  return unless target_object

  puts "Copied #{source_key} from #{source_bucket_name} to #{target_object.bucket_name}:#{target_object.key} and "\
       "encrypted the target with #{target_object.server_side_encryption} encryption."
end

run_demo if $PROGRAM_NAME == __FILE__
```

------

## Como usar o AWS CLI
<a name="sse-s3-aws-cli"></a>

Para especificar a SSE-S3 ao carregar um objeto usando a AWS CLI, use o exemplo a seguir.

```
aws s3api put-object --bucket amzn-s3-demo-bucket1 --key object-key-name --server-side-encryption AES256  --body file path
```

Para obter mais informações, consulte [put-object](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/put-object.html) na *referência da AWS CLI*. Para especificar a SSE-S3 ao copiar um objeto usando a AWS CLI, consulte [copy-object](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/copy-object.html).

## Usar o CloudFormation
<a name="ss3-s3-cfn"></a>

Para obter exemplos de configuração de criptografia usando o CloudFormation, consulte os exemplos [Criar um bucket com criptografia padrão](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-serversideencryptionrule.html#aws-properties-s3-bucket-serversideencryptionrule--examples--Create_a_bucket_with_default_encryption) e [Criar um bucket usando criptografia do lado do servidor do AWS KMS com uma Chave de bucket do S3](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-serversideencryptionrule.html#aws-properties-s3-bucket-serversideencryptionrule--examples--Create_a_bucket_using_AWS_KMS_server-side_encryption_with_an_S3_Bucket_Key) no tópico `AWS::S3::Bucket ServerSideEncryptionRule` do *Guia do usuário do AWS CloudFormation*. 

# Usar criptografia do lado do servidor com o AWS KMS (SSE-KMS)
<a name="UsingKMSEncryption"></a>

**Importante**  
O Amazon S3 agora aplica criptografia do lado do servidor com chaves gerenciadas do Amazon S3 (SSE-S3) como nível básico de criptografia para cada bucket no Amazon S3. Desde 5 de janeiro de 2023, todos os novos uploads de objetos para o Amazon S3 são automaticamente criptografados sem custo adicional e sem impacto na performance. O status de criptografia automática para a configuração de criptografia padrão do bucket do S3 e para novos uploads de objetos está disponível em logs do CloudTrail, no Inventário S3, na Lente de Armazenamento do S3, no console do Amazon S3 e como cabeçalho adicional de resposta da API do Amazon S3 na AWS CLI e em SDKs da AWS. Para obter mais informações, consulte [Perguntas frequentes sobre criptografia padrão](https://docs.aws.amazon.com/AmazonS3/latest/userguide/default-encryption-faq.html).

A criptografia do lado do servidor é a criptografia de dados em seu destino pela aplicação ou serviço que os recebe.

O Amazon S3 ativa automaticamente a criptografia do lado do servidor com chaves gerenciadas pelo Amazon S3 (SSE-S3) para uploads de novos objetos.

A menos que você especifique o contrário, os buckets usam SSE-S3 por padrão para criptografar objetos. No entanto, você pode optar por configurar buckets para usar a criptografia do lado do servidor com chaves do AWS Key Management Service (AWS KMS) (SSE-KMS) em vez disso. Para obter mais informações, consulte [Especificação de criptografia no lado do servidor com o AWS KMS (SSE-KMS)](specifying-kms-encryption.md).

O AWS KMS é um serviço que combina hardware e software seguros e altamente disponíveis para fornecer um sistema de gerenciamento de chaves escalado para a nuvem. O Amazon S3 usa criptografia do lado do servidor com AWS KMS (SSE-KMS) para criptografar os dados do objeto do S3. Além disso, quando a SSE-KMS é solicitada para o objeto, a soma de verificação do S3 (como parte dos metadados do objeto) é armazenada em formato criptografado. Para obter mais informações sobre a soma de verificação, consulte [Verificar a integridade do objeto no Amazon S3](checking-object-integrity.md).

Se você usar chaves do KMS, poderá usar o AWS KMS por meio do [Console de gerenciamento da AWS](https://console.aws.amazon.com/kms) ou da [API do AWS KMS](https://docs.aws.amazon.com/kms/latest/APIReference/) para fazer o seguinte: 
+ Criar, visualizar, editar, monitorar, ativar/desativar, rotacionar e programar a exclusão de chaves KMS, tudo de forma centralizada.
+ Definir políticas que controlam como e por quem as chaves do KMS podem ser usadas.
+ Audite o uso da chave do KMS para verificar se ela está sendo usada corretamente. A auditoria é compatível com a [API do AWS KMS](https://docs.aws.amazon.com/kms/latest/APIReference/), não com o [console do AWS KMS](https://console.aws.amazon.com/kms).



Os controles de segurança do AWS KMS podem ajudá-lo a satisfazer os requisitos de conformidade relacionados à criptografia. Você pode usar essas chaves do KMS para proteger seus dados em buckets do Amazon S3. Ao usar a criptografia SSE-KMS com um bucket do S3, as AWS KMS keys devem estar na mesma região que o bucket.

Não há custos adicionais por usar o AWS KMS keys. Para obter mais informações, consulte [Conceitos de AWS KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#kms_keys) no *Guia do desenvolvedor do AWS Key Management Service* e [Preços do AWS KMS](https://aws.amazon.com/kms/pricing).

Para obter instruções sobre como permitir que os usuários do IAM acessem os buckets criptografados do KMS, consulte [Meu bucket do Amazon S3 tem criptografia padrão usando uma chave personalizada do AWS KMS. Como permitir que os usuários façam download pelo bucket e upload para o bucket?](https://repost.aws/knowledge-center/s3-bucket-access-default-encryption) no Centro de Conhecimento do AWS re:Post.

**Permissões**  
Para fazer uma solicitação `PutObject` bem-sucedida para criptografar um objeto com uma chave do AWS KMS ao Amazon S3, você precisa de permissões `kms:GenerateDataKey` na chave. Para fazer download de um objeto criptografado com uma AWS KMS key, você precisa de permissões `kms:Decrypt` para a chave. Para [realizar um upload fracionado](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html#mpuAndPermissions) a fim de criptografar um objeto com uma AWS KMS key, você precisa das permissões `kms:GenerateDataKey` e `kms:Decrypt` para a chave.

**Importante**  
Analise cuidadosamente as permissões concedidas em suas políticas de chave do KMS. Restrinja sempre as permissões de política de chave do KMS gerenciada pelo cliente somente às entidades principais do IAM e a serviços da AWS que precisam acessar a ação de chave do AWS KMS pertinente. Para saber mais, consulte [Usar políticas de chaves no AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html).

**Topics**
+ [AWS KMS keys](#aws-managed-customer-managed-keys)
+ [Amazon S3 Bucket Keys](#sse-kms-bucket-keys)
+ [Exigir a criptografia no lado do servidor](#require-sse-kms)
+ [Contexto de criptografia](#encryption-context)
+ [Enviar solicitações para objetos criptografados do AWS KMS](#aws-signature-version-4-sse-kms)
+ [Especificação de criptografia no lado do servidor com o AWS KMS (SSE-KMS)](specifying-kms-encryption.md)
+ [Redução do custo do SSE-KMS com chaves de bucket do Amazon S3](bucket-key.md)

## AWS KMS keys
<a name="aws-managed-customer-managed-keys"></a>

Ao usar criptografia do lado do servidor com o AWS KMS (SSE-KMS), você pode usar a [chave gerenciada pela AWS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk) padrão ou especificar uma [chave gerenciada pelo cliente](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk) que você já tenha criado. O AWS KMS é compatível com *criptografia envelopada*. O S3 usa os recursos do AWS KMS de *criptografia envelopada* para proteger ainda mais seus dados. Criptografia envelopada é a prática de criptografar dados de texto simples com uma chave de dados, depois criptografar essa chave de dados com uma chave do KMS. Para ter mais informações sobre a criptografia de envelope, consulte [Criptografia de envelope](https://docs.aws.amazon.com//kms/latest/developerguide/concepts.html#enveloping) no *Guia do desenvolvedor do AWS Key Management Service*.

Se você não especificar uma chave gerenciada pelo cliente, o Amazon S3 criará automaticamente uma Chave gerenciada pela AWS em sua Conta da AWS na primeira vez que você adicionar um objeto criptografado com SSE-KMS a um bucket. Por padrão, o Amazon S3 usa essa chave do KMS para SSE-KMS. 

**nota**  
Objetos criptografados usando SSE-KMS com [Chaves gerenciadas pela AWS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk) não podem ser compartilhados entre contas. Se você precisar replicar dados de SSE-KMS entre contas, será necessário usar uma [chave gerenciada pelo cliente](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk) do AWS KMS. 

Se você quiser usar uma chave gerenciada pelo cliente para SSE-KMS, crie uma chave de criptografia simétrica gerenciada pelo cliente antes de configurar a SSE-KMS. Depois, ao configurar o SSE-KMS para seu bucket, especifique a chave gerenciada pelo cliente existente. Para obter mais informações sobre chaves de criptografia simétrica, consulte [Chaves do KMS de criptografia simétrica](https://docs.aws.amazon.com//kms/latest/developerguide/concepts.html#symmetric-cmks), no *Guia do desenvolvedor do AWS Key Management Service*.

A criação de uma chave gerenciada pelo cliente oferece a você mais flexibilidade e controle. Por exemplo, você pode criar, alternar e desabilitar chaves gerenciadas pelo cliente. Você também pode definir controles de acesso e auditar a chave gerenciada pelo cliente que você usa para proteger seus dados. Para obter mais informações sobre chaves gerenciadas pelo cliente e pela AWS, consulte [Chaves de clientes e chaves da AWS](https://docs.aws.amazon.com//kms/latest/developerguide/concepts.html#key-mgmt) no *Guia do desenvolvedor do AWS Key Management Service*.

**nota**  
Ao usar a criptografia do lado do servidor com uma chave gerenciada pelo cliente que é armazenada em um armazenamento de chaves externo, ao contrário das chaves do KMS padrão, você é responsável por garantir a disponibilidade e a durabilidade do seu material de chaves. Para obter mais informações sobre armazenamentos de chaves externos e como eles mudam o modelo de responsabilidade compartilhada, consulte [Armazenamentos de chaves externos](https://docs.aws.amazon.com//kms/latest/developerguide/keystore-external.html) no *Guia do desenvolvedor do AWS Key Management Service*.

### Usar criptografia SSE-KMS para operações entre contas
<a name="sse-kms-cross-account-operations"></a>

Ao utilizar a criptografia para operações entre contas, esteja ciente do seguinte:
+ Se o nome do recurso da Amazon (ARN) ou alias da AWS KMS key não for fornecido no momento da solicitação nem por meio da configuração de criptografia padrão do bucket, a Chave gerenciada pela AWS (`aws/s3`) da conta que está fazendo upload será utilizada para criptografia e será necessária para a operação de descriptografia.
+ A Chave gerenciada pela AWS (`aws/s3`) pode ser usada como chave do KMS para operações entre contas quando as entidades principais do AWS Identity and Access Management (IAM) que estão fazendo upload e acessando são da mesma Conta da AWS.
+ Se quiser conceder acesso entre contas aos seus objetos do S3, use uma chave gerenciada pelo cliente. Você pode configurar a política de uma chave gerenciada pelo cliente para permitir o acesso de outra conta.
+ Se estiver especificando uma chave do KMS gerenciada pelo cliente, recomendamos usar um ARN de chave do KMS totalmente qualificado. Se você usar um alias da chave do KMS, o AWS KMS resolverá a chave na conta do solicitante. Isso pode resultar em dados criptografados com uma chave do KMS pertencente ao solicitante, e não ao proprietário do bucket.
+ É necessário especificar uma chave para a qual você (o solicitante) recebeu a permissão `Encrypt`. Para ter mais informações, consulte [Permitir que os usuários da chave usem uma chave do KMS para operações criptográficas](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html#key-policy-users-crypto) no *Guia do desenvolvedor do AWS Key Management Service*.

Para ter mais informações sobre quando usar as chaves gerenciadas pelo cliente e as chaves do KMS gerenciadas pela AWS, consulte [Devo usar uma Chave gerenciada pela AWS ou uma chave pelo cliente para criptografar meus objetos no Amazon S3?](https://aws.amazon.com/premiumsupport/knowledge-center/s3-object-encryption-keys/)

### Fluxo de trabalho de criptografia SSE-KMS
<a name="sse-kms-encryption-workflow"></a>

Se você optar por criptografar seus dados usando uma Chave gerenciada pela AWS ou uma chave gerenciada pelo cliente, o AWS KMS e o Amazon S3 realizarão as seguintes ações de criptografia envelopada:

1. O Amazon S3 solicitará uma [chave de dados](https://docs.aws.amazon.com//kms/latest/developerguide/concepts.html#data-keys) em texto simples e uma cópia da chave criptografada na chave do KMS especificada.

1. AWS KMSO gera uma chave de dados, criptografa-a com a chave do KMS e envia a chave de dados em texto simples e a chave de dados criptografada ao Amazon S3.

1. O Amazon S3 criptografa os dados usando a chave de dados e remove a chave de texto não criptografado da memória assim que possível, após o uso.

1. O Amazon S3 armazena a chave de dados criptografada como metadados com os dados criptografados.

Quando você solicitar que os dados sejam descriptografados, o Amazon S3 e o AWS KMS farão o seguinte:

1. O Amazon S3 envia a chave de dados criptografada ao AWS KMS em uma solicitação `Decrypt`.

1. O AWS KMS descriptografa a chave dos dados criptografados usando a mesma chave do KMS e retorna a chave de dados de texto simples para o Amazon S3.

1. O Amazon S3 descriptografa os dados criptografados usando a chave de dados de texto simples e remove a chave de dados de texto simples da memória o quanto antes.

**Importante**  
Ao usar uma AWS KMS key para criptografia no lado do servidor no Amazon S3, você deve escolher uma chave de criptografia do KMS simétrica. O Amazon S3 só é compatível com chaves do KMS de criptografia simétrica. Para obter mais informações sobre essas chaves, consulte [Chaves do KMS de criptografia simétrica](https://docs.aws.amazon.com//kms/latest/developerguide/concepts.html#symmetric-cmks) no *Guia do desenvolvedor do AWS Key Management Service*.

### Auditoria da criptografia SSE-KMS
<a name="sse-kms-encryption-audit"></a>

Para identificar solicitações que especificam SSE-KMS, você pode usar as métricas **All SSE-KMS requests** (Todas as solicitações de SSE-KMS) e **% all SSE-KMS requests** (% de todas as solicitações de SSE-KMS) da Lente de Armazenamento do Amazon S3. A Lente de Armazenamento do S3 é um recurso de análise de armazenamento em nuvem que você pode usar para obter visibilidade em toda a organização sobre o uso e a atividade do armazenamento de objetos. Você também pode usar a contagem de buckets habilitada para SSE-KMS e a porcentagem de buckets habilitados para (SSE-KMS) para a [criptografia de bucket padrão](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-encryption.html). Para obter mais informações, consulte [ Avaliar a atividade e o uso do armazenamento com o S3 Storage Lens](https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage_lens.html?icmpid=docs_s3_user_guide_UsingKMSEncryption.html). Para obter uma lista completa de métricas, consulte o [Glossário de métricas da Lente de Armazenamento do S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage_lens_metrics_glossary.html?icmpid=docs_s3_user_guide_UsingKMSEncryption.html).

Para auditar o uso das chaves do AWS KMS para seus dados criptografados por SSE-KMS, você pode usar logs do AWS CloudTrail. Você pode obter informações sobre suas [operações criptográficas](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#cryptographic-operations), como [https://docs.aws.amazon.com/kms/latest/developerguide/ct-generatedatakey.html](https://docs.aws.amazon.com/kms/latest/developerguide/ct-generatedatakey.html) e [https://docs.aws.amazon.com/kms/latest/developerguide/ct-decrypt.html](https://docs.aws.amazon.com/kms/latest/developerguide/ct-decrypt.html). O CloudTrail oferece suporte a vários [valores de atributos](https://docs.aws.amazon.com/awscloudtrail/latest/APIReference/API_LookupEvents.html) para filtrar a pesquisa, como nome do evento, nome de usuário e origem do evento. 

## Amazon S3 Bucket Keys
<a name="sse-kms-bucket-keys"></a>

Ao configurar a criptografia do lado do servidor usando o AWS KMS (SSE-KMS), você pode configurar os buckets para usar chaves de bucket do S3 para SSE-KMS. Usar uma chave em nível de bucket para SSE-KMS pode reduzir os custos de solicitação do AWS KMS em até 99% ao reduzir o tráfego de solicitação do Amazon S3 para o AWS KMS. 

Quando você configura o bucket para usar uma chave 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](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#data-keys) exclusivas para objetos no bucket. Essa chave de bucket do S3 é 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](bucket-key.md).

## Exigir a criptografia no lado do servidor
<a name="require-sse-kms"></a>

Para exigir criptografia do lado do servidor de todos os objetos em um bucket específico do Amazon S3, é possível usar uma política de bucket. Por exemplo, a política de bucket a seguir negará permissão de upload de objeto (`s3:PutObject`) para todos se a solicitação não incluir um cabeçalho `x-amz-server-side-encryption-aws-kms-key-id` que solicita criptografia do lado do servidor com a SSE-KMS.

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Id":"PutObjectPolicy",
   "Statement":[{
         "Sid":"DenyObjectsThatAreNotSSEKMS",
         "Effect":"Deny",
         "Principal":"*",
         "Action":"s3:PutObject",
         "Resource":"arn:aws:s3:::amzn-s3-demo-bucket1/*",
         "Condition":{
            "Null":{
               "s3:x-amz-server-side-encryption-aws-kms-key-id":"true"
            }
         }
      }
   ]
}
```

------

Para exigir que uma AWS KMS key 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 chave do KMS, é necessário usar um nome do recurso da Amazon (ARN) da chave no formato `arn:aws:kms:region:acct-id:key/key-id`. O AWS Identity and Access Management não validará se a string para `s3:x-amz-server-side-encryption-aws-kms-key-id` existe. 

**nota**  
Ao fazer upload de um objeto, é possível especificar a chave do KMS usando o cabeçalho `x-amz-server-side-encryption-aws-kms-key-id` ou confiar na [configuração de criptografia de bucket padrão](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-encryption.html). Se sua solicitação PutObject especificar `aws:kms` no cabeçalho `x-amz-server-side-encryption`, mas não especificar o cabeçalho `x-amz-server-side-encryption-aws-kms-key-id`, o Amazon S3 presumirá que você deseja usar o Chave gerenciada pela AWS. No entanto, o ID de chave do AWS KMS que o Amazon S3 usa para a criptografia de objetos deve corresponder ao ID de chave do AWS KMS na política. Caso contrário, o Amazon S3 negará a solicitação.

Consulte uma lista completa de chaves de condição específicas do Amazon S3 em [Condition keys for Amazon S3](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html#amazons3-policy-keys) na *Referência de autorização do serviço*.

## Contexto de criptografia
<a name="encryption-context"></a>

Um *contexto de criptografia* é um conjunto de pares chave-valor que contém informações contextuais adicionais sobre os dados. O contexto de criptografia não é criptografado. Quando um contexto de criptografia é especificado para uma operação criptográfica, o Amazon S3 deve especificar o mesmo contexto de criptografia da operação de descriptografia. Caso contrário, a descriptografia falhará. O AWS KMS usa o contexto de criptografia como [dados autenticados adicionais](https://docs.aws.amazon.com/database-encryption-sdk/latest/devguide/concepts.html#digital-sigs) (AAD) para oferecer suporte à [criptografia autenticada](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#cryptographic-operations#digital-sigs). Para obter mais informações sobre o contexto de criptografia, consulte [Contexto de criptografia](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context) no *Guia do desenvolvedor do AWS Key Management Service*. 

Por padrão, o Amazon S3 usa o nome do recurso da Amazon (ARN) do objeto ou do bucket como o par de contexto de criptografia: 
+ **Se você usar o SSE-KMS sem habilitar uma chave de bucket do S3**, o ARN do objeto será usado como o contexto de criptografia.

  ```
  arn:aws:s3:::object_ARN
  ```
+ **Se você usar o SSE-KMS e habilitar uma chave de bucket do S3**, o ARN do bucket será usado como o contexto de criptografia. 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](bucket-key.md).

  ```
  arn:aws:s3:::bucket_ARN
  ```

Opcionalmente, você pode fornecer um par de contexto de criptografia adicional usando o cabeçalho `x-amz-server-side-encryption-context` em uma solicitação [s3:PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html#API_PutObject_RequestSyntax). No entanto, como o contexto de criptografia não é criptografado, ele não deve incluir informações sigilosas. O Amazon S3 armazena esse par de chaves adicional junto com o contexto de criptografia padrão. Ao processar sua solicitação `PUT`, o Amazon S3 acrescenta o contexto de criptografia padrão de `aws:s3:arn` àquele fornecido por você. 

É possível usar o contexto de criptografia para identificar e categorizar suas operações de criptografia. Você também pode usar o valor do ARN do contexto de criptografia padrão para rastrear solicitações relevantes no AWS CloudTrail visualizando qual ARN do Amazon S3 foi usado com qual chave de criptografia.

No campo `requestParameters` de um arquivo de log do CloudTrail, o contexto de criptografia é parecido com este. 

```
"encryptionContext": {
    "aws:s3:arn": "arn:aws:s3:::amzn-s3-demo-bucket1/file_name"
}
```

Quando você usa o SSE-KMS com o recurso opcional S3 Bucket Keys, o valor do contexto de criptografia é o ARN do bucket.

```
"encryptionContext": {
    "aws:s3:arn": "arn:aws:s3:::amzn-s3-demo-bucket1"
}
```

## Enviar solicitações para objetos criptografados do AWS KMS
<a name="aws-signature-version-4-sse-kms"></a>

**Importante**  
Todas as solicitações `GET` e `PUT` para objetos criptografados do AWS KMS devem ser criadas usando Secure Sockets Layer (SSL) ou Transport Layer Security (TLS). As solicitações também devem ser assinadas usando credenciais válidas, como AWS Signature Version 4 (ou AWS Signature Version 2).

O AWS Signature Version 4 é o processo de adicionar informações de autenticação às solicitações da AWS enviadas por HTTP. Por segurança, a maioria das solicitações para AWS deve ser assinada com uma chave de acesso, que consiste em um ID de chave de acesso e na chave de acesso secreta. Essas duas chaves são comumente conhecidas como suas credenciais de segurança. Para obter mais informações, consulte [Autenticação de solicitações (AWS Signature Version 4)](https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html) e [Processo de assinatura do Signature Version 4](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html).

**Importante**  
Se o objeto usar SSE-KMS, não envie cabeçalhos de solicitação de criptografia para solicitações `GET` e solicitações `HEAD`. Caso contrário, você receberá um erro HTTP 400 Solicitação Inválida.

**Topics**
+ [AWS KMS keys](#aws-managed-customer-managed-keys)
+ [Amazon S3 Bucket Keys](#sse-kms-bucket-keys)
+ [Exigir a criptografia no lado do servidor](#require-sse-kms)
+ [Contexto de criptografia](#encryption-context)
+ [Enviar solicitações para objetos criptografados do AWS KMS](#aws-signature-version-4-sse-kms)
+ [Especificação de criptografia no lado do servidor com o AWS KMS (SSE-KMS)](specifying-kms-encryption.md)
+ [Redução do custo do SSE-KMS com chaves de bucket do Amazon S3](bucket-key.md)

# Especificação de criptografia no lado do servidor com o AWS KMS (SSE-KMS)
<a name="specifying-kms-encryption"></a>

Todos os buckets do Amazon S3 têm criptografia configurada por padrão e todos os novos objetos que são carregados em um bucket do S3 são automaticamente criptografados em repouso. A criptografia do lado do servidor com chaves gerenciadas pelo Amazon S3 (SSE-S3) é a configuração de criptografia padrão para todos os buckets no Amazon S3. Para usar um tipo diferente de criptografia, você pode especificar a criptografia do lado do servidor a ser usada nas solicitações `PUT` do S3 ou atualizar a configuração de criptografia padrão no bucket de destino. 

Se quiser especificar um tipo de criptografia diferente nas solicitações `PUT`, você pode usar a criptografia do lado do servidor com chaves do AWS Key Management Service (AWS KMS) (SSE-KMS), criptografia de camada dupla do lado do servidor com chaves do AWS KMS (DSSE-KMS) ou criptografia do lado do servidor com chaves fornecidas pelo cliente (SSE-C). Se quiser definir uma configuração de criptografia padrão diferente no bucket de destino, você pode usar SSE-KMS ou DSSE-KMS.

Para ter mais informações sobre a alteração da configuração padrão de criptografia para buckets de uso geral, consulte [Configurar a criptografia padrão](default-bucket-encryption.md). 

Quando você altera a configuração de criptografia padrão do bucket para SSE-KMS, o tipo de criptografia dos objetos do Amazon S3 existentes no bucket não é alterado. Para alterar o tipo de criptografia de objetos preexistentes depois de atualizar a configuração padrão de criptografia para SSE-KMS, use o recurso Operações em Lote do Amazon S3. Basta fornecer uma lista de objetos ao recurso Operações em Lote do S3 para que ele chame a respectiva operação de API. É possível usar a ação [Copiar objetos](batch-ops-copy-object.md) para copiar objetos existentes, gravando-os de volta no mesmo bucket que os objetos criptografados por SSE-KMS. Um único trabalho do Batch Operations pode realizar a operação especificada em bilhões de objetos. Para ter mais informações, consulte [Executar operações de objetos em massa com o Operações em Lote](batch-ops.md) e a publicação [How to retroactively encrypt existing objects in Amazon S3 using S3 Inventory, Amazon Athena, and S3 Batch Operations](https://aws.amazon.com/blogs/security/how-to-retroactively-encrypt-existing-objects-in-amazon-s3-using-s3-inventory-amazon-athena-and-s3-batch-operations/) do *Blog do AWS Storage*. 

Você pode especificar a SSE-KMS usando o console do Amazon S3, operações da API REST, AWS SDKs e a AWS Command Line Interface (AWS CLI). Para obter mais informações, consulte os tópicos a seguir. 

**nota**  
Você pode usar uma AWS KMS keys de várias regiões no Amazon S3. No entanto, o Amazon S3 trata no momento as chaves de várias regiões como se fossem chaves de região única e não usa os recursos de várias regiões da chave. Consulte mais informações em [Using multi-Region keys](https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html) no *Guia do desenvolvedor do AWS Key Management Service*.

**nota**  
Se quiser usar uma chave do KMS que seja de propriedade de outra conta, você deverá ter permissão para usar a chave. Para obter mais informações sobre permissões entre contas para chaves do KMS, consulte [Criar chaves do KMS que outras contas podem usar](https://docs.aws.amazon.com//kms/latest/developerguide/key-policy-modifying-external-accounts.html#cross-account-console) no *Guia do desenvolvedor do AWS Key Management Service*. 

## Usar o console do S3
<a name="add-object-encryption-kms"></a>

Este tópico descreve como definir ou alterar o tipo de criptografia de um objeto para usar criptografia do lado do servidor com chaves do AWS Key Management Service (AWS KMS) (SSE-KMS) usando o console do Amazon S3.

**nota**  
Você pode alterar a criptografia de um objeto se ele tiver menos de 5 GB. Se o objeto tiver mais de 5 GB, você deve usar a [AWS CLI](mpu-upload-object.md#UsingCLImpUpload) ou [SDKs da AWS](CopyingObjectsMPUapi.md) para alterar a criptografia de um objeto.
Para obter uma lista das permissões adicionais necessárias para alterar a criptografia de um objeto, consulte [Permissões obrigatórias para operações de API do Amazon S3](using-with-s3-policy-actions.md). Para ver exemplos das políticas que concedem essas permissões, consulte [Exemplos de políticas baseadas em identidade para o Amazon S3](example-policies-s3.md).
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. O perfil que altera a propriedade também se torna o proprietário do novo objeto (ou versão do objeto). 

**Como adicionar ou alterar a criptografia de um objeto**

1. Faça login no Console de gerenciamento da AWS e abra o console do Amazon S3 em [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. No painel de navegação, escolha **Buckets** e selecione a guia **Buckets de uso geral**. Acesse o bucket ou pasta do Amazon S3 que contém os objetos que você quer alterar.

1. Marque a caixa de seleção referente aos objetos que você quer alterar.

1. No menu **Ações**, escolha **Editar criptografia no lado do servidor** na lista de opções exibida.

1. Role até a seção **Criptografia do lado do servidor.**

1. Em **Configurações de criptografia**, escolha **Usar configurações de bucket para criptografia padrão** ou **Substituir configurações de bucket para criptografia padrão**.
**Importante**  
Se você usar a opção SSE-KMS em sua configuração de criptografia padrão, estará sujeito às cotas de solicitações por segundo (RPS) do AWS KMS. Para obter mais informações sobre as cotas do AWS KMS e como solicitar um aumento de cota, consulte [Cotas](https://docs.aws.amazon.com/kms/latest/developerguide/limits.html) no *Guia do desenvolvedor do AWS Key Management Service*. 

1. Se você escolher **Substituir configurações do bucket para criptografia padrão**, defina as configurações de criptografia a seguir.

   1. Em **Tipo de criptografia**, escolha **Criptografia do lado do servidor com chaves do AWS Key Management Service (SSE-KMS)**.

   1. Em **Chave do AWS KMS**, realize um dos seguintes procedimentos para escolher sua chave do KMS:
      + Para escolher entre uma lista de chaves do KMS disponíveis, selecione **Escolher de sua AWS KMS keys** e escolha a **chave do KMS** na lista de chaves disponíveis.

        As chaves Chave gerenciada pela AWS (`aws/s3`) e as chaves gerenciadas pelo cliente são exibidas nessa lista. Para ter mais informações sobre chaves gerenciadas pelo cliente, consulte [Chaves de clientes e chaves da AWS](https://docs.aws.amazon.com//kms/latest/developerguide/concepts.html#key-mgmt) no *Guia do desenvolvedor do AWS Key Management Service*.
      + Para inserir o ARN da chave do KMS, selecione **Inserir ARN da AWS KMS key** e insira o ARN da chave do KMS no campo exibido. 
      + Para criar uma chave gerenciada pelo cliente no console do AWS KMS, selecione **Criar uma chave do KMS**.

        Para ter mais informações sobre como criar uma AWS KMS key, consulte [Criação de chaves](https://docs.aws.amazon.com//kms/latest/developerguide/create-keys.html) no * Guia do desenvolvedor do AWS Key Management Service*.
**Importante**  
Você só pode usar chaves do KMS disponíveis na mesma Região da AWS que o bucket. O console do Amazon S3 lista somente as primeiras 100 chaves do KMS na mesma região que o bucket. Para usar uma chave do KMS que não esteja listada, você deve inserir o ARN da chave do KMS. Se quiser usar uma chave do KMS que seja de propriedade de outra conta, primeiro você deverá ter permissão para usar a chave e, depois, inserir o ARN da chave do KMS.  
O Amazon S3 só é compatível com chaves do KMS de criptografia simétrica, e não com chaves assimétricas do KMS. Para ter mais informações, consulte [Identificar chaves do KMS simétricas e assimétricas](https://docs.aws.amazon.com//kms/latest/developerguide/find-symm-asymm.html) no *Guia do desenvolvedor do AWS Key Management Service*.

1. Em **Configurações adicionais de cópia**, escolha se você quer **Copiar configurações de origem**, **Não especificar configurações** ou **Especificar configurações**. **Copiar configurações de origem** é a opção padrão. Se você quiser copiar o objeto somente sem os atributos das configurações de origem, escolha **Não especificar configurações**. Escolha **Especificar configurações** para especificar configurações referentes a classes de armazenamento, ACLs, tags de objeto, metadados, criptografia do lado do servidor e somas de verificação adicionais.

1. Escolha **Salvar alterações**.

**nota**  
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.

## Uso da API REST
<a name="KMSUsingRESTAPI"></a>

Quando você cria um objeto, ou seja, quando você faz upload de um novo objeto ou copia um objeto existente, é possível especificar a utilização de criptografia do lado do servidor com AWS KMS keys (SSE-KMS) para criptografar os 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`. 

Se você especificar o cabeçalho `x-amz-server-side-encryption` com um valor de `aws:kms`, também poderá usar os seguintes cabeçalhos de solicitação:
+ `x-amz-server-side-encryption-aws-kms-key-id`
+ `x-amz-server-side-encryption-context`
+ `x-amz-server-side-encryption-bucket-key-enabled`

**Topics**
+ [Operações da API REST do Amazon S3 compatíveis com SSE-KMS](#sse-request-headers-kms)
+ [Contexto de criptografia (`x-amz-server-side-encryption-context`)](#s3-kms-encryption-context)
+ [ID da chave do AWS KMS (`x-amz-server-side-encryption-aws-kms-key-id`)](#s3-kms-key-id-api)
+ [Chaves de bucket do S3 (`x-amz-server-side-encryption-aws-bucket-key-enabled`)](#bucket-key-api)

### Operações da API REST do Amazon S3 compatíveis com SSE-KMS
<a name="sse-request-headers-kms"></a>

As seguintes operações da API REST aceitam os cabeçalhos de solicitação `x-amz-server-side-encryption`, `x-amz-server-side-encryption-aws-kms-key-id`, e `x-amz-server-side-encryption-context`.
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html): ao carregar dados usando a operação de API`PUT`, é possível especificar esses cabeçalhos de solicitação. 
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html) – quando você copia um objeto, há um objeto de origem e um objeto de destino. Ao transmitir cabeçalhos de SSE-KMS com a operação `CopyObject`, 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 do lado do servidor.
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html): 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.
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html) – ao fazer upload de objetos grandes usando a operação de API de upload multiparte, você pode especificar esses cabeçalhos. Esses cabeçalhos são especificados na solicitação `CreateMultipartUpload`.

Os cabeçalhos de resposta das operações de API REST a seguir retornam o cabeçalho `x-amz-server-side-encryption` quando um objeto é armazenado usando criptografia de servidor.
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html)

**Importante**  
Todas as solicitações `GET` e `PUT` para um objeto protegido por AWS KMS falharão se elas não forem feitas usando Secure Sockets Layer (SSL), Transport Layer Security (TLS) ou Signature Version 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.

### Contexto de criptografia (`x-amz-server-side-encryption-context`)
<a name="s3-kms-encryption-context"></a>

Se você especificar `x-amz-server-side-encryption:aws:kms`, a API do 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 de pares chave-valor que contém informações contextuais adicionais sobre os dados.

O Amazon S3 usa automaticamente o nome do recurso da Amazon (ARN) do objeto ou bucket como o par de 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`. 

Você também pode fornecer um par adicional de contexto de criptografia usando o cabeçalho `x-amz-server-side-encryption-context`. No entanto, como o contexto de criptografia não é criptografado, ele não deve incluir informações sigilosas. O Amazon S3 armazena esse par de chaves adicional junto com o contexto de criptografia padrão.

Para obter informações sobre o contexto de criptografia no Amazon S3, consulte [Contexto de criptografia](UsingKMSEncryption.md#encryption-context). Para obter informações gerais sobre o contexto de criptografia, consulte [Conceitos do AWS Key Management Service: contexto de criptografia](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context) no *Guia do desenvolvedor do AWS Key Management Service*. 

### ID da chave do AWS KMS (`x-amz-server-side-encryption-aws-kms-key-id`)
<a name="s3-kms-key-id-api"></a>

Você pode usar o cabeçalho `x-amz-server-side-encryption-aws-kms-key-id` para especificar o ID da chave gerenciada pelo cliente usada para proteger os dados. Se você especificar o cabeçalho `x-amz-server-side-encryption:aws:kms`, mas não fornecer o cabeçalho `x-amz-server-side-encryption-aws-kms-key-id`, o Amazon S3 usará a Chave gerenciada pela AWS (`aws/s3`) para proteger os dados. Se desejar usar uma chave gerenciada pelo cliente, você deve fornecer o cabeçalho `x-amz-server-side-encryption-aws-kms-key-id` da chave gerenciada pelo cliente.

**Importante**  
Ao usar uma AWS KMS key para criptografia no lado do servidor no Amazon S3, você deve escolher uma chave de criptografia do KMS simétrica. O Amazon S3 só é compatível com chaves do KMS de criptografia simétrica. Para obter mais informações sobre essas chaves, consulte [Chaves do KMS de criptografia simétrica](https://docs.aws.amazon.com//kms/latest/developerguide/concepts.html#symmetric-cmks) no *Guia do desenvolvedor do AWS Key Management Service*.

### Chaves de bucket do S3 (`x-amz-server-side-encryption-aws-bucket-key-enabled`)
<a name="bucket-key-api"></a>

Você pode usar o cabeçalho da solicitação `x-amz-server-side-encryption-aws-bucket-key-enabled` para habilitar ou desabilitar uma chave de bucket do S3 ao nível do objeto. As chaves de bucket do S3 podem reduzir os custos de solicitação do AWS KMS diminuindo o tráfego de solicitação 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](bucket-key.md).

Se você especificar o cabeçalho `x-amz-server-side-encryption:aws:kms`, mas não fornecer o cabeçalho `x-amz-server-side-encryption-aws-bucket-key-enabled`, o objeto usará as configurações da chave de bucket do S3 para o bucket de destino para criptografar seu objeto. Para obter mais informações, consulte [Configurar uma chave de bucket do S3 no nível de objeto](configuring-bucket-key-object.md).

## Usar a AWS CLI
<a name="KMSUsingCLI"></a>

Para usar os exemplos de comandos da AWS CLI a seguir, substitua os `user input placeholders` por suas próprias informações.

Ao fazer upload de um novo objeto ou copiar um objeto existente, ou seja, você pode especificar a utilização de criptografia do lado do servidor com chaves do AWS KMS para criptografar seus dados. Para fazer isso, adicione o cabeçalho `--server-side-encryption aws:kms` à solicitação. Use `--ssekms-key-id example-key-id` para adicionar a [chave do AWS KMS gerenciada pelo cliente](https://docs.aws.amazon.com//kms/latest/developerguide/concepts.html#customer-cmk) que você criou. Se você especificar `--server-side-encryption aws:kms`, mas não fornecer um ID de chave do AWS KMS, o Amazon S3 usará uma chave gerenciada pela AWS.

```
aws s3api put-object --bucket amzn-s3-demo-bucket --key example-object-key --server-side-encryption aws:kms --ssekms-key-id example-key-id --body filepath
```

Além disso, você pode ativar ou desativar as chaves de bucket do Amazon S3 nas operações PUT ou COPY adicionando `--bucket-key-enabled` ou `--no-bucket-key-enabled`. As chaves de bucket do Amazon S3 podem reduzir os custos de solicitação do AWS KMS diminuindo o tráfego de solicitação do Amazon S3 para o AWS KMS. Para obter mais informações, consulte [Reduzir o custo da SSE-KMS usando chaves de bucket do Amazon S3](https://docs.aws.amazon.com//AmazonS3/latest/userguide/bucket-key.html).

```
aws s3api put-object --bucket amzn-s3-demo-bucket --key example-object-key --server-side-encryption aws:kms --bucket-key-enabled --body filepath
```

Você pode criptografar um objeto não criptografado para usar a SSE-KMS copiando o objeto de volta no lugar.

```
aws s3api copy-object --bucket amzn-s3-demo-bucket --key example-object-key --body filepath --bucket amzn-s3-demo-bucket --key example-object-key --sse aws:kms --sse-kms-key-id example-key-id --body filepath
```

## Usar SDKs da AWS
<a name="kms-using-sdks"></a>

Ao usar AWS SDKs, é possível solicitar que o Amazon S3 use AWS KMS keys para criptografia do lado do servidor. Os exemplos a seguir mostram como usar a SSE-KMS com os AWS SDKs para Java e .NET. Para obter informações sobre outros SDKs, consulte [Código de exemplo e bibliotecas](https://aws.amazon.com/code) no Centro do desenvolvedor da AWS.

**Importante**  
Ao usar uma AWS KMS key para criptografia no lado do servidor no Amazon S3, você deve escolher uma chave de criptografia do KMS simétrica. O Amazon S3 só é compatível com chaves do KMS de criptografia simétrica. Para obter mais informações sobre essas chaves, consulte [Chaves do KMS de criptografia simétrica](https://docs.aws.amazon.com//kms/latest/developerguide/concepts.html#symmetric-cmks) no *Guia do desenvolvedor do AWS Key Management Service*.

### `CopyObject`Operação do
<a name="kms-copy-operation"></a>

Ao copiar objetos, você adiciona as mesmas propriedades de solicitação (`ServerSideEncryptionMethod` e `ServerSideEncryptionKeyManagementServiceKeyId`) para solicitar ao Amazon S3 que utilize uma AWS KMS key. Para obter mais informações sobre cópia de objetos, consulte [Copiar, mover e renomear objetos](copy-object.md). 

### `PUT`Operação do
<a name="kms-put-operation"></a>

------
#### [ Java ]

Ao fazer upload de um objeto usando o AWS SDK para Java, você pode solicitar que o Amazon S3 use uma AWS KMS key adicionando a propriedade `SSEAwsKeyManagementParams`, conforme exibido na seguinte solicitação:

```
PutObjectRequest putRequest = new PutObjectRequest(bucketName,
   keyName, file).withSSEAwsKeyManagementParams(new SSEAwsKeyManagementParams());
```

Nesse caso, o Amazon S3 usa a Chave gerenciada pela AWS (`aws/s3`). Para obter mais informações, consulte [Usar criptografia do lado do servidor com o AWS KMS (SSE-KMS)](UsingKMSEncryption.md). Como opção, é possível criar uma chave de criptografia simétrica do KMS e especificar isso na solicitação, conforme mostrado no seguinte exemplo:

```
PutObjectRequest putRequest = new PutObjectRequest(bucketName,
   keyName, file).withSSEAwsKeyManagementParams(new SSEAwsKeyManagementParams(keyID));
```

Para obter mais informações sobre como criar chaves gerenciadas pelo cliente, consulte [Programação da API do AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/programming-top.html) 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. Para usar esses exemplos, é necessário atualizar os 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](upload-objects.md).
+ Para uploads multiparte que usam as operações de API de upload multiparte de alto ou baixo nível, consulte [Fazer upload de um objeto usando multipart upload](mpu-upload-object.md). 

------
#### [ .NET ]

Ao fazer upload de um objeto usando o AWS SDK para .NET, você pode solicitar que o Amazon S3 use uma AWS KMS key adicionando a propriedade `ServerSideEncryptionMethod`, conforme exibido na seguinte solicitação:

```
PutObjectRequest putRequest = new PutObjectRequest
 {
     BucketName = amzn-s3-demo-bucket,
     Key = keyName,
     // other properties
     ServerSideEncryptionMethod = ServerSideEncryptionMethod.AWSKMS
 };
```

Nesse caso, o Amazon S3 usa a Chave gerenciada pela AWS. Para obter mais informações, consulte [Usar criptografia do lado do servidor com o AWS KMS (SSE-KMS)](UsingKMSEncryption.md). Como opção, você pode criar sua própria chave de criptografia simétrica do KMS gerenciada pelo cliente e especificar isso na solicitação, conforme mostrado no seguinte exemplo:

```
PutObjectRequest putRequest1 = new PutObjectRequest
{
  BucketName = amzn-s3-demo-bucket,
  Key = keyName,
  // other properties
  ServerSideEncryptionMethod = ServerSideEncryptionMethod.AWSKMS,
  ServerSideEncryptionKeyManagementServiceKeyId = keyId
};
```

Para obter mais informações sobre como criar chaves gerenciadas pelo cliente, consulte [Programação da API do AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/programming-top.html) 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. Para usar esses exemplos, é necessário atualizar os 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](upload-objects.md).
+ Para uploads multiparte que usam as operações de API de upload multiparte de alto ou baixo nível, consulte [Fazer upload de um objeto usando multipart upload](mpu-upload-object.md). 

------

### Pre-signed URLs
<a name="kms-presigned-urls"></a>

------
#### [ Java ]

Ao criar um URL pré-assinado para um objeto criptografado com uma AWS KMS key, você deverá especificar explicitamente o Signature Version 4, conforme mostrado no seguinte exemplo:

```
ClientConfiguration clientConfiguration = new ClientConfiguration();
clientConfiguration.setSignerOverride("AWSS3V4SignerType");
AmazonS3Client s3client = new AmazonS3Client(
        new ProfileCredentialsProvider(), clientConfiguration);
...
```

Para ver um exemplo de código, consulte [Compartilhar objetos com URLs pré-assinados](ShareObjectPreSignedURL.md). 

------
#### [ .NET ]

Ao criar um URL pré-assinado para um objeto criptografado com uma AWS KMS key, você deverá especificar explicitamente o Signature Version 4, conforme mostrado no seguinte exemplo:

```
AWSConfigs.S3Config.UseSignatureVersion4 = true;
```

Para ver um exemplo de código, consulte [Compartilhar objetos com URLs pré-assinados](ShareObjectPreSignedURL.md).

------

# Redução do custo do SSE-KMS com chaves de bucket do Amazon S3
<a name="bucket-key"></a>

As chaves de bucket do Amazon S3 reduzem o custo da criptografia do lado do servidor do Amazon S3 com chaves do AWS Key Management Service (AWS KMS) (SSE-KMS). Usar uma chave no nível de bucket para SSE-KMS pode reduzir os custos de solicitação do AWS KMS em até 99% ao reduzir o tráfego de solicitação do Amazon S3 para o AWS KMS. Com alguns cliques no Console de gerenciamento da AWS e sem alterações em aplicações do cliente, você pode configurar o bucket para usar uma chave de bucket do S3 para criptografia SSE-KMS em novos objetos.

**nota**  
As chaves de bucket do S3 não comportam criptografia de camada dupla do lado do servidor com chaves do AWS Key Management Service (AWS KMS) (DSSE-KMS).

## Chaves de bucket S3 para SSE-KMS
<a name="bucket-key-overview"></a>

Workloads que acessam milhões ou bilhões de objetos criptografados com o SSE-KMS podem gerar grandes volumes de solicitações para o AWS 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](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#data-keys) individual do AWS KMS para cada objeto. Nesse caso, o Amazon S3 faz uma chamada para o AWS KMS sempre que uma solicitação é feita contra um objeto criptografado pelo KMS. Para obter informações sobre como o SSE-KMS funciona, consulte [Usar criptografia do lado do servidor com o AWS KMS (SSE-KMS)](UsingKMSEncryption.md). 

Quando você configura um bucket para usar uma chave de bucket do S3 para SSE-KMS, a AWS gera uma chave de bucket de curta duração do AWS KMS e a mantém temporariamente no S3. Essa chave de bucket criará chaves de dados para novos objetos durante seu ciclo de vida. As chaves de bucket do S3 são usadas por um período limitado no Amazon S3, reduzindo a necessidade de o 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 pelo AWS KMS no Amazon S3 por uma fração do custo anterior.

Chaves exclusivas em nível de bucket são buscadas pelo menos uma vez por solicitante para garantir que o acesso do solicitante à chave seja capturado em um evento do CloudTrail no AWS KMS. O Amazon S3 trata os chamadores como solicitantes diferentes quando usam perfis ou contas diferentes, ou o mesmo perfil com políticas de escopo diferentes. A economia de solicitações do AWS KMS reflete o número de solicitantes, os padrões de solicitação e a idade relativa dos objetos solicitados. Por exemplo, um número menor de solicitantes, solicitando vários objetos em um período limitado e criptografados com a mesma chave de bucket, resultará em maior economia.

**nota**  
O uso de chaves de bucket do S3 permite que você reduza os custos de solicitações do AWS KMS ao diminuir as solicitações ao AWS KMS para operações `Encrypt`, `GenerateDataKey` e `Decrypt` por meio do uso de uma chave em nível de bucket. Por definição, as solicitações subsequentes que aproveitam essa chave em nível de bucket não resultam em solicitações de API do AWS KMS nem validam o acesso em relação à política de chave AWS KMS.

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 `CopyObject`. Para obter mais informações, consulte [Configurar uma chave de bucket do S3 no nível de objeto](configuring-bucket-key-object.md).

O Amazon S3 compartilhará apenas uma chave de bucket do S3 para objetos criptografados pela mesma AWS KMS key. As chaves de bucket do S3 são compatíveis com chaves do KMS criadas pelo AWS KMS, [material de chave importado](https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys.html) e [material chave baseado em armazenamentos de chaves personalizados](https://docs.aws.amazon.com/kms/latest/developerguide/custom-key-store-overview.html).

![\[O diagrama mostra o AWS KMS gerando uma chave de bucket que cria chaves de dados para objetos em um bucket.\]](http://docs.aws.amazon.com/pt_br/AmazonS3/latest/userguide/images/S3-Bucket-Keys.png)


## Configurando chaves de bucket do S3
<a name="configure-bucket-key"></a>

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, dos AWS SDKs, da AWS CLI ou da API REST. Com as chaves de bucket do S3 habilitadas em seu bucket, os objetos carregados com outra chave de SSE-KMS especificada usarão suas próprias chaves de bucket do S3. Independentemente da configuração de chave de bucket do S3, você pode incluir o cabeçalho `x-amz-server-side-encryption-bucket-key-enabled` com um valor `true` ou `false` em sua solicitação para substituir a configuração do bucket.

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](#bucket-key-changes). 

### Configuração de uma chave de bucket do S3 usando o console do Amazon S3
<a name="configure-bucket-key-console"></a>

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](configuring-bucket-key.md).

### Compatibilidade da API REST, da AWS CLI e do AWS SDK com chaves de bucket do S3
<a name="configure-bucket-key-programmatic"></a>

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.

Para saber mais, consulte: 
+ [Configurar uma chave de bucket do S3 no nível de objeto](configuring-bucket-key-object.md)
+ [Configurando seu bucket para usar uma chave de bucket do S3 com SSE-KMS para novos objetos](configuring-bucket-key.md)

As seguintes operações de API são compatíveis com chaves de bucket do S3 para SSE-KMS:
+ [PutBucketEncryption](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html)
  + `ServerSideEncryptionRule` aceita o parâmetro `BucketKeyEnabled` para habilitar e desabilitar uma chave de bucket do S3.
+ [GetBucketEncryption](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketEncryption.html)
  + `ServerSideEncryptionRule` retorna as configurações para `BucketKeyEnabled`.
+ [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html), [CopyObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html), [CreateMultipartUpload](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html), e [POST Object](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html)
  + O cabeçalho de solicitação `x-amz-server-side-encryption-bucket-key-enabled` ativa ou desativa uma chave de bucket do S3 no nível do objeto.
+ [HeadObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html), [GetObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html), [UploadPartCopy](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html), [UploadPart](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html) e [CompleteMultipartUpload](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html)
  + O cabeçalho de resposta `x-amz-server-side-encryption-bucket-key-enabled` indica se uma chave de bucket do S3 está ativada ou desativada para um objeto.

### Trabalhar com o CloudFormation
<a name="configure-bucket-key-cfn"></a>

No CloudFormation, o recurso `AWS::S3::Bucket` inclui uma propriedade de criptografia chamada `BucketKeyEnabled` que você pode usar para ativar ou desativar uma chave de bucket do S3. 

Para obter mais informações, consulte  [Usar o CloudFormation](configuring-bucket-key.md#enable-bucket-key-cloudformation).

## Alterações na observação antes de habilitar uma chave de bucket do S3
<a name="bucket-key-changes"></a>

Antes de ativar uma chave de bucket do S3, observe as seguintes alterações relacionadas:

### Políticas de chave do IAM ou do AWS KMS
<a name="bucket-key-policies"></a>

Se suas políticas do AWS Identity and Access Management (IAM) ou políticas de chave do AWS KMS usarem seu objeto do nome do recurso da Amazon (ARN) como contexto de criptografia para refinar ou limitar o acesso à chave do KMS, essas políticas não funcionarão com uma chave de bucket do S3. As Chaves de bucket do S3 usam o ARN do bucket como contexto de criptografia. Antes de ativar uma chave de bucket do S3, atualize suas políticas do IAM ou políticas de chave do AWS KMS para usar o ARN do bucket como contexto de criptografia.

Para obter mais informações sobre contexto de criptografia e chaves de bucket do S3, consulte [Contexto de criptografia](UsingKMSEncryption.md#encryption-context).

### Eventos do CloudTrail para o AWS KMS
<a name="bucket-key-cloudtrail"></a>

Depois de habilitar uma chave de bucket do S3, seus eventos do AWS KMS CloudTrail registram em log o ARN do bucket em vez do ARN do objeto. Além disso, você vê menos eventos do KMS CloudTrail para objetos SSE-KMS em seus logs. Como o material de chave tem uma limitação de tempo no Amazon S3, menos solicitações são feitas ao AWS KMS.

## Uso de uma chave de bucket do S3 com replicação
<a name="bucket-key-replication"></a>

Você pode usar chaves de bucket do S3 com SRR (Same-Region Replication, replicação entre regiões) e CRR (Cross-Region Replication, replicação entre regiões).

Quando o Amazon S3 replica um objeto criptografado, ele geralmente preserva as configurações de criptografia do objeto de réplica no bucket de destino. No entanto, se o objeto de origem não for criptografado e seu bucket de destino usar criptografia padrão ou uma chave de bucket do S3, o Amazon S3 criptografa o objeto com a configuração do bucket de destino. 

Os exemplos a seguir ilustram como uma chave de bucket do S3 funciona com a replicação. Para obter mais informações, consulte [Replicar objetos criptografados (SSE-S3, SSE-KMS, DSSE-KMS, SSE-C)](replication-config-for-kms-objects.md). 

**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 réplica será criptografado usando uma chave de bucket S3 com a 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.

## Como trabalhar com chaves de bucket do S3
<a name="using-bucket-key"></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](configuring-bucket-key.md)
+ [Configurar uma chave de bucket do S3 no nível de objeto](configuring-bucket-key-object.md)
+ [Visualizar as configurações para uma chave de bucket do S3](viewing-bucket-key-settings.md)

# Configurando seu bucket para usar uma chave de bucket do S3 com SSE-KMS para novos objetos
<a name="configuring-bucket-key"></a>

Ao configurar a criptografia do lado do servidor com chaves do AWS Key Management Service (AWS KMS) (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 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](bucket-key.md).

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, AWS SDKs, a AWS Command Line Interface (AWS CLI) ou o CloudFormation. Se você quiser habilitar ou desabilitar uma chave de bucket do S3 para objetos existentes, poderá usar uma operação `CopyObject`. Para obter mais informações, consulte [Configurar uma chave de bucket do S3 no nível de objeto](configuring-bucket-key-object.md) e [Usar o Operações em Lote para habilitar chaves de bucket do S3 para SSE-KMS](batch-ops-copy-example-bucket-key.md).

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 a fim de usar o ARN de bucket para o contexto de criptografia. Para obter mais informações, consulte [Chaves de bucket do S3 e replicação](replication-config-for-kms-objects.md#bk-replication).

Os exemplos a seguir ilustram como uma chave de bucket do S3 funciona com a replicação. Para obter mais informações, consulte [Replicar objetos criptografados (SSE-S3, SSE-KMS, DSSE-KMS, SSE-C)](replication-config-for-kms-objects.md). 

**Pré-requisitos**  
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](bucket-key.md#bucket-key-changes).

**Topics**

## Uso do console do S3
<a name="enable-bucket-key"></a>

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 SSE-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 do S3 ativada, mas o bucket de destino tiver a chave de bucket do S3 ativada, uma chave de bucket do S3 será habilitada para o objeto.

**Para habilitar uma chave de bucket do S3 ao criar um novo bucket**

1. Faça login no Console de gerenciamento da AWS e abra o console do Amazon S3 em [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. No painel de navegação à esquerda, escolha **Buckets**.

1. Selecione **Create bucket (Criar bucket)**. 

1. Insira o nome do bucket e escolha sua Região da AWS. 

1. Em **Criptografia padrão**, para **Tipo de chave de criptografia**, escolha **Chave do AWS Key Management Service (SSE-KMS)**.

1. Em **Chave do AWS KMS**, realize um dos seguintes procedimentos para escolher sua chave do KMS:
   + Para escolher entre uma lista de chaves do KMS disponíveis, selecione **Escolher de sua AWS KMS keys** e escolha a **chave do KMS** na lista de chaves disponíveis.

     As chaves Chave gerenciada pela AWS (`aws/s3`) e as chaves gerenciadas pelo cliente são exibidas nessa lista. Para ter mais informações sobre chaves gerenciadas pelo cliente, consulte [Chaves de clientes e chaves da AWS](https://docs.aws.amazon.com//kms/latest/developerguide/concepts.html#key-mgmt) no *Guia do desenvolvedor do AWS Key Management Service*.
   + Para inserir o ARN da chave do KMS, escolha **Inserir ARN da AWS KMS key** e insira o ARN da chave do KMS no campo exibido. 
   + Para criar uma chave gerenciada pelo cliente no console do AWS KMS, selecione **Criar uma chave do KMS**.

     Para obter mais informações sobre como criar uma AWS KMS key, consulte [Criação de chaves](https://docs.aws.amazon.com//kms/latest/developerguide/create-keys.html) no *Guia do desenvolvedor do AWS Key Management Service*.

1. Em **Bucket key** (Chave do bucket), escolha **Enable** (Ativar). 

1. Selecione **Create bucket (Criar bucket)**. 

   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 desativar uma chave de bucket do S3, siga as etapas anteriores e escolha **Disable** (Desativar).

**Para habilitar uma chave de bucket do S3 para um bucket existente**

1. Abra o console do Amazon S3 em [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. No painel de navegação à esquerda, escolha **Buckets**.

1. Na lista **Buckets** (Buckets), escolha o bucket para o qual você deseja habilitar uma chave de bucket do S3.

1. Escolha a guia **Properties (Propriedades)**.

1. Em **Default encryption (Criptografia padrão)**, escolha **Edit (Editar)**.

1. Em **Criptografia padrão**, para **Tipo de chave de criptografia**, escolha **Chave do AWS Key Management Service (SSE-KMS)**.

1. Em **Chave do AWS KMS**, realize um dos seguintes procedimentos para escolher sua chave do KMS:
   + Para escolher entre uma lista de chaves do KMS disponíveis, selecione **Escolher de sua AWS KMS keys** e escolha a **chave do KMS** na lista de chaves disponíveis.

     As chaves Chave gerenciada pela AWS (`aws/s3`) e as chaves gerenciadas pelo cliente são exibidas nessa lista. Para ter mais informações sobre chaves gerenciadas pelo cliente, consulte [Chaves de clientes e chaves da AWS](https://docs.aws.amazon.com//kms/latest/developerguide/concepts.html#key-mgmt) no *Guia do desenvolvedor do AWS Key Management Service*.
   + Para inserir o ARN da chave do KMS, escolha **Inserir ARN da AWS KMS key** e insira o ARN da chave do KMS no campo exibido. 
   + Para criar uma chave gerenciada pelo cliente no console do AWS KMS, selecione **Criar uma chave do KMS**.

     Para obter mais informações sobre como criar uma AWS KMS key, consulte [Criação de chaves](https://docs.aws.amazon.com//kms/latest/developerguide/create-keys.html) no *Guia do desenvolvedor do AWS Key Management Service*.

1. Em **Bucket key** (Chave do bucket), escolha **Enable** (Ativar). 

1. Selecione **Save changes**.

   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 configurar uma chave de bucket do S3 para objetos existentes, você pode usar uma operação `CopyObject`. Para obter mais informações, consulte [Configurar uma chave de bucket do S3 no nível de objeto](configuring-bucket-key-object.md).

   Para desativar uma chave de bucket do S3, siga as etapas anteriores e escolha **Disable** (Desativar).

## Uso dos REST API
<a name="enable-bucket-key-rest"></a>

Você pode usar [PutBucketEncryption](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html) para habilitar ou desabilitar uma chave de bucket do S3 para o bucket. Para configurar uma chave de bucket do S3 com `PutBucketEncryption`, use o tipo de dados [ServerSideEncryptionRule](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ServerSideEncryptionRule.html), que inclui criptografia padrão com SSE-KMS. Você também pode usar opcionalmente uma chave gerenciada pelo cliente especificando o ID da chave do KMS para a chave gerenciada pelo cliente.  

Para obter mais informações e sintaxe de exemplo, consulte [PutBucketenCryption](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html). 

## Usar o AWS SDK para Java
<a name="enable-bucket-key-sdk"></a>

O exemplo a seguir habilita a criptografia de bucket padrão com SSE-KMS e uma chave de bucket do S3 usando o AWS SDK para Java.

------
#### [ Java ]

```
AmazonS3 s3client = AmazonS3ClientBuilder.standard()
    .withRegion(Regions.DEFAULT_REGION)
    .build();
    
ServerSideEncryptionByDefault serverSideEncryptionByDefault = new ServerSideEncryptionByDefault()
    .withSSEAlgorithm(SSEAlgorithm.KMS);
ServerSideEncryptionRule rule = new ServerSideEncryptionRule()
    .withApplyServerSideEncryptionByDefault(serverSideEncryptionByDefault)
    .withBucketKeyEnabled(true);
ServerSideEncryptionConfiguration serverSideEncryptionConfiguration =
    new ServerSideEncryptionConfiguration().withRules(Collections.singleton(rule));

SetBucketEncryptionRequest setBucketEncryptionRequest = new SetBucketEncryptionRequest()
    .withServerSideEncryptionConfiguration(serverSideEncryptionConfiguration)
    .withBucketName(bucketName);
            
s3client.setBucketEncryption(setBucketEncryptionRequest);
```

------

## Como usar o AWS CLI
<a name="enable-bucket-key-cli"></a>

O exemplo a seguir habilita a criptografia de bucket padrão com SSE-KMS e uma chave de bucket do S3 usando o AWS CLI. Substitua `user input placeholders` por suas próprias informações.

```
aws s3api put-bucket-encryption --bucket amzn-s3-demo-bucket --server-side-encryption-configuration '{
        "Rules": [
            {
                "ApplyServerSideEncryptionByDefault": {
                    "SSEAlgorithm": "aws:kms",
                    "KMSMasterKeyID": "KMS-Key-ARN"
                },
                "BucketKeyEnabled": true
            }
        ]
    }'
```

## Usar o CloudFormation
<a name="enable-bucket-key-cloudformation"></a>

Para obter mais informações sobre como configurar uma chave de bucket do S3 com CloudFormation, consulte [AWS::S3::Bucket ServerSideEncryptionRule](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-serversideencryptionrule.html) no *Guia do usuário do AWS CloudFormation*.

# Configurar uma chave de bucket do S3 no nível de objeto
<a name="configuring-bucket-key-object"></a>

Ao executar uma operação PUT ou COPY usando a API REST, os AWS SDKs ou a AWS CLI, você pode habilitar ou desabilitar uma chave de bucket do S3 para o objeto adicionando o cabeçalho de solicitação `x-amz-server-side-encryption-bucket-key-enabled` com um valor `true` ou `false`. 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 assim 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](bucket-key.md). 

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ê enviar uma solicitação PUT ou COPY para um objeto criptografado pelo KMS em um bucket com as chaves de bucket do S3 habilitadas, suas operações no objeto vão usar automaticamente as chaves de bucket do S3, a menos que você desabilite as chaves no cabeçalho da solicitação. 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](bucket-key.md#bucket-key-changes). 

**Topics**
+ [Amazon S3 Batch Operations](#bucket-key-object-bops)
+ [Uso da API REST](#bucket-key-object-rest)
+ [Usar o AWSSDK Java (PutObject)](#bucket-key-object-sdk)
+ [Como usar a AWS CLI (PutObject)](#bucket-key-object-cli)

## Amazon S3 Batch Operations
<a name="bucket-key-object-bops"></a>

Para criptografar objetos existentes do Amazon S3 com uma única solicitação, você pode usar o Amazon S3 Batch Operations. 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 Copy do S3 Batch Operations](https://docs.aws.amazon.com/AmazonS3/latest/userguide/batch-ops-copy-object.html) para copiar objetos não criptografados existentes e gravá-los de volta no mesmo bucket que os objetos criptografados. Um único trabalho do Batch Operations pode realizar a operação especificada em bilhões de objetos. Para obter mais informações, consulte [Executar operações de objetos em massa com o Operações em Lote](batch-ops.md) e [Criptografia de objetos existentes com o Amazon S3 Batch Operations](https://aws.amazon.com/blogs/storage/encrypting-objects-with-amazon-s3-batch-operations/).

## Uso da API REST
<a name="bucket-key-object-rest"></a>

Ao usar a SSE-KMS, você pode habilitar uma chave de bucket do S3 para um objeto usando as seguintes operações de API: 
+ [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) — Ao fazer upload de um objeto, você pode especificar o cabeçalho da `x-amz-server-side-encryption-bucket-key-enabled` solicitação para ativar ou desativar uma chave de bucket do S3 no nível do objeto. 
+ [CopyObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html) (Copiar objeto) — Quando você copia um objeto e configura o SSE-KMS, você pode especificar o cabeçalho da solicitação `x-amz-server-side-encryption-bucket-key-enabled` para ativar ou desativar uma chave de bucket do S3 para seu objeto. 
+ [POST Object](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html): quando você usa uma operação `POST` para fazer upload de um objeto e configurar a SSE-KMS, você pode usar o campo do formulário `x-amz-server-side-encryption-bucket-key-enabled` para ativar ou desativar uma chave de bucket S3 para o objeto.
+ [CreateMultipartUpload](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html): ao fazer upload de objetos grandes usando a operação de API de `CreateMultipartUpload` e configurar a SSE-KMS, você pode usar o cabeçalho de solicitação `x-amz-server-side-encryption-bucket-key-enabled` para habilitar ou desabilitar uma chave de bucket do S3 para o objeto.

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 da API REST](specifying-kms-encryption.md#KMSUsingRESTAPI).

## Usar o AWSSDK Java (PutObject)
<a name="bucket-key-object-sdk"></a>

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 ]

```
AmazonS3 s3client = AmazonS3ClientBuilder.standard()
    .withRegion(Regions.DEFAULT_REGION)
    .build();

String bucketName = "amzn-s3-demo-bucket1";
String keyName = "key name for object";
String contents = "file contents";

PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, keyName, contents)
    .withBucketKeyEnabled(true);
    
s3client.putObject(putObjectRequest);
```

------

## Como usar a AWS CLI (PutObject)
<a name="bucket-key-object-cli"></a>

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 `PutObject`.

```
aws s3api put-object --bucket amzn-s3-demo-bucket --key object key name --server-side-encryption aws:kms --bucket-key-enabled --body filepath
```

# Visualizar as configurações para uma chave de bucket do S3
<a name="viewing-bucket-key-settings"></a>

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 Command Line Interface (AWS CLI) ou os AWS SDKs.

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 do lado do servidor usando o AWS Key Management Service (SSE-KMS). Para obter mais informações, consulte [Redução do custo do SSE-KMS com chaves de bucket do Amazon S3](bucket-key.md). 

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, consulte[GetBucketEncryption](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketEncryption.html) na *Referência da API do Amazon Simple Storage Service*. 

## Uso do console do S3
<a name="bucket-key-settings"></a>

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. 

**Para visualizar a configuração da chave de bucket do S3 para o bucket**

1. Faça login no Console de gerenciamento da AWS e abra o console do Amazon S3 em [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. No painel de navegação à esquerda, escolha **Buckets**.

1. Na lista **Buckets** (Buckets), escolha o bucket para o qual você deseja habilitar uma chave de bucket do S3.

1. Escolha **Properties (Propriedades)**.

1. Na seção **Default encryption** (Criptografia padrão), em **Bucket Key** (Chave do bucket), você verá a configuração da chave de bucket do S3 para seu bucket.

   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ção`s3:GetEncryptionConfiguration`. Para obter mais informações, consulte[GetBucketEncryption](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketEncryption.html) na *Referência da API do Amazon Simple Storage Service*. 

**Para exibir a configuração da chave de bucket do S3 para seu objeto**

1. Faça login no Console de gerenciamento da AWS e abra o console do Amazon S3 em [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. Na lista **Buckets** (Buckets), escolha o bucket para o qual você deseja habilitar uma chave de bucket do S3. 

1. Na lista **Objects** (Objetos), escolha o nome do objeto.

1. Na guia **Details** (Detalhes), em **Server-side encryption settings** (Configurações de criptografia do lado do servidor), escolha **Edit** (Editar). 

   Em **Chave de bucket**, você vê a configuração da chave de bucket do S3 para o objeto. Você não pode editar essa configuração. 

## Como usar o AWS CLI
<a name="bucket-key-settings-cli"></a>

**Para retornar as configurações da chave de bucket do S3 no nível de bucket**  
Para usar esse exemplo, substitua cada `user input placeholder` por suas próprias informações.

```
aws s3api get-bucket-encryption --bucket amzn-s3-demo-bucket1
```

Para obter mais informações, consulte [get-bucket-encryption](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/get-bucket-encryption.html) na *Referência de comandos da AWS CLI*.

**Como retornar configurações de chave de bucket do S3 para objetos**  
Para usar esse exemplo, substitua cada `user input placeholder` por suas próprias informações.

```
aws s3api head-object --bucket amzn-s3-demo-bucket1 --key my_images.tar.bz2
```

Para ter mais informações, consulte [head-object](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/head-object.html) na *Referência de comandos da AWS CLI*.

## Uso da API REST
<a name="bucket-key-settings-rest"></a>

**Para retornar as configurações da chave de bucket do S3 no nível de bucket**  
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 são retornadas no corpo da resposta no elemento `ServerSideEncryptionConfiguration` com a configuração `BucketKeyEnabled`. Para obter mais informações, consulte [GetBucketenCryption](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketEncryption.html) na *Referência da API do Amazon S3*. 

**Para retornar configurações de nível de objeto para uma 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](https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html) (Objeto do cabeçalho) na *Referência da API do Amazon S3*. 

As seguintes operações de API também retornam o cabeçalho de resposta `x-amz-server-side-encryption-bucket-key-enabled` se uma chave de bucket de S3 estiver configurada para um objeto: 
+ [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) 
+ [PostObject](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html) 
+ [CopyObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html) 
+ [CreateMultipartUpload](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html) 
+ [UploadPartCopy](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html) 
+ [UploadPart](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html) 
+ [CompleteMultipartUpload](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html) 
+ [GetObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html) 

# Usar criptografia de camada dupla do lado do servidor com chaves do AWS KMS (DSSE-KMS)
<a name="UsingDSSEncryption"></a>

O uso da criptografia de camada dupla do lado do servidor com chaves do AWS Key Management Service (AWS KMS) (DSSE-KMS) aplica duas camadas de criptografia aos objetos quando eles são carregados no Amazon S3. O DSSE-KMS ajuda a cumprir mais facilmente os padrões de conformidade que exigem que você aplique a criptografia de várias camadas aos dados e tenha controle total das chaves de criptografia.

O termo “dupla” no DSSE-KMS refere-se a duas camadas independentes de criptografia AES-256 que são aplicadas aos dados:
+ *Primeira camada:* os dados são criptografados por meio de uma chave de criptografia de dados (DEK) exclusiva gerada pelo AWS KMS.
+ *Segunda camada:* os dados já criptografados são criptografados novamente usando uma chave de criptografia AES-256 separada gerenciada pelo Amazon S3.

Isso é diferente do processo do SSE-KMS padrão, que aplica somente uma única camada de criptografia. A abordagem de camada dupla oferece segurança aprimorada, garantindo que, mesmo que uma camada de criptografia seja comprometida, os dados continuem sendo protegidos pela segunda camada. Essa segurança adicional envolve maior sobrecarga de processamento e mais chamadas de API do AWS KMS, o que justifica o custo mais alto em comparação com o SSE-KMS padrão. Para ter mais informações sobre o preço do DSSE-KMS, consulte [AWS KMS key concepts](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#kms_keys) no Guia do desenvolvedor do AWS Key Management Service e [Preços do AWS KMS](https://aws.amazon.com/kms/pricing).

Ao usar a criptografia DSSE-KMS com um bucket do Amazon S3, as chaves do AWS KMS devem estar na mesma região que o bucket. Além disso, quando o DSSE-KMS é solicitado para o objeto, a soma de verificação do S3 que faz parte dos metadados do objeto é armazenada em formato criptografado. Para ter mais informações sobre somas de verificação, consulte [Verificar a integridade do objeto no Amazon S3](checking-object-integrity.md).

**nota**  
As chaves de bucket do S3 não comportam DSSE-KMS.

As principais diferenças entre o DSSE-KMS e o SSE-KMS padrão são:
+ **Camadas de criptografia:** o DSSE-KMS aplica duas camadas independentes de criptografia AES-256, enquanto o SSE-KMS padrão aplica uma camada.
+ **Segurança:** o DSSE-KMS oferece proteção aprimorada contra possíveis vulnerabilidades de criptografia.
+ **Conformidade:** o DSSE-KMS ajuda a atender aos requisitos regulatórios que exigem criptografia de várias camadas.
+ **Desempenho:** o DSSE-KMS tem latência um pouco maior devido ao processamento adicional de criptografia.
+ **Custo:** o DSSE-KMS incorre em cobranças mais altas devido à maior sobrecarga computacional e a operações adicionais do AWS KMS.

**Exigir criptografia de camada dupla do lado do servidor com chaves do AWS KMS keys (DSSE-KMS)**  
Para exigir criptografia de camada dupla do lado do servidor de todos os objetos em um bucket específico do Amazon S3, é possível usar uma política de bucket. Por exemplo, a política de bucket a seguir negará permissão de carregamento de objeto (`s3:PutObject`) para todos se a solicitação não incluir um cabeçalho `x-amz-server-side-encryption` que solicita criptografia do lado do servidor com a DSSE-KMS.

------
#### [ JSON ]

****  

```
{
             "Version":"2012-10-17",		 	 	 
             "Id": "PutObjectPolicy",
             "Statement": [{
                   "Sid": "DenyUnEncryptedObjectUploads",
                   "Effect": "Deny",
                   "Principal": {
                       "AWS": "arn:aws:iam::111122223333:root"
                   },
                   "Action": "s3:PutObject",
                   "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
                   "Condition": {
                      "StringNotEquals": {
                         "s3:x-amz-server-side-encryption": "aws:kms:dsse"
                      }
                   }
                }
             ]
          }
```

------

**Topics**
+ [Especificar criptografia de camada dupla do lado do servidor com chaves do AWS KMS (DSSE-KMS)](specifying-dsse-encryption.md)

# Especificar criptografia de camada dupla do lado do servidor com chaves do AWS KMS (DSSE-KMS)
<a name="specifying-dsse-encryption"></a>

É possível aplicar criptografia durante o upload de um novo objeto ou ao copiar um objeto existente. 

Você pode especificar a DSSE-KMS usando o console do Amazon S3, a API REST do Amazon S3 e a AWS Command Line Interface (AWS CLI). Para obter mais informações, consulte os tópicos a seguir. 

**nota**  
Você pode usar uma AWS KMS keys de várias regiões no Amazon S3. No entanto, o Amazon S3 trata no momento as chaves de várias regiões como se fossem chaves de região única e não usa os recursos de várias regiões da chave. Consulte mais informações em [Using multi-Region keys](https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html) no *Guia do desenvolvedor do AWS Key Management Service*.

**nota**  
Se quiser usar uma chave do KMS que seja de propriedade de outra conta, você deverá ter permissão para usar a chave. Para obter mais informações sobre permissões entre contas para chaves do KMS, consulte [Criar chaves do KMS que outras contas podem usar](https://docs.aws.amazon.com//kms/latest/developerguide/key-policy-modifying-external-accounts.html#cross-account-console) no *Guia do desenvolvedor do AWS Key Management Service*. 

## Usar o console do S3
<a name="add-object-encryption-dsse"></a>

Esta seção descreve como definir ou alterar o tipo de criptografia de um objeto para usar criptografia de camada dupla do lado do servidor com chaves do AWS Key Management Service (AWS KMS) (DSSE-KMS) por meio do console do Amazon S3.

**nota**  
Você pode alterar a criptografia de um objeto se ele tiver menos de 5 GB. Se o objeto tiver mais de 5 GB, você deve usar a [AWS CLI](mpu-upload-object.md#UsingCLImpUpload) ou [SDKs da AWS](CopyingObjectsMPUapi.md) para alterar a criptografia de um objeto.
Para obter uma lista das permissões adicionais necessárias para alterar a criptografia de um objeto, consulte [Permissões obrigatórias para operações de API do Amazon S3](using-with-s3-policy-actions.md). Para ver exemplos das políticas que concedem essas permissões, consulte [Exemplos de políticas baseadas em identidade para o Amazon S3](example-policies-s3.md).
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. O perfil que altera a propriedade também se torna o proprietário do novo objeto (ou versão do objeto). 

**Como adicionar ou alterar a criptografia de um objeto**

1. Faça login no Console de gerenciamento da AWS e abra o console do Amazon S3 em [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. No painel de navegação, escolha **Buckets** e selecione a guia **Buckets de uso geral**. Acesse o bucket ou pasta do Amazon S3 que contém os objetos que você quer alterar.

1. Marque a caixa de seleção referente aos objetos que você quer alterar.

1. No menu **Ações**, escolha **Editar criptografia no lado do servidor** na lista de opções exibida.

1. Role até a seção **Criptografia do lado do servidor.**

1. Em **Configurações de criptografia**, escolha **Usar configurações de bucket para criptografia padrão** ou **Substituir configurações de bucket para criptografia padrão**.

1. Se você escolher **Substituir configurações do bucket para criptografia padrão**, defina as configurações de criptografia a seguir.

   1. Em **Tipo de criptografia**, escolha **Criptografia de camada dupla do lado do servidor com chaves do AWS Key Management Service (DSSE-KMS)**. 

   1. Em **Chave do AWS KMS**, realize um dos seguintes procedimentos para escolher sua chave do KMS:
      + Para escolher entre uma lista de chaves do KMS disponíveis, selecione **Escolher de sua AWS KMS keys** e escolha a **chave do KMS** na lista de chaves disponíveis.

        As chaves Chave gerenciada pela AWS (`aws/s3`) e as chaves gerenciadas pelo cliente são exibidas nessa lista. Para ter mais informações sobre chaves gerenciadas pelo cliente, consulte [Chaves de clientes e chaves da AWS](https://docs.aws.amazon.com//kms/latest/developerguide/concepts.html#key-mgmt) no *Guia do desenvolvedor do AWS Key Management Service*.
      + Para inserir o ARN da chave do KMS, selecione **Inserir ARN da AWS KMS key** e insira o ARN da chave do KMS no campo exibido. 
      + Para criar uma chave gerenciada pelo cliente no console do AWS KMS, selecione **Criar uma chave do KMS**.

        Para ter mais informações sobre como criar uma AWS KMS key, consulte [Criação de chaves](https://docs.aws.amazon.com//kms/latest/developerguide/create-keys.html) no * Guia do desenvolvedor do AWS Key Management Service*.
**Importante**  
Você só pode usar chaves do KMS disponíveis na mesma Região da AWS que o bucket. O console do Amazon S3 lista somente as primeiras 100 chaves do KMS na mesma região que o bucket. Para usar uma chave do KMS que não esteja listada, você deve inserir o ARN da chave do KMS. Se quiser usar uma chave do KMS que seja de propriedade de outra conta, primeiro você deverá ter permissão para usar a chave e, depois, inserir o ARN da chave do KMS.  
O Amazon S3 só é compatível com chaves do KMS de criptografia simétrica, e não com chaves assimétricas do KMS. Para ter mais informações, consulte [Identificar chaves do KMS assimétricas](https://docs.aws.amazon.com//kms/latest/developerguide/find-symm-asymm.html) no *Guia do desenvolvedor do AWS Key Management Service*.

1. Para **Chave do bucket**, escolha **Desabilitar**. As chaves de bucket do S3 não comportam DSSE-KMS.

1. Em **Configurações adicionais de cópia**, escolha se você quer **Copiar configurações de origem**, **Não especificar configurações** ou **Especificar configurações**. **Copiar configurações de origem** é a opção padrão. Se você quiser copiar o objeto somente sem os atributos das configurações de origem, escolha **Não especificar configurações**. Escolha **Especificar configurações** para especificar configurações referentes a classes de armazenamento, ACLs, tags de objeto, metadados, criptografia do lado do servidor e somas de verificação adicionais.

1. Escolha **Salvar alterações**.

**nota**  
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.

## Uso da API REST
<a name="DSSEUsingRESTAPI"></a>

Quando você cria um objeto, ou seja, quando você carrega um novo objeto ou copia um objeto, é possível especificar a utilização de criptografia de camada dupla do lado do servidor com AWS KMS keys (DSSE-KMS) para criptografar os 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:dsse`. O Amazon S3 confirma que o objeto foi armazenado com a criptografia DSSE-S3 retornando o cabeçalho de resposta `x-amz-server-side-encryption`. 

Se você especificar o cabeçalho `x-amz-server-side-encryption` com um valor de `aws:kms:dsse`, também poderá usar os seguintes cabeçalhos de solicitação:
+ `x-amz-server-side-encryption-aws-kms-key-id: SSEKMSKeyId`
+ `x-amz-server-side-encryption-context: SSEKMSEncryptionContext`

**Topics**
+ [Operações da API REST do Amazon S3 compatíveis com DSSE-KMS](#dsse-request-headers-kms)
+ [Contexto de criptografia (`x-amz-server-side-encryption-context`)](#s3-dsse-encryption-context)
+ [ID da chave do AWS KMS (`x-amz-server-side-encryption-aws-kms-key-id`)](#s3-dsse-key-id-api)

### Operações da API REST do Amazon S3 compatíveis com DSSE-KMS
<a name="dsse-request-headers-kms"></a>

As seguintes operações da API REST aceitam os cabeçalhos de solicitação `x-amz-server-side-encryption`, `x-amz-server-side-encryption-aws-kms-key-id`, e `x-amz-server-side-encryption-context`.
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html): ao carregar dados usando a operação de API`PUT`, é possível especificar esses cabeçalhos de solicitação. 
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html) – quando você copia um objeto, há um objeto de origem e um objeto de destino. Ao transmitir cabeçalhos de DSSE-KMS com a operação `CopyObject`, 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 do lado do servidor.
+ [Objeto POST](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html): 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.
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html): ao carregar objetos grandes usando a operação de API de carregamento fracionado, você pode especificar esses cabeçalhos na solicitação `CreateMultipartUpload`.

Os cabeçalhos de resposta das operações da API REST a seguir retornam o cabeçalho `x-amz-server-side-encryption` quando um objeto é armazenado com criptografia do lado do servidor.
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html)
+ [POST Objeto](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html)

**Importante**  
Todas as solicitações `GET` e `PUT` para um objeto protegido por AWS KMS falharão se elas não forem feitas usando Secure Sockets Layer (SSL), Transport Layer Security (TLS) ou Signature versão 4.
Se o objeto usar DSSE-KMS, os cabeçalhos de solicitação de criptografia não deverão ser enviados para solicitações `GET` e `HEAD`; do contrário, será exibido um erro HTTP 400 (BadRequest).

### Contexto de criptografia (`x-amz-server-side-encryption-context`)
<a name="s3-dsse-encryption-context"></a>

Se você especificar `x-amz-server-side-encryption:aws:kms:dsse`, a API do 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 de pares chave-valor que contém informações contextuais adicionais sobre os dados.

O Amazon S3 usa automaticamente o nome do recurso da Amazon (ARN) do objeto como o par de contexto de criptografia, por exemplo `arn:aws:s3:::object_ARN`.

Você também pode fornecer um par adicional de contexto de criptografia usando o cabeçalho `x-amz-server-side-encryption-context`. No entanto, como o contexto de criptografia não é criptografado, ele não deve incluir informações sigilosas. O Amazon S3 armazena esse par de chaves adicional junto com o contexto de criptografia padrão.

Para obter informações sobre o contexto de criptografia no Amazon S3, consulte [Contexto de criptografia](UsingKMSEncryption.md#encryption-context). Para obter informações gerais sobre o contexto de criptografia, consulte [Conceitos do AWS Key Management Service: contexto de criptografia](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context) no *Guia do desenvolvedor do AWS Key Management Service*. 

### ID da chave do AWS KMS (`x-amz-server-side-encryption-aws-kms-key-id`)
<a name="s3-dsse-key-id-api"></a>

Você pode usar o cabeçalho `x-amz-server-side-encryption-aws-kms-key-id` para especificar o ID da chave gerenciada pelo cliente usada para proteger os dados. Se você especificar o cabeçalho `x-amz-server-side-encryption:aws:kms:dsse`, mas não fornecer o cabeçalho `x-amz-server-side-encryption-aws-kms-key-id`, o Amazon S3 usará a Chave gerenciada pela AWS (`aws/s3`) para proteger os dados. Se desejar usar uma chave gerenciada pelo cliente, você deve fornecer o cabeçalho `x-amz-server-side-encryption-aws-kms-key-id` da chave gerenciada pelo cliente.

**Importante**  
Ao usar uma AWS KMS key para criptografia no lado do servidor no Amazon S3, você deve escolher uma chave de criptografia do KMS simétrica. O Amazon S3 só é compatível com chaves do KMS de criptografia simétrica. Para obter mais informações sobre essas chaves, consulte [Chaves do KMS de criptografia simétrica](https://docs.aws.amazon.com//kms/latest/developerguide/concepts.html#symmetric-cmks) no *Guia do desenvolvedor do AWS Key Management Service*.

## Como usar o AWS CLI
<a name="DSSEUsingCLI"></a>

Ao carregar um novo objeto ou copiar um objeto, é possível especificar a utilização de criptografia de DSSE-KMS para criptografar os dados. Para isso, adicione o parâmetro `--server-side-encryption aws:kms:dsse` à solicitação. Use o parâmetro `--ssekms-key-id example-key-id` para adicionar a [chave do AWS KMS gerenciada pelo cliente](https://docs.aws.amazon.com//kms/latest/developerguide/concepts.html#customer-cmk) que você criou. Se você especificar `--server-side-encryption aws:kms:dsse`, mas não fornecer um ID de chave do AWS KMS, o Amazon S3 usará a chave gerenciada pela AWS (`aws/s3`).

```
aws s3api put-object --bucket amzn-s3-demo-bucket --key example-object-key --server-side-encryption aws:kms:dsse --ssekms-key-id example-key-id --body filepath
```

Você pode criptografar um objeto não criptografado para usar a DSSE-KMS copiando o objeto de volta no lugar.

```
aws s3api copy-object --bucket amzn-s3-demo-bucket --key example-object-key --copy-source amzn-s3-demo-bucket/example-object-key --server-side-encryption aws:kms:dsse --ssekms-key-id example-key-id
```

# Como usar criptografia do lado do servidor com chaves fornecidas pelo cliente (SSE-C)
<a name="ServerSideEncryptionCustomerKeys"></a>

A criptografia de servidor envolve a proteção de dados em repouso. A criptografia no lado do servidor criptografa somente os dados de objeto, não os metadados de objeto. É possível usar a criptografia do lado do servidor com chaves fornecidas pelo cliente (SSE-C) em buckets de uso geral para criptografar seus dados com suas próprias chaves de criptografia. Com a chave de criptografia que você fornece como parte de sua solicitação, o Amazon S3 gerencia a criptografia de dados ao gravar em discos, e a descriptografia dos dados quando você acessa seus objetos. Portanto, você não precisa manter um código para executar a criptografia e a descriptografia de dados. A única coisa que você precisa fazer é gerenciar as chaves de criptografia fornecidas. 

A maioria dos casos de uso modernos no Amazon S3 não usa mais o SSE-C porque esse tipo de criptografia não tem a flexibilidade da criptografia do lado do servidor com chaves gerenciadas pelo Amazon S3 (SSE-S3) ou da criptografia do lado do servidor com chaves do AWS KMS (SSE-KMS). Como o SSE-C exige que você forneça a chave de criptografia toda vez que interage com seus dados criptografados por SSE-C, é impossível compartilhar a chave SSE-C com outros usuários, perfis ou serviços da AWS que leem dados dos seus buckets do S3 para operar com seus dados. Devido ao amplo suporte ao SSE-KMS na AWS, a maioria das workloads modernas não usa a criptografia SSE-C porque ela não tem a flexibilidade do SSE-KMS. Para saber mais sobre o SSE-KMS, consulte [Usar criptografia do lado do servidor com o AWS KMS (SSE-KMS)](UsingKMSEncryption.md).

Se você quiser evitar que a criptografia SSE-C seja usada para objetos gravados em seu bucket, é possível bloquear a criptografia SSE-C ao alterar a configuração de criptografia padrão do bucket. Quando o SSE-C é bloqueado para um bucket de uso geral, qualquer solicitação `PutObject`, `CopyObject`, `PostObject`, de multipart upload ou de replicação que especificar a criptografia SSE-C será rejeitada com o erro `HTTP 403 AccessDenied`. Para saber mais sobre como bloquear o SSE-C, consulte [Bloquear ou desbloquear o SSE-C para um bucket de uso geral](blocking-unblocking-s3-c-encryption-gpb.md).

Não há cobranças adicionais pelo uso de SSE-C. No entanto, as solicitações para configurar e usar SSE-C incorrem em cobranças padrão de solicitação do Amazon S3. Para obter mais informações sobre preços, consulte [Preços do Amazon S3](https://aws.amazon.com/s3/pricing/).

**Importante**  
A partir de abril de 2026, a AWS desabilitará a criptografia do lado do servidor com chaves fornecidas pelo cliente (SSE-C) para todos os buckets novos. Além disso, a criptografia SSE-C será desabilitada para todos os buckets existentes em Contas da AWS que não tenham dados criptografados por SSE-C. Com essas mudanças, as poucas aplicações que precisam da criptografia SSE-C deverão habilitar deliberadamente o uso do SSE-C por meio da API [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html) após a criação do bucket. Nesses casos, talvez seja necessário atualizar scripts de automação, modelos do CloudFormation ou outras ferramentas de configuração de infraestrutura para definir essas configurações. Para ter mais informações, consulte a publicação do [Blog do AWS Storage](https://aws.amazon.com/blogs/storage/advanced-notice-amazon-s3-to-disable-the-use-of-sse-c-encryption-by-default-for-all-new-buckets-and-select-existing-buckets-in-april-2026/).

## Considerações antes de usar o SSE-C
<a name="considerations-before-using-sse-c"></a>
+ O S3 nunca armazena a chave de criptografia quando se usa o SSE-C. Você deve fornecer a chave de criptografia sempre que quiser que alguém baixe seus dados criptografados por SSE-C no S3. 
  + Você gerencia um mapeamento cuja chave de criptografia foi usada para criptografar objetos. Você é responsável por acompanhar a chave de criptografia que forneceu para um objeto. Isso também significa que, se você perder a chave de criptografia, perderá o 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. 
  + Esse esquema pode dificultar o compartilhamento da chave SSE-C com outros usuários, perfis ou serviços da AWS que você possa operar com seus dados. Devido ao amplo suporte ao SSE-KMS na AWS, a maioria das workloads modernas não usa o SSE-C porque ele não tem a flexibilidade do SSE-KMS. Para saber mais sobre o SSE-KMS, consulte [Usar criptografia do lado do servidor com o AWS KMS (SSE-KMS)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html). 
  + Isso significa que objetos criptografados com SSE-C não podem ser descriptografados nativamente pelos serviços gerenciados da AWS. 
+ É necessário usar HTTPS ao especificar cabeçalhos SSE-C em suas solicitações.
  + O Amazon S3 rejeitará todas as solicitações feitas por HTTP ao usar SSE-C. Por questões de segurança, recomendamos considerar que todas as chaves enviadas erroneamente por HTTP estão comprometidas. Descarte a chave e alterne conforme apropriado. 
+ Se o bucket tiver o versionamento habilitado, cada versão de objeto carregada poderá ter sua própria chave de criptografia. Você é responsável por acompanhar a chave de criptografia usada para uma versão de objeto. 
+ Não é possível usar o SSE-C no console do Amazon S3. Não é possível usar o console do Amazon S3 para fazer upload de um objeto e especificar a criptografia 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. 

**Topics**
+ [Considerações antes de usar o SSE-C](#considerations-before-using-sse-c)
+ [Especificação de criptografia no lado do servidor com chaves fornecidas pelo cliente (SSE-C).](specifying-s3-c-encryption.md)
+ [Bloquear ou desbloquear o SSE-C para um bucket de uso geral](blocking-unblocking-s3-c-encryption-gpb.md)
+ [Perguntas frequentes sobre a configuração padrão do SSE-C para novos buckets](default-s3-c-encryption-setting-faq.md)

# Especificação de criptografia no lado do servidor com chaves fornecidas pelo cliente (SSE-C).
<a name="specifying-s3-c-encryption"></a>

Para usar a criptografia do lado do servidor com chaves fornecidas pelo cliente (SSE-C), primeiro verifique se o SSE-C não é um tipo de criptografia bloqueado na configuração padrão de criptografia do bucket de uso geral do Amazon S3. Se bloqueado, é necessário habilitar esse tipo de criptografia atualizando a configuração de criptografia padrão para o bucket. Em seguida, você pode usar o SSE-C em suas solicitações de upload transmitindo os cabeçalhos necessários. Consulte [Ações do Amazon S3 que permitem a gravação de dados com o SSE-C](#amazon-s3-actions-that-support-writing-data-with-sse-c) e inclua os [Cabeçalhos de API do S3 necessários para solicitações de criptografia e descriptografia de objetos com SSE-C](#s3-api-headers-required-for-sse-c-object-encryption-and-decryption-requests). 

Quando você faz upload de um objeto que especifica o SSE-C, o Amazon S3 usa a chave de criptografia fornecida para aplicar a criptografia AES-256 aos seus dados. Depois, o Amazon S3 remove 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, depois decifra o objeto antes de retornar os dados de objeto. 

Antes de usar o SSE-C, verifique se você analisou as informações em [Considerações antes de usar o SSE-C](ServerSideEncryptionCustomerKeys.md#considerations-before-using-sse-c).

**nota**  
O Amazon S3 não armazena a chave de criptografia que você fornece. Em vez disso, ele armazena um valor de código de autenticação de mensagens por hash (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.

**Topics**
+ [Ações do SSE-C e cabeçalhos necessários](#sse-c-actions-and-required-headers)
+ [Exemplo de política de bucket para aplicar a criptografia SSE-C](#example-bucket-policy-to-enforce-sse-c-encryption)
+ [Pre-signed URLs e SSE-C](#ssec-and-presignedurl)
+ [Fazer solicitações com SSE-C](#making-requests-with-sse-c)
+ [Uso da API REST](#using-rest-api-sse-c)
+ [Uso dos AWS SDKs para especificar SSE-C para operações PUT, GET, Head e Copy](#sse-c-using-sdks)
+ [Uso dos AWS SDKs para especificar SSE-C para uploads fracionados](#sse-c-using-sdks-multipart-uploads)

## Ações do SSE-C e cabeçalhos necessários
<a name="sse-c-actions-and-required-headers"></a>

Para especificar o SSE-C em APIs do S3 compatíveis, é necessário transmitir parâmetros de solicitação específicos. 

**nota**  
A API `PutBucketEncryption` no Amazon S3 é usada para configurar a criptografia padrão do lado do servidor para um bucket. No entanto, `PutBucketEncryption` não permite a ativação do SSE-C como método de criptografia padrão para um bucket. O SSE-C é um método de criptografia em nível de objeto em que é necessário fornecer a chave de criptografia ao Amazon S3 com cada solicitação de upload ou download de objeto. O Amazon S3 usa essa chave para criptografar ou descriptografar o objeto durante a solicitação e, em seguida, descarta a chave. Isso significa que o SSE-C é habilitado por objeto, não como uma configuração padrão de bucket. 

### Ações do Amazon S3 que permitem a gravação de dados com o SSE-C
<a name="amazon-s3-actions-that-support-writing-data-with-sse-c"></a>

as seguintes ações ou operações de API: 
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html)

**nota**  
A replicação do S3 oferece suporte a objetos que são criptografados com SSE-C. Para obter mais informações sobre replicação de objetos criptografados, consulte [Replicar objetos criptografados (SSE-S3, SSE-KMS, DSSE-KMS, SSE-C)](replication-config-for-kms-objects.md). 

### Cabeçalhos de API do S3 necessários para solicitações de criptografia e descriptografia de objetos com SSE-C
<a name="s3-api-headers-required-for-sse-c-object-encryption-and-decryption-requests"></a>

É necessário fornecer os três cabeçalhos de API abaixo para criptografar ou descriptografar objetos com SSE-C: 
+ `x-amz-server-side-encryption-customer-algorithm`: use este cabeçalho para especificar o algoritmo de criptografia. O valor do cabeçalho deve ser AES-256.
+ `x-amz-server-side-encryption-customer-key`: use este cabeçalho para fornecer a chave de criptografia com codificação base64 de 256 bits a ser usada pelo Amazon S3 para criptografar ou descriptografar seus dados.
+ `x-amz-server-side-encryption-customer-key-MD5`: use este cabeçalho para fornecer o resumo MD5 com codificação base64 de 128 bits da chave de criptografia de acordo com o RFC 1321. O Amazon 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.

### Cabeçalhos de API do S3 necessários para solicitações de cópia de objetos de origem criptografados com SSE-C
<a name="s3-api-headers-required-for-requests-to-copy-source-objects-encrypted-with-sse-c"></a>

É necessário fornecer os três cabeçalhos de API abaixo para copiar objetos de origem criptografados com SSE-C: 
+ `x-amz-copy-source-server-side-encryption-customer-algorithm`: inclua este cabeçalho para especificar o algoritmo que o Amazon S3 deve usar para descriptografar o objeto de origem. Esse valor deve ser AES-256.
+ `x-amz-copy-source-server-side-encryption-customer-key`: inclua este cabeçalho para fornecer a chave de criptografia com codificação base64 a ser usada pelo Amazon S3 para descriptografar o objeto de origem. Essa chave de criptografia deve ser a que você forneceu ao Amazon S3 quando criou o objeto de origem. Caso contrário, o Amazon S3 não pode descriptografar o objeto.
+ `x-amz-copy-source-server-side-encryption-customer-key-MD5`: inclua este cabeçalho para fornecer o resumo MD5 com codificação base64 de 128 bits da chave de criptografia de acordo com RFC 1321.

## Exemplo de política de bucket para aplicar a criptografia SSE-C
<a name="example-bucket-policy-to-enforce-sse-c-encryption"></a>

Para exigir SSE-C de todos os objetos gravados em um bucket do Amazon S3, é possível usar uma política de bucket. Por exemplo, a política de bucket a seguir nega permissões para upload de objeto (`s3:PutObject`) a todas as solicitações que não incluam o cabeçalho `x-amz-server-side-encryption-customer-algorithm` que solicita SSE-C. 

```
{  
"Version":"2012-10-17",		 	 	                      
    "Id": "PutObjectPolicy",  
    "Statement": [  
        {  
"Sid": "RequireSSECObjectUploads",  
            "Effect": "Deny",  
            "Principal": "*",  
            "Action": "s3:PutObject",  
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",  
            "Condition": {  
            "Null": {  
              "s3:x-amz-server-side-encryption-customer-algorithm": "true"  
                }  
            }  
        }  
    ]  
}
```

**Importante**  
Se você usar uma política de bucket para exigir SSE-C em `s3:PutObject`, deverá incluir o cabeçalho `x-amz-server-side-encryption-customer-algorithm` em todas as solicitações de carregamento fracionado (CreateMultipartUpload, UploadPart e CompleteMultipartUpload). 

## Pre-signed URLs e SSE-C
<a name="ssec-and-presignedurl"></a>

Você pode gerar um URL pré-assinado que pode ser usado para operações, como fazer upload de um objeto novo, recuperar um objeto existente ou recuperar metadados de objeto. Os URLs pré-assinados oferecem suporte a SSE-C da seguinte maneira:
+ Ao criar um URL pré-assinado, você deve especificar o algoritmo usando o cabeçalho `x-amz-server-side-encryption-customer-algorithm` no cálculo de assinatura.
+ Ao usar o URL pré-assinado para fazer upload de um objeto novo, recuperar um objeto existente ou recuperar somente metadados de objeto, você deve fornecer todos os cabeçalhos de criptografia na solicitação de aplicação cliente. 
**nota**  
Para objetos que não usam SSE-C, é possível gerar um URL pré-assinado e colá-lo diretamente em um navegador para acessar os dados.   
No entanto, não é possível fazer isso para objetos SSE-C porque, além do URL pré-assinado, você também precisa incluir cabeçalhos HTTP específicos para objetos SSE-C. Dessa forma, é possível usar URLs pré-assinados para objetos SSE-C somente de maneira programática.

Para obter mais informações sobre pre-signed URLs, consulte [Baixar e fazer upload de objetos com URLs pré-assinados](using-presigned-url.md).

## Fazer solicitações com SSE-C
<a name="making-requests-with-sse-c"></a>

 No momento da criação do objeto com a API REST, você pode especificar a criptografia do lado do servidor com chaves fornecidas pelo cliente (SSE-C). Ao usar SSE-C, é necessário fornecer informações da chave de criptografia usando [Cabeçalhos de API do S3 necessários para solicitações de cópia de objetos de origem criptografados com SSE-C](#s3-api-headers-required-for-requests-to-copy-source-objects-encrypted-with-sse-c). 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.

**Importante**  
Antes de especificar a criptografia do lado do servidor com chaves fornecidas pelo cliente (SSE-C), verifique se a criptografia SSE-C não está bloqueada para seu bucket de uso geral. Para obter mais informações, consulte [Bloquear ou desbloquear o SSE-C para um bucket de uso geral](blocking-unblocking-s3-c-encryption-gpb.md).

**nota**  
Não é possível usar o console do Amazon S3 para fazer upload de um objeto e solicitar 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. Para ter mais informações, consulte [Cabeçalhos de API do S3 necessários para solicitações de criptografia e descriptografia de objetos com SSE-C](#s3-api-headers-required-for-sse-c-object-encryption-and-decryption-requests). 

## Uso da API REST
<a name="using-rest-api-sse-c"></a>

### APIs REST do Amazon S3 que oferecem suporte ao SSE-C
<a name="sse-c-supported-apis"></a>

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](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGET.html)), você pode especificar os cabeçalhos da solicitação.
+ **Operação HEAD**: para recuperar metadados de objeto usando a API HEAD (consulte [HEAD Object](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectHEAD.html)), você pode especificar esses cabeçalhos de solicitação.
+ **Operação PUT**: ao fazer upload de dados usando a API PUT (consulte [PUT Object](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html)), você pode especificar esses cabeçalhos de solicitação. 
+ **Carregamento fracionado**: ao fazer upload de objetos grandes usando a API de carregamentos fracionados, você pode especificar esses cabeçalhos. Especifique esses cabeçalhos na solicitação de inicialização (consulte [Iniciar multipart upload](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadInitiate.html)) e em cada solicitação de upload de parte subsequente (consulte [UploadPart](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadUploadPart.html) ou [UploadPartCopy](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadUploadPartCopy.html)). 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](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html)), em vez dos cabeçalhos de solicitação, você fornece as mesmas informações nos campos de formulário.
+ **Operação de cópia**: ao copiar um objeto (consulte [CopyObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html)), você tem um objeto de origem e um objeto de destino:
  + Se quiser especificar o tipo de criptografia do objeto de destino, 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, é necessário fornecer informações de criptografia usando [Cabeçalhos de API do S3 necessários para solicitações de criptografia e descriptografia de objetos com SSE-C](#s3-api-headers-required-for-sse-c-object-encryption-and-decryption-requests).
  + Se o objeto de origem for criptografado usando SSE-C, é necessário fornecer informações da chave de criptografia usando [Cabeçalhos de API do S3 necessários para solicitações de cópia de objetos de origem criptografados com SSE-C](#s3-api-headers-required-for-requests-to-copy-source-objects-encrypted-with-sse-c).

## Uso dos AWS SDKs para especificar SSE-C para operações PUT, GET, Head e Copy
<a name="sse-c-using-sdks"></a>

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:
+ **Colocar objeto**: faz upload de um objeto e solicita a criptografia de servidor, usando uma chave de criptografia fornecida pelo cliente.
+ **Obter objeto**: faz 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.
+ **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 ]

**nota**  
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 exemplos de carregamentos fracionados usando o AWS SDK para Java, consulte [Fazer upload de um objeto usando multipart upload](mpu-upload-object.md).

Para adicionar informações necessárias de criptografia, inclua uma `SSECustomerKey` na solicitação. Para obter mais informações sobre a classe `SSECustomerKey`, consulte a seção REST API.

Consulte instruções sobre como criar e testar uma amostra funcional em [Getting Started](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/getting-started.html) no Guia do desenvolvedor do AWS SDK para Java.

**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;

public class ServerSideEncryptionUsingClientSideEncryptionKey {
    private static SSECustomerKey SSE_KEY;
    private static AmazonS3 S3_CLIENT;
    private static KeyGenerator KEY_GENERATOR;

    public static void main(String[] args) throws IOException, NoSuchAlgorithmException {
        Regions clientRegion = Regions.DEFAULT_REGION;
        String bucketName = "*** Bucket name ***";
        String keyName = "*** Key name ***";
        String uploadFileName = "*** File path ***";
        String targetKeyName = "*** Target key name ***";

        // Create an encryption key.
        KEY_GENERATOR = KeyGenerator.getInstance("AES");
        KEY_GENERATOR.init(256, new SecureRandom());
        SSE_KEY = new SSECustomerKey(KEY_GENERATOR.generateKey());

        try {
            S3_CLIENT = AmazonS3ClientBuilder.standard()
                    .withCredentials(new ProfileCredentialsProvider())
                    .withRegion(clientRegion)
                    .build();

            // Upload an object.
            uploadObject(bucketName, keyName, new File(uploadFileName));

            // Download the object.
            downloadObject(bucketName, keyName);

            // Verify that the object is properly encrypted by attempting to retrieve it
            // using the encryption key.
            retrieveObjectMetadata(bucketName, keyName);

            // 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();
        }
    }

    private static void uploadObject(String bucketName, String keyName, File file) {
        PutObjectRequest putRequest = new PutObjectRequest(bucketName, keyName, file).withSSECustomerKey(SSE_KEY);
        S3_CLIENT.putObject(putRequest);
        System.out.println("Object uploaded");
    }

    private static void downloadObject(String bucketName, String keyName) throws IOException {
        GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, keyName).withSSECustomerKey(SSE_KEY);
        S3Object object = S3_CLIENT.getObject(getObjectRequest);

        System.out.println("Object content: ");
        displayTextInputStream(object.getObjectContent());
    }

    private static void retrieveObjectMetadata(String bucketName, String keyName) {
        GetObjectMetadataRequest getMetadataRequest = new GetObjectMetadataRequest(bucketName, keyName)
                .withSSECustomerKey(SSE_KEY);
        ObjectMetadata objectMetadata = S3_CLIENT.getObjectMetadata(getMetadataRequest);
        System.out.println("Metadata retrieved. Object size: " + objectMetadata.getContentLength());
    }

    private static void copyObject(String bucketName, String keyName, String targetKeyName)
            throws NoSuchAlgorithmException {
        // Create a new encryption key for target so that the target is saved using
        // SSE-C.
        SSECustomerKey newSSEKey = new SSECustomerKey(KEY_GENERATOR.generateKey());

        CopyObjectRequest copyRequest = new CopyObjectRequest(bucketName, keyName, bucketName, targetKeyName)
                .withSourceSSECustomerKey(SSE_KEY)
                .withDestinationSSECustomerKey(newSSEKey);

        S3_CLIENT.copyObject(copyRequest);
        System.out.println("Object copied");
    }

    private static void displayTextInputStream(S3ObjectInputStream input) throws IOException {
        // Read one line at a time from the input stream and display each line.
        BufferedReader reader = new BufferedReader(new InputStreamReader(input));
        String line;
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }
        System.out.println();
    }
}
```

------
#### [ .NET ]

**nota**  
Para exemplos de upload de objetos grandes usando a API multipart upload, consulte [Fazer upload de um objeto usando multipart upload](mpu-upload-object.md) e [Uso dos AWS SDKs (API de baixo nível)](mpu-upload-object.md#mpu-upload-low-level).

Para obter informações sobre como configurar e executar exemplos de código, consulte [Conceitos básicos do AWS SDK for .NET](https://docs.aws.amazon.com/sdk-for-net/latest/developer-guide/net-dg-setup.html) no *Guia do desenvolvedor do AWS SDK for .NET*. 

**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;

        public static void Main()
        {
            client = new AmazonS3Client(bucketRegion);
            ObjectOpsUsingClientEncryptionKeyAsync().Wait();
        }
        private static async Task ObjectOpsUsingClientEncryptionKeyAsync()
        {
            try
            {
                // Create an encryption key.
                Aes aesEncryption = Aes.Create();
                aesEncryption.KeySize = 256;
                aesEncryption.GenerateKey();
                string base64Key = Convert.ToBase64String(aesEncryption.Key);

                // 1. Upload the object.
                PutObjectRequest putObjectRequest = await UploadObjectAsync(base64Key);
                // 2. Download the object and verify that its contents matches what you uploaded.
                await DownloadObjectAsync(base64Key, putObjectRequest);
                // 3. Get object metadata and verify that the object uses AES-256 encryption.
                await GetObjectMetadataAsync(base64Key);
                // 4. Copy both the source and target objects using server-side encryption with 
                //    a customer-provided encryption key.
                await CopyObjectAsync(aesEncryption, base64Key);
            }
            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);
            }
        }

        private static async Task<PutObjectRequest> UploadObjectAsync(string base64Key)
        {
            PutObjectRequest putObjectRequest = new PutObjectRequest
            {
                BucketName = bucketName,
                Key = keyName,
                ContentBody = "sample text",
                ServerSideEncryptionCustomerMethod = ServerSideEncryptionCustomerMethod.AES256,
                ServerSideEncryptionCustomerProvidedKey = base64Key
            };
            PutObjectResponse putObjectResponse = await client.PutObjectAsync(putObjectRequest);
            return putObjectRequest;
        }
        private static async Task DownloadObjectAsync(string base64Key, PutObjectRequest putObjectRequest)
        {
            GetObjectRequest getObjectRequest = new GetObjectRequest
            {
                BucketName = bucketName,
                Key = keyName,
                // Provide encryption information for the object stored in Amazon S3.
                ServerSideEncryptionCustomerMethod = ServerSideEncryptionCustomerMethod.AES256,
                ServerSideEncryptionCustomerProvidedKey = base64Key
            };

            using (GetObjectResponse getResponse = await client.GetObjectAsync(getObjectRequest))
            using (StreamReader reader = new StreamReader(getResponse.ResponseStream))
            {
                string content = reader.ReadToEnd();
                if (String.Compare(putObjectRequest.ContentBody, content) == 0)
                    Console.WriteLine("Object content is same as we uploaded");
                else
                    Console.WriteLine("Error...Object content is not same.");

                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,

                // The object stored in Amazon S3 is encrypted, so provide the necessary encryption information.
                ServerSideEncryptionCustomerMethod = ServerSideEncryptionCustomerMethod.AES256,
                ServerSideEncryptionCustomerProvidedKey = base64Key
            };

            GetObjectMetadataResponse getObjectMetadataResponse = await client.GetObjectMetadataAsync(getObjectMetadataRequest);
            Console.WriteLine("The object metadata show encryption method used is: {0}", getObjectMetadataResponse.ServerSideEncryptionCustomerMethod);
            // Assert.AreEqual(ServerSideEncryptionCustomerMethod.AES256, getObjectMetadataResponse.ServerSideEncryptionCustomerMethod);
        }
        private static async Task CopyObjectAsync(Aes aesEncryption, string base64Key)
        {
            aesEncryption.GenerateKey();
            string copyBase64Key = Convert.ToBase64String(aesEncryption.Key);

            CopyObjectRequest copyRequest = new CopyObjectRequest
            {
                SourceBucket = bucketName,
                SourceKey = keyName,
                DestinationBucket = bucketName,
                DestinationKey = copyTargetKeyName,
                // Information about the source object's encryption.
                CopySourceServerSideEncryptionCustomerMethod = ServerSideEncryptionCustomerMethod.AES256,
                CopySourceServerSideEncryptionCustomerProvidedKey = base64Key,
                // Information about the target object's encryption.
                ServerSideEncryptionCustomerMethod = ServerSideEncryptionCustomerMethod.AES256,
                ServerSideEncryptionCustomerProvidedKey = copyBase64Key
            };
            await client.CopyObjectAsync(copyRequest);
        }
    }
}
```

------

## Uso dos AWS SDKs para especificar SSE-C para uploads fracionados
<a name="sse-c-using-sdks-multipart-uploads"></a>

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 carregar objetos grandes, é possível usar APIs de multipart upload. Para obter mais informações, consulte [Carregar e copiar objetos usando upload fracionado no Amazon S3](mpuoverview.md). 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.
+ Ao usar a API `TransferManager` simplificada, forneça os cabeçalhos específicos de criptografia em `PutObjectRequest`. Para obter mais informações, consulte [Fazer upload de um objeto usando multipart upload](mpu-upload-object.md). 
+ Ao usar a API de baixo nível, você fornece informações relacionadas à criptografia na `InitiateMultipartUploadRequest`, seguidas por informações de criptografia idênticas em cada `UploadPartRequest`. Você não precisa fornecer cabeçalhos específicos de criptografia na `CompleteMultipartUploadRequest`. Para ver exemplos, consulte [Uso dos AWS SDKs (API de baixo nível)](mpu-upload-object.md#mpu-upload-low-level). 

O exemplo a seguir usa `TransferManager` para criar objetos e mostra como fornecer informações relacionadas a SSE-C. O exemplo faz o seguinte:
+ Cria um objeto usando o método `TransferManager.upload()`. Na instância `PutObjectRequest`, forneça informações da chave de criptografia na solicitação. O Amazon S3 criptografa o objeto usando a chave fornecida pelo cliente.
+ Faz uma cópia do objeto, chamando o método `TransferManager.copy()`. O exemplo instrui o Amazon S3 a criptografar a cópia do objeto usando um novo `SSECustomerKey`. Como o objeto de origem é criptografado usando SSE-C, o `CopyObjectRequest` também fornece a chave de criptografia do objeto de origem para que o Amazon S3 possa descriptografar o objeto antes de copiá-lo. 

**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;

public class ServerSideEncryptionCopyObjectUsingHLwithSSEC {

    public static void main(String[] args) throws Exception {
        Regions clientRegion = Regions.DEFAULT_REGION;
        String bucketName = "*** Bucket name ***";
        String fileToUpload = "*** File path ***";
        String keyName = "*** New object key name ***";
        String targetKeyName = "*** Key name for object copy ***";

        try {
            AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
                    .withRegion(clientRegion)
                    .withCredentials(new ProfileCredentialsProvider())
                    .build();
            TransferManager tm = TransferManagerBuilder.standard()
                    .withS3Client(s3Client)
                    .build();

            // Create an object from a file.
            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, keyName, new File(fileToUpload));

            // Create an encryption key.
            KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
            keyGenerator.init(256, new SecureRandom());
            SSECustomerKey sseCustomerEncryptionKey = new SSECustomerKey(keyGenerator.generateKey());

            // Upload the object. TransferManager uploads asynchronously, so this call
            // returns immediately.
            putObjectRequest.setSSECustomerKey(sseCustomerEncryptionKey);
            Upload upload = tm.upload(putObjectRequest);

            // Optionally, wait for the upload to finish before continuing.
            upload.waitForCompletion();
            System.out.println("Object created.");

            // 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);

            // Copy the object. TransferManager copies asynchronously, so this call returns
            // immediately.
            Copy copy = tm.copy(copyObjectRequest);

            // Optionally, wait for the upload to finish before continuing.
            copy.waitForCompletion();
            System.out.println("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();
        }
    }
}
```

------
#### [ .NET ]

Para carregar objetos grandes, você pode usar a API de carregamentos fracionados (consulte [Carregar e copiar objetos usando upload fracionado no Amazon S3](mpuoverview.md)). AWS O SDK for .NET fornece 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.
+ Ao usar a API do `Transfer-Utility `de alto nível, você fornece os cabeçalhos específicos de criptografia na `TransferUtilityUploadRequest`, conforme mostrado. Para obter exemplos de código, consulte [Fazer upload de um objeto usando multipart upload](mpu-upload-object.md).

  ```
  TransferUtilityUploadRequest request = new TransferUtilityUploadRequest()
  {
      FilePath = filePath,
      BucketName = existingBucketName,
      Key = keyName,
      // Provide encryption information.
      ServerSideEncryptionCustomerMethod = ServerSideEncryptionCustomerMethod.AES256,
      ServerSideEncryptionCustomerProvidedKey = base64Key,
  };
  ```
+ 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 [Uso dos AWS SDKs (API de baixo nível)](mpu-upload-object.md#mpu-upload-low-level).

  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();
          }
  
          private static async Task CopyObjClientEncryptionKeyAsync()
          {
              Aes aesEncryption = Aes.Create();
              aesEncryption.KeySize = 256;
              aesEncryption.GenerateKey();
              string base64Key = Convert.ToBase64String(aesEncryption.Key);
  
              await CreateSampleObjUsingClientEncryptionKeyAsync(base64Key, s3Client);
  
              await CopyObjectAsync(s3Client, base64Key);
          }
          private static async Task CopyObjectAsync(IAmazonS3 s3Client, string base64Key)
          {
              List<CopyPartResponse> uploadResponses = new List<CopyPartResponse>();
  
              // 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 ***"
                  };
  
                  GetObjectMetadataResponse getObjectMetadataResponse = await s3Client.GetObjectMetadataAsync(getObjectMetadataRequest);
  
                  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);
              }
          }
          private static async Task CreateSampleObjUsingClientEncryptionKeyAsync(string base64Key, IAmazonS3 s3Client)
          {
              // List to store upload part responses.
              List<UploadPartResponse> uploadResponses = new List<UploadPartResponse>();
  
              // 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
                      };
  
                      // Upload part and add response to our list.
                      uploadResponses.Add(await s3Client.UploadPartAsync(uploadRequest));
  
                      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);
              }
          }
      }
  }
  ```

------

# Bloquear ou desbloquear o SSE-C para um bucket de uso geral
<a name="blocking-unblocking-s3-c-encryption-gpb"></a>

A maioria dos casos de uso modernos no Amazon S3 não usa mais o SSE-C com chaves gerenciadas pelo cliente (SSE-C) porque esse tipo de criptografia não tem a flexibilidade da criptografia do lado do servidor com chaves gerenciadas pelo Amazon S3 (SSE-S3) ou da criptografia do lado do servidor com chaves do AWS KMS (SSE-KMS). Como o SSE-C exige que você forneça a chave de criptografia toda vez que interage com seus dados criptografados por SSE-C, é impossível compartilhar a chave SSE-C com outros usuários, perfis ou serviços da AWS que leem dados dos seus buckets do S3 para operar com seus dados.

Para limitar os tipos de criptografia do lado do servidor que é possível usar em buckets de uso geral, você pode optar por bloquear as solicitações de gravação SSE-C atualizando a configuração de criptografia padrão para os buckets. Essa configuração em nível de bucket bloqueia solicitações de upload de objetos que especificam SSE-C. Quando o SSE-C é bloqueado para um bucket, qualquer solicitação `PutObject`, `CopyObject`, `PostObject` ou de multipart upload ou replicação que especifique a criptografia SSE-C será rejeitada com um erro HTTP 403 `AccessDenied`.

Essa configuração é um parâmetro na API `PutBucketEncryption` e também poderá ser atualizada usando o console do S3, a AWS CLI e SDKs da AWS se você tiver a permissão `s3:PutEncryptionConfiguration`.

Os valores válidos são `SSE-C`, que bloqueia a criptografia SSE-C para o bucket de uso geral, e `NONE`, que permite o uso do SSE-C para gravações no bucket.

**Importante**  
A partir de abril de 2026, a AWS desabilitará a criptografia do lado do servidor com chaves fornecidas pelo cliente (SSE-C) para todos os buckets novos. Além disso, a criptografia SSE-C será desabilitada para todos os buckets existentes em Contas da AWS que não tenham dados criptografados por SSE-C. Com essas mudanças, as poucas aplicações que precisam da criptografia SSE-C deverão habilitar deliberadamente o uso do SSE-C por meio da API [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html) após a criação do bucket. Nesses casos, talvez seja necessário atualizar scripts de automação, modelos do CloudFormation ou outras ferramentas de configuração de infraestrutura para definir essas configurações. Para ter mais informações, consulte a publicação do [Blog do AWS Storage](https://aws.amazon.com/blogs/storage/advanced-notice-amazon-s3-to-disable-the-use-of-sse-c-encryption-by-default-for-all-new-buckets-and-select-existing-buckets-in-april-2026/).

## Permissões
<a name="bucket-encryption-permissions"></a>

Use a `PutBucketEncryption` API ou o console do S3, SDKs da AWS ou a AWS CLI para bloquear ou desbloquear tipos de criptografia para um bucket de uso geral. É necessário ter a seguinte permissão:
+ `s3:PutEncryptionConfiguration`

Use a `GetBucketEncryption` API ou o console do S3, SDKs da AWS ou a AWS CLI para visualizar os tipos de criptografia bloqueados para um bucket de uso geral. É necessário ter a seguinte permissão:
+ `s3:GetEncryptionConfiguration`

## Considerações antes de bloquear a criptografia SSE-C
<a name="considerations-before-blocking-sse-c"></a>

Depois de bloquear o SSE-C para qualquer bucket, o seguinte comportamento de criptografia será aplicado:
+ Não há alteração na criptografia dos objetos que existiam no bucket antes de você bloquear a criptografia SSE-C.
+ Depois de bloquear a criptografia SSE-C, você pode continuar fazendo solicitações GetObject e HeadObject em objetos preexistentes criptografados com SSE-C, desde que forneça os cabeçalhos SSE-C necessários nas solicitações.
+ Quando o SSE-C é bloqueado para um bucket, qualquer solicitação `PutObject`, `CopyObject`, `PostObject` ou de multipart upload que especificar a criptografia SSE-C será rejeitada com o erro HTTP 403 `AccessDenied`.
+ Se um bucket de destino para replicação tiver o SSE-C bloqueado e os objetos de origem que estão sendo replicados forem criptografados com o SSE-C, a replicação falhará com o erro HTTP 403 `AccessDenied`.

Se você quiser verificar se está usando o SSE-C em qualquer um dos seus buckets antes de bloquear esse tipo de criptografia, use ferramentas como o [AWS CloudTrail](https://aws.amazon.com/cloudtrail/) para monitorar o acesso aos seus dados. Esta [publicação de blog](https://aws.amazon.com/blogs/storage/auditing-amazon-s3-server-side-encryption-methods-for-object-uploads/) mostra como auditar métodos de criptografia para uploads de objetos em tempo real. Você também pode consultar este [artigo do re:Post](https://repost.aws/articles/ARhGC12rOiTBCKHcAe9GZXCA/how-to-detect-existing-use-of-sse-c-in-your-amazon-s3-buckets) para saber como consultar os relatórios do Inventário S3 para ver se você tem algum objeto criptografado com SSE-C.

### Etapas
<a name="block-sse-c-gpb-steps"></a>

É possível bloquear ou desbloquear a criptografia do lado do servidor com chaves fornecidas pelo cliente (SSE-C) para um bucket de uso geral usando o console do Amazon S3, a AWS Command Line Interface (AWS CLI), a API REST do Amazon S3 e SDKs da AWS.

### Usar o console do S3
<a name="block-sse-c-gpb-console"></a>

Para bloquear ou desbloquear a criptografia SSE-C para um bucket usando o console Amazon 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/.

1. No painel de navegação à esquerda, escolha **Buckets de uso geral**.

1. Selecione o bucket para o qual você gostaria de bloquear a criptografia SSE-C.

1. Selecione a guia **Propriedades** do bucket.

1. Navegue até o painel de propriedades **Criptografia padrão** do bucket e selecione **Editar**.

1. Na seção **Tipos de criptografia bloqueados**, marque a caixa ao lado de **Criptografia do lado do servidor com chaves fornecidas pelo cliente (SSE-C) para bloquear a criptografia SSE-C** ou desmarque essa caixa para permitir o SSE-C.

1. Escolha **Salvar alterações**.

### Como usar o AWS CLI
<a name="block-sse-c-gpb-cli"></a>

Para instalar a AWS CLI, consulte [Instalar ou atualizar a versão mais recente da AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) no *Guia do usuário da versão 2 da AWS Command Line Interface*.

O exemplo da CLI a seguir mostra como bloquear ou desbloquear a criptografia SSE-C para um bucket de uso geral usando a AWS CLI. Para usar o comando, substitua os *espaços reservados para entrada do usuário* por suas próprias informações.

**Solicitação para bloquear a criptografia SSE-C para um bucket de uso geral:**

```
aws s3api put-bucket-encryption \
  --bucket amzn-s3-demo-bucket \
  --server-side-encryption-configuration '{
    "Rules": [{
      "BlockEncryptionTypes": {
        "EncryptionType": "SSE-C"
      }
    }]
  }'
```

**Solicitação para habilitar o uso da criptografia SSE-C em um bucket de uso geral:**

```
aws s3api put-bucket-encryption \
  --bucket amzn-s3-demo-bucket \
  --server-side-encryption-configuration '{
    "Rules": [{
      "BlockEncryptionTypes": {
        "EncryptionType": "NONE"
      }
    }]
  }'
```

## Usar SDKs da AWS
<a name="block-sse-c-gpb-sdks"></a>

------
#### [ SDK for Java 2.x ]

Os seguintes exemplos mostram como bloquear ou desbloquear gravações da criptografia SSE-C em buckets de uso geral usando os SDKs da AWS:

**Exemplo: solicitação PutBucketEncryption que define a configuração de criptografia padrão como SSE-S3 e bloqueia o SSE-C**

```
S3Client s3Client = ...;
ServerSideEncryptionByDefault defaultSse = ServerSideEncryptionByDefault
        .builder()
        .sseAlgorithm(ServerSideEncryption.AES256)
        .build();
BlockedEncryptionTypes blockedEncryptionTypes = BlockedEncryptionTypes
        .builder()
        .encryptionType(EncryptionType.SSE_C)
        .build();
ServerSideEncryptionRule rule = ServerSideEncryptionRule.builder()
        .applyServerSideEncryptionByDefault(defaultSse)
        .blockedEncryptionTypes(blockedEncryptionTypes)
        .build();
s3Client.putBucketEncryption(be -> be
        .bucket(bucketName)
        .serverSideEncryptionConfiguration(c -> c.rules(rule)));
```

**Exemplo: solicitação PutBucketEncryption que define a configuração de criptografia padrão como SSE-S3 e desbloqueia o SSE-C**

```
S3Client s3Client = ...;
ServerSideEncryptionByDefault defaultSse = ServerSideEncryptionByDefault
        .builder()
        .sseAlgorithm(ServerSideEncryption.AES256)
        .build();
BlockedEncryptionTypes blockedEncryptionTypes = BlockedEncryptionTypes
        .builder()
        .encryptionType(EncryptionType.NONE)
        .build();
ServerSideEncryptionRule rule = ServerSideEncryptionRule.builder()
        .applyServerSideEncryptionByDefault(defaultSse)
        .blockedEncryptionTypes(blockedEncryptionTypes)
        .build();
s3Client.putBucketEncryption(be -> be
        .bucket(bucketName)
        .serverSideEncryptionConfiguration(c -> c.rules(rule)));
```

------
#### [ SDK for Python Boto3 ]

**Exemplo: solicitação PutBucketEncryption que define a configuração de criptografia padrão como SSE-S3 e bloqueia o SSE-C**

```
s3 = boto3.client("s3")
s3.put_bucket_encryption(
    Bucket="amzn-s3-demo-bucket",
    ServerSideEncryptionConfiguration={
        "Rules":[{
            "ApplyServerSideEncryptionByDefault": {
                "SSEAlgorithm": "AES256"
            },
            "BlockedEncryptionTypes": {
                "EncryptionType": ["SSE-C"]
            }
        }]
    }
)
```

**Exemplo: solicitação PutBucketEncryption que define a configuração de criptografia padrão como SSE-S3 e desbloqueia o SSE-C**

```
s3 = boto3.client("s3")
s3.put_bucket_encryption(
    Bucket="amzn-s3-demo-bucket",
    ServerSideEncryptionConfiguration={
        "Rules":[{
            "ApplyServerSideEncryptionByDefault": {
                "SSEAlgorithm": "AES256"
            },
            "BlockedEncryptionTypes": {
                "EncryptionType": ["NONE"]
            }
        }]
    }
)
```

------

## Uso da API REST
<a name="bucket-tag-add-api"></a>

Para ter informações sobre a compatibilidade oferecida pela API REST do Amazon S3 para bloquear ou desbloquear a criptografia SSE-C para um bucket de uso geral, consulte a seguinte seção na *Referência de API do Amazon Simple Storage Service*:
+ Tipo de dados [BlockedEncryptionTypes](https://docs.aws.amazon.com/AmazonS3/latest/API/API_BlockedEncryptionTypes.html) usado no tipo de dados [ServerSideEncryptionRule](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ServerSideEncryptionRule.html) das operações de API [PutBucketEncryption](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html) e [GetBucketEncryption](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketEncryption.html).

# Perguntas frequentes sobre a configuração padrão do SSE-C para novos buckets
<a name="default-s3-c-encryption-setting-faq"></a>

**Importante**  
A partir de abril de 2026, a AWS desabilitará a criptografia do lado do servidor com chaves fornecidas pelo cliente (SSE-C) para todos os buckets novos. Além disso, a criptografia SSE-C será desabilitada para todos os buckets existentes em Contas da AWS que não tenham dados criptografados por SSE-C. Com essas mudanças, as poucas aplicações que precisam da criptografia SSE-C deverão habilitar deliberadamente o uso do SSE-C por meio da API [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html) após a criação do bucket. Nesses casos, talvez seja necessário atualizar scripts de automação, modelos do CloudFormation ou outras ferramentas de configuração de infraestrutura para definir essas configurações. Para ter mais informações, consulte a publicação do [Blog do AWS Storage](https://aws.amazon.com/blogs/storage/advanced-notice-amazon-s3-to-disable-the-use-of-sse-c-encryption-by-default-for-all-new-buckets-and-select-existing-buckets-in-april-2026/).

As seções a seguir respondem a perguntas sobre essa atualização.

**1. Em abril de 2026, a nova configuração padrão do SSE-C entrará em vigor para todos os buckets recém-criados?**

Sim. Ao longo de abril de 2026, a nova configuração padrão será implementada gradualmente em todas as regiões da AWS.

**2. Quanto tempo vai levar para que esse lançamento abranja todas as regiões da AWS?**

Essa atualização levará várias semanas para ser totalmente lançada. Publicaremos uma postagem em Novidades quando começarmos a implantar essa atualização.

**3. Como saberei que a atualização foi concluída?**

É possível determinar facilmente se a alteração foi concluída em sua região da AWS criando um bucket e chamando a operação de API [GetBucketEncryption](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketEncryption.html) para determinar se a criptografia SSE-C está desabilitada. Depois que a atualização for concluída, a criptografia SSE-C será desabilitada automaticamente por padrão em todos os novos buckets de uso geral. Você pode ajustar essas configurações depois de criar o bucket do S3 chamando a operação de API [PutBucketEncryption](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html).

**4. O Amazon S3 vai atualizar as configurações dos meus buckets existentes?**

Se sua conta da AWS não tiver nenhum objeto criptografado com SSE-C, a AWS desabilitará a criptografia SSE-C em todos os seus buckets atuais. Se algum bucket na sua conta da AWS tiver objetos criptografados com SSE-C, a AWS não alterará as configurações em nenhum dos buckets dessa conta. Depois que a alteração `CreateBucket` for concluída em sua região da AWS, a nova configuração padrão será aplicada a todos os novos buckets de uso geral. 

 **5. Posso desabilitar a criptografia SSE-C para meus buckets antes que a atualização seja concluída?** 

Sim. Você pode desabilitar a criptografia SSE-C para qualquer bucket chamando a operação de API [PutBucketEncryption](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html) e especificando o novo cabeçalho `BlockedEncryptionTypes`. 

**6. Posso usar o SSE-C para criptografar dados em meus novos buckets?**

Sim. A maioria dos casos de uso modernos no Amazon S3 não usa mais o SSE-C porque esse tipo de criptografia não tem a flexibilidade da criptografia do lado do servidor com chaves gerenciadas pelo Amazon S3 (SSE-S3) ou da criptografia do lado do servidor com chaves do AWS KMS (SSE-KMS). Se precisar usar a criptografia SSE-C em um novo bucket, é possível outro bucket e, em seguida, habilitar o uso da criptografia SSE-C em uma solicitação `PutBucketEncryption` separada.

 **Exemplo**

```
aws s3api create-bucket \  
bucket amzn-s3-demo-bucket \ 
region us-east-1 \ 
  
aws s3api put-bucket-encryption \  
-- bucket amzn-s3-demo-bucket \
-- server-side-encryption-configuration \
'{ \Rules\: [{   
   {   
   \ApplyServerSideEncryptionByDefault\: {   
     \SSEAlgorithm\: \AES256\,  
    },   
   \BlockedEncryptionTypes\: [  
     \EncryptionType\:\NONE\]   
   }   
   }]   
}'
```

**nota**  
Para chamar a API `PutBucketEncryption`, é necessário ter a permissão `s3:PutEncryptionConfiguration`. 

**7. Como o bloqueio do SSE-C afeta as solicitações ao meu bucket?**

Quando o SSE-C é bloqueado para um bucket, qualquer solicitação `PutObject`, `CopyObject`, `PostObject`, de multipart upload ou de replicação que especificar a criptografia SSE-C será rejeitada com o erro HTTP 403 `AccessDenied`. 

# Proteger dados usando a criptografia do lado do cliente
<a name="UsingClientSideEncryption"></a>

A *criptografia do lado do cliente* é o ato de criptografar dados localmente para ajudar a garantir sua segurança em trânsito e em repouso. Para criptografar os objetos antes de enviá-los ao Amazon S3, use o cliente de criptografia do Amazon S3. Quando os objetos são criptografados dessa maneira, eles não são expostos a terceiros, inclusive a AWS. O Amazon S3 recebe os objetos já criptografados. O Amazon S3 não atua na criptografia ou descriptografia dos objetos. Você pode usar o cliente de criptografia do Amazon S3 e a [criptografia do lado do servidor](serv-side-encryption.md) para criptografar os dados. Quando você envia objetos criptografados para o Amazon S3, o Amazon S3 não reconhece os objetos como sendo criptografados, ele detecta apenas objetos típicos.

O cliente de criptografia do Amazon S3 funciona como um intermediário entre você e o Amazon S3. Depois de instanciar o cliente de criptografia do Amazon S3, os objetos são automaticamente criptografados e descriptografados como parte do Amazon S3 e das solicitações `PutObject` e `GetObject`. Todos os objetos são criptografados com uma chave de dados exclusiva. O cliente de criptografia do Amazon S3 não usa nem interage com chaves de bucket, mesmo se você especificar uma chave do KMS como a chave de encapsulamento.

O *Guia do desenvolvedor do cliente de criptografia do Amazon S3* concentra-se nas versões 3.0 e posteriores do cliente de criptografia do Amazon S3. Para obter mais informações, consulte [Qual é o cliente de criptografia do Amazon S3?](https://docs.aws.amazon.com//amazon-s3-encryption-client/latest/developerguide/what-is-s3-encryption-client.html) no *Guia do desenvolvedor do cliente de criptografia do Amazon S3*.

Para obter mais informações sobre versões anteriores do cliente de criptografia do Amazon S3, consulte o Guia do desenvolvedor do SDK AWS de acordo com a sua linguagem de programação.
+ [AWS SDK para Java](https://docs.aws.amazon.com//sdk-for-java/v1/developer-guide/examples-crypto.html)
+ [AWS SDK para .NET](https://docs.aws.amazon.com//sdk-for-net/v3/developer-guide/kms-keys-s3-encryption.html)
+ [AWS SDK para Go](https://docs.aws.amazon.com//sdk-for-go/v1/developer-guide/welcome.html)
+ [AWS SDK para PHP](https://docs.aws.amazon.com//sdk-for-php/v3/developer-guide/s3-encryption-client.html)
+ [AWS SDK para Ruby](https://docs.aws.amazon.com//sdk-for-ruby/v3/api/Aws/S3/Encryption.html)
+ [AWS SDK para C\$1\$1](https://docs.aws.amazon.com//sdk-for-cpp/v1/developer-guide/welcome.html)

# Proteger dados em trânsito com criptografia
<a name="UsingEncryptionInTransit"></a>

O Amazon S3 aceita os protocolos HTTP e HTTPS para transmissão de dados. O HTTP transmite dados em texto simples, enquanto o HTTPS adiciona uma camada de segurança ao criptografar dados usando o Transport Layer Security (TLS). O TLS oferece proteção contra espionagem, adulteração de dados e ataques man-in-the-middle. Embora o tráfego HTTP seja aceito, a maioria das implementações usa criptografia em trânsito com HTTPS e TLS para proteger os dados enquanto eles trafegam entre os clientes e o Amazon S3.

## Suporte a TLS 1.2 e TLS 1.3
<a name="UsingEncryptionInTransit.TLS-support"></a>

O Amazon S3 é compatível com o TLS 1.2 e o TLS 1.3 para conexões HTTPS em todos os endpoints de API para todas as Regiões da AWS. O S3 negocia automaticamente a proteção mais forte do TLS permitida pelo software-cliente e pelo endpoint do S3 que você está acessando. Como as ferramentas atuais (2014 ou posteriores) da AWS, inclusive os SDKs da AWS, e a AWS CLI, são automaticamente padronizadas para o TLS 1.3, não é necessária nenhuma ação de sua parte. Você pode substituir essa negociação automática por meio das configurações do cliente para especificar uma versão do TLS se precisar de compatibilidade com versões anteriores do TLS 1.2. Ao usar o TLS 1.3, você tem a opção de configurar a troca de chaves híbrida pós-quântica (ML-KEM) para fazer solicitações pós-quânticas ao Amazon S3. Para obter mais informações, consulte [Configurar o TLS híbrido pós-quântico para seu cliente](pqtls-how-to.md). 

**nota**  
O TLS 1.3 é compatível com todos os endpoints do S3, exceto no AWS PrivateLink para Amazon S3 e nos pontos de acesso multirregionais.

## Monitorar o uso de TLS
<a name="UsingEncryptionInTransit.monitoring"></a>

É possível usar os logs de acesso ao servidor do Amazon S3 ou o AWS CloudTrail para monitorar solicitações aos buckets do Amazon S3. Ambas as opções de registro em log registram a versão do TLS e a suíte de cifras usada em cada solicitação.
+ **Logs de acesso ao servidor do Amazon S3**: o registro em log de acesso ao servidor oferece registros detalhados das solicitações feitas a um bucket. 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 [Formato dos logs de acesso ao servidor do Amazon S3](LogFormat.md).
+ **AWS CloudTrail**: o [AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html) é um serviço que fornece um registro das ações realizadas por um usuário, perfil ou serviço da AWS. O CloudTrail captura todas as chamadas de API para o Amazon S3 como eventos. Para obter mais informações, consulte [Eventos do CloudTrail no Amazon S3](cloudtrail-logging-s3-info.md).

## Aplicar a criptografia em trânsito
<a name="UsingEncryptionInTransit.enforcement"></a>

É uma prática recomendada de segurança impor a criptografia de dados em trânsito para o Amazon S3. É possível impor a comunicação somente por HTTPS ou o uso de uma versão específica do TLS por meio de vários mecanismos de política. Isso inclui políticas baseadas em recurso do IAM para buckets do S3 ([políticas de bucket](bucket-policies.md)), [políticas de controle de serviços](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html) (SCPs), [políticas de controle de recursos](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html) (RCPs) e [políticas de endpoint da VPC](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-access.html).

### Exemplos de política de bucket para aplicar a criptografia em trânsito
<a name="UsingEncryptionInTransit.bucket-policy-example"></a>

É possível usar a [chave de condição `s3:TlsVersion` do S3](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html#amazons3-policy-keys) para restringir o acesso aos buckets do Amazon S3 com base na versão do TLS usada pelo cliente. Para obter mais informações, consulte [Exemplo 6: exigir uma versão mínima do TLS](amazon-s3-policy-keys.md#example-object-tls-version).

**Example de política de bucket que impõe o TLS 1.3 usando a chave de condição `S3:TlsVersion`**  

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "DenyInsecureConnections",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::amzn-s3-demo-bucket1",
        "arn:aws:s3:::amzn-s3-demo-bucket1/*"
      ],
      "Condition": {
        "NumericLessThan": {
          "s3:TlsVersion": "1.3"
        }
      }
    }
  ]
}
```

É possível usar a [chave de condição global](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html) `aws:SecureTransport` em sua política de bucket do S3 para verificar se a solicitação foi enviada por HTTPS (TLS). Diferentemente do exemplo anterior, essa condição não verifica uma versão específica do TLS. Para obter mais informações, consulte [Restringir o acesso somente a solicitações HTTPS](example-bucket-policies.md#example-bucket-policies-use-case-HTTP-HTTPS-1).

**Example de política de bucket que impõe HTTPS usando a chave de condição `aws:SecureTransport`**  

```
{
    "Version":"2012-10-17",		 	 	 		 	 	 
    "Statement": [
     {
        "Sid": "RestrictToTLSRequestsOnly",		 	 	 
        "Action": "s3:*",
        "Effect": "Deny",
        "Resource": [
            "arn:aws:s3:::amzn-s3-demo-bucket1",
            "arn:aws:s3:::amzn-s3-demo-bucket1/*"
        ],
        "Condition": {
            "Bool": {
                "aws:SecureTransport": "false"
            }
        },
        "Principal": "*"
    }
  ]
}
```

**Exemplo de política com base em chaves e mais exemplos**  
É possível usar os dois tipos de chave de condição dos exemplos anteriores em uma política. Para ter mais informações e conhecer abordagens adicionais de imposição, consulte o artigo [Enforcing encryption in transit with TLS1.2 or higher with Amazon S3](https://aws.amazon.com/blogs/storage/enforcing-encryption-in-transit-with-tls1-2-or-higher-with-amazon-s3/) do AWS Storage Blog.

# Usar TLS pós-quântico híbrido com o Amazon S3
<a name="UsingEncryptionInTransit.PQ-TLS"></a>

O Amazon S3 é compatível com a opção de troca de chaves híbrida pós-quântica para o protocolo de criptografia de rede TLS. Você pode usar essa opção de TLS ao fazer solicitações a endpoints do Amazon S3 usando o TLS 1.3. As suítes de cifras clássicas que o S3 permite para sessões TLS tornam inviáveis os ataques de força bruta nos mecanismos de troca de chaves com a tecnologia atual. No entanto, se um computador quântico criptograficamente relevante se tornar possível no futuro, as suítes de cifras clássicas usadas nos mecanismos de troca de chaves TLS serão suscetíveis a esses ataques. No momento, o setor está alinhado com relação à troca de chaves híbrida pós-quântica, que combina elementos clássicos e pós-quânticos para garantir que a conexão TLS seja no mínimo tão forte quanto seria com suítes de cifras clássicas. Agora o Amazon S3 oferece suporte ao PQ-TLS híbrido, em conformidade com a especificação padrão do setor da IANA.

Se você estiver desenvolvendo aplicações que dependem da confidencialidade de longo prazo dos dados transmitidos por uma conexão TLS, deverá considerar um plano para migrar para a criptografia pós-quântica antes que computadores quânticos de grande escala sejam disponibilizados para uso. Como parte do Modelo de Responsabilidade Compartilhada, o S3 oferece criptografia com segurança quântica em nossos endpoints de serviço. À medida que os navegadores e aplicações habilitarem o PQ-TLS do lado deles, o S3 escolherá a configuração mais forte possível para proteger os dados em trânsito.

**Tipos de endpoint e compatíveis Regiões da AWS**

O TLS pós-quântico para o Amazon S3 está disponível em todas as Regiões da AWS. Para ver uma lista de endpoints do S3 para cada Região da AWS, consulte [Endpoints e cotas do Amazon Simple Storage Service](https://docs.aws.amazon.com/general/latest/gr/s3.html) na *Referência geral da Amazon Web Services*.

**nota**  
É possível usar TLS híbrido pós-quântico em todos os endpoints do S3, exceto no AWS PrivateLink para Amazon S3, em pontos de acesso multirregionais e no S3 Vectors.

## Usar TLS pós-quântico híbrido com o Amazon S3
<a name="pqtls-details"></a>

É necessário configurar o cliente que faz solicitações ao Amazon S3 para que aceite o TLS híbrido pós-quântico. Ao configurar um ambiente de teste de cliente HTTP ou ambientes de produção, esteja ciente das seguintes informações:

**Criptografia em trânsito**

O TLS híbrido pós-quântico é usado apenas para criptografia em trânsito. Isso protege seus dados enquanto estes trafegam do cliente para o endpoint do S3. Esse novo suporte, combinado com a criptografia do lado do servidor do Amazon S3, utilizando algoritmos AES-256 por padrão, oferece aos clientes criptografia pós-quântica tanto em trânsito quanto em repouso. Para ter mais informações sobre a criptografia do lado do servidor no Amazon S3, consulte [Proteger os dados usando a criptografia do lado do servidor](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html).

**Clientes compatíveis**

O uso do TLS híbrido pós-quântico requer o uso de um cliente compatível com essa funcionalidade. As ferramentas e os SDKs da AWS têm configurações e recursos criptográficos que diferem de uma linguagem para outra e de um runtime para outro. Para saber mais sobre a criptografia pós-quântica de ferramentas específicas, consulte [Habilitar o TLS híbrido pós-quântico](https://docs.aws.amazon.com/payment-cryptography/latest/userguide/pqtls-details.html).

**nota**  
Os detalhes da troca de chaves PQ-TLS para solicitações ao Amazon S3 não estão disponíveis em eventos do AWS CloudTrail ou logs de acesso ao servidor do S3.

## Saiba mais sobre o TLS pós-quântico.
<a name="pqtls-see-also"></a>

Para ter mais informações sobre como usar o TLS híbrido pós-quântico, consulte os recursos a seguir.
+ Para saber mais sobre a criptografia pós-quântica na AWS e ter acesso a links para publicações de blog e artigos de pesquisa, consulte [Criptografia pós-quântica na AWS](https://aws.amazon.com/security/post-quantum-cryptography/).
+ Para obter informações sobre o s2n-tls, consulte [Apresentação do s2n-tls, uma nova implementação do TLS de código aberto](https://aws.amazon.com/blogs/security/introducing-s2n-a-new-open-source-tls-implementation/) e [Uso do s2n-tls](https://github.com/aws/s2n-tls/tree/main/docs/usage-guide).
+ Para obter informações sobre o cliente HTTP de runtime da AWS, consulte [Configuring the AWS CRT-based HTTP client](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/http-configuration-crt.html) (Configurar o cliente HTTP da baseado em CRT) no *Guia do desenvolvedor do AWS SDK for Java 2.x*.
+ Para obter informações sobre o projeto de criptografia pós-quântica no Instituto Nacional de Padrões e Tecnologia (NIST — National Institute for Standards and Technology), consulte [Criptografia pós-quântica](https://csrc.nist.gov/Projects/Post-Quantum-Cryptography).
+ Para ter informações sobre a padronização da criptografia pós-quântica do NIST, consulte [Post-Quantum Cryptography](https://csrc.nist.gov/Projects/post-quantum-cryptography/post-quantum-cryptography-standardization) no site do NIST.

# Configurar o TLS híbrido pós-quântico para seu cliente
<a name="pqtls-how-to"></a>

Para usar o PQ-TLS com o Amazon S3, é necessário configurar o cliente para aceitar algoritmos de troca de chaves pós-quântica. Além disso, o cliente deve permitir a abordagem híbrida, que combina a criptografia de curva elíptica tradicional com algoritmos pós-quânticos, como o Module-Lattice-Based Key Encapsulation Mechanism (ML-KEM).

A configuração específica depende da biblioteca cliente e da linguagem de programação. Para ter mais informações, consulte [Habilitar o TLS híbrido pós-quântico](https://docs.aws.amazon.com/payment-cryptography/latest/userguide/pqtls-details.html).

## Exemplo de configuração de cliente: AWS SDK para Java 2
<a name="UsingEncryptionInTransit.PQ-TLS.configuration.java2-sdk"></a>

Neste procedimento, adicione uma dependência do Maven para o cliente HTTP de runtime comum da AWS. Em seguida, configure um cliente HTTP com preferência em TLS pós-quântico. Em seguida, crie um cliente do Amazon S3 que use o cliente HTTP.

**nota**  
O cliente HTTP de runtime comum da AWS, que estava disponível como uma prévia, tornou-se disponível para o público em fevereiro de 2023. Nesse lançamento, a classe `tlsCipherPreference` e o parâmetro de método `tlsCipherPreference()` foram substituídos pelo parâmetro de método `postQuantumTlsEnabled()`. Se você estava usando este exemplo durante a prévia, precisará atualizar seu código.

1. Adicione o cliente de runtime comum da AWS às suas dependências do Maven. Recomendamos usar a versão mais recente disponível. 

   Por exemplo, esta instrução adiciona a versão `2.30.22` do cliente de runtime comum da AWS para suas dependências do Maven. 

   ```
   <dependency>
       <groupId>software.amazon.awssdk</groupId>
       <artifactId>aws-crt-client</artifactId>
       <version>2.30.22</version>
   </dependency>
   ```

1. Para habilitar os pacotes de criptografia pós-quântica híbrida, adicione o AWS SDK for Java 2.x ao seu projeto e inicialize-o. Em seguida, habilite os pacotes de codificação pós-quântica híbrida em seu cliente HTTP, conforme mostrado no exemplo a seguir.

   Esse código usa o parâmetro de método `postQuantumTlsEnabled()` para configurar um [cliente HTTP de runtime da AWS](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/http-configuration-crt.html) que prefere o conjunto de cifras híbridas pós-quânticas recomendado, ECDH com ML-KEM. Em seguida, o cliente HTTP configurado é usado para criar uma instância do cliente assíncrono do Amazon S, [https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3AsyncClient.html](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3AsyncClient.html). Após a conclusão desse código, todas as solicitações de [API do Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/API/) na instância `S3AsyncClient` usarão o TLS híbrido pós-quântico.
**Importante**  
A partir da versão 2.35.11, os chamadores não precisam mais definir `.postQuantumTlsEnabled(true)` para habilitar o TLS híbrido pós-quântico para o cliente. Todas as versões mais recentes que a v2.35.11 têm o TLS pós-quântico habilitado por padrão.

   ```
   // Configure HTTP client
   SdkAsyncHttpClient awsCrtHttpClient = AwsCrtAsyncHttpClient.builder()
             .postQuantumTlsEnabled(true)
             .build();
   
   // Create the Amazon S3 async client
   S3AsyncClient s3Async = S3AsyncClient.builder()
            .httpClient(awsCrtHttpClient)
            .build();
   ```

1. Teste suas chamadas ao Amazon S3 com o TLS híbrido pós-quântico.

   Ao chamar operações de API do Amazon S3 no cliente configurado do Amazon S3, as chamadas são transmitidas ao endpoint do Amazon S3 usando o TLS híbrido pós-quântico. Para testar a configuração, chame uma API do Amazon S3, como `[ListBuckets](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBuckets.html)`.

   ```
   ListBucketsResponse reponse = s3Async.listBuckets();
   ```

### Testar sua configuração TLS pós-quântico híbrido
<a name="pqtls-testing"></a>

Considere a possibilidade de executar os testes a seguir com suítes de cifras híbridas em suas aplicações que chamam o Amazon S3.
+ Execute testes de carga e de comparação. Os pacotes de criptografia híbrida têm uma performance diferente dos algoritmos tradicionais de troca de chaves. Talvez seja necessário ajustar os tempos limite de conexão para permitir os tempos de handshake mais longos. Se você estiver executando dentro de uma função AWS Lambda, estenda a configuração de tempo limite de execução.
+ Tente conectar-se de diferentes locais. Dependendo do caminho de rede que sua solicitação segue, é possível descobrir quais hosts intermediários, proxies ou firewalls com inspeção profunda de pacotes (DPI) bloqueiam a solicitação. Isso pode resultar do uso dos novos pacotes de criptografia na parte [ClientHello](https://tools.ietf.org/html/rfc5246#section-7.4.1.2) do handshake TLS ou das mensagens de troca de chaves maiores. Se você tiver problemas para resolver esses problemas, trabalhe com sua equipe de segurança ou administradores de TI para atualizar a configuração relevante e desbloquear os novos pacotes de criptografia TLS. 