RDS Proxy の開始方法 - Amazon Relational Database Service

RDS Proxy の開始方法

以下のセクションでは、RDS Proxy の設定方法について説明します。また、各プロキシにアクセスできるユーザーと、各プロキシから DB インスタンスに接続する方法を制御する関連セキュリティオプションの設定方法についても説明します。

ネットワーク前提条件の設定

RDS Proxy を使用するには、Aurora DB クラスターまたは RDS DB インスタンスと RDS Proxy の間に、共通の仮想プライベートクラウド (VPC) が必要です。この VPC には、異なるアベイラビリティーゾーンにあるサブネットが 2 つ以上必要です。アカウントは、これらのサブネットを所有することも、他のアカウントと共有することもできます。VPC 共有の詳細については、共有 VPC の操作を参照してください。Amazon EC2、Lambda、Amazon ECS などのクライアントアプリケーションリソースは、同じ VPC 内でも、プロキシとは別の VPC 内でも構いません。RDS DB インスタンスや Aurora DB クラスターに正常に接続できた場合は、必要なネットワークリソースがすでに存在していることに注意してください。

次の Linux の例は、AWS CLI アカウントが所有する VPC とサブネットを調べるAWSコマンドを示しています。特に、CLI を使用してプロキシを作成するときは、サブネット ID をパラメーターとして渡します。

aws ec2 describe-vpcs aws ec2 describe-internet-gateways aws ec2 describe-subnets --query '*[].[VpcId,SubnetId]' --output text | sort

次の Linux の例は、特定の Aurora DB クラスターまたは RDS DB インスタンスに対応するサブネット ID を決定する AWS CLI コマンドを示しています。Auroraクラスターの場合は、まず、関連付けられた DB インスタンスの 1 つの ID を見つけます。DB インスタンスの describe 出力で、DBSubnetGroupSubnets 属性内のネストされたフィールドを調べることで、その DB インスタンスで使用されるサブネット ID を抽出できます。データベースサーバーのプロキシを設定するときに、それらのサブネット ID の一部またはすべてを指定します。

$ # Optional first step, only needed if you're starting from an Aurora cluster. Find the ID of any DB instance in the cluster. $ aws rds describe-db-clusters --db-cluster-identifier my_cluster_id --query '*[].[DBClusterMembers]|[0]|[0][*].DBInstanceIdentifier' --output text my_instance_id instance_id_2 instance_id_3 ... $ # From the DB instance, trace through the DBSubnetGroup and Subnets to find the subnet IDs. $ aws rds describe-db-instances --db-instance-identifier my_instance_id --query '*[].[DBSubnetGroup]|[0]|[0]|[Subnets]|[0]|[*].SubnetIdentifier' --output text subnet_id_1 subnet_id_2 subnet_id_3 ...

代わりに、最初に DB インスタンスの VPC ID を見つけることができます。次に、VPC を調べて、そのサブネットを見つけることができます。次の Linux の例はその方法を示しています。

$ # From the DB instance, find the VPC. $ aws rds describe-db-instances --db-instance-identifier my_instance_id --query '*[].[DBSubnetGroup]|[0]|[0].VpcId' --output text my_vpc_id $ aws ec2 describe-subnets --filters Name=vpc-id,Values=my_vpc_id --query '*[].[SubnetId]' --output text subnet_id_1 subnet_id_2 subnet_id_3 subnet_id_4 subnet_id_5 subnet_id_6

AWS Secrets Manager でのデータベース認証情報の設定

作成するプロキシごとに、まず Secrets Manager サービスを使用してユーザー名およびパスワード認証情報のセットを保存します。RDS DB インスタンスや Aurora DB クラスターで、プロキシの接続先のデータベースユーザーアカウントごとに異なる Secrets Manager シークレットを作成します。

Secrets Manager では、username および password フィールドの値を使用してこれらのシークレットを作成します。これにより、プロキシに関連付けた RDS DB インスタンスや Aurora DB クラスターの対応するデータベースユーザーにプロキシから接続できます。これを行うには、[他のデータベース認証情報]、[RDS データベース認証情報]、[他の種類のシークレット] のいずれかの設定を使用します。[ユーザー名] フィールドと [パスワード] フィールドに適切な値を入力し、その他の必須フィールドにはプレースホルダ値を入力します。プロキシは、ホストポート などの他のフィールド (シークレット内に存在する場合) を無視します。これらの詳細は、プロキシによって自動的に提供されます。

[その他のタイプのシークレット] を選択することもできます。この場合、usernamepassword という名前のキーを使用してシークレットを作成します。

プロキシが使用するシークレットは特定のデータベースサーバーに関連付けられないため、複数のデータベースサーバーで同じ認証情報を使用する場合は、複数のプロキシ間でシークレットを再利用できます。例えば、開発サーバーとテストサーバーのグループ全体で同じ認証情報を使用できます。

特定のユーザーとしてプロキシを介して接続するには、シークレットに関連付けられているパスワードが、そのユーザーのデータベースパスワードと一致していることを確認してください。不一致がある場合は、Secrets Manager で該当するシークレットを更新できます。この場合でも、シークレットの認証情報とデータベースパスワードが一致する他のアカウントには接続できます。

AWS CLI または RDS API を通じてプロキシを作成する場合、プロキシからアクセスできるすべての DB ユーザーアカウントで対応するシークレットの Amazon リソースネーム (ARN) を指定します。AWS Management Console では、シークレットをそのわかりやすい名前を使用して選択します。

Secrets Manager でシークレットを作成する手順については、Secrets Manager ドキュメントのシークレットの作成ページを参照してください。次のいずれかの方法を使用します。

  • コンソールで Secrets Manager を使用します。

  • CLI を使用して RDS Proxy 用の Secrets Manager シークレットを作成するには、次のようなコマンドを使用します。

    aws secretsmanager create-secret --name "secret_name" --description "secret_description" --region region_name --secret-string '{"username":"db_user","password":"db_user_password"}'

例えば、以下のコマンドは、2 つのデータベースユーザーの Secrets Manager シークレットを作成します。1 つは admin という名前で、もう 1 つはapp-user という名前です。

aws secretsmanager create-secret \ --name admin_secret_name --description "db admin user" \ --secret-string '{"username":"admin","password":"choose_your_own_password"}' aws secretsmanager create-secret \ --name proxy_secret_name --description "application user" \ --secret-string '{"username":"app-user","password":"choose_your_own_password"}'

AWS アカウントが所有する秘密を確認するには、次のようなコマンドを使用します。

aws secretsmanager list-secrets

CLI を使用してプロキシを作成する場合、1 つ以上のシークレットの Amazon リソースネーム (ARN) を --auth パラメータに渡します。次の Linux の例は、AWS アカウントが所有する各シークレットの名前と ARN のみを含むレポートを準備する方法を示しています。この例では、--output table バージョン 2 で使用可能な AWS CLI パラメーターを使用します。AWS CLI バージョン 1 を使用している場合は、代わりに --output text を使用します。

aws secretsmanager list-secrets --query '*[].[Name,ARN]' --output table

シークレットに正しい資格情報を正しい形式で格納したことを確認するには、次のようなコマンドを使用します。your_secret_nameは、ショートネームまたはシークレットの ARN に置き換えます。

aws secretsmanager get-secret-value --secret-id your_secret_name

出力には、次のような JSON でエンコードした値を表示する行を含める必要があります。

"SecretString": "{\"username\":\"your_username\",\"password\":\"your_password\"}",

AWS Identity and Access Management (IAM) ポリシーの設定

Secrets Manager でシークレットを作成したら、これらのシークレットにアクセスできる IAM ポリシーを作成します。RDS および Aurora での IAM の使用に関する一般的な情報については、「Amazon RDS での Identity and Access Management」を参照してください。

ヒント

以下の手順は、IAM コンソールを使用する場合に適用されます。RDS に AWS Management Console を使用する場合は、RDS によって自動的に IAM ポリシーが作成されます。その場合は、以下の手順を省略できます。

プロキシで使用する Secrets Manager シークレットにアクセスするための IAM ポリシーを作成するには

  1. IAM コンソールにサインインします。「IAM ロールの作成」で説明されている「ロールの作成」プロセスに従います。ロールをデータベースに追加するステップを含めます。

  2. 新しいロールの場合は、インラインポリシーを追加するステップを実行します。「IAM ポリシーの編集」と同じ一般的な手順を使用します。以下の JSON を [JSON] テキストボックスに貼り付けます。自分のアカウント ID に置き換えます。AWS リージョンを us-east-2 に置き換えてください。作成したシークレットを Amazon リソースネーム (ARN) に置き換えます。kms:Decrypt アクションでは、Secrets Manager シークレットの暗号化に使用したキーに応じて、デフォルトの AWS KMS key または独自の KMS キーの ARN を置き換えます。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "secretsmanager:GetSecretValue", "Resource": [ "arn:aws:secretsmanager:us-east-2:account_id:secret:secret_name_1", "arn:aws:secretsmanager:us-east-2:account_id:secret:secret_name_2" ] }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": "kms:Decrypt", "Resource": "arn:aws:kms:us-east-2:account_id:key/key_id", "Condition": { "StringEquals": { "kms:ViaService": "secretsmanager.us-east-2.amazonaws.com" } } } ] }
  3. この IAM ロールの信頼ポリシーを編集します。以下の JSON を [JSON] テキストボックスに貼り付けます。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

次のコマンドは、AWS CLI で同じ操作を実行します。

PREFIX=choose_an_identifier aws iam create-role --role-name choose_role_name \ --assume-role-policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":["rds.amazonaws.com"]},"Action":"sts:AssumeRole"}]}' aws iam put-role-policy --role-name same_role_name_as_previous \ --policy-name $PREFIX-secret-reader-policy --policy-document """ same_json_as_in_previous_example """ aws kms create-key --description "$PREFIX-test-key" --policy """ { "Id":"$PREFIX-kms-policy", "Version":"2012-10-17", "Statement": [ { "Sid":"Enable IAM User Permissions", "Effect":"Allow", "Principal":{"AWS":"arn:aws:iam::account_id:root"}, "Action":"kms:*","Resource":"*" }, { "Sid":"Allow access for Key Administrators", "Effect":"Allow", "Principal": { "AWS": ["$USER_ARN","arn:aws:iam::account_id:role/Admin"] }, "Action": [ "kms:Create*", "kms:Describe*", "kms:Enable*", "kms:List*", "kms:Put*", "kms:Update*", "kms:Revoke*", "kms:Disable*", "kms:Get*", "kms:Delete*", "kms:TagResource", "kms:UntagResource", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource":"*" }, { "Sid":"Allow use of the key", "Effect":"Allow", "Principal":{"AWS":"$ROLE_ARN"}, "Action":["kms:Decrypt","kms:DescribeKey"], "Resource":"*" } ] } """

RDS Proxy の作成

指定した DB インスタンスのセットに対する接続を管理するには、プロキシを作成します。プロキシは、RDS for MySQL DB インスタンス、PostgreSQL DB インスタンス、または Aurora DB クラスターに関連付けることができます。

プロキシを作成するには

  1. AWS Management Console にサインインし、Amazon RDS コンソール (https://console.aws.amazon.com/rds/) を開きます。

  2. ナビゲーションペインで、[プロキシ] を選択します。

  3. [Create proxy (プロキシの作成)] を選択します。

  4. プロキシのすべての設定を選択します。

    [プロキシの設定] で、以下の情報を提供します。

    • プロキシ識別子。AWS アカウント ID と現在の AWS リージョン内で一意の名前を選択して入力します。

    • エンジンの互換性MySQL または POSTGRESQL を選択します。

    • Transport Layer Security が必要。プロキシですべてのクライアント接続に対して TLS/SSL を適用する場合は、この設定を選択します。プロキシへの暗号化された接続または暗号化されていない接続を使用すると、プロキシは基となるデータベースへの接続時に同じ暗号化設定を使用します。

    • アイドル状態のクライアント接続のタイムアウト。プロキシがクライアント接続を閉じるまでに接続がアイドル状態を継続できる時間を選択します。デフォルトは 1,800 秒 (30 分) です。クライアント接続がアイドル状態と見なされるのは、前のリクエストの完了後、新しいリクエストが指定時間内にアプリケーションから送信されない場合です。基となるデータベース接続は開いたままで、接続プールに返されるため、新しいクライアント接続で再利用できます。

      プロキシで古い接続を事前に削除する場合は、アイドル状態のクライアント接続のタイムアウトを短くすることを検討してください。ワークロードがスパイクしている場合は、接続を確立するコストを節約するために、アイドル状態のクライアント接続のタイムアウトを長くすることを検討してください。

    [ターゲットグループの設定] で、以下の情報を提供します。

    • データベース。このプロキシを介してアクセスする RDS DB インスタンスまたは Aurora DB クラスターを 1 つ選択します。このリストには、互換性のあるデータベースエンジン、エンジンバージョン、および他の設定を持つ DB インスタンスとクラスターのみが含まれます。リストが空の場合は、RDS Proxy と互換性のある新しい DB インスタンスまたはクラスターを作成します。これを行うには、「Amazon RDS DB インスタンスの作成」の手順に従います。次に、プロキシの作成をもう一度試します。

    • 接続プールの最大接続数。1 ~ 100 の値を指定します。この設定は、RDS Proxy が接続に使用できる max_connections 値の割合 (%) を表します。この DB インスタンスまたはクラスターで 1 つのプロキシのみを使用する場合は、この値を 100 に設定できます。この設定を RDS Proxy で使用する方法の詳細については、「接続の制限とタイムアウトの制御」を参照してください。

    • セッションのピン留めフィルタ。(オプション) これは、特定のアプリケーションのパフォーマンス問題についてトラブルシューティングを行うための高度な設定です。現在、唯一の選択肢は EXCLUDE_VARIABLE_SETS です。フィルタを選択するのは、次の両方に当てはまる場合です。アプリケーションで接続が再利用されていない原因が特定の種類の SQL ステートメントにある。これらの SQL ステートメントを使用して接続を再利用してもアプリケーションの正確性に影響がない。詳細については、「ピン留めを回避する」を参照してください。

    • 接続の借用タイムアウト。場合によっては、利用可能なすべてのデータベース接続をプロキシが使い切ることがあります。このような場合、プロキシがタイムアウトエラーを返す前に、データベース接続が使用可能になるまで待つ時間を指定できます。最大 5 分の期間を指定できます。この設定は、プロキシで最大数の接続が開いていて、すべての接続がすでに使用されている場合にのみ適用されます。

    • 初期化クエリ。(オプション) 新しい各データベース接続を開くときに実行するプロキシ用の 1 つ以上の SQL ステートメントを指定できます。設定は通常、各接続のタイムゾーンや文字セットなどの設定が同一であることを確認するために、SET ステートメントとともに使用されます。複数のステートメントの場合は、セミコロンをセパレータとして使用します。たとえば、1 つの SET ステートメントに SET x=1, y=2 など複数の変数を含めることもできます。PostgreSQL の場合、初期化クエリは現在サポートされていません。

    [接続性] で、以下の情報を提供します。

    • Secrets Manager シークレット。このプロキシでアクセスする RDS DB インスタンスまたは Aurora DB クラスターの DB ユーザー認証情報を含む Secrets Manager シークレットを少なくとも 1 つ選択します。

    • IAM ロール。前に選択した Secrets Manager シークレットに対するアクセス許可のある IAM ロールを選択します。また、AWS Management Console で新しい IAM ロールを作成して使用することを選択することもできます。

    • IAM 認証。プロキシへの接続に IAM 認証を要求するか拒否するかを選択します。IAM 認証またはネイティブデータベース認証の選択は、このプロキシにアクセスするすべての DB ユーザーに適用されます。

    • サブネット。このフィールドには、VPC に関連付けられたすべてのサブネットがあらかじめ入力されています。このプロキシに不要なサブネットは削除できます。少なくとも 2 つのサブネットを残す必要があります。

    追加の接続設定を定義します。

    • VPC セキュリティグループ。既存の VPC セキュリティグループを選択します。また、AWS Management Console で新しいセキュリティグループを作成して使用することを選択することもできます。

      注記

      このセキュリティグループは、プロキシの接続先のデータベースへのアクセスを許可する必要があります。同じセキュリティグループが、アプリケーションからプロキシへのイングレスと、プロキシからデータベースへのエグレスに使用されます。例えば、データベースとプロキシに同じセキュリティグループを使用するとします。この場合は必ず、そのセキュリティグループ内のリソースが同じセキュリティグループ内の他のリソースと通信できるように指定してください。

      共有 VPC を使用する場合、VPC のデフォルトのセキュリティグループや、別のアカウントに属しているセキュリティグループを使用することはできません。自分のアカウントに属しているセキュリティグループを選択します。存在しない場合は、作成します。この制限事項の詳細については、共有 VPC の操作を参照してください。

    (オプション) 詳細設定を定義します。

    • 拡張ログ記録の有効化。この設定を有効にして、プロキシの互換性やパフォーマンスの問題のトラブルシューティングを行うことができます。

      この設定を有効にすると、RDS Proxy は SQL ステートメントに関する詳細情報をログに含めます。この情報に基づいて、SQL の動作やプロキシ接続のパフォーマンスとスケーラビリティに関する問題をデバッグできます。デバッグ情報には、プロキシ経由で送信する SQL ステートメントのテキストが含まれます。したがって、この設定を有効にするのは、デバッグに必要な場合と、ログ内の機密情報を保護するセキュリティ対策がある場合に限ります。

      プロキシに関連するオーバーヘッドを最小限に抑えるために、この設定は有効にしてから 24 時間後に RDS Proxy によって自動的にオフにされます。特定の問題のトラブルシューティングを行うには、その設定を一時的に有効にします。

  5. [Create proxy (プロキシの作成)] を選択します。

プロキシを作成するには、AWS CLI コマンド create-db-proxy を使用します。--engine-family 値は大文字と小文字が区別されます。

Linux、macOS、Unix の場合:

aws rds create-db-proxy \ --db-proxy-name proxy_name \ --engine-family { MYSQL | POSTGRESQL } \ --auth ProxyAuthenticationConfig_JSON_string \ --role-arn iam_role \ --vpc-subnet-ids space_separated_list \ [--vpc-security-group-ids space_separated_list] \ [--require-tls | --no-require-tls] \ [--idle-client-timeout value] \ [--debug-logging | --no-debug-logging] \ [--tags comma_separated_list]

Windows の場合:

aws rds create-db-proxy ^ --db-proxy-name proxy_name ^ --engine-family { MYSQL | POSTGRESQL } ^ --auth ProxyAuthenticationConfig_JSON_string ^ --role-arn iam_role ^ --vpc-subnet-ids space_separated_list ^ [--vpc-security-group-ids space_separated_list] ^ [--require-tls | --no-require-tls] ^ [--idle-client-timeout value] ^ [--debug-logging | --no-debug-logging] ^ [--tags comma_separated_list]
ヒント

--vpc-subnet-ids パラメータに使用するサブネット ID がまだわからない場合は、「ネットワーク前提条件の設定」を使用して、使用できるサブネット ID を検索する方法の例をご参照ください。

注記

セキュリティグループは、プロキシの接続先のデータベースへのアクセスを許可する必要があります。同じセキュリティグループが、アプリケーションからプロキシへのイングレスと、プロキシからデータベースへのエグレスに使用されます。例えば、データベースとプロキシに同じセキュリティグループを使用するとします。この場合は必ず、そのセキュリティグループ内のリソースが同じセキュリティグループ内の他のリソースと通信できるように指定してください。

共有 VPC を使用する場合、VPC のデフォルトのセキュリティグループや、別のアカウントに属しているセキュリティグループを使用することはできません。自分のアカウントに属しているセキュリティグループを選択します。存在しない場合は、作成します。この制限事項の詳細については、共有 VPC の操作を参照してください。

プロキシに必要な情報と関連付けを作成するには、register-db-proxy-targets コマンドも使用します。ターゲットグループ名 default を指定します。RDS Proxy は、各プロキシを作成するときに、この名前のターゲットグループを自動的に作成します。

aws rds register-db-proxy-targets --db-proxy-name value [--target-group-name target_group_name] [--db-instance-identifiers space_separated_list] # rds db instances, or [--db-cluster-identifiers cluster_id] # rds db cluster (all instances), or [--db-cluster-endpoint endpoint_name] # rds db cluster endpoint (all instances)

RDS プロキシを作成するには、Amazon RDS API オペレーション CreateDBProxy を呼び出します。AuthConfig データ構造でパラメータを渡します。

RDS Proxyは、各プロキシを作成するときに、default という名前のターゲットグループを自動的に作成します。RegisterDBProxyTargets 関数を呼び出して、このターゲットグループに RDS DB インスタンスまたは Aurora DB クラスターを関連付けます。

RDS Proxy の表示

1 つ以上の RDS プロキシを作成すると、すべてのプロキシを表示して設定の詳細を確認し、変更や削除などを行うプロキシを選択できます。

プロキシを使用するデータベースアプリケーションでは、接続文字列でプロキシエンドポイントを使用する必要があります。

プロキシを表示するには

  1. AWS Management Console にサインインし、Amazon RDS コンソール (https://console.aws.amazon.com/rds/) を開きます。

  2. AWS Management Console の右上隅で、RDS Proxy を作成した AWS リージョンを選択します。

  3. ナビゲーションペインで、[プロキシ] を選択します。

  4. 詳細を表示する RDS プロキシの名前を選択します。

  5. 詳細ページの [ターゲットグループ] セクションに、プロキシと特定の RDS DB インスタンスや Aurora DB クラスターとの関連付けが表示されます。[デフォルト] ターゲットグループページへのリンクに従って、プロキシとデータベースの関連付けの詳細を表示できます。このページには、最大接続数の割合 (%)、接続の借用タイムアウト、エンジンの互換性、セッションのピン留めフィルターなど、プロキシの作成時に指定した設定が表示されます。

CLI を使用してプロキシを表示するには、describe-db-proxies コマンドを使用します。デフォルトでは、AWS アカウントが所有するすべてのプロキシが表示されます。単一のプロキシの詳細を表示するには、 --db-proxy-name パラメータで名前を指定します。

aws rds describe-db-proxies [--db-proxy-name proxy_name]

プロキシに関連付けられた他の情報を表示するには、以下のコマンドを使用します。

aws rds describe-db-proxy-target-groups --db-proxy-name proxy_name aws rds describe-db-proxy-targets --db-proxy-name proxy_name

プロキシに関連付けられている情報の詳細を表示するには、次のコマンドのシーケンスを使用します。

  1. プロキシのリストを取得するには、describe-db-proxies を実行します。

  2. プロキシが使用できる接続の最大割合などの接続パラメータを表示するには、describe-db-proxy-target-groups --db-proxy-name を実行し、パラメータ値としてプロキシの名前を使用します。

  3. 返されたターゲットグループに関連付けられている RDS DB インスタンスや Aurora DB クラスターの詳細を表示するには、describe-db-proxy-targets を実行します。

RDS API を使用してプロキシを表示するには、DescribeDBProxies オペレーションを使用します。DBProxy データ型の値が返されます。

プロキシの接続設定の詳細を表示するには、この戻り値のプロキシ識別子を DescribeDBProxyTargetGroups オペレーションで使用します。DBProxyTargetGroup データ型の値が返されます。

プロキシに関連付けられている RDS インスタンスや Aurora DB クラスターを表示するには、DescribeDBProxyTargets オペレーションを使用します。DBProxyTarget データ型の値が返されます。

RDS Proxy を介したデータベースへの接続

プロキシを介して RDS DB インスタンスや Aurora DB クラスターに接続する方法は、データベースに直接接続する方法とほぼ同じです。主な違いは、インスタンスやクラスターのエンドポイントの代わりに、プロキシのエンドポイントを指定することです。Aurora DB クラスターの場合、すべてのプロキシ接続にはデフォルトで読み取り/書き込み機能があり、ライターインスタンスを使用します。通常、読み取り専用の接続にリーダーエンドポイントを使用する場合は、プロキシ用の追加の読み取り専用エンドポイントを作成し、そのエンドポイントを同じ方法で使用できます。詳細については、「プロキシエンドポイントの概要」を参照してください。

ネイティブ認証を使用したプロキシへの接続

以下の基本的な手順でネイティブ認証を使用してプロキシに接続します。

  1. プロキシエンドポイントを見つけます。AWS Management Console では、プロキシの詳細ページで対応するエンドポイントを見つけることができます。AWS CLI では、describe-db-proxies コマンドを使用できます。以下の例のように指定します。

    # Add --output text to get output as a simple tab-separated list. $ aws rds describe-db-proxies --query '*[*].{DBProxyName:DBProxyName,Endpoint:Endpoint}' [ [ { "Endpoint": "the-proxy.proxy-demo.us-east-1.rds.amazonaws.com", "DBProxyName": "the-proxy" }, { "Endpoint": "the-proxy-other-secret.proxy-demo.us-east-1.rds.amazonaws.com", "DBProxyName": "the-proxy-other-secret" }, { "Endpoint": "the-proxy-rds-secret.proxy-demo.us-east-1.rds.amazonaws.com", "DBProxyName": "the-proxy-rds-secret" }, { "Endpoint": "the-proxy-t3.proxy-demo.us-east-1.rds.amazonaws.com", "DBProxyName": "the-proxy-t3" } ] ]
  2. クライアントアプリケーションの接続文字列で、そのエンドポイントをホストパラメータとして指定します。例えば、mysql -h オプションまたは psql -h オプションの値としてプロキシエンドポイントを指定します。

  3. 通常と同じようにデータベースのユーザー名とパスワードを指定します。

IAM 認証を使用したプロキシへの接続

RDS Proxy で IAM 認証を使用する場合は、通常のユーザー名とパスワードで認証するようにデータベースユーザーを設定します。IAM 認証は、Secrets Manager からユーザー名とパスワードの認証情報 RDS Proxy を取得する場合に適用されます。RDS Proxy から基礎となるデータベースへの接続は IAM を経由しません。

IAM 認証を使用して RDS Proxy に接続するには、IAM 認証を使用して RDS DB インスタンスまたは Aurora クラスターに接続する場合と同じ一般的な手順に従います。RDS および Aurora での IAM の使用に関する一般的な情報については、「Amazon RDS でのセキュリティ」を参照してください。

RDS Proxy での IAM の使用方法の主な違いは以下のとおりです。

  • 認可プラグインで個々のデータベースユーザーを設定することはありません。データベースユーザーが通常使用するユーザー名とパスワードはデータベース内に保管されています。これらのユーザー名とパスワードを含む Secrets Manager シークレットを設定し、RDS Proxy に Secrets Manager からの認証情報の取得を認可します。

    IAM 認証がクライアントプログラムとプロキシ間の接続に適用されます。その後、プロキシは、Secrets Manager から取得したユーザー名とパスワードの認証情報を使用して、データベースに対して認証します。

  • インスタンス、クラスター、またはリーダーの各エンドポイントの代わりに、プロキシエンドポイントを指定します。プロキシエンドポイントの詳細については、「IAM 認証を使用した DB instance への接続」を参照してください。

  • 直接 DB IAM 認証の場合は、データベースユーザーを選択し、特別な認証プラグインで識別されるように設定します。その後、IAM 認証を使用してそれらのユーザーに接続できます。

    プロキシのユースケースでは、ユーザーのユーザー名とパスワード (ネイティブ認証) を含むシークレットをプロキシに提供する必要があります。次に、IAM 認証 (データベースエンドポイントではなくプロキシエンドポイントで認証トークンを生成することによる)、および先ほど提供したシークレットのユーザー名のいずれかと一致するユーザー名を使用して、プロキシに接続します。

  • IAM 認証を使用してプロキシに接続する場合は、Transport Layer Security (TLS) / Secure Sockets Layer (SSL) を使用する必要があります。

IAM ポリシーを変更することで、特定のユーザーにプロキシへのアクセスを許可できます。以下に例を示します。

"Resource": "arn:aws:rds-db:us-east-2:1234567890:dbuser:prx-ABCDEFGHIJKL01234/db_user"

PostgreSQL でプロキシに接続する際の考慮事項

PostgreSQL では、クライアントは PostgreSQL データベースへの接続を開始するとき、パラメータ名と値の文字列のペアを含む起動メッセージを送信します。詳細については、PostgreSQL ドキュメントの「PostgreSQL Message Formats」で StartupMessage を参照してください。

RDS プロキシを介して接続する場合、起動メッセージには、現在認識されている以下のパラメータを含めることができます。

  • user

  • database

  • replication

起動メッセージには、以下の追加のランタイムパラメータを含めることもできます。

PostgreSQL メッセージの詳細については、PostgreSQL ドキュメントの「Frontend/Backend Protocol」を参照してください。

PostgreSQL では、JDBC を使用する場合、ピン留めを回避するために以下の操作をお勧めします。

  • ピン留めを回避するために、JDBC 接続パラメータ assumeMinServerVersion9.0 以上に設定します。これを行うと、JDBC ドライバーが SET extra_float_digits = 3 を実行するとき、接続の開始中に余分なラウンドトリップを実行しなくなります。

  • ピン留めを回避するために、JDBC 接続パラメータ ApplicationNameany/your-application-name に設定します。これを行うと、JDBC ドライバーが SET application_name = "PostgreSQL JDBC Driver" を実行するとき、接続の開始中に余分なラウンドトリップを実行しなくなります。JDBC パラメータは ApplicationName ですが、PostgreSQL StartupMessage パラメータは application_name です。

  • ピン留めを回避するために、JDBC 接続パラメータ preferQueryModeextendedForPrepared に設定します。extendedForPrepared により、拡張モードがプリペアドステートメントにのみ使用されことになります。

    preferQueryMode パラメータのデフォルトは extended であり、拡張モードがすべてのクエリに使用されます。拡張モードでは、一連の PrepareBindExecute、および Sync リクエストと対応するレスポンスを使用します。このタイプの一連のリクエストとレスポンスにより、RDS プロキシで接続がピン留めされます。

詳細については、「ピン留めを回避する」を参照してください。JDBC を使用した接続の詳細については、PostgreSQL ドキュメントの「Connecting to the Database」を参照してください。