Die Anwendung (ein Spring-Boot-Mikroservice) läuft einwandfrei, wenn sie lokal ausgeführt wird. Es gibt keine Probleme beim Auflisten, Lesen und Schreiben von Objekten im Bucket.
So baue ich den S3-Client auf:
Code: Select all
AmazonS3 s3client = AmazonS3ClientBuilder
.standard()
.withRegion(Regions.EU_WEST_2)
.build();
Code: Select all
s3client.listObjects().getObjectSummaries();
- AmazonS3FullAccess
- AWSElasticBeanstalkEnhancedHealth
- AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy
- AWSElasticBeanstalkMulticontainerDocker
- AWSElasticBeanstalkWebTier
Wenn ich jedoch die Anwendung bereitstelle, schlägt der Zugriff auf den Bucket fehl:
com.amazonaws.services.s3.model.AmazonS3Exception: Der Bucket ist dabei Region: EU-Zentral-1. Bitte verwenden Sie diese Region, um die Anfrage erneut zu versuchen
(Dienst: Amazon S3; Statuscode: 301;
Diese Fehlermeldung ist falsch. Gemäß In der Bucket-Übersicht befindet sich der Bucket in der AWS-Region
Europa (London) eu-west-2
Ich habe versucht, der Empfehlung zu folgen und die darin vorgeschlagene Region zu verwenden:
Code: Select all
AmazonS3 s3client = AmazonS3ClientBuilder
.standard()
.withRegion(Regions.EU_CENTRAL_1)
.build();
Verursacht durch: com.amazonaws.services.s3.model .AmazonS3Exception: Access
Denied (Dienst: Amazon S3; Statuscode: 403; Fehlercode:
AccessDenied;
The Elastic Bohnenstange Die Domäne der Anwendung zeigt an, dass sie in derselben Region ausgeführt wird wie der S3-Bucket, auf den sie zugreifen möchte:
.eu-west-2 .elasticbeanstalk.com
Der Klarheit halber wurde der Bucket von mir mit meinem Konto über die AWS S3-Konsole erstellt. Mein Konto ist der Besitzer des Buckets. Die Anwendung wurde auch von mir mit meinem Konto über die Elastic Beanstalk-Konsole erstellt. Ich habe andere Java Elastic Beanstalk-Anwendungen, die bei der Bereitstellung problemlos auf S3-Buckets zugreifen, was bedeutet, dass es keinen kontoweiten Grund gibt.
Ich habe auch Folgendes versucht, was ebenfalls zu folgendem Ergebnis geführt hat: eine Fehlerantwort „Zugriff verweigert“.
Code: Select all
AmazonS3 s3client = AmazonS3ClientBuilder
.standard()
.enableForceGlobalBucketAccess()
.build();