この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは。AWS事業本部トクヤマシュンです。
Amazon RDS Proxyって本当便利ですよね。
Lambdaを使ったサーバーレスアプリケーション等のモダンアプリを始め、多くのユースケースで検討する機会があるのではないかと思います。
そんなAmazon RDS Proxyに接続可能なDBユーザを追加する機会がありましたので、紹介したいと思います。
本内容はユーザーガイドのRDS Proxyの管理→新しいデータベースユーザーの追加を参考に行っています。
環境
今回は、Private Subnetに構築したEC2からRDS Proxyを経由してRDSにアクセスします。
RDSにはAurora MySQL Version 3.01.0
を使いました。
手順
Amazon RDS Proxyに接続可能なDBユーザー追加は下記の手順で行います。
- DBへのユーザー追加
- Secrets Managerへのデータベース認証情報載設定
- RDS Proxyとシークレットの関連付け
- IAM Roleの変更
それでは、順に手順を実施します。
DBへのユーザー追加
今回はAurora MySQLを使っていますので、ログイン後に下のSQL文を実行し、proxy-test-user
を作成します。
CREATE USER proxy-test-user IDENTIFIED BY '任意のパスワード'
実際の運用では、ユーザーには適宜必要な権限を付与してください。
Secrets Managerへのデータベース認証情報設定
AWS Secrets Managerのマネジメントコンソールから、先ほど登録したproxy-test-user
に対応するシークレットを作成します。
シークレットのタイプは「Amazon RDSデータベースの認証情報」を選択し、ユーザー名、パスワード、DBインスタンスは対応するものを設定し、作成します。
RDS Proxyとシークレットの関連付け
Amazon RDSのマネジメントコンソールからAmazon RDS Proxyに作成したシークレットを関連付けます。 対象のAmazon RDS Proxyを選択し、[アクション]、[変更] の順に選択します。
作成したシークレットを追加し、プロキシを変更ボタンを押します。
IAM Roleの変更
Amazon RDS Proxyで利用しているIAM Roleに対して、secretsへの権限許可を追加します。
RDS Proxyで利用しているIAM Role
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "rdsProxyGetSecretsPolicy",
"Effect": "Allow",
"Action": [
"secretsmanager:ListSecretVersionIds",
"secretsmanager:GetSecretValue",
"secretsmanager:GetResourcePolicy",
"secretsmanager:DescribeSecret"
],
"Resource": [
"arn:aws:secretsmanager:ap-northeast-1:xxxxxxxxxxxx:secret:既存シークレットのARN",
"arn:aws:secretsmanager:ap-northeast-1:xxxxxxxxxxxx:secret:追加シークレットのARN"
]
},
{
"Sid": "rdsProxyDecryptSecretsPolicy",
"Effect": "Allow",
"Action": "kms:Decrypt",
"Resource": "*"
}
]
}
接続確認
作成したユーザーproxy-test-user
を使って、RDS Proxyのエンドポイントに接続確認をします。
sh-4.2$ mysql -h 'RDS Proxyのエンドポイント' -u proxy-test-user -p
Enter password:'パスワード入力'
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is xxxxxxxxxx
Server version: 8.0.23 Source distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]>
無事、RDS Proxy経由でDBインスタンスにログインできました。
最後に
Amazon RDS Proxyに接続可能なDBユーザーを追加する手順を紹介しました。
RDS Proxy導入の敷居を少しでも低くできたならば幸いです。
それでは。