

# 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 Management Console에서는 해당 프록시의 세부 정보 페이지에서 엔드포인트를 찾을 수 있습니다. 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 프록시에서 IAM 인증을 사용하는 경우, 클라이언트와 프록시 간의 인증을 위한 두 가지 옵션이 있습니다.
+ 일반 사용자 이름 및 암호로 인증하도록 데이터베이스 사용자를 설정합니다. RDS Proxy는 Secrets Manager에서 사용자 이름 및 암호 자격 증명을 검색합니다. RDS 프록시에서 기본 데이터베이스로의 연결은 IAM을 거치지 않습니다.
+ 또한 데이터베이스 자격 증명 없이 IAM을 사용하여 프록시를 통해 데이터베이스에 연결하는 엔드 투 엔드 IAM 인증을 사용할 수 있습니다.

 IAM 인증을 사용하여 RDS 프록시에 연결하려면 IAM 인증을 통해 RDS DB 인스턴스에 연결하는 것과 동일한 일반 연결 프로시저를 따르면 됩니다. 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 인증을 사용하여 프록시에 연결할 때는 전송 계층 보안(TLS)/보안 소켓 계층(SSL)을 사용해야 합니다.

IAM 정책을 수정하여 특정 사용자에게 프록시에 대한 액세스 권한을 부여할 수 있습니다. 예를 들면 다음과 같습니다.

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

**작은 정보**  
RDS 프록시 연결에 대한 IAM 인증을 구성할 때 연결 문제를 방지하려면 다음 중요 지침을 따르세요.  
동일한 데이터베이스 사용자 또는 `rds_iam` 역할에 대한 일반 암호 인증을 유지하면서 역할을 부여하지 마세요.
클라이언트가 IAM 인증을 사용하여 RDS 프록시에 연결하는 동안 RDS 프록시는 항상 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 프록시 고정 방지](rds-proxy-pinning.md)를 참조하세요.

## PostgreSQL을 사용하여 연결할 때 고려할 사항
<a name="rds-proxy-connecting-postgresql"></a>

RDS 프록시에 연결할 새 PostgreSQL 데이터베이스 사용자를 생성하는 경우 데이터베이스에 대해 사용자에게 `CONNECT` 권한을 부여해야 합니다. 이렇게 하지 않으면 사용자가 연결을 설정할 수 없습니다. 자세한 내용은 [RDS 프록시 사용 시 PostgreSQL 데이터베이스에 새 데이터베이스 사용자 추가](rds-proxy-new-db-user.md#rds-proxy-new-db-user-pg) 섹션을 참조하세요.

클라이언트가 PostgreSQL 데이터베이스에 대한 연결을 시작하면 시작 메시지가 전송됩니다. 이 메시지에는 파라미터 이름과 값 문자열의 쌍이 포함됩니다. 자세한 내용은 PostgreSQL 설명서에서 [PostgreSQL 메시지 형식](https://www.postgresql.org/docs/current/protocol-message-formats.html)의 `StartupMessage`를 참조하십시오.

RDS 프록시를 통해 연결할 때 시작 메시지에는 현재 인식되는 다음과 같은 파라미터가 포함될 수 있습니다.
+  `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 설명서의 [프런트 엔드/백엔드 프로토콜](https://www.postgresql.org/docs/current/protocol.html)을 참조하십시오.

 PostgreSQL의 경우 JDBC를 사용한다면 고정을 피하기 위해 다음을 사용하는 것이 좋습니다.
+ 고정을 방지하려면 JDBC 연결 파라미터 `assumeMinServerVersion`을 `9.0` 이상으로 설정합니다. 이렇게 하면 `SET extra_float_digits = 3`을 실행할 때 JDBC 드라이버가 연결 시작 중에 추가 왕복을 수행하지 못합니다.
+ 고정을 방지하려면 JDBC 연결 파라미터 `ApplicationName`을 `any/your-application-name`으로 설정합니다. 이렇게 하면 `SET application_name = "PostgreSQL JDBC Driver"`을 실행할 때 JDBC 드라이버가 연결 시작 중에 추가 왕복을 수행하지 못합니다. JDBC 파라미터는 `ApplicationName`이지만 PostgreSQL `StartupMessage` 파라미터는 `application_name`입니다.

자세한 내용은 [RDS 프록시 고정 방지](rds-proxy-pinning.md) 섹션을 참조하세요. JDBC를 사용한 연결에 대한 자세한 내용은 PostgreSQL 설명서의 [데이터베이스에 연결](https://jdbc.postgresql.org/documentation/setup/)을 참조하십시오.