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

使用适用于 .NET 的 AWS 开发工具包指定服务器端加密

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

Copy
static AmazonS3 client; client = new AmazonS3Client(accessKeyID, secretAccessKeyID); PutObjectRequest request = new PutObjectRequest(); request.WithContentBody("Object data for simple put.") .WithBucketName(bucketName) .WithKey(keyName) .WithServerSideEncryptionMethod(ServerSideEncryptionMethod.AES256); S3Response response = client.PutObject(request); // Check the response header to determine if the object is encrypted. ServerSideEncryptionMethod destinationObjectEncryptionStatus = response.ServerSideEncryptionMethod;

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

有关如何上传对象的有效示例,请参阅 使用 适用于 .NET 的 AWS 开发工具包 上传对象。有关服务器端加密,请通过调用 WithServerSideEncryptionMethod 方法设置 ServerSideEncryptionMethod 属性。

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

确定使用的加密算法

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

Copy
AmazonS3 client; client = new AmazonS3Client(accessKeyID, secretAccessKeyID); ServerSideEncryptionMethod objectEncryption; GetObjectMetadataRequest metadataRequest = new GetObjectMetadataRequest() .WithBucketName(bucketName) .WithKey(keyName); objectEncryption = client.GetObjectMetadata(metadataRequest) .ServerSideEncryptionMethod;

加密算法是使用枚举指定的。如果存储的对象没有加密 (默认行为),则对象的 ServerSideEncryptionMethod 属性默认为 None

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

要更改现有对象的加密状态,您可以复制对象并删除源对象。请注意,默认情况下,复制 API 不会加密目标对象,除非您明确请求了目标对象的服务器端加密。下面的 C# 代码示例将复制对象。请求显式指定了目标对象的服务器端加密。

Copy
AmazonS3 client; client = new AmazonS3Client(accessKeyID, secretAccessKeyID); CopyObjectResponse response = client.CopyObject(new CopyObjectRequest() .WithSourceBucket(sourceBucketName) .WithSourceKey(sourceObjetKey) .WithDestinationBucket(targetBucketName) .WithDestinationKey(targetObjectKey) .WithServerSideEncryptionMethod(ServerSideEncryptionMethod.AES256) ); // Check the response header to determine if the object is encrypted. ServerSideEncryptionMethod destinationObjectEncryptionStatus = response.ServerSideEncryptionMethod;

有关如何复制对象的有效示例,请参阅 使用 适用于 .NET 的 AWS 开发工具包 复制对象。您可以在 CopyObjectRequest 对象中指定服务器端加密,如前面的代码示例所示。