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?
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]AmazonS3 s3client = AmazonS3ClientBuilder
.standard()
.withRegion(Regions.EU_WEST_2)
.build();
[/code]
So liste ich Objekte im Bucket auf:
[code]s3client.listObjects().getObjectSummaries();
[/code]
In IAM habe ich eine Rolle mit Berechtigungen erstellt:
[list]
[*]AmazonS3FullAccess
[*]AWSElasticBeanstalkEnhancedHealth
[*]AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy
[*]AWSElasticBeanstalkMulticontainerDocker
[*]AWSElasticBeanstalkWebTier
[/list]
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]AmazonS3 s3client = AmazonS3ClientBuilder
.standard()
.withRegion(Regions.EU_CENTRAL_1)
.build();
[/code]
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]AmazonS3 s3client = AmazonS3ClientBuilder
.standard()
.enableForceGlobalBucketAccess()
.build();
[/code]
Wie kann ich diese Anwendung bei der Bereitstellung auf S3 zugreifen lassen?