Я не знаком с Cognito, но ошибка, которую вы видите, заключается в том, что ваш код пытается получить доступ к метаданным экземпляра , доступным в EC2. AWS PHP SDK имеет определенный порядок, в котором он пытается найти учетные данные. Вот схема различных учетных методов с использованием PHP SDK.
Итак, я подозреваю, что он работает на вашем локальном компьютере, потому что у вас есть профиль IAM, настроенный с помощью команды AWS CLI aws configure
.
Скорее всего, он работает на вашем промежуточном сервере, поскольку к этому серверу Роль IAM подключена к экземпляру EC2. PHP не находит локально настроенный профиль IAM, поэтому он переходит к попытке доступа к метаданным EC2, что он делает успешно, поэтому он проходит аутентификацию.
Теперь при развертывании в Heroku он больше не находится на экземпляре EC2 или в вашей локальной среде. Итак, ваш CredentialProvider не работает. Я бы предложил использовать Config Vars в Heroku, а затем изменить свой код на CredentialProvider::env()
, как указано здесь . Вам нужно будет создать пользователя IAM с той же ролью, что и у вашего экземпляра EC2, который работает (или достаточно разрешений, чтобы делать то, что вам нужно). Это позволит вашему приложению получить безопасный доступ к Cognito из среды, внешней по отношению к AWS.