O AWS SDK para Java 1.x entrou no modo de manutenção em 31 de julho de 2024 e o fim do suporte
Criptografia do lado do cliente do Amazon S3 com chaves gerenciadas do AWS KMS
Os exemplos a seguir usam a classe AmazonS3EncryptionClientV2Builder 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.
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.
Requer importações
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 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
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
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
nota
Para usar criptografia autenticada do lado do cliente, você precisa incluir o arquivo Bouncy Castle jar
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
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 aawsKmsRegion.
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();