Amazon Simple Storage Service
开发人员指南 (API Version 2006-03-01)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

使用AWS SDK for Java指定服务器端加密

使用AWS SDK for Java上传对象时,您可以使用 PutObjectRequestObjectMetadata 属性来设置 x-amz-server-side-encryption 请求标头 (请参阅使用 REST API 指定服务器端加密)。当您调用 AmazonS3 客户端的 PutObject 方法时 (如下面的 Java 代码示例所示),Amazon S3 将加密并保存数据。

File file = new File(uploadFileName); PutObjectRequest putRequest = new PutObjectRequest( bucketName, keyName, file); // Request server-side encryption. ObjectMetadata objectMetadata = new ObjectMetadata(); objectMetadata.setSSEAlgorithm(ObjectMetadata.AES_256_SERVER_SIDE_ENCRYPTION); putRequest.setMetadata(objectMetadata); PutObjectResult response = s3client.putObject(putRequest); System.out.println("Uploaded object encryption status is " + response.getSSEAlgorithm());

作为响应,Amazon S3 将返回用于加密您的对象数据的加密算法,您可以使用 getSSEAlgorithm 方法进行检查。

有关显示如何上传对象的有效示例,请参阅 使用 AWS SDK for Java 上传对象。对于服务器端加密,请将 ObjectMetadata 属性添加到您的请求中。

使用分段上传 API 上传大型对象时,您可以为您正在上传的对象请求服务器端加密。

  • 使用低级别分段上传 API (参阅 上传文件) 上传大型对象时,您可以在启动分段上传后指定服务器端加密。也就是说,您可以通过调用 InitiateMultipartUploadRequest.setObjectMetadata 方法添加 ObjectMetadata 属性。

  • 使用高级别分段上传 API 时 (参阅 使用适用于分段上传的 AWS Java 开发工具包 (高级别 API) ),TransferManager 类会提供用于上传对象的方法。您可以从这些将 ObjectMetadata 作为参数的方法中调用其中任何一个。

确定使用的加密算法

要确定现有对象的加密状态,您可以检索对象元数据 (如下面的 Java 代码示例所示)。

GetObjectMetadataRequest request2 = new GetObjectMetadataRequest(bucketName, keyName); ObjectMetadata metadata = s3client.getObjectMetadata(request2); System.out.println("Encryption algorithm used: " + metadata.getSSEAlgorithm());

如果存储在 Amazon S3 中的对象没有使用服务器端加密,则该方法将返回空值。

更改现有对象的服务器端加密 (复制操作)

要更改现有对象的加密状态,请复制该对象并删除源对象。请注意,默认情况下,复制 API 不会加密目标对象,除非您显式请求服务器端加密。通过使用 ObjectMetadata 属性指定 CopyObjectRequest 中的服务器端加密 (如下面的 Java 代码示例中所示),您可以请求加密目标对象。

CopyObjectRequest copyObjRequest = new CopyObjectRequest( sourceBucket, sourceKey, targetBucket, targetKey); // Request server-side encryption. ObjectMetadata objectMetadata = new ObjectMetadata(); objectMetadata.setSSEAlgorithm(ObjectMetadata.AES_256_SERVER_SIDE_ENCRYPTION); copyObjRequest.setNewObjectMetadata(objectMetadata); CopyObjectResult response = s3client.copyObject(copyObjRequest); System.out.println("Copied object encryption status is " + response.getSSEAlgorithm());

有关如何复制对象的有效示例,请参阅 使用 AWS SDK for Java 复制对象。您可以在 CopyObjectRequest 对象中指定服务器端加密,如前面的代码示例所示。