In einem der letzten Beiträge haben wir uns damit beschäftigt, wie Sicherheit in AWS mit der Rotation von AWS-Schlüsseln erzielt werden kann. Heute möchte ich beschreiben, wie eine SMTP-Übertragung mit AWS funktioniert.
Für optimale Sicherheit muss es Ziel sein, die Anzahl der verwendeten Zugriffsschlüssel zu reduzieren - entweder mit EC2-Instanzrollen oder AWS-STS.
In unseren Konten sind die einzigen noch verbleibenden IAM-Benutzer und -Schlüssel diejenigen für den SES-SMTP. Deswegen benötigten wir eine Strategie, mit der wir entweder eine Schlüsselrotation durchführen oder die Schlüssel ganz entfernen konnten - wobei mir Letzteres lieber war.
Aktuelle Installationen
Bei den meisten unserer aktuellen Bereitstellungen wird standardmäßig ein lokales Postfix mit konfigurierten Zugriffsschlüsseln installiert. Unsere Anwendungen können sich (per E-Mail) an das lokale Postfix “wenden” und das Postfix übermittelt die Informationen über das SMTP-Protokoll an SES.
Dieser Prozess geht wie folgt vonstatten:
Neue Architektur
Damit wir künftig nicht mehr mit Anmeldedaten arbeiten müssen, verwendeten wir die EC2-Instanzrolle und schrieben Code, mit dem die SMTP-Anfrage künftig direkt in einen SES-API-Aufruf übersetzt werden sollte.
Nun müssen aber alle unsere Anwendungen per E-Mail kommunizieren können - damit wir sie also nicht selbst anpassen müssen, erstellten wir einen kleinen SMTP-Server, der Daten der SMTP-Befehle in einen SES-API-Aufruf übersetzt. Der aktuelle Stand unseres Projekts “aws-smtp-relay” gestaltet sich wie folgt:
Grundstein des Projekts ist einfache Java-Software, die Sie als “.jar”-Datei auf Ihren Server legen und wie folgt starten können:
java -jar aws-smtp-relay.jar
usage: aws-smtp-relay
-b,--bindAddress <arg> Address to listen to
-c,--configuration <arg> AWS SES configuration to use
-h,--help Display this help
-p,--port <arg> Port number to listen to
-r,--region <arg> AWS region to use
Mit Unterstützung vom Nuxeo-Fachmann Damien Metzler und von den externen Experten Morgan Christiansson und Wilfried Martinache konnten wir ein Docker-Paket erstellen, das es Ihnen ermöglicht, diese Software in Ihre Container-Infrastruktur zu integrieren.
Das Docker-Image ist auf Docker Hub verfügbar und Sie können es einfach wie folgt ausführen:
docker run -p 10025:10025 loopingz/aws-smtp-relay
Abschließend fügen Sie Ihrer Instanzrollenrichtlinie einfach folgende Aussage hinzu:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ses:SendRawEmail",
"Resource": "*"
}
]
}
Und schon sind Sie fertig!
Das Projekt finden Sie auch auf GitHub: https://github.com/loopingz/aws-smtp-relay. Wir freuen uns über Ihr Feedback oder Ihren Beitrag.