AWS PHP SDK S3: PutObject () Отказано в доступе, даже если учетная запись пользователя SDK имеет полные разрешения - PullRequest
1 голос
/ 17 апреля 2020

При загрузке файла в S3 Bucket, используя следующие коды:

$s3Client = new S3Client([
    'version'     => 'latest',
    'region'      => 'ap-southeast-1',
    'credentials' => [
        'key'    => $keyName,
        'secret' => $keySecret,
    ],
]);

try {
    $result = $s3Client->putObject([
        'Bucket' => 'web-uploads',
        'Key'    => 'sample.png',
        'Body'   => fopen('/var/www/html/images/sample.png', 'r'),
    ]);
} catch (S3Exception $e) {
    echo $e->getMessage() . PHP_EOL;
}

Это показывает ниже ошибки:

Error executing "PutObject" on "https://web-uploads.s3.ap-southeast-1.amazonaws.com/sample.png"; AWS HTTP error: Client error: `PUT https://web-uploads.s3.ap-southeast-1.amazonaws.com/sample.png` resulted in a `403 Forbidden` response:

AccessDeniedAccess DeniedF43969 (truncated...)  AccessDenied (client): Access Denied -  AccessDeniedAccess DeniedF43969B3F3F0C85AS8k/6fBsY93ki6RbTQobjqIi6rgxtNqLhys5MbEg85oL4aPl/9IOwE4eNuSrVncFLZSl8JyZDN4=

На тот момент, мои Разрешения на ведро имели «Блокировать публикацию». c доступ "настройки включены.

Только когда я выключил его , как показано ниже:

enter image description here enter image description here

.. тогда это работало . Загрузка прошла успешно.

Но тогда какой смысл создавать выделенную учетную запись пользователя IAM с «Programmati c Тип доступа». И учитывая ПОЛНЫЕ РАЗРЕШЕНИЯ S3 к нему, через его Политику, приложенную. Как показано ниже:

enter image description here

Я надеялся, что выделенная учетная запись IAM с предоставленными достаточными разрешениями (как упомянуто выше) будет всем необходимым для SDK. Но, видимо, пока нет. Это определение Политики полностью игнорируется. Я думаю, я мог бы даже удалить вложение Политики целиком, и все же оно все равно работало бы с помощью вышеупомянутого подхода.

Но это не то, что я ожидал.

Мой вопрос

Что я пропустил, чтобы PHP SDK успешно загружался на S3, без необходимости Publi c Доступ в разрешениях S3 Bucket?

...