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

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

Post by Guest »

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?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post