Der S3-Zugriff schlägt in der bereitgestellten Elastic-Beanstalk-Java-Anwendung trotz korrekter IAM-Rolle und -Region fe

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Der S3-Zugriff schlägt in der bereitgestellten Elastic-Beanstalk-Java-Anwendung trotz korrekter IAM-Rolle und -Region fe

by Guest » 07 Jan 2025, 12:40

Ich möchte über eine Java Elastic Beanstalk-Anwendung auf Dateien in einem AWS S3-Bucket zugreifen.
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();
So liste ich Objekte im Bucket auf:

Code: Select all

s3client.listObjects().getObjectSummaries();
In IAM habe ich eine Rolle mit Berechtigungen erstellt:
  • AmazonS3FullAccess
  • AWSElasticBeanstalkEnhancedHealth
  • AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy
  • AWSElasticBeanstalkMulticontainerDocker
  • AWSElasticBeanstalkWebTier
In der Elastic Beanstalk-Umgebung habe ich dies als Servicerolle und EC2-Instanzprofil festgelegt.
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();
Dann wird eine Fehlermeldung „Zugriff verweigert“ zurückgegeben:

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();
Wie kann ich diese Anwendung bei der Bereitstellung auf S3 zugreifen lassen?

Top