Использование s3 шифрования на стороне сервера с PHP - PullRequest
2 голосов
/ 07 октября 2011

Я решил использовать amazons новое шифрование на стороне сервера с s3, однако я столкнулся с проблемой, которую не могу решить.

Я использую класс s3 PHP, найденный здесь: https://github.com/tpyo/amazon-s3-php-class

Я использовал этот код для первоначального размещения объектов (и он работал):

     S3::putObjectFile($file, $s3_bucket_name, $file_path, S3::ACL_PRIVATE,
         array(),
    array( 
        "Content-Disposition" => "attachment; filename=$filename",
        "Content-Type" => "application/octet-stream"
            )
);

Затем я сделал так, как было указано здесь: http://docs.amazonwebservices.com/AmazonS3/latest/API/index.html?RESTObjectPUT.html и добавилЗаголовок запроса ' x-amz-server-side -encryption '.Но теперь, когда я пытаюсь поместить объект, он выходит из строя без ошибок.

Мой новый код:

  S3::putObjectFile($file, $s3_bucket_name, $file_path, S3::ACL_PRIVATE,
     array(),
array( 
    "Content-Disposition" => "attachment; filename=$filename",
    "Content-Type" => "application/octet-stream",
        "x-amz-server-side​-encryption" => "AES256"
        )

);

Кто-нибудь экспериментировал с этой новой функцией илиКто-нибудь может увидеть ошибку в коде.

Cheers.

Ответы [ 4 ]

1 голос
/ 07 октября 2011

Этот заголовок должен быть частью массива $metaHeaders, а не массива $requestHeaders.

S3::putObjectFile($file, $s3_bucket_name, $file_path, S3::ACL_PRIVATE,
     array(
        "x-amz-server-side​-encryption" => "AES256"
     ),
     array( 
       "Content-Disposition" => "attachment; filename=$filename",
       "Content-Type" => "application/octet-stream"
     )
);

Вот определение метода из документов :

putObject (mixed $input, 
           string $bucket, 
           string $uri, 
           [constant $acl = S3::ACL_PRIVATE], 
           [array $metaHeaders = array()], 
           [array $requestHeaders = array()])

Вы также можете рассмотреть возможность использования SDK для PHP ?

0 голосов
/ 18 января 2017

С laravel 5+ это легко сделать через конфигурацию filesystems.php, вам не нужно получать драйвер или низкоуровневый объект.

's3' => [
  'driver' => 's3',
  'key'    => "Your Key",
  'secret' => "Your Secret",
  'region' => "Bucket Region",
  'bucket' => "Bucket Name",
  'options' => [
    'ServerSideEncryption' => 'AES256',
  ]
],
//Code
$disk->put("filename", "content", "public"); // will have AES for file
0 голосов
/ 02 марта 2015

С официальным SDK:

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',
));

Изменение шифрования существующего объекта на стороне сервера (операция копирования)

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',
));

Источник: http://docs.aws.amazon.com/AmazonS3/latest/dev/SSEUsingPHPSDK.html

0 голосов
/ 25 апреля 2013

Мы можем загружать файлы с шифрованием, используя код, следующий за $s3->create_object($bucket_name,$destination,array( 'acl'=>AmazonS3::ACL_PUBLIC, 'fileUpload' => $file_local, 'encryption'=>"AES256"));

И вы можете скачать последнюю версию SDK с здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...