2017-01-12 4 views
2

Szenario: Ich habe eine EC2-Instanz und einen S3-Bucket unter demselben Konto, und meine Webanwendung auf diesem EC2 möchte Zugriff auf Ressourcen in diesem Bucket haben.AWS EC2-Zugriff auf S3 mit IAM-Rolle

Nach den offiziellen Dokumenten habe ich eine IAM-Rolle mit s3access erstellt und der EC2-Instanz zugewiesen. Nach meinem Verständnis sollte jetzt meine Web-App auf den Bucket zugreifen können. Doch nach Studien scheint, ich habe einen allowPublicRead Eimer Politik wie folgt hinzuzufügen:

{ 
    "Version": "2008-10-17", 
    "Statement": [ 
     { 
      "Sid": "AllowPublicRead", 
      "Effect": "Allow", 
      "Principal": { 
       "AWS": "*" 
      }, 
      "Action": "s3:GetObject", 
      "Resource": "arn:aws:s3:::mybucket/*" 
     } 
    ] 
} 

Ansonsten habe ich Zugang verboten.

Aber warum sollte ich diese Bucket-Richtlinie allowPublicRead verwenden, da ich der EC2-Instanz bereits s3access IAM-Rolle erteilt habe?

Antwort

1

S3 s3:GetObject erlaubt nur Zugriff auf Objekte von Ihrer ec2-Instanz und was Sie wollen, ist der Zugriff auf diese Objekte von Ihrer Web-App, dh von Ihrem Browser, in diesem Fall werden diese Bilder/Objekte zum Benutzerbrowser gerendert Wenn es sich um eine öffentlich zugängliche Anwendung handelt, müssen Sie auch die Berechtigung AllowPublicRead zuweisen.

+0

Danke! Noch eine Frage, wenn es nur Client ist, der direkt mit S3 spricht, warum müssen wir dann die IAM-Rolle mit "s3access" zu EC2 zuweisen? –

+1

Ja, da Ihr Code auf der ec2-Maschine bereitgestellt wird und eine Verbindung zu S3 hergestellt werden muss, um das Objekt zu erhalten und es dann an den Client zu senden. Also muss ec2 Zugang zu S3 haben. –