2016-09-01 9 views
0

Ich habe eine EC2-Instanz in einem öffentlichen Subnetz,
Die EC2 hat ein S3 Full Access Role angebracht, um es zu holen.
Ich habe eine .jar in einem S3-Ordner Standort.
Der S3-Bucket verfügt über Standardberechtigungen, die beim Erstellen des Buckets angewendet werden.

EC2-Benutzerdaten S3 Objekt

Was ich tun möchte, ist ein Benutzerdaten-Skript zu implementieren,
, die die .jar auf EC2 von S3 Standort wird herunterladen.
Ich bin Lage, nur die .jar wget, wenn ich die .jar öffentlichen machen,

Wenn ich auf der S3 Öffentliche nicht den .jar machen, ich bin nicht in der Lage von der wget EC2,
Ich möchte das .jar aus Sicherheitsgründen nicht öffentlich machen.

Was soll ich tun, um die .jar von S3 zu bekommen, ohne das .jar Public zu machen?

Hier ist meine Benutzerdaten Skript -

#! /bin/bash 

sudo timedatectl set-timezone Asia/Kuala_Lumpur 

sudo rm -rf /home/ubuntu/jarName.jar 

sudo rm -rf /home/ubuntu/nohup.out 

/usr/local/bin/aws s3api get-object --bucket myDemoBucket --key folderNameDemo/jarName.jar /home/ubuntu/jarName.jar 

cd /home/ubuntu/ 

sudo nohup java -jar -Dspring.profiles.active=uat jarName.jar > nohup.out & 

exit 

Antwort

3

in die Dokumentation für ein besseres Verständnis davon, wie EC2 Instance IAM Roles Arbeit.

S3 und andere AWS-APIs können die Instanz nicht direkt identifizieren. Anfragen müssen noch unterschrieben werden. Welche IAM-Instanzenrollen bieten Ihrer Instanz eine leicht zugängliche, immer neue Reihe relativ kurzer, temporärer Anmeldeinformationen - die vertraute Zugriffsschlüssel-ID und den geheimen Zugriffsschlüssel sowie ein Token, das auch zum Signieren und Senden Ihrer Anfrage verwendet werden muss .

  • mit diesen drei Elementen können Sie eine signierte URL zur Laufzeit erzeugen und übergeben es an wget oder
  • können Sie die Datei mit aws-cli, holen die Unterstützung in gebaut hat zum Abrufen und mit der Instanz Rolle Anmeldeinformationen oder
  • Wenn es in Ihrer Umgebung sinnvoll ist, können Sie die Bucket-Richtlinie so konfigurieren, dass sie der IP-Adresse vertraut, die die Instanz bei der Verbindung mit S3 verwendet, und jeder Anforderung von dieser Adresse zulässt. Dies ist unkompliziert, wenn Sie eine NAT-Instanz oder ein NAT-Gateway verwenden oder wenn Sie Elastic IP-Adressen für die Instanzen verwenden. Es wird nicht unterstützt, wenn Sie einen VPC-Endpunkt für S3 konfigurieren.

Vielleicht ist die einfachste der oben genannten Entscheidungen wird unter Verwendung der aws-cli.

/usr/local/bin/aws s3api get-object --bucket example-bucket --key path/in/s3/to/my_object.txt /tmp/local-file-name.txt 

Beachten Sie, dass in Skripten, es ist in der Regel eine gute Idee, voll qualifizierte Pfade für Befehle und Dateien zu verwenden, da der Pfad der aktuellen Umgebung und Arbeitsverzeichnis kann nicht erkannt werden oder wie erwartet. In diesem Fall nehme ich an, dass die ausführbare CLI-Dateiin /usr/local/bin/ installiert wurde und Sie die heruntergeladene Datei in /tmp/ schreiben möchten. Passen Sie diese an Ihre Umgebung an.

Siehe auch http://docs.aws.amazon.com/cli/latest/userguide/installing.html für die Installation und http://docs.aws.amazon.com/cli/latest/reference/s3api/get-object.html für die Verwendung von aws-CLI für diese Anwendung.

+0

Aber ich brauche das Holen von .jar automatisiert, wie es auf Auto Skalierung ist, wie erreiche ich es dann? Ich habe die .jar-Datei mit dem Bash-Skript "User Data" abgerufen. –

+0

@AniruddhaRaje Der aws-cli eignet sich für die Automatisierung und ist einfach zu bedienen. Ich habe eine Beispielverwendung und Links zu der Antwort hinzugefügt. Fügen Sie den Befehl in Ihr Benutzerdatenskript ein. –

+0

Danke für das Beispiel, ich brauche den Schlüsselpfad Bit nicht richtig? Wie benutze ich die Rolle? –

1

Das Abrufen der Datei über wget führt nicht zu Ihrer Identität. Der Inhalt im Amazon S3-Bucket ist standardmäßig privat und für anonyme Benutzer nicht verfügbar.

Sie können den Eimer über einen API-Aufruf zugreifen oder durch die AWS Command-Line Interface (CLI) verwenden, zum Beispiel:

aws s3 cp s3://BUCKET-NAME/FILENAME.zip . 

Die CLI ist eine Python-Anwendung, die den Python-SDK für AWS verwendet. Es weiß, wie Anmeldeinformationen abgerufen werden, die der Instanz als Ergebnis des Starts mit einer Rolle zugewiesen wurden.

Überprüfen Sie, ob die CLI auf der Instanz installiert ist. Wenn nicht, installieren Sie es, bevor Sie es verwenden.

+0

Ich habe User Data Bash-Skript verwendet, um die gemachte öffentliche .jar aus S3 zu holen, Wie verwende ich Ihren CLI-Befehl? Wie soll der Prozess automatisiert werden? –

Verwandte Themen