MySQLパスワードローテーション:1人のユーザーを使用して他のユーザーパスワードを変更する

Aug 16 2020

現在、AWS Aurora / MySQLベースのアプリケーションのパスワードローテーション戦略の設定に取り組んでいます。

私の計画はこのような戦略を使うことでした...

  • AWSSSM暗号化パラメーターに保存されているアプリケーションのユーザー名/パスワード。
  • アプリケーションサーバーは、SSMから資格情報のみを取得するためのアクセス権を持っています。環境(ステージング、本番など)による制限
  • Lambdaは、MySQLのパスワードを変更し、新しい値をSSMに保存するために定期的に実行するように構成されています。Lambdaは、パスワードを使用するのではなく、AWSIAMロールを使用してデータベースで認証します。

最後のビットは私がよくわからないビットです。この構成では、ラムダロール/ユーザーが他のすべてのアプリケーションユーザーのパスワードを変更する権限を持っている必要があります。

これは、セキュリティの観点から、それを行うための合理的な方法ですか?lambda mysqlユーザーはパスワードではなくIAMロールを使用するため、これにより、許可されたロールのみに使用を制限する必要があります。

別の方法は、ラムダがログインするための特別なdbユーザーを持たないことですが、ラムダ関数がSSMから各ユーザーの資格情報を取得し、各ユーザーとしてログインしてパスワードを変更することです。

いずれにせよ、ラムダは各ユーザーにアクセスできる必要があります。

MySQLの「lambda_user」へのアクセスを注意深く取得できると仮定すると、ユーザーに他のユーザーのパスワードを変更する権限を持たせることに他の明白な問題はありますか?

また、明確にするために、これらはアプリケーションユーザーであり、これらの資格情報を使用する通常の人間タイプのユーザーではありません。

回答

1 ConorMancone Aug 16 2020 at 17:39

これは、あなたが概説したまさにその理由から、それを行うためのベストプラクティスの方法です。Lambdaに資格情報の代わりに認証の役割を使用させることで、保持する秘密の数を最小限に抑えることができます。これは間違いなく良いことです。指摘する価値のあるものは2つだけです。

  1. これで、CloudFormationを使用して、このための特別な目的のLambdaのプロビジョニングとデプロイを自動化できます。その結果、これを比較的簡単に行うことができます。私は個人的にCloudFormationの大ファンではありませんが、とにかくここで使用します。

  2. メタデータV2エンドポイントに切り替えると、インフラストラクチャで見つかったSSRFからの追加のセキュリティや、他の形式の侵入を提供できますが、このユースケースではあまり関係ありません。