Как решить AmazonS3Exception: Запрещено (Сервис: Amazon S3; Код состояния: 403; Код ошибки: 403 Запрещено; Идентификатор запроса: пусто) с использованием Java
Трассировки стека
Exception in thread "main" com.amazonaws.services.s3.model.AmazonS3Exception: Forbidden (Service: Amazon S3; Status Code: 403; Error Code: 403 Forbidden; Request ID: null), S3 Extended Request ID: null
at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:1182)
at com.amazonaws.http.AmazonHttpClient.executeOneRequest(AmazonHttpClient.java:770)
at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:489)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:310)
at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3604)
at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3557)
at com.amazonaws.services.s3.AmazonS3Client.getS3AccountOwner(AmazonS3Client.java:689)
at com.amazonaws.services.s3.AmazonS3Client.getS3AccountOwner(AmazonS3Client.java:681)
at testKMSkeyUploadObject.main(testKMSkeyUploadObject.java:101)
Я получаю это исключение при сохранении объекта в объекте AmazonS3EncryptionClient. Вот мой код
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setContentLength(plaintext.length);
objectMetadata.setSSEAlgorithm(ObjectMetadata.AES_256_SERVER_SIDE_ENCRYPTION);
AmazonS3EncryptionClient s3 = new AmazonS3EncryptionClient(credentials,materialProvider).withRegion(Region.getRegion(Regions.US_EAST_1));;
PutObjectRequest putRequest = new PutObjectRequest(
bucket, keyId, new ByteArrayInputStream(plaintext), objectMetadata);
putRequest.setRequestCredentials(credentials);
s3.setEndpoint("https://kms.us-east-1.amazonaws.com");
2 ответа
Решение
Я разрешил это исключение, создав сегмент в консоли управления Amazon IAM и получив хост для конечного компонента.
У меня та же проблема, но в моем случае проблема была с прокси, вот как вы можете установить прокси,
вот пример,
ClientConfiguration config = new ClientConfiguration();
config.setProtocol(Protocol.HTTPS);
config.setProxyHost("YOUR_PROXY_IP");
config.setProxyPort(YOUR_PROXY_PORT);
BasicAWSCredentials creds = new BasicAWSCredentials("YOUR_KEY", "YOUR_SECRET");
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withClientConfiguration(config)
.withRegion(Regions.US_EAST_2)
.withCredentials(new AWSStaticCredentialsProvider(creds))
.build();
У меня была такая же проблема, и она была вызвана использованием прокси, потому что приложение находилось в том же регионе, что и корзина S3. Для приложений, развернутых в другом регионе, один и тот же код работал нормально.
Мне нужно было проверить, находится ли приложение в том же регионе, прежде чем настраивать конфигурацию прокси-клиента.