AWSキーローテーションを使ってAWSセキュリティを管理する方法を、以前のブログ記事で取り上げました。この記事では、AWS SMTPリレーについて説明します。
最適なレベルのセキュリティを実現するには、EC2インスタンス・ロールまたはAWS STSを使ってアクセスキーの使用数を最小限に抑えるべきです。
この事例では、唯一残されたIAMユーザーとキーは、SES SMTPのためのものでした。このため、これらのキーをローテーションさせるか、完全に取り払ってしまう必要がありました。私は、完全に取り払うほうが良いと考えました。
現行のインストレーション
弊社の現行のインストレーションでは、ほとんどの場合、デフォルトでローカル・ポストフィックスと設定済みのアクセスキーをインストールしています。これにより、アプリケーションが(メールを介して)ローカル・ポストフィックスと「話せる」ようになり、ポストフィックスからSMTPプロトコルでSESに情報をリレーできるようになります。
このプロセスは、次のように機能します。
新しいアーキテクチャ
キーの使用を避けるため、私たちは、EC2インスタンス・ロールを使用してコードを作成し、SMTPを直接、SES APIコールに変換することにしました。
アプリケーションそのものを変更せずにアプリケーションからメールを送れるようにするには、小さなSMTPサーバを設置して、SMTPコマンドからSES APIコールにデータをリレーする必要がありました。現在のAWS SMTPリレー・プロジェクトのは、次のようになっています。
このプロジェクトはシンプルなJavaソフトウェアを基本としていて、これを.jarとしてサーバにインストールし、次のように起動することができます。
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
NuxeoのDamien Metzler、および社外からサポートを提供してくれているMorgan Christiansson氏とWilfried Martinache氏の尽力により、Dockerパッケージングを完了し、これをコンテナ・インフラに統合できるようになりました。
このDockerのイメージはDocker Hubで入手できます。これを次のようなシンプルなコマンドで実行します。
docker run -p 10025:10025 loopingz/aws-smtp-relay
最後に、次のステートメントをインスタンス・ロールのポリシーに追加するだけです。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ses:SendRawEmail",
"Resource": "*"
}
]
}
これで完成です!
このプロジェクトの詳細はGitHub でご確認いただけます。ご意見・ご感想をお待ちしております。