Использование KMC-CMK на S3 с laravel

#laravel #amazon-s3

Вопрос:

У меня есть корзина S3, которая используется для хранения файлов через Laravel. Я обновил политику корзины, чтобы использовать CMK, управляемый клиентом, и я не могу понять или найти, какую конфигурацию использовать в Laravel

Это то, что у меня есть, config/filesystems и оно отлично работает со стандартной политикой корзины и CMK, управляемым AWS

     's3' => [
        'driver'   => 's3',
        'key'      => env('AWS_ACCESS_KEY_ID'),
        'secret'   => env('AWS_SECRET_ACCESS_KEY'),
        'region'   => env('AWS_DEFAULT_REGION'),
        'bucket'   => env('AWS_BUCKET'),
        'url'      => env('AWS_URL'),
        'endpoint' => env('AWS_ENDPOINT'),
        'options'  => [
            'ServerSideEncryption' => env('AWS_SERVER_SIDE_ENCRYPTION'),

        ],
    ],
 

Какие изменения я должен внести, чтобы иметь возможность использовать CMK, управляемый клиентом?

Ответ №1:

Неясно, что именно вы передаете, ServerSideEncryption поскольку вы получаете это из env var, но это параметры, доступные в PHP SDK для putObject:

     'SSEKMSKeyId' => '<string>',
    'ServerSideEncryption' => 'AES256|aws:kms',
 

Исходя из этого, я считаю, что ваша конфигурация должна выглядеть следующим образом:

     's3' => [
        'driver'   => 's3',
        'key'      => env('AWS_ACCESS_KEY_ID'),
        'secret'   => env('AWS_SECRET_ACCESS_KEY'),
        'region'   => env('AWS_DEFAULT_REGION'),
        'bucket'   => env('AWS_BUCKET'),
        'url'      => env('AWS_URL'),
        'endpoint' => env('AWS_ENDPOINT'),
        'options'  => [
            'ServerSideEncryption' => 'aws:kms',
            'SSEKMSKeyId' => env('SSE_KMS_KEY_ARN')
        ],
    ],

 

где SSE_KMS_KEY_ARN находится ARN ключа KMS CMK, с помощью которого вы хотите зашифровать.