

# RDS Proxy を介したデータベースへの接続
<a name="rds-proxy-connecting"></a>

プロキシを介して、またはデータベースに接続することによって RDS DB インスタンスに接続する方法は、一般に同じです。詳細については、「[プロキシエンドポイントの概要](rds-proxy-endpoints.md#rds-proxy-endpoints-overview)」を参照してください。

**Topics**
+ [データベース認証情報を使用したデータベースへの接続](#rds-proxy-connecting-native)
+ [IAM 認証を使用したデータベースへの接続](#rds-proxy-connecting-iam)
+ [Microsoft SQL Server への接続に関する考慮事項](#rds-proxy-connecting-sqlserver)
+ [PostgreSQL への接続に関する考慮事項](#rds-proxy-connecting-postgresql)

## データベース認証情報を使用したデータベースへの接続
<a name="rds-proxy-connecting-native"></a>

 データベース認証情報を使用してプロキシに接続するには、次の手順に従います。

1.  プロキシエンドポイントを見つけます。AWS マネジメントコンソール では、プロキシの詳細ページで対応するエンドポイントを見つけることができます。AWS CLI では、[describe-db-proxies](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-proxies.html) コマンドを使用できます。以下の例のように指定します。

   ```
   # 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"
           }
       ]
   ]
   ```

1.  クライアントアプリケーションの接続文字列で、そのエンドポイントをホストパラメータとして指定します。例えば、`mysql -h` オプションまたは `psql -h` オプションの値としてプロキシエンドポイントを指定します。

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

## IAM 認証を使用したデータベースへの接続
<a name="rds-proxy-connecting-iam"></a>

 RDS Proxy で IAM 認証を使用する場合、クライアントとプロキシ間の認証には 2 つのオプションがあります。
+ 通常のユーザー名とパスワードで認証するようにデータベースユーザーを設定します。RDS Proxy は、Secrets Manager からユーザー名とパスワードの認証情報を取得します。RDS Proxy から基礎となるデータベースへの接続は IAM を経由しません。
+ また、エンドツーエンドの IAM 認証を使用することもできます。これは、データベース認証情報を必要とせずに IAM を使用してプロキシを介してデータベースに接続します。

 IAM 認証を使用して RDS Proxy に接続するには、RDS DB インスタンスとの IAM 認証と同じ一般的な接続手順で行います。IAM の使用に関する一般情報については、「[Amazon RDS でのセキュリティ](UsingWithRDS.md)」を参照してください。エンドツーエンドの IAM 認証を使用している場合は、DB ユーザーに IAM 認証プラグインを提供します。「[IAM 認証を使用したデータベースアカウントの作成](UsingWithRDS.IAMDBAuth.DBAccounts.md)」を参照してください。

 RDS Proxy での IAM の使用方法の主な違いは以下のとおりです。
+ 標準の IAM 認証では、データベースユーザーはデータベース内で通常の認証情報を持ちます。これらのユーザー名とパスワードを含む Secrets Manager シークレットを設定し、RDS Proxy に Secrets Manager からの認証情報の取得を認可します。IAM 認証がクライアントプログラムとプロキシ間の接続に適用されます。その後、プロキシは、Secrets Manager から取得したユーザー名とパスワードの認証情報を使用して、データベースに対して認証します。
+ エンドツーエンドの IAM 認証では、データベース認証情報用に Secrets Manager シークレットを設定する必要はありません。IAM 認証は、クライアントからプロキシへの接続とプロキシからデータベースへの接続に適用されます。
+ インスタンス、クラスター、またはリーダーの各エンドポイントの代わりに、プロキシエンドポイントを指定します。プロキシエンドポイントの詳細については、「[IAM 認証を使用した DB インスタンスへの接続](UsingWithRDS.IAMDBAuth.Connecting.md)」を参照してください。
+ IAM 認証を使用してプロキシに接続する場合は、Transport Layer Security (TLS) / Secure Sockets Layer (SSL) を使用していることを確認してください。

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

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

**ヒント**  
RDS Proxy 接続の IAM 認証を設定するときは、接続の問題を回避するため、以下の重要なガイドラインに従ってください。  
同じデータベースユーザーまたは `rds_iam` ロールの一般的なパスワード認証を維持しながら、ロールを許可しないでください。
クライアントが IAM 認証を使用して RDS Proxy に接続する間、RDS Proxy は常に Secrets Manager を介したパスワード認証を使用してデータベースに接続することに注意してください。
接続の終了や再接続が頻繁に発生する場合は、ユーザーまたはロールから既存の `rds_iam` 許可をすべて削除し、パスワード認証のみを使用します。
パスワードポリシーが SCRAM-SHA-256 の安全な文字要件を満たしていることを確認します。
同じデータベースユーザーの IAM 認証方法とパスワード認証方法が混在すると、接続が不安定になる可能性があります。

## Microsoft SQL Server への接続に関する考慮事項
<a name="rds-proxy-connecting-sqlserver"></a>

IAM 認証を使用してプロキシに接続する場合、パスワードフィールドは使用しません。代わりに、データベースドライバーの種類ごとに適切なトークンプロパティをトークンフィールドに指定します。例えば、JDBC の `accessToken` プロパティや ODBC の `sql_copt_ss_access_token` プロパティを使用します。または、.NET SqlClient ドライバーの `AccessToken` プロパティを使用します。トークンプロパティをサポートしていないクライアントでは IAM 認証を使用できません。

プロキシがデータベース接続を共有できない条件もあるため、代わりにクライアントアプリケーションからプロキシへの接続を専用のデータベース接続に固定します。これらの条件の詳細については、「[RDS Proxy の固定の回避](rds-proxy-pinning.md)」を参照してください。

## PostgreSQL への接続に関する考慮事項
<a name="rds-proxy-connecting-postgresql"></a>

RDS Proxy に接続するための新しい PostgreSQL データベースユーザーを作成する場合は、データベースに対するユーザー `CONNECT` 権限を付与してください。これがないと、ユーザーは接続を確立できません。詳細については、「[RDS Proxy を使用する場合に PostgreSQL データベースに新しいデータベースユーザーを追加する](rds-proxy-new-db-user.md#rds-proxy-new-db-user-pg)」を参照してください。

クライアントが PostgreSQL データベースへの接続をスタートする際は起動メッセージを送信します。このメッセージには、パラメータ名と値の文字列のペアが含まれています。詳細については、PostgreSQL ドキュメントの「[PostgreSQL Message Formats](https://www.postgresql.org/docs/current/protocol-message-formats.html)」で `StartupMessage` を参照してください。

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

 起動メッセージには、以下の追加のランタイムパラメータを含めることもできます。
+ `[application\$1name](https://www.postgresql.org/docs/current/runtime-config-logging.html#GUC-APPLICATION-NAME) `
+ `[client\$1encoding](https://www.postgresql.org/docs/current/runtime-config-client.html#GUC-CLIENT-ENCODING) `
+ `[DateStyle](https://www.postgresql.org/docs/current/runtime-config-client.html#GUC-DATESTYLE) `
+ `[TimeZone](https://www.postgresql.org/docs/current/runtime-config-client.html#GUC-TIMEZONE) `
+  `[extra\$1float\$1digits](https://www.postgresql.org/docs/current/runtime-config-client.html#GUC-EXTRA-FLOAT-DIGITS) `
+  `[ search\$1path ](https://www.postgresql.org/docs/current/runtime-config-client.html#GUC-SEARCH-PATH)` 

 PostgreSQL メッセージの詳細については、PostgreSQL ドキュメントの「[Frontend/Backend Protocol](https://www.postgresql.org/docs/current/protocol.html)」を参照してください。

 PostgreSQL では、JDBC を使用する場合、ピニングを回避するために以下の操作をお勧めします。
+ 固定を回避するために、JDBC 接続パラメータ `assumeMinServerVersion` を `9.0` 以上に設定します。これにより、JDBC ドライバーが `SET extra_float_digits = 3` を実行するとき、接続の始動時に余分なラウンドトリップを実行しなくなります。
+ 固定を回避するために、JDBC 接続パラメータ `ApplicationName` を `any/your-application-name` に設定します。これを行うと、JDBC ドライバーが `SET application_name = "PostgreSQL JDBC Driver"` を実行するとき、接続のスタートアップ中に余分なラウンドトリップを実行しなくなります。JDBC パラメータは `ApplicationName` ですが、PostgreSQL `StartupMessage` パラメータは `application_name` です。

詳細については、「[RDS Proxy の固定の回避](rds-proxy-pinning.md)」を参照してください。JDBC を使用した接続の詳細については、PostgreSQL ドキュメントの「[Connecting to the Database](https://jdbc.postgresql.org/documentation/setup/)」を参照してください。