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:

![Alte Einrichtung von AWS SES IAM](https://raw.githubusercontent.com/loopingz/aws-smtp-relay/master/docs/postfix.png ?w=280,h=460)

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:

![SMTP-Übertragung mit AWS](https://raw.githubusercontent.com/loopingz/aws-smtp-relay/master/docs/aws-smtp-relay.png ?w=280,h=460)

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.