com.amazonaws.services.s3.model.AmazonS3Exception: Forbidden (Сервис: Amazon S3; Код состояния: 403; Код ошибки: 403 Forbidden; Идентификатор запроса: XXXXXXXX)

Несколько дней назад я получаю это исключение, когда пытаюсь отправить файлы на мой S3Bucket. Все легче, кажется, работает, и я уверен, что с моей стороны нет изменений кода.

com.amazonaws.services.s3.model.AmazonS3Exception: Forbidden
(Service: Amazon S3; Status Code: 403; Error Code: 403 Forbidden;
Request ID: XXXXXXXXXXXX),
S3 Extended Request ID: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:1077)
at com.amazonaws.http.AmazonHttpClient.executeOneRequest(AmazonHttpClient.java:725)
at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:460)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:295)
at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3699)
at com.amazonaws.services.s3.AmazonS3Client.getObjectMetadata(AmazonS3Client.java:999)
at com.amazonaws.services.s3.AmazonS3Client.getObjectMetadata(AmazonS3Client.java:977)

........

Я встречал много таких Q, связанных с com.amazonaws.services.s3.model.AmazonS3Exception: запрещено после тех

  1. Я установил NTP на моем сервере, чтобы решить любую проблему, связанную с временем.
  2. Я также добавил endPointUrl для объекта "AmazonS3Client" в код, который, по моему мнению, может решить мою проблему.

Что-нибудь еще, я могу попытаться решить эту проблему

я использую aws-java-sdk:1.9.10 для отправки файлов в S3 Bucket.

2 ответа

Скорее всего, ваш экземпляр не был запущен с ролью профиля экземпляра IAM, которая имеет доступ к S3.

Весь доступ к сервисам AWS должен быть подписан ключом доступа и секретом. Когда вы делаете это с вашей локальной машины DefaultCredentialsProviderChain использует ключ доступа и секретный ключ, определенные в вашем .aws/credentials файл.

Когда вы запускаете экземпляр EC2 в AWS, он также должен подписывать запросы к сервисам, таким как s3. Однако он делает это, получая свои учетные данные из внутренней службы метаданных.

Итак, вы создаете профиль IAM, который ваш экземпляр примет при запуске. Этот профиль IAM, как и другие профили IAM для пользователя, например, определяет, к чему экземпляр имеет доступ.

http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html

В моем случае имя корзины было другим на стороне андроида (имя корзины было 'a' на S3, и я ввел 'ab' на стороне андроида), изменив имя корзины и наоборот, я решил проблему.

Другие вопросы по тегам