結論
データベースのパスワードはSecrets ManagerかSSM パラメータストアで管理するとパスワード覚えたり、メモしたりする必要がなく安全に管理でき、mysqlクライアントを使った接続が簡単になります。
背景
パスワード管理には
- 人間が記憶して覚える
- 個人でメモをとる
- Redmineなどプロジェクト管理ソフトに記載をする
- パスワードリマインダーに覚えさせる
などなど、いくつかの手法がありますが、これらの方法は個人の管理依存している場合は引き継ぎが発生した場合に問題が起きやすかったり、AWS外に保存するのはセキュリティ上、推奨されません。
AWS上でパスワード保存する方法
- Secrets Managerに保存する
- SSM パラメータストアに保存する
どちらにもメリット・デメリットがありますが、どちらでもパスワード管理することは可能です。
Secrets Managerの方が高機能で、パスワードだけでなくIDやエンドポイントもの情報も含めて管理しており、パスワードローテーション機能などもあります。
しかしSSM パラメータストアより利用料金が高く、機密情報を取得した際の処理が少し面倒です。
対して、SSM パラメータストアはシンプルです。keyと指定された文字列やリストを1対1で保存します。
指定日時でのパラメータの削除などはありますが、シークレット情報を保管するのに特化したサービスではないので、パスワードローテーション機能などはなくSecrets Managerと比較するとシンプルな分できることが少ないです。
MySQLクライアントで便利に使う方法
※ここでは事前にSecrets Manager や SSM パラメータストアの設定は終わっているものとして扱います。
Secrets Manager の場合
mysql --host {RDSのエンドポイント} -u {ユーザ名} -p${aws secretsmanager get-secret-value --secret-id {Secrets Managerの名前} --query 'SecretString' --output text | jq ".password" -r}
SSM パラメータストアの場合
mysql --host {RDSのエンドポイント} -u {ユーザ名} -p${aws ssm get-parameter --name {パラメータストアのキー} --with-decryption --query 'Parameter.Value' --output text}
このようにパスワードをAWSサービス上から取得してくるようにしておくと、ドキュメントに RDS へのアクセス方法などをまとめる時もパスワードをドキュメントに直書きせず済み、ドキュメントを読んでいる方からしてもコピペでアクセスできるので、手軽にアクセスできます。