Ваш код загрузки выглядит просто отлично. Наличие ведра для записи не является хорошей практикой, и из вашего вопроса я понимаю, что вы также не установили публичную запись.
Следовательно, если вы не запускаете его на экземпляре AWS, который может аутентифицироваться по API по его роли IAM , вам придется передавать учетные данные клиенту S3.
Вот выдержка из документов :
$credentials = new Aws\Credentials\Credentials('key', 'secret');
$s3 = new Aws\S3\S3Client([
'version' => 'latest',
'region' => 'us-west-2',
'credentials' => $credentials
]);
Вы правы, что «Ключ» в вашем коде - это имя файла (S3 видит себя как ключ -значение хранилища объектов, где каталог и имя файла являются ключом, а значение - содержимым файла, поэтому он называется ключом.
Однако , «ключ» для учетных данных - вместе с секретом - AWS ключи доступа, которые вы можете установить с помощью IAM. Если вы не знаете, как это сделать, я рекомендую вам прочитать Управление ключами доступа (консоль) в AWS документах.
Также обратите внимание, что пользователь IAM, который вы создаете, ключи доступа (ключ и секрет) для него должны иметь соответствующие разрешения, чтобы делать через S3 то, что вы хотите.