

O AWS SDK para Java 1.x chegou end-of-support em 31 de dezembro de 2025. Recomendamos que você migre para o [AWS SDK for Java 2.x](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/home.html) para continuar recebendo novos recursos, melhorias de disponibilidade e atualizações de segurança.

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Usar criptografia do lado do cliente do Amazon S3
<a name="examples-crypto"></a>

Criptografar dados usando o cliente de criptografia do Amazon S3 é uma maneira de fornecer uma camada adicional de proteção para informações confidenciais armazenadas no Amazon S3. Os exemplos nesta seção demonstram como criar e configurar o cliente de criptografia do Amazon S3 para seu aplicativo.

Se você for novo em criptografia, consulte [Conceitos básicos de criptografia](https://docs.aws.amazon.com/kms/latest/developerguide/crypto-intro.html) no Guia do desenvolvedor do AWS KMS para uma visão geral básica dos termos e algoritmos de criptografia. Para obter informações sobre suporte à criptografia em todos os SDKs da AWS, consulte [Suporte do AWS SDK à criptografia do lado do cliente do Amazon S3](https://docs.aws.amazon.com/general/latest/gr/aws_sdk_cryptography.html) na Referência geral da Amazon Web Services.

**nota**  
Esses exemplos de código pressupõem que você entenda o material em [Usar o AWS SDK para Java](basics.md) e tenha configurado credenciais da AWS padrão usando as informações em [Configurar credenciais e região da AWS para desenvolvimento](setup-credentials.md).

Se você estiver usando a versão 1.11.836 ou anterior do AWS SDK para Java, consulte [Migração do cliente de criptografia do Amazon S3](s3-encryption-migration.md) para obter informações sobre como migrar seus aplicativos para versões posteriores. Se você não conseguir migrar, consulte [este exemplo completo](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/S3Encrypt.java) no GitHub.

Caso contrário, se você estiver usando a versão 1.11.837 ou posterior do AWS SDK para Java, explore os tópicos de exemplo listados abaixo para usar a criptografia do lado do cliente do Amazon S3.

**Topics**
+ [Criptografia do lado do cliente do Amazon S3 com chaves mestras do lado do cliente](examples-crypto-masterkey.md)
+ [Criptografia do lado do cliente do Amazon S3 com chaves gerenciadas do AWS KMS](examples-crypto-kms.md)

# Criptografia do lado do cliente do Amazon S3 com chaves mestras do lado do cliente
<a name="examples-crypto-masterkey"></a>

Os exemplos a seguir usam a classe [AmazonS3EncryptionClientV2Builder](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/AmazonS3EncryptionClientV2Builder.html) para criar um cliente do Amazon S3 com criptografia do lado do cliente ativada. Uma vez ativado, todo objeto que você enviar para o Amazon S3 usando este cliente será criptografado. Todos os objetos obtidos no Amazon S3 por meio deste cliente são automaticamente descriptografados.

**nota**  
Os exemplos a seguir demonstram como usar a criptografia do lado do cliente do Amazon S3 com as chaves mestres clientes gerenciadas do cliente. Para aprender a usar criptografia com chaves gerenciadas pelo AWS KMS, consulte [Criptografia do lado do cliente do Amazon S3 com chaves gerenciadas do AWS KMS](examples-crypto-kms.md).

Você pode escolher um dos dois modos de criptografia ao ativar a criptografia do lado do cliente do Amazon S3: rigorosa autenticada ou autenticada. As seções a seguir mostram como ativar cada tipo. Para saber quais algoritmos cada modo usa, consulte a definição [CryptoMode](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/model/CryptoMode.html).

## Requer importações
<a name="required-imports"></a>

Importe as seguintes classes para esses exemplos.

 **Importações** 

```
import com.amazonaws.ClientConfiguration;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3EncryptionClientV2Builder;
import com.amazonaws.services.s3.AmazonS3EncryptionV2;
import com.amazonaws.services.s3.model.CryptoConfigurationV2;
import com.amazonaws.services.s3.model.CryptoMode;
import com.amazonaws.services.s3.model.EncryptionMaterials;
import com.amazonaws.services.s3.model.StaticEncryptionMaterialsProvider;
```

## Criptografia rigorosa autenticada
<a name="strict-authenticated-encryption"></a>

A criptografia rigorosa autenticada é o modo padrão se nenhum `CryptoMode` for especificado.

Para ativar explicitamente este modo, especifique o valor `StrictAuthenticatedEncryption` no método `withCryptoConfiguration`.

**nota**  
Para usar criptografia autenticada do lado do cliente, você precisa incluir o arquivo [Bouncy Castle jar](https://www.bouncycastle.org/download/bouncy-castle-java/) mais recente no caminho de classe do seu aplicativo.

 **Código da** 

```
AmazonS3EncryptionV2 s3Encryption = AmazonS3EncryptionClientV2Builder.standard()
         .withRegion(Regions.US_WEST_2)
         .withCryptoConfiguration(new CryptoConfigurationV2().withCryptoMode((CryptoMode.StrictAuthenticatedEncryption)))
         .withEncryptionMaterialsProvider(new StaticEncryptionMaterialsProvider(new EncryptionMaterials(secretKey)))
         .build();

s3Encryption.putObject(bucket_name, ENCRYPTED_KEY2, "This is the 2nd content to encrypt");
```

## Modo de criptografia autenticada
<a name="authenticated-encryption-mode"></a>

Quando você usa o modo `AuthenticatedEncryption`, um algoritmo de encapsulamento de chave aprimorado é aplicado durante a criptografia. Ao descriptografar nesse modo, o algoritmo verifica a integridade do objeto descriptografado e lança uma exceção se a verificação falhar. Para obter mais detalhes sobre como a criptografia autenticada funciona, consulte a postagem do blog [Criptografia autenticada no lado do cliente do Amazon S3](https://aws.amazon.com/blogs/developer/amazon-s3-client-side-authenticated-encryption).

**nota**  
Para usar criptografia autenticada do lado do cliente, você precisa incluir o arquivo [Bouncy Castle jar](https://www.bouncycastle.org/download/bouncy-castle-java/) mais recente no caminho de classe do seu aplicativo.

Para ativar este modo, especifique o valor `AuthenticatedEncryption` no método `withCryptoConfiguration`.

 **Código da** 

```
AmazonS3EncryptionV2 s3EncryptionClientV2 = AmazonS3EncryptionClientV2Builder.standard()
         .withRegion(Regions.DEFAULT_REGION)
         .withClientConfiguration(new ClientConfiguration())
         .withCryptoConfiguration(new CryptoConfigurationV2().withCryptoMode(CryptoMode.AuthenticatedEncryption))
         .withEncryptionMaterialsProvider(new StaticEncryptionMaterialsProvider(new EncryptionMaterials(secretKey)))
         .build();

s3EncryptionClientV2.putObject(bucket_name, ENCRYPTED_KEY1, "This is the 1st content to encrypt");
```

# Criptografia do lado do cliente do Amazon S3 com chaves gerenciadas do AWS KMS
<a name="examples-crypto-kms"></a>

Os exemplos a seguir usam a classe [AmazonS3EncryptionClientV2Builder](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/AmazonS3EncryptionClientV2Builder.html) para criar um cliente do Amazon S3 com criptografia do lado do cliente ativada. Uma vez configurado, todo objeto que você enviar para o Amazon S3 usando este cliente será criptografado. Todos os objetos obtidos no Amazon S3 por meio deste cliente são automaticamente descriptografados.

**nota**  
Os exemplos a seguir demonstram como usar a criptografia do lado do cliente do Amazon S3 com as chaves gerenciadas do AWS KMS. Para aprender a usar criptografia com suas próprias chaves, consulte [Criptografia do lado do cliente do Amazon S3 com chaves mestras de cliente](examples-crypto-masterkey.md).

Você pode escolher um dos dois modos de criptografia ao ativar a criptografia do lado do cliente do Amazon S3: rigorosa autenticada ou autenticada. As seções a seguir mostram como ativar cada tipo. Para saber quais algoritmos cada modo usa, consulte a definição [CryptoMode](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/model/CryptoMode.html).

## Requer importações
<a name="required-imports"></a>

Importe as seguintes classes para esses exemplos.

 **Importações** 

```
import com.amazonaws.ClientConfiguration;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.kms.AWSKMS;
import com.amazonaws.services.kms.AWSKMSClientBuilder;
import com.amazonaws.services.kms.model.GenerateDataKeyRequest;
import com.amazonaws.services.kms.model.GenerateDataKeyResult;
import com.amazonaws.services.s3.AmazonS3EncryptionClientV2Builder;
import com.amazonaws.services.s3.AmazonS3EncryptionV2;
import com.amazonaws.services.s3.model.CryptoConfigurationV2;
import com.amazonaws.services.s3.model.CryptoMode;
import com.amazonaws.services.s3.model.EncryptionMaterials;
import com.amazonaws.services.s3.model.KMSEncryptionMaterialsProvider;
```

## Criptografia rigorosa autenticada
<a name="strict-authenticated-encryption-kms"></a>

A criptografia rigorosa autenticada é o modo padrão se nenhum `CryptoMode` for especificado.

Para ativar explicitamente este modo, especifique o valor `StrictAuthenticatedEncryption` no método `withCryptoConfiguration`.

**nota**  
Para usar criptografia autenticada do lado do cliente, você precisa incluir o arquivo [Bouncy Castle jar](https://www.bouncycastle.org/download/bouncy-castle-java/) mais recente no caminho de classe do seu aplicativo.

 **Código da** 

```
AmazonS3EncryptionV2 s3Encryption = AmazonS3EncryptionClientV2Builder.standard()
         .withRegion(Regions.US_WEST_2)
         .withCryptoConfiguration(new CryptoConfigurationV2().withCryptoMode((CryptoMode.StrictAuthenticatedEncryption)))
         .withEncryptionMaterialsProvider(new KMSEncryptionMaterialsProvider(keyId))
         .build();

s3Encryption.putObject(bucket_name, ENCRYPTED_KEY3, "This is the 3rd content to encrypt with a key created in the {console}");
System.out.println(s3Encryption.getObjectAsString(bucket_name, ENCRYPTED_KEY3));
```

Chame o método `putObject` no cliente de criptografia do Amazon S3 para os objetos de upload.

 **Código da** 

```
s3Encryption.putObject(bucket_name, ENCRYPTED_KEY3, "This is the 3rd content to encrypt with a key created in the {console}");
```

Você pode recuperar o objeto usando o mesmo cliente. Este exemplo chama o método `getObjectAsString` para recuperar a string que foi armazenada.

 **Código da** 

```
System.out.println(s3Encryption.getObjectAsString(bucket_name, ENCRYPTED_KEY3));
```

## Modo de criptografia autenticada
<a name="authenticated-encryption-kms"></a>

Quando você usa o modo `AuthenticatedEncryption`, um algoritmo de encapsulamento de chave aprimorado é aplicado durante a criptografia. Ao descriptografar nesse modo, o algoritmo verifica a integridade do objeto descriptografado e lança uma exceção se a verificação falhar. Para obter mais detalhes sobre como a criptografia autenticada funciona, consulte a postagem do blog [Criptografia autenticada no lado do cliente do Amazon S3](https://aws.amazon.com/blogs/developer/amazon-s3-client-side-authenticated-encryption).

**nota**  
Para usar criptografia autenticada do lado do cliente, você precisa incluir o arquivo [Bouncy Castle jar](https://www.bouncycastle.org/download/bouncy-castle-java/) mais recente no caminho de classe do seu aplicativo.

Para ativar este modo, especifique o valor `AuthenticatedEncryption` no método `withCryptoConfiguration`.

 **Código da** 

```
AmazonS3EncryptionV2 s3Encryption = AmazonS3EncryptionClientV2Builder.standard()
         .withRegion(Regions.US_WEST_2)
         .withCryptoConfiguration(new CryptoConfigurationV2().withCryptoMode((CryptoMode.AuthenticatedEncryption)))
         .withEncryptionMaterialsProvider(new KMSEncryptionMaterialsProvider(keyId))
         .build();
```

## Configurar o cliente do AWS KMS
<a name="configure-kms"></a>

O cliente de criptografia do Amazon S3 cria um cliente do AWS KMS por padrão, a menos que um seja explicitamente especificado.

Para definir a região desse cliente do AWS KMS criado automaticamente, defina a`awsKmsRegion`.

 **Código da** 

```
Region kmsRegion = Region.getRegion(Regions.AP_NORTHEAST_1);

AmazonS3EncryptionV2 s3Encryption = AmazonS3EncryptionClientV2Builder.standard()
        .withRegion(Regions.US_WEST_2)
        .withCryptoConfiguration(new CryptoConfigurationV2().withAwsKmsRegion(kmsRegion))
        .withEncryptionMaterialsProvider(new KMSEncryptionMaterialsProvider(keyId))
        .build();
```

Se preferir, pode usar seu próprio cliente do AWS KMS para inicializar o cliente de criptografia.

 **Código da** 

```
AWSKMS kmsClient = AWSKMSClientBuilder.standard()
        .withRegion(Regions.US_WEST_2);
        .build();

AmazonS3EncryptionV2 s3Encryption = AmazonS3EncryptionClientV2Builder.standard()
        .withRegion(Regions.US_WEST_2)
        .withKmsClient(kmsClient)
        .withCryptoConfiguration(new CryptoConfigurationV2().withCryptoMode((CryptoMode.AuthenticatedEncryption)))
        .withEncryptionMaterialsProvider(new KMSEncryptionMaterialsProvider(keyId))
        .build();
```