

# 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) 