2016-05-10 14 views
1

Ich möchte meine ec2-Instanz Zugriff auf eine S3-Bucket gewähren.Grant EC2 Instanz Zugriff auf S3-Bucket

Auf dieser ec2-Instanz wird ein Container mit meiner Anwendung gestartet. Jetzt bekomme ich keine Erlaubnis für den S3-Eimer.

Dies ist mein Eimer Politik

{ 
"Version": "2012-10-17", 
"Id": "Policy1462808223348", 
"Statement": [ 
    { 
     "Sid": "Stmt1462808220978", 
     "Effect": "Allow", 
     "Principal": { 
      "AWS": "arn:aws:iam::714656454815:role/ecsInstanceRole" 
     }, 
     "Action": "s3:GetObject", 
     "Resource": "arn:aws:s3:::bucket-name/*", 
     "Condition": { 
      "IpAddress": { 
       "aws:SourceIp": "private-ip/32" 
      } 
     } 
    } 
] 
} 

Aber es funktioniert nicht, bis ich den Eimer die Erlaubnis für alle geben, darauf zuzugreifen.

Ich versuche, die Datei im s3-Bucket aus der ec2-Instanz zu curlen, aber das funktioniert auch nicht.

Antwort

1

Es gibt keine direkte Möglichkeit, den Instanzzugriff "EC2" auf den AWS-Server zu gewähren, aber Sie können Folgendes versuchen.

  1. Erstellen Sie einen neuen Benutzer in AWS IAM, und laden Sie die Anmeldeinformationsdatei herunter.
  2. Dieser Benutzer repräsentiert Ihren EC2-Server.
  3. Geben Sie dem Benutzer Berechtigungen für Ihren S3-Bucket.
  4. Als nächstes legen Sie die Anmeldeinformationen in der folgenden Position Datei: -
    EC2 - Windows-Instanz:
    ein. Platzieren Sie die Anmeldeinformationsdatei an einer beliebigen Stelle. (z. B. C:/Anmeldeinformationen)
    b. Erstellen Sie eine Umgebungsvariable AWS_CREDENTIAL_PROFILES_FILE und setzen Sie den Wert als den Pfad, in dem Sie Ihre Credentials-Datei setzen (zum Beispiel C:/Credentials)
    EC2 - Linux Instanz
    ein. Befolgen Sie die Schritte von der Windows-Instanz b. Erstellen Sie einen Ordner .aws im Stammordner Ihres App-Servers (z. B. /usr/share/tomcat6).
    c. Erstellen Sie eine symmlink zwischen Umgebungsvariablen und Ihre .aws Ordner sudo ln -s $AWS_CREDENTIAL_PROFILES_FILE /usr/share/tomcat6/.aws/credentials

  5. Nun, da Ihre Anmeldeinformationen Datei platziert ist, können Sie Java-Code verwenden, um die Eimer zuzugreifen.
    HINWEIS: AWS-SDK-Bibliotheken sind erforderlich, um diese



    AWSCredentials credentials = null; 
      try { 
       credentials = new ProfileCredentialsProvider().getCredentials(); 
      } catch (Exception e) { 
       LOG.error("Unable to load credentials " + e); 
       failureMsg = "Cannot connect to file server."; 
       throw new AmazonClientException(
         "Cannot load the credentials from the credential profiles file. " + 
         "Please make sure that your credentials file is at the correct " + 
         "location (environment variable : AWS_CREDENTIAL_PROFILES_FILE), and is in valid format.", 
         e); 
      } 

      AmazonS3 s3 = new AmazonS3Client(credentials); 
      Region usWest2 = Region.getRegion(Regions.US_WEST_2); 
      s3.setRegion(usWest2); 
    ObjectListing objectListing = s3.listObjects(new ListObjectsRequest().withBucketName(bucketName).withPrefix(prefix)); 

Wo bucketname = [Ihr Bucket Name]
und Präfix = [Ihre Ordnerstruktur in Ihrem Eimer , wo Ihre Datei (en) enthalten sind]

Hoffe, dass hilft. Wenn Sie nicht Java verwenden, können Sie AWS-SDKs auch in anderen Programmiersprachen auschecken.

0

Try this:

{ 
"Version": "2012-10-17", 
"Id": "Policy1462808223348", 
"Statement": [ 
    { 
     "Sid": "Stmt1462808220978", 
     "Effect": "Allow", 
     "Principal": { 
      "AWS": "*" 
     }, 
     "Action": "s3:*", 
     "Resource": "arn:aws:s3:::bucket-name/*", 
     "Condition": { 
      "IpAddress": { 
       "aws:SourceIp": "yourIp/24" 
      } 
     } 
    } 
] 
} 
+0

hat nicht funktioniert. Das ist so verwirrend. Wie ich schon sagte, ich kann nicht einmal eine Locke aus der ec2-Instanz für meine Datei machen. Nur wenn ich jedem die Erlaubnis gebe und das will ich nicht machen. – DK1990

0

Ich fand es heraus ....

Es nur mit dem öffentlichen IP aus der EC2-Instanz funktioniert.