0

Ich habe in meinem S3 Konto über einen Webbrowser S3 Eimer Richtlinie festgelegtWenn die S3-Bucket-Richtlinie in der AWS-Website festgelegt ist, sollte ich dies in meinem Java-Code erneut tun, der in einer Ec2-Instanz ausgeführt wird?

https://i.stack.imgur.com/sppyr.png

Mein Problem ist, wenn der Java-Code von meinem Web-app in meinem lokalen Laptop lief, es Bild S3 hochgeladen.

Aber wenn ich meine Webanwendung auf Elastic Beanstalk bereitstellen, werden Bilder nicht erfolgreich auf S3-Objekt hochgeladen. Also sollte ich programmgesteuert S3-Bucket-Richtlinie in meinem Java-Code programmieren?

PS: Weitere Details, die nützlich sein können: Why am I able to upload to AWS S3 from my localhost, but not from my AWS Elastic BeanStalk instance?

Antwort

1

Ihre S3 Eimer Politik ist zu freizügig. Sie sollten es so schnell wie möglich löschen.

Anstatt explizit Anmeldeinformationen zu Ihrer Elastic Beanstalk App in Code liefern, sollten Sie eine IAM-Rolle, die die Elastic Beanstalk App annehmen erstellen. Die IAM Rolle sollte eine angeschlossene IAM Politik, die entsprechenden Zugriff auf Ihren S3 Eimer, und auf die Objekte in dem Eimer ermöglicht.

Wenn auf Ihrem Laptop zu testen, Ihre Anwendung benötigt keine Anmeldeinformationen im Code zu haben. Stattdessen sollte Ihre App die Tatsache nutzen, dass das AWS SDK Anmeldeinformationen für Sie aus der Umgebung abruft, in der die App ausgeführt wird. Sie sollten default credential provider chain verwenden.

+0

Danke für Ihre Antwort. Ich lese gerade diese Dokumentation. Ich bin irgendwie in diesem Dokument betroffen. Was ist der Schlüssel, dass sie sich beziehen, wie in diesem Dokument erwähnt S3Object s3object = s3Client.getObject ( neu GetObjectRequest (bucketname, key)); http://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/java-dg-roles.html –

+0

Sie über Tasten lesen Sie hier: http: //docs.aws.amazon. com/AmazonS3/neueste/dev/UsingMetadata.html # Objektschlüssel. – jarmod

+0

Ok, eine Sekunde zurücktreten, "Stattdessen läuft dein ......" - 1) Also für beide Lauf Webapp in meinem Laptop und läuft Webapp in AWS EC2, wir sollten "Verwenden Sie den Standard Credential Provider Kette (empfohlen)." 2) Ich habe eine Rolle erstellt und eine Zugriffsrichtlinie erstellt und sie meiner Ec2-Instanz zugewiesen. Jetzt bin ich getroffen, welche dieser Methoden ich verwenden sollte a) DefaultAWSCredentialsProviderChain b) InstanceProfileCredentialsProvider 3) Es gibt keine accessKey & secKey für Rollen? 4) Wie kann ich konsistente AWS-Anmeldedaten zwischen meinem Laptop und Ec2 verwenden? Bitte helfen. –

Verwandte Themen