

# Definir e monitorar a criptografia padrão para buckets de diretório
<a name="s3-express-bucket-encryption"></a>

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ítica de acesso, poderá optar por usar a criptografia do lado do servidor com chaves do AWS Key Management Service (AWS KMS) (SSE-KMS).

**nota**  
Recomendamos que a criptografia padrão do bucket use a configuração desejada e que você não a substitua em suas solicitações `CreateSession` ou de objetos `PUT`. Desse modo, os novos objetos são criptografados automaticamente com as configurações de criptografia desejadas. Para ter mais informações sobre os comportamentos de substituição de criptografia em buckets de diretório, consulte [Specifying server-side encryption with AWS KMS for new object uploads](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-specifying-kms-encryption.html).
Para criptografar novos objetos em um bucket de diretório com SSE-KMS, é necessário especificar SSE-KMS como a configuração de criptografia padrão do bucket de diretório com uma chave do KMS (especificamente, uma chave gerenciada pelo cliente). Dessa forma, quando uma sessão é criada para operações de API de endpoint de zona, novos objetos são automaticamente criptografados e descriptografados com chaves de SSE-KMS e de bucket do S3 durante a sessão.
Quando você define a criptografia de bucket padrão como SSE-KMS, as chaves de bucket do S3 permanecem habilitadas para operações `GET` e `PUT` em um bucket de diretório e não podem ser desabilitadas. Não são aceitas chaves de bucket do S3 quando você copia objetos criptografados por SSE-KMS de buckets de uso geral para buckets de diretório, de buckets de diretório para buckets de uso geral ou entre buckets de diretório, por meio de [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html), de [https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html), [da operação Copy em Operações em Lote](directory-buckets-objects-Batch-Ops.md) ou [de trabalhos de import](create-import-job.md). Nesse caso, o Amazon S3 faz uma chamada para o AWS KMS sempre que uma solicitação de cópia é feita para um objeto criptografado pelo KMS. Para ter mais informações sobre como as chaves de bucket do S3 reduzem os custos de solicitação do AWS KMS, consulte [Redução do custo do SSE-KMS com chaves de bucket do Amazon S3](bucket-key.md). 
Ao especificar uma [chave do AWS KMS gerenciada pelo cliente](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk) para criptografia no bucket de diretório, use somente o ID ou o ARN da chave. O formato de alias da chave do KMS não é aceito.
A criptografia de camada dupla do lado do servidor com chaves do AWS KMS (DSSE-KMS) e a criptografia do lado do servidor com chaves fornecidas pelo cliente (SSE-C) não são compatíveis com a criptografia padrão em buckets de diretório.

Para ter mais informações sobre como configurar a criptografia padrão, consulte [Configurar a criptografia padrão](default-bucket-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 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).

## Usar o console do S3
<a name="s3-express-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 **Configurações de criptografia no lado do servidor**, os buckets de diretório usam a criptografia do lado do servidor com **chaves gerenciadas pelo Amazon S3 (SSE-S3)**.

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

## Como usar o AWS CLI
<a name="s3-express-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. Para usar o comando, substitua os *espaços reservados para entrada do usuário* por suas próprias informações.  

```
aws s3api put-bucket-encryption --bucket bucket-base-name--zone-id--x-s3 --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. Para usar o comando, substitua os *espaços reservados para entrada do usuário* por suas próprias informações.  

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

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

Use a operação `PutBucketEncryption` da API REST para definir a criptografia padrão com o tipo de criptografia do lado do servidor a ser utilizado, ou seja, SSE-S3 ou SSE-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*.

## Usar SDKs da AWS
<a name="s3-express-kms-put-bucket-encryption-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 de SDKs da AWS para Java e .NET a seguir definem a configuração de criptografia padrão para um bucket de diretório com SSE-KMS e uma chave de bucket do S3. 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*.

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

Com o AWS SDK for Java 2.x, é possível solicitar que o Amazon S3 use uma AWS KMS key utilizando o método `applyServerSideEncryptionByDefault` para especificar a configuração de criptografia padrão do bucket de diretório para criptografia de dados com a SSE-KMS. É possível criar uma chave de criptografia simétrica do KMS e especificar isso na solicitação.

```
import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.model.PutBucketEncryptionRequest;
import software.amazon.awssdk.services.s3.model.ServerSideEncryption;
import software.amazon.awssdk.services.s3.model.ServerSideEncryptionByDefault;
import software.amazon.awssdk.services.s3.model.ServerSideEncryptionConfiguration;
import software.amazon.awssdk.services.s3.model.ServerSideEncryptionRule;

public class Main {
    public static void main(String[] args) {
        S3Client s3 = S3Client.create();
        String bucketName = "bucket-base-name--zoneid--x-s3";
        String kmsKeyId = "your-kms-customer-managed-key-id";

        // AWS managed KMS keys aren't supported. Only customer-managed keys are supported.
        ServerSideEncryptionByDefault serverSideEncryptionByDefault = ServerSideEncryptionByDefault.builder()
                .sseAlgorithm(ServerSideEncryption.AWS_KMS)
                .kmsMasterKeyID(kmsKeyId)
                .build();

        // The bucketKeyEnabled field is enforced to be true.
        ServerSideEncryptionRule rule = ServerSideEncryptionRule.builder()
                .bucketKeyEnabled(true)
                .applyServerSideEncryptionByDefault(serverSideEncryptionByDefault)
                .build();
  
        ServerSideEncryptionConfiguration serverSideEncryptionConfiguration = ServerSideEncryptionConfiguration.builder()
                .rules(rule)
                .build();

        PutBucketEncryptionRequest putRequest = PutBucketEncryptionRequest.builder()
                .bucket(bucketName)
                .serverSideEncryptionConfiguration(serverSideEncryptionConfiguration)
                .build();

        s3.putBucketEncryption(putRequest);
        
    }
}
```

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 em um bucket de diretório](directory-buckets-objects-upload.md).
+ Em relação a operações de API de carregamento fracionado, consulte [Usar uploads multiparte com buckets de diretório](s3-express-using-multipart-upload.md). 

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

Com o AWS SDK para .NET, é possível solicitar que o Amazon S3 use uma AWS KMS key utilizando o método `ServerSideEncryptionByDefault` para especificar a configuração de criptografia padrão do bucket de diretório para criptografia de dados com a SSE-KMS. Você deve criar uma chave de criptografia simétrica gerenciada pelo cliente e especificar isso na solicitação.

```
    // Set the bucket server side encryption to use AWSKMS with a customer-managed key id.
    // bucketName: Name of the directory bucket. "bucket-base-name--zonsid--x-s3"
    // kmsKeyId: The Id of the customer managed KMS Key. "your-kms-customer-managed-key-id"
    // Returns True if successful.
    public static async Task<bool> SetBucketServerSideEncryption(string bucketName, string kmsKeyId)
    {
        var serverSideEncryptionByDefault = new ServerSideEncryptionConfiguration
        {
            ServerSideEncryptionRules = new List<ServerSideEncryptionRule>
            {
                new ServerSideEncryptionRule
                {
                    ServerSideEncryptionByDefault = new ServerSideEncryptionByDefault
                    {
                        ServerSideEncryptionAlgorithm = ServerSideEncryptionMethod.AWSKMS,
                        ServerSideEncryptionKeyManagementServiceKeyId = kmsKeyId
                    }
                }
            }
        };
        try
        {
            var encryptionResponse =await _s3Client.PutBucketEncryptionAsync(new PutBucketEncryptionRequest
            {
                BucketName = bucketName,
                ServerSideEncryptionConfiguration = serverSideEncryptionByDefault,
            });
            
            return encryptionResponse.HttpStatusCode == HttpStatusCode.OK;
        }
        catch (AmazonS3Exception ex)
        {
            Console.WriteLine(ex.ErrorCode == "AccessDenied"
                ? $"This account does not have permission to set encryption on {bucketName}, please try again."
                : $"Unable to set bucket encryption for bucket {bucketName}, {ex.Message}");
        }
        return false;
    }
```

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 em um bucket de diretório](directory-buckets-objects-upload.md).
+ Em relação a operações de API de carregamento fracionado, consulte [Usar uploads multiparte com buckets de diretório](s3-express-using-multipart-upload.md). 

------

## Monitorar a criptografia padrão para buckets de diretório com o AWS CloudTrail
<a name="s3-express-bucket-encryption-tracking"></a>

É possível acompanhar solicitações de configuração de criptografia padrão para buckets de diretório 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`

**nota**  
Não é possível usar o EventBridge em buckets de diretório.
A criptografia de camada dupla do lado do servidor com chaves do AWS Key Management Service (AWS KMS) (DSSE-KMS) ou a criptografia do lado do servidor com chaves fornecidas pelo cliente (SSE-C) não são aceitas em buckets de diretório.

Para ter mais informações sobre como monitorar a criptografia padrão com o AWS CloudTrail, consulte [Monitorar a criptografia padrão com o AWS CloudTrail e o Amazon EventBridge](bucket-encryption-tracking.md).