С этим сообщением об ошибке довольно много вопросов по stackoverflow, но, похоже, ни один из них не относится к моему случаю.
Итак, моя проблема в том, что мне нужно иметь возможность загружать файл напрямую из браузера в S3 без прохождения через сервер. Для этого я:
- сгенерируйте подпись на сервере и отправьте ее в frond end.
- Внешний интерфейс использует подпись для загрузки файлов на S3.
Локально все работает, когда я запускаю сервер на локальном компьютере, но не работает, когда он работает на beanstalk. Проблема в моем локальном, у меня есть явные ~ / .aws / credentails, которые содержат ключ доступа и секрет доступа. Но на beanstalk мы делаем это через роль IAM, поэтому код для получения учетных данных в любом случае:
@Bean
public AWSCredentials awsCredentials() {
DefaultAWSCredentialsProviderChain credProvider = new DefaultAWSCredentialsProviderChain();
return credProvider.getCredentials();
}
Насколько я знаю, при локальном запуске DefaultAWSCredentialsProviderChain просто считывает учетные данные из файла ~ / .aws / credentials, а при работе на beanstalk он генерирует ключ доступа и секрет доступа на основе роли IAM (действителен в течение короткого времени , не уверен, как долго, может быть, несколько часов).
Когда сервер (который генерирует подпись) работает на beanstalk, я получил сообщение об ошибке от S3:
<Error><Code>InvalidAccessKeyId</Code>
<Message>The AWS Access Key Id you provided does not exist in our records.</Message>
Есть идеи, почему это происходит?