Для своего подключения я использую использовать профиль по умолчанию для файла общих учетных данных AWS. У меня есть настройка .aws / credentials, содержащая aws_access_key_id aws_secret_access_key. Это отлично работает для подключения localhost к S3 с помощью S3Client.
Однако я хочу выполнить шифрование / дешифрование на стороне клиента с помощью S3EncryptionClient, и здесь начинаются проблемы. Использование PHP 3.6 и aws-sdk-php 3.5. Мне пришлось вручную установить каталоги Crypto, поскольку по какой-то причине композитор не мог их получить, хотя, насколько я понимаю, поддержка была добавлена в v3.38.
putObject после Пример шифрования на стороне клиента Amazon S3 с помощью AWS SDK для PHP версии 3 завершается с ошибкой «Ошибка получения учетных данных с сервера метаданных профиля экземпляра». Я использую одного и того же пользователя, ключ и секрет в обоих случаях при использовании S3Client или при использовании S3EncryptionClient. Я предполагаю, что KmsMaterialsProvider не требует указания 'credentials' => $ provider, но я тоже пробовал это.
Редактировать: Пробовал то же самое в IAM Policy Simulator. Возможно, политика настроена неправильно. Но не совсем уверен, что требуется. Пробовал кучу разных вариантов, но безуспешно. Продолжайте получать «отказано Неявно отказано (нет соответствующих утверждений)». для таких действий, как: Зашифровать, Расшифровать, даже если в политике есть эти действия. Проблема в том, что я делаю это со своей локальной машины? Но тогда я бы подумал, что это не сработает так же для незашифрованной записи / чтения.






Выяснил это, на случай, если кто-то столкнется с той же проблемой, поскольку похоже, что по крайней мере несколько человек остались без ответа. Создание KmsClient в среде разработки (localhost) необходимо для указания 'учетных данных' => $ provider, даже если он уже указан для S3EncryptionClient. Также убедитесь, что для ключа и службы KMS настроена политика разрешений.