私はAWS SDK V3 for PHPを使用して、顧客提供のキーを使用してサーバー側の暗号化を使用してS3にオブジェクトを配置しています。ドキュメントはかなりスケッチです(少なくとも私はそれを見つけられませんでした)。 S3clientを使用してオブジェクトをアップロードするためのCreateSignedURLの失敗PHPを使用したAWS SSE-C
は、私が
$params['SSECustomerAlgorithm'] = 'AES256';
$params['SSECustomerKey'] = $this->encryptioncustkey;
$params['SSECustomerKeyMD5'] = $this->encryptioncustkeymd5;
でのputObject使用します$ this-> encryptioncustkeyは、プレーン顧客キー(SDKがあることをやっているように見えるので、Base64エンコードされていない)とthis-です> encryptioncustkeymd5 = md5($ this-> encryptioncustkey、true);
putオブジェクトは正常に動作します。ただし、問題はcreateSignedURLを生成することです。
$cmd = $client->getCommand('GetObject', array(
'Bucket' => $bucket,
'Key' => $storedPath,
'ResponseContentDisposition' => 'attachment;charset=utf-8;filename="'.utf8_encode($fileName).'"',
'ResponseContentType' => $ctype,
'SSECustomerAlgorithm' => 'AES256',
'SSECustomerKey' => $this->encryptioncustkey,
'SSECustomerKeyMD5' => $this->encryptioncustkey64md5
));
が、私はマニュアルに従って、SSE-Cのために必要とされていない、それは「X-AMZ-サーバー側の暗号化」に欠けていることを示している奇妙な応答(ServerSideEncryption)を取得します。 ServerSideEncryption = 'AES256'に設定しても効果はありません。
<Error>
<Code>InvalidArgument</Code>
<Message>
Requests specifying Server Side Encryption with Customer provided keys must provide an appropriate secret key.
</Message>
<ArgumentName>x-amz-server-side-encryption</ArgumentName>
<ArgumentValue>null</ArgumentValue>
<RequestId>A3368F6CE5DD310D</RequestId>
<HostId>
nHavXXz/gFOoJT0tnh+wgFTbTgGdpggRkyb0sDh07H7SomcX7HrcKU1dDzgZimrQwyaVQEqAjdk=
</HostId>
</Error>