

La AWS SDK para Java 1.x se alcanzó end-of-support el 31 de diciembre de 2025. Le recomendamos que migre a [AWS SDK for Java 2.x](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/home.html) para seguir recibiendo nuevas características, mejoras de disponibilidad y actualizaciones de seguridad.

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Cifrado del cliente Amazon S3 con claves administradas por AWS KMS
<a name="examples-crypto-kms"></a>

Los siguientes ejemplos utilizan la clase [AmazonS3EncryptionClientV2Builder](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/AmazonS3EncryptionClientV2Builder.html) para crear un cliente Amazon S3 que tenga habilitado el cifrado del cliente. Una vez configurado, los objetos que se cargan en Amazon S3 con este cliente se cifrarán. Cualquier objeto que se obtenga de Amazon S3 con este cliente, se descifrará automáticamente.

**nota**  
En los siguientes ejemplos se muestra cómo utilizar el cifrado del cliente Amazon S3 con claves administradas por AWS KMS. Para obtener información sobre cómo utilizar el cifrado con sus propias claves, consulte [Cifrado del cliente Amazon S3 con claves maestras de cliente](examples-crypto-masterkey.md).

Puede elegir entre dos modos de cifrado al activar el cifrado Amazon S3 del cliente: autenticación estricta o autenticación. En las secciones siguientes se muestran cómo habilitar cada uno de estos tipos. Para saber qué algoritmos utiliza cada modo, consulte la definición de [CryptoMode](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/model/CryptoMode.html).

## Importaciones requeridas
<a name="required-imports"></a>

Importe las clases siguientes para estos ejemplos.

 **Importaciones** 

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

## Cifrado de autenticado estricto
<a name="strict-authenticated-encryption-kms"></a>

El cifrado de autenticado estricto es el modo predeterminado si no se especifica `CryptoMode`.

Para habilitar de manera explícita este modo, especifique el valor `StrictAuthenticatedEncryption` en el método `withCryptoConfiguration`.

**nota**  
Para utilizar el cifrado autenticado del lado del cliente, debe incluir el archivo [Bouncy Castle jar](https://www.bouncycastle.org/download/bouncy-castle-java/) más reciente en el classpath de la aplicación.

 **Código de** 

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

Llame al método `putObject` en el cliente de cifrado de Amazon S3 para cargar objetos.

 **Código de** 

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

Para recuperar el objeto, puede utilizar el mismo cliente. Este ejemplo llama al método `getObjectAsString` para recuperar la cadena que se almacenó.

 **Código de** 

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

## Modo de cifrado autenticado
<a name="authenticated-encryption-kms"></a>

Al utilizar el modo `AuthenticatedEncryption`, se aplica un algoritmo de encapsulamiento de clave mejorado durante el cifrado. Cuando se descifra en este modo, el algoritmo puede verificar la integridad del objeto descifrado e iniciar una excepción si la comprobación falla. Para más detalles sobre cómo funciona el cifrado autenticado, consulte la entrada del blog [Cifrado autenticado del cliente Amazon S3](https://aws.amazon.com/blogs/developer/amazon-s3-client-side-authenticated-encryption).

**nota**  
Para utilizar el cifrado autenticado del lado del cliente, debe incluir el archivo [Bouncy Castle jar](https://www.bouncycastle.org/download/bouncy-castle-java/) más reciente en el classpath de la aplicación.

Para habilitar este modo, especifique el valor `AuthenticatedEncryption` en el método `withCryptoConfiguration`.

 **Código de** 

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

## Configuración del cliente AWS KMS
<a name="configure-kms"></a>

El cliente de cifrado Amazon S3 crea un cliente AWS KMS de forma predeterminada, a menos que se especifique uno de forma explícita.

Para establecer la región de este cliente AWS KMS creado automáticamente, defina el `awsKmsRegion`.

 **Código de** 

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

Si lo prefiere, puede utilizar su propio cliente AWS KMS para inicializar el cliente de cifrado.

 **Código de** 

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