Aurora PostgreSQL のパスワードを Secrets Mangaer でローテーションさせる際にはまったことをご紹介します。
想定の構成
今回は以下のような構成を想定しています。
ECS から Aurora PostgreSQL にアクセスするためのユーザ名やパスワードなどの認証情報を Secrets Manager に格納しています。また、認証情報は Lambda でローテーションさせます。
はまったこと
PostgreSQL の接続 URL は"postgresql://【ユーザ名】:【パスワード】@【ホスト名】:【ポート番号】/【データベース名】"という形式です。PostgreSQL のパスワードにパーセントコーディングの必要な文字が含まれている場合、そのまま接続 URL に埋め込むとエラーになります。そのため、パスワードをパーセントコーディングする処理をどこかで実装する必要があります。
解決法
Secrets Mangaer で認証情報をローテーションさせている場合は、生成するパスワードにパーセントコーディングが必要な文字を含めないようにします。
具体的には Lambda で実装されているローテーション関数の環境変数「EXCLUDE_CHARACTERS」の値を以下のように設定します。
EXCLUDE_CHARACTERS=":/?#[]@!$&'()*+,;=%"
余談
最初はパーセントコーディングする処理を実装する方法を検討していましたが、本記事で紹介した方法だと簡単に実装できました。