使用 AWS 开发工具包在 Amazon S3 中指定 AWS Key Management Service - Amazon Simple Storage Service
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本指南不再进行更新。有关当前信息和说明,请参阅新的 Amazon S3 用户指南

使用 AWS 开发工具包在 Amazon S3 中指定 AWS Key Management Service

使用 AWS 开发工具包时,您可以请求 Amazon S3 使用 AWS Key Management Service (AWS KMS) 客户主密钥 (CMK)。此部分提供的示例演示了如何使用适用于 Java 和 .NET 的 AWS 开发工具包。有关其他软件开发工具包的信息,请转到示例代码和库

重要

当您在 Amazon S3 中使用 AWS KMS CMK 进行服务器端加密时,您必须选择对称 CMK。Amazon S3 仅支持对称 CMK,不支持非对称 CMK。有关更多信息,请参阅《AWS Key Management Service 开发人员指南》中的使用对称和非对称密钥

适用于 Java 的 AWS 开发工具包

此部分介绍了使用适用于 Java 的 AWS 开发工具包进行的各种 Amazon S3 操作以及您如何使用 AWS KMS CMK。

Put 操作

当使用适用于 Java 的 AWS 开发工具包上传对象时,您可以通过添加 SSEAwsKeyManagementParams 属性请求 Amazon S3 使用 AWS KMS CMK,如以下请求所示:

PutObjectRequest putRequest = new PutObjectRequest(bucketName, keyName, file).withSSEAwsKeyManagementParams(new SSEAwsKeyManagementParams());

在这种情况下,Amazon S3 使用 AWS 托管 CMK(请参阅使用服务器端加密与存储在 AWS KMS 中的 CMK)。您可以选择创建对称客户托管 CMK 并在请求中指定该密钥。

PutObjectRequest putRequest = new PutObjectRequest(bucketName, keyName, file).withSSEAwsKeyManagementParams(new SSEAwsKeyManagementParams(keyID));

有关创建客户托管 CMK 的更多信息,请参阅《AWS Key Management Service 开发人员指南》中的对 AWS KMS API 进行编程

有关上传对象的工作代码示例,请参阅以下主题。您将需要更新这些代码示例并提供加密信息,如上述代码片段所示。

复制操作

在复制对象时,您将添加相同的请求属性(ServerSideEncryptionMethodServerSideEncryptionKeyManagementServiceKeyId)来请求 Amazon S3 使用 AWS KMS CMK。有关复制对象的更多信息,请参阅 复制对象

预签名 URL

在为使用 AWS KMS CMK 加密的对象创建预签名 URL 时,您必须显式指定 Signature Version 4。

ClientConfiguration clientConfiguration = new ClientConfiguration(); clientConfiguration.setSignerOverride("AWSS3V4SignerType"); AmazonS3Client s3client = new AmazonS3Client( new ProfileCredentialsProvider(), clientConfiguration); ...

有关代码示例,请参阅 使用适用于 Java 的 AWS 开发工具包生成预签名对象 URL

适用于 .NET 的 AWS 开发工具包

此部分介绍了使用适用于 .NET 的 AWS 开发工具包进行的各种 Amazon S3 操作以及您如何使用 AWS KMS CMK。

Put 操作

当使用适用于 .NET 的 AWS 开发工具包上传对象时,您可以通过添加 ServerSideEncryptionMethod 属性请求 Amazon S3 使用 AWS KMS CMK,如以下请求所示:

PutObjectRequest putRequest = new PutObjectRequest { BucketName = bucketName, Key = keyName, // other properties. ServerSideEncryptionMethod = ServerSideEncryptionMethod.AWSKMS };

在这种情况下,Amazon S3 使用 AWS 托管 CMK。有关更多信息,请参阅 使用在 AWS Key Management Service 中存储 CMK 的服务器端加密 (SSE-KMS) 保护数据。您可以选择创建自己的对称客户托管 CMK 并在请求中指定该密钥。

PutObjectRequest putRequest1 = new PutObjectRequest { BucketName = bucketName, Key = keyName, // other properties. ServerSideEncryptionMethod = ServerSideEncryptionMethod.AWSKMS, ServerSideEncryptionKeyManagementServiceKeyId = keyId };

有关创建客户托管 CMK 的更多信息,请参阅《AWS Key Management Service 开发人员指南》中的对 AWS KMS API 进行编程

有关上传对象的工作代码示例,请参阅以下主题。您将需要更新这些代码示例并提供加密信息,如上述代码片段所示。

复制操作

在复制对象时,您将添加相同的请求属性(ServerSideEncryptionMethodServerSideEncryptionKeyManagementServiceKeyId)来请求 Amazon S3 使用 AWS KMS CMK。有关复制对象的更多信息,请参阅 复制对象

预签名 URL

在为使用 AWS KMS CMK 加密的对象创建预签名 URL 时,您必须显式指定 Signature Version 4。

AWSConfigs.S3Config.UseSignatureVersion4 = true;

有关代码示例,请参阅 使用适用于 .NET 的 AWS 开发工具包生成预签名对象 URL