AWS IAM User の初期パスワード通知を自動化

こんにちは。 SRE の @suzuki-shunsuke です。

AWS の IAM User 作成後に初期パスワードをユーザーに Slack の DM で通知する作業を自動化した話を紹介します。

背景

弊社では AWS を使っており、開発者は入社したらまず自分用の IAM User を作成します。 IAM User は miam というツールでコード管理されており、専用リポジトリに自分で Pull Request (以下 PR) を投げます。

PR がマージされて IAM User が作成されたら SRE は初期パスワードを開発者に Slack の DM で通知していました。

この作業が地味に面倒だったのと、 miam から Terraform への移行を検討する際にネックだったので、自動化することにしました。

仕組み

aws-iam-cred-sender

IAM User が作成されたら CloudWatch Event の CreateUser Event によって Lambda Function を呼び、 Lambda で初期パスワードを DM するようにしました。 弊社では IAM User の名前は Slack User の Display Name と同じにするというルールがあるので、 Slack User のリストを Slack API で取得し、同じ名前の User に DM するようにしました。

image

同じ名前の User がいない場合(システム用の IAM User を作成した場合など)、 SRE 用の public channel に通知し、 SRE が必要なアクションを取るようにしました。 その際もメッセージに「このコマンド実行すれば Access Key 発行できるよ」というガイドを含め、割と簡単に対応できるようにしました。

image

Access Key の漏洩などのセキュリティリスクの観点から、送るのは初期パスワードのみとし、 Access Key は自分で発行してもらうようにしました。 メッセージで login から Access Key 発行までの案内をすることで割とすんなり対応してもらえるかなと思います。

CloudWatch Event で Lambda を呼ぶ場合、同じ Event で複数回呼ばれることがあります。

https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/CWE_Troubleshooting.html#RuleTriggeredMoreThanOnce

そのため、 DynamoDB を使い、同じ User の 2 回目以降の Event は一定期間無視するようにしています。 DynamoDB の TTL を 10 分にしています。

さいごに

以上、 AWS の IAM User 作成後に初期パスワードをユーザーに Slack で DM で通知する作業を自動化した話を紹介しました。 ユーザーは IAM User を作成する PR をマージすると直ぐに初期パスワードの通知を受け取るため、今までの SRE を介したフローに比べるとだいぶ体験が良くなったと思います。