Amazon Simple Storage Service
开发人员指南 (API Version 2006-03-01)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

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

本主题将指导您完成使用适用于 PHP 的 AWS 开发工具包中的类向上传到 Amazon S3 的对象添加服务器端加密的过程。

注意

本主题假定您已按照 使用适用于 PHP 的 AWS 开发工具包和运行 PHP 示例 的说明执行操作,并正确安装了 适用于 PHP 的 AWS 开发工具包。

您可以使用 Aws\S3\S3Client::putObject() 方法将对象上传到 Amazon S3。有关如何上传对象的有效示例,请参阅 使用 适用于 PHP 的 AWS 开发工具包 上传对象

要向上传请求添加 x-amz-server-side-encryption 请求标头 (请参阅 使用 REST API 指定服务器端加密),请使用值 array 指定 ServerSideEncryption 参数的 AES256 密钥,如以下 PHP 代码示例所示。

Copy
use Aws\S3\S3Client; $bucket = '*** Your Bucket Name ***'; $keyname = '*** Your Object Key ***'; // $filepath should be absolute path to a file on disk $filepath = '*** Your File Path ***'; // Instantiate the client. $s3 = S3Client::factory(); // Upload a file with server-side encryption. $result = $s3->putObject(array( 'Bucket' => $bucket, 'Key' => $keyname, 'SourceFile' => $filepath, 'ServerSideEncryption' => 'AES256', ));

作为响应,Amazon S3 将返回 x-amz-server-side-encryption 标头以及用于加密对象数据的加密算法的值。

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

确定使用的加密算法

要确定现有对象的加密状态,请通过调用 Aws\S3\S3Client::headObject() 方法检索对象元数据,如下面的 PHP 代码示例所示。

Copy
use Aws\S3\S3Client; $bucket = '*** Your Bucket Name ***'; $keyname = '*** Your Object Key ***'; // Instantiate the client. $s3 = S3Client::factory(); // Check which server-side encryption algorithm is used. $result = $s3->headObject(array( 'Bucket' => $bucket, 'Key' => $keyname, )); echo $result['ServerSideEncryption'];

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

要更改现有对象的加密状态,请使用 Aws\S3\S3Client::copyObject() 方法复制对象并删除源对象。请注意,默认情况下,copyObject() 不会加密目标,除非您通过将值 array 用于 ServerSideEncryption 参数的 AES256 密钥,显式请求对目标对象进行服务器端加密。以下 PHP 代码示例将复制对象并向复制的对象添加服务器端加密。

Copy
use Aws\S3\S3Client; $sourceBucket = '*** Your Source Bucket Name ***'; $sourceKeyname = '*** Your Source Object Key ***'; $targetBucket = '*** Your Target Bucket Name ***'; $targetKeyname = '*** Your Target Object Key ***'; // Instantiate the client. $s3 = S3Client::factory(); // Copy an object and add server-side encryption. $result = $s3->copyObject(array( 'Bucket' => $targetBucket, 'Key' => $targetKeyname, 'CopySource' => "{$sourceBucket}/{$sourceKeyname}", 'ServerSideEncryption' => 'AES256', ));

有关如何复制对象的有效示例,请参阅 使用 适用于 PHP 的 AWS 开发工具包 复制对象

相关资源