RDS Proxyに接続可能なDBユーザーを追加してみた

DBユーザーの追加に加えて少し設定をすると、RDS Proxyにアクセスできるユーザーがすぐに作成できます。

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは。AWS事業本部トクヤマシュンです。

Amazon RDS Proxyって本当便利ですよね。
Lambdaを使ったサーバーレスアプリケーション等のモダンアプリを始め、多くのユースケースで検討する機会があるのではないかと思います。  

そんなAmazon RDS Proxyに接続可能なDBユーザを追加する機会がありましたので、紹介したいと思います。

本内容はユーザーガイドのRDS Proxyの管理→新しいデータベースユーザーの追加を参考に行っています。

環境

今回は、Private Subnetに構築したEC2からRDS Proxyを経由してRDSにアクセスします。

rds-proxy-useradd-architecture

RDSにはAurora MySQL Version 3.01.0を使いました。

手順

Amazon RDS Proxyに接続可能なDBユーザー追加は下記の手順で行います。

  1. DBへのユーザー追加
  2. Secrets Managerへのデータベース認証情報載設定
  3. RDS Proxyとシークレットの関連付け
  4. 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導入の敷居を少しでも低くできたならば幸いです。
それでは。