

# RDS 프록시 시작하기
<a name="rds-proxy-setup"></a>

다음 페이지의 정보를 통해 관련 보안 옵션을 설정하고 [Aurora용 Amazon RDS Proxy](rds-proxy.md)를 관리하고 설정하세요. 보안 옵션은 각 프록시에 액세스할 수 있는 사용자 및 각 프록시가 DB 인스턴스에 연결하는 방법을 제어합니다.

RDS 프록시를 처음 사용하는 경우 제시된 순서대로 페이지를 따라가는 것이 좋습니다.

**Topics**
+ [RDS 프록시에 대한 네트워크 사전 조건 설정](rds-proxy-network-prereqs.md)
+ [RDS 프록시용 데이터베이스 자격 증명 설정](rds-proxy-secrets-arns.md)
+ [RDS 프록시에 대한 IAM 인증 구성](rds-proxy-iam-setup.md)
+ [Amazon Aurora용 프록시 만들기](rds-proxy-creating.md)
+ [프록시 보기](rds-proxy-viewing.md)
+ [RDS Proxy를 통해 데이터베이스에 연결](rds-proxy-connecting.md)

# RDS 프록시에 대한 네트워크 사전 조건 설정
<a name="rds-proxy-network-prereqs"></a>

 RDS 프록시를 사용하려면 Aurora DB 클러스터와 RDS 프록시 간에 공통의 Virtual Private Cloud(VPC)가 있어야 합니다. 이 VPC에는 서로 다른 가용 영역에 있는 최소 2개의 서브넷이 있어야 합니다. 계정은 이러한 서브넷을 소유하거나 다른 계정과 공유할 수 있습니다. VPC 공유에 대한 자세한 내용은 [공유 VPC 작업](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-sharing.html)을 참조하세요.

IPv6 지원의 경우 추가 네트워크 구성이 필요합니다.
+ **IPv6 엔드포인트 네트워크 유형** - IPv6를 지원하도록 VPC 및 서브넷을 구성해야 합니다. 여기에는 VPC 및 서브넷에 할당된 IPv6 CIDR 블록이 포함됩니다.
+ **듀얼 스택 엔드포인트 네트워크 유형** - VPC 및 서브넷은 IPv4 및 IPv6 주소 지정을 모두 지원해야 합니다.
+ **IPv6 대상 연결 네트워크 유형** - 프록시에서 IPv6 연결을 지원하려면 듀얼 스택 모드로 데이터베이스를 구성해야 합니다.

Amazon EC2, Lambda 또는 Amazon ECS와 같은 클라이언트 애플리케이션 리소스는 프록시와 동일한 VPC에 있을 수 있습니다. 또는 프록시와 별도의 VPC에 있을 수도 있습니다. Aurora DB 클러스터에 성공적으로 연결했다면 필요한 네트워크 리소스가 이미 있는 것입니다.

**Topics**
+ [서브넷에 대한 정보 가져오기](#rds-proxy-network-prereqs.subnet-info)
+ [IP 주소 용량 계획](#rds-proxy-network-prereqs.plan-ip-address)

## 서브넷에 대한 정보 가져오기
<a name="rds-proxy-network-prereqs.subnet-info"></a>

 Aurora를 막 시작하는 경우 [Amazon Aurora 환경 설정](CHAP_SettingUp_Aurora.md)의 프로시저에 따라 데이터베이스에 연결하는 기본 사항을 학습할 수 있습니다. [Amazon Aurora 시작하기](CHAP_GettingStartedAurora.md)의 자습서를 따를 수도 있습니다.

프록시를 만들려면 프록시가 작동하는 서브넷과 VPC를 제공해야 합니다. 다음 Linux 예에서는 AWS 계정에서 소유한 VPC 및 서브넷을 검사하는 AWS CLI 명령을 보여줍니다. 특히 CLI를 사용하여 프록시를 생성할 경우 서브넷 ID를 파라미터로 전달합니다.

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

다음 Linux 예시에서는 특정 Aurora DB 클러스터에 해당하는 서브넷 ID를 확인하는 AWS CLI 명령을 보여줍니다. 

Aurora 클러스터의 경우 먼저, 연결된 DB 인스턴스 중 하나의 ID를 찾습니다. 해당 DB 인스턴스에서 사용하는 서브넷 ID를 추출할 수 있습니다. 이렇게 하려면 DB 인스턴스에 대한 describe 출력에서 `DBSubnetGroup` 및 `Subnets` 속성 내의 중첩된 필드를 검사합니다. 해당 데이터베이스 서버의 프록시를 설정할 때 이러한 서브넷 ID의 일부 또는 전부를 지정합니다.

```
$ # 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
```

DB 인스턴스 식별자를 찾은 다음 연결된 VPC를 검사하여 서브넷을 찾습니다. 다음 Linux 예제에서는 그 방법을 보여 줍니다.

```
$ #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
...
```

```
$ #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
```

## IP 주소 용량 계획
<a name="rds-proxy-network-prereqs.plan-ip-address"></a>

RDS Proxy는 등록된 DB 인스턴스의 구성에 따라 자동으로 용량을 조정합니다. 프로비저닝된 인스턴스의 경우 인스턴스 크기에 따라 결정되고 Aurora Serverless v2 인스턴스의 경우 최대 ACU 용량에 따라 결정됩니다. 등록된 데이터베이스 또는 내부 RDS 프록시 유지 관리 작업의 크기를 늘리는 것과 같은 특정 작업의 경우 용량을 늘려야 할 수 있습니다. 이러한 작업 중에 프록시에 추가 용량을 프로비저닝하기 위해 더 많은 IP 주소가 필요할 수 있습니다. 이러한 추가 주소를 사용하면 워크로드에 영향을 주지 않고 프록시를 확장할 수 있습니다. 서브넷에 사용 가능한 IP 주소가 부족하면 프록시가 스케일 업되지 않을 수 있습니다. 이로 인해 쿼리 지연 시간이 길어지거나 클라이언트 연결이 실패할 수 있습니다. RDS는 서브넷에 사용 가능한 IP 주소가 충분하지 않을 경우 `RDS-EVENT-0243` 이벤트를 통해 알려줍니다. 이 이벤트에 대한 자세한 내용은 [RDS 프록시 이벤트 작업RDS 프록시 이벤트 작업](rds-proxy.events.md) 섹션을 참조하세요.

DB 인스턴스 클래스 크기를 기준으로 프록시의 서브넷에 다음과 같은 최소 개수의 사용 가능한 IP 주소를 예약합니다.


|  DB 인스턴스 클래스  |  여유 IP 주소 최소 개수  | 
| --- | --- | 
|  db.\$1.xlarge 이하   |  10  | 
|  db.\$1.2xlarge   |  15  | 
|  db.\$1.4xlarge   |  25  | 
|  db.\$1.8xlarge   |  45  | 
|  db.\$1.12xlarge   |  60  | 
|  db.\$1.16xlarge   |  75  | 
|  db.\$1.24xlarge   |  110  | 

Aurora Serverless v2의 경우, 최대 ACU 용량을 기준으로 프록시를 위해 서브넷에서 다음과 같은 최소 개수의 사용 가능한 IP 주소를 예약하세요.


| `Maximum ACU Capacity` |  여유 IP 주소 최소 개수  | 
| --- | --- | 
|  16 이하   |  10  | 
|  32  |  15  | 
|  64  |  25  | 
|  96  |  30  | 
|  128  |  40  | 
|  160  |  50  | 
|  192  |  55  | 
|  224  |  65  | 
|  256  |  75  | 

**참고**  
RDS Proxy는 하나의 VPC 내에서 각 프록시에 대해 IP 주소를 215개보다 많이 소비하지 않습니다.

RDS 프록시에는 Aurora 데이터베이스에 최소 10개의 IP 주소가 필요합니다. 이러한 권장 IP 주소 수는 기본 엔드포인트만 있는 프록시에 대한 예상 개수입니다. 각 추가 사용자 지정 엔드포인트에 대해 IP 주소를 세 개 더 예약하는 것이 좋습니다. 각 Aurora 리더 인스턴스에 대해 대상에 대한 리더의 최대 ACU 또는 프로비저닝된 Aurora Serverless v2 대상에 대한 DB 인스턴스 크기를 기반으로 테이블에 지정된 대로 추가 IP 주소를 예약하는 것이 좋습니다.

다음이 있는 Aurora DB 클러스터에 연결된 프록시에 필요한 IP 주소 추정:
+ `db.r5.8xlarge` 크기의 프로비저닝된 라이터 인스턴스 1개와 `db.r5.2xlarge` 크기의 프로비저닝된 리더 인스턴스 1개.
+ 이 클러스터에 연결된 프록시에는 기본 엔드포인트와 읽기 전용 역할을 가진 사용자 지정 엔드포인트가 있습니다.

이 경우 프록시에는 약 63개의 여유 IP 주소(라이터 인스턴스에 45개, 리더 인스턴스에 15개, 추가 사용자 지정 엔드포인트에 3개)가 필요합니다.

다음이 있는 Aurora DB 클러스터에 연결된 프록시에 필요한 IP 주소 추정: 
+ 최대 용량이 256ACU인 Aurora Serverless v2 라이터 인스턴스 1개와 최대 용량이 192ACU인 Serverless v2 리더 인스턴스 1개.
+ 이 클러스터에 연결된 프록시에는 기본 엔드포인트와 읽기 전용 역할을 가진 사용자 지정 엔드포인트 1개가 있습니다.

이 경우 프록시에는 약 133개의 여유 IP 주소(라이터 인스턴스에 75개, 리더 인스턴스에 55개, 추가 사용자 지정 엔드포인트에 3개)가 필요합니다.

다음이 있는 Aurora 클러스터에 연결된 프록시에 필요한 IP 주소 추정: 
+ DB 인스턴스 크기가 db.r5.4xlarge인 프로비저닝된 라이터 인스턴스 1개와 최대 용량이 64ACU인 Serverless v2 리더 인스턴스 1개.
+ 이 클러스터에 연결된 프록시에는 기본 엔드포인트와 읽기 전용 역할을 가진 사용자 지정 엔드포인트 1개가 있습니다.

이 경우 프록시에는 약 53개의 여유 IP 주소(라이터 인스턴스에 25개, 리더 인스턴스에 25개, 추가 사용자 지정 엔드포인트에 3개)가 필요합니다.

다음이 있는 Aurora DB 클러스터에 연결된 프록시에 필요한 IP 주소 추정:
+ db.r5.24xlarge 크기의 프로비저닝된 라이터 인스턴스 1개와 db.r5.8xlarge 크기의 프로비저닝된 리더 인스턴스 3개.
+ 이 DB 클러스터에 연결된 프록시에는 기본 엔드포인트와 읽기 전용 역할을 가진 사용자 지정 엔드포인트 1개가 있습니다.

이 경우 프록시에는 215개의 무료 IP 주소가 필요합니다. 계산에서 248개의 IP(110 \$1 (3\$145) \$1 3)를 제안하지만 RDS 프록시는 VPC의 각 프록시에 대해 215개를 초과하는 IP 주소를 소비하지 않습니다.

# RDS 프록시용 데이터베이스 자격 증명 설정
<a name="rds-proxy-secrets-arns"></a>

Amazon RDS의 RDS 프록시는 AWS Secrets Manager를 사용하여 데이터베이스 자격 증명을 안전하게 저장하고 관리합니다. 애플리케이션에 임베딩 자격 증명을 포함하는 대신 프록시를 필요한 인증 세부 정보가 포함된 Secrets Manager 보안 암호와 연결합니다. 프록시가 Aurora DB 클러스터에서 연결하는 각 데이터베이스 사용자 계정에 대해 별도의 Secrets Manager 암호를 만듭니다.

또는 엔드 투 엔드 IAM 인증을 사용하도록 RDS 프록시를 구성할 수 있으므로 Secrets Manager에 데이터베이스 자격 증명을 저장할 필요가 없습니다. RDS 프록시는 클라이언트-프록시 및 프록시-데이터베이스 연결 모두에 IAM 인증을 사용합니다. 이는 보안 암호 또는 암호 관리가 필요하지 않은 완전 통합 IAM 기반 인증 솔루션을 제공합니다. 새로운 IAM DB 사용자를 추가하는 것에 대한 자세한 내용은 [IAM 인증을 사용하여 데이터베이스 계정 생성](UsingWithRDS.IAMDBAuth.DBAccounts.md) 섹션을 참조하세요.

**Topics**
+ [RDS 프록시에 사용할 보안 암호 만들기](#rds-proxy-secrets-create)

## RDS 프록시에 사용할 보안 암호 만들기
<a name="rds-proxy-secrets-create"></a>

프록시를 만들기 전에 데이터베이스 자격 증명을 저장하는 보안 암호를 최소 하나 이상 만들어야 합니다.

### 콘솔
<a name="rds-proxy-secrets-create-console"></a>

**보안 암호 생성**

1. [https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/)에서 Secrets Manager 콘솔을 엽니다.

1. **Store a new secret**(새 보안 암호 저장)을 선택합니다.

1. **Amazon RDS 데이터베이스에 대한 자격 증명**을 선택합니다.

1. 사용자 이름과 암호를 입력합니다. 입력한 자격 증명은 연결된 RDS 데이터베이스에 있는 데이터베이스 사용자의 자격 증명과 일치해야 합니다. RDS 프록시는 이러한 자격 증명을 사용하여 애플리케이션 대신 데이터베이스에 대한 연결을 인증하고 설정합니다.

   일치하지 않는 경우 데이터베이스 암호와 일치하도록 보안 암호를 업데이트할 수 있습니다. 보안 암호를 업데이트할 때까지는 해당 보안 암호를 사용하여 프록시를 통해 연결을 시도하는 작업이 실패할 것이지만, 다른 유효한 보안 암호를 사용하는 연결은 여전히 작동합니다.
**참고**  
RDS for SQL Server의 경우 RDS 프록시에는 DB 인스턴스 데이터 정렬 설정에 관계없이 Secrets Manager에 대/소문자를 구분하는 보안 암호가 필요합니다. 애플리케이션에서 관리자(‘Admin’ 및 ‘admin’)와 같이 대문자가 다른 사용자 이름을 허용하는 경우 각각에 대해 별도의 보안 암호를 만들어야 합니다. RDS 프록시는 클라이언트와 프록시 간에 대/소문자를 구분하지 않는 사용자 이름 인증을 지원하지 않습니다.  
SQL Server의 콜레이션에 대한 자세한 내용은 [Microsoft SQL Server](https://docs.microsoft.com/en-us/sql/relational-databases/collations/collation-and-unicode-support?view=sql-server-ver16) 설명서를 참조하세요.

1. **데이터베이스**에서 보안 암호가 액세스할 Amazon RDS 데이터베이스를 선택합니다.

1. 보안 암호의 다른 설정을 입력한 다음 **저장**을 선택합니다. 포괄적인 설명은 *AWS Secrets Manager 사용 설명서*에 나와 있는 [Creating an AWS Secrets Manager secret](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html)를 참조하시기 바랍니다.

### AWS CLI
<a name="rds-proxy-secrets-create-cli"></a>

AWS CLI를 통해 프록시를 만들 때 해당 보안 암호의 Amazon 리소스 이름(ARN)을 지정합니다. 프록시가 액세스할 수 있는 모든 DB 사용자 계정에 지정합니다. AWS Management Console에서는 설명하는 이름으로 비밀을 선택합니다.
+ RDS 프록시와 함께 사용할 Secrets Manager 보안 암호를 만들려면 [create-secret](https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/create-secret.html) 명령을 사용합니다.

  ```
  aws secretsmanager create-secret \
    --name "secret_name" \
    --description "secret_description" \
    --region region_name \
    --secret-string '{"username":"db_user","password":"db_user_password"}'
  ```
+ 또한 사용자 지정 키를 생성하여 Secrets Manager 보안 암호를 암호화할 수 있습니다. 다음 명령은 예시 키를 생성합니다.

  ```
  aws kms create-key --description "test-key" --policy '{
    "Id":"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":"*"
        }
      ]
  }'
  ```

 예를 들어, 다음 명령은 두 데이터베이스 사용자에 대한 Secrets Manager 보안 암호를 생성합니다.

```
aws secretsmanager create-secret \
  --name secret_name_1 --description "db admin user" \
  --secret-string '{"username":"admin","password":"choose_your_own_password"}'

aws secretsmanager create-secret \
  --name secret_name_2 --description "application user" \
  --secret-string '{"username":"app-user","password":"choose_your_own_password"}'
```

사용자 지정 AWS KMS 키로 암호화된 이러한 보안 암호를 만들려면 다음 명령을 사용하세요.

```
aws secretsmanager create-secret \
  --name secret_name_1 --description "db admin user" \
  --secret-string '{"username":"admin","password":"choose_your_own_password"}' \
  --kms-key-id arn:aws:kms:us-east-2:account_id:key/key_id

aws secretsmanager create-secret \
  --name secret_name_2 --description "application user" \
  --secret-string '{"username":"app-user","password":"choose_your_own_password"}' \
  --kms-key-id arn:aws:kms:us-east-2:account_id:key/key_id
```

AWS 계정에서 소유한 보안 암호를 보려면 [list-secrets](https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/list-secrets.html) 명령을 사용합니다.

```
aws secretsmanager list-secrets
```

CLI를 사용하여 프록시를 생성할 경우 하나 이상의 보안 정보에 대한 Amazon 리소스 이름(ARN)을 `--auth` 파라미터에 전달합니다. 다음 예제에서는 AWS 계정이 소유한 각 보안 암호의 이름과 ARN만 사용하여 보고서를 준비하는 방법을 보여 줍니다. 이 예에서는 `--output table` 버전 2에서 제공되는 AWS CLI 파라미터를 사용합니다. AWS CLI 버전 1을 사용하는 경우 `--output text`를 대신 사용합니다.

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

보안 암호에 올바른 자격 증명이 올바른 형식으로 포함되어 있는지 확인하려면 [get-secret-value](https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/get-secret-value.html) 명령을 사용합니다. `your_secret_name`을 보안 암호의 간단한 이름 또는 ARN으로 바꿉니다.

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

출력에는 다음과 유사한 JSON 인코딩 값이 있는 줄이 포함됩니다.

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

# RDS 프록시에 대한 IAM 인증 구성
<a name="rds-proxy-iam-setup"></a>

Amazon RDS에서 RDS 프록시에 대한 AWS Identity and Access Management(IAM) 인증을 설정하려면 필수 권한을 부여하는 IAM 정책을 만들고 구성합니다.

이 주제에서는 필요한 IAM 정책을 만들고 IAM 역할에 연결하는 등 RDS 프록시에 대한 IAM 인증을 구성하는 단계를 제공합니다.

**작은 정보**  
이 절차는 자체 IAM 역할을 만들려는 경우에만 필요합니다. 그렇지 않으면 프록시를 설정할 때 RDS가 필요한 역할을 자동으로 만들 수 있으므로 이러한 단계를 건너뛸 수 있습니다.

## 사전 조건
<a name="rds-proxy-iam-setup-prereqs"></a>

RDS 프록시에 대한 IAM 인증을 설정하기 전에 다음 사항이 포함되어 있는지 확인합니다.
+ **AWS Secrets Manager** - 데이터베이스 자격 증명이 포함된 하나 이상의 저장된 보안 암호입니다. 보안 암호를 만드는 설명은 [RDS 프록시용 데이터베이스 자격 증명 설정](rds-proxy-secrets-arns.md) 섹션을 참조하시기 바랍니다.

  엔드 투 엔드 IAM 인증을 사용하는 경우에는 필요하지 않습니다.
+ **IAM 권한** - AWS Secrets Manager에서 IAM 정책, 역할 및 보안 암호를 만들고 관리할 수 있는 권한이 있는 IAM 역할 또는 사용자입니다.

## 엔드 투 엔드 IAM 인증을 위한 IAM 정책 생성
<a name="rds-proxy-iam-setup-e2e-steps"></a>

엔드 투 엔드 IAM 인증을 사용하는 경우 RDS 프록시는 Secrets Manager에서 자격 증명을 검색하는 대신 IAM 인증을 사용하여 데이터베이스에 연결합니다. 이렇게 하려면 프록시에 사용할 데이터베이스 계정에 대한 `rds-db:connect` 권한으로 IAM 역할을 구성해야 합니다.

IAM을 사용하여 데이터베이스에 대한 RDS 프록시를 인증하려면 필요한 데이터베이스 연결 권한을 부여하는 정책을 사용하여 IAM 역할을 생성합니다.

### 콘솔
<a name="rds-proxy-iam-e2e-console"></a>

**프록시를 사용하여 엔드 투 엔드 IAM 인증을 위한 역할 생성**

1. AWS Management Console에 로그인하여 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)에서 IAM 콘솔을 엽니다.

1. 역할에 대한 권한 정책을 만듭니다. 일반적인 단계는 [IAM 정책 생성(콘솔)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html)을 참조하시기 바랍니다.

   이 정책을 JSON 편집기에 붙여넣고 다음 변경 사항을 적용합니다.
   + 자신의 계정 ID를 대체합니다.
   + 프록시가 상주해야 하는 위치로 `us-east-2`를 대체합니다.
   + 데이터베이스 리소스 ID와 사용자 이름을 사용하려는 이름으로 대체합니다. 리소스 ID 형식은 RDS 인스턴스와 Aurora clusters 간에 다릅니다.

   ```
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "rds-db:connect",
               "Resource": [
                   "arn:aws:rds-db:us-east-2:account_id:dbuser:db_instance_resource_id/db_user_name_1",
                   "arn:aws:rds-db:us-east-2:account_id:dbuser:db_instance_resource_id/db_user_name_2"
               ]
           }
       ]
   }
   ```

1. 역할을 만들고 역할에 권한 정책을 연결합니다. 일반적인 단계는 [AWS 서비스에 대한 권한을 위임할 역할 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)을 참조하시기 바랍니다.

   **신뢰할 수 있는 엔터티 유형**에서 **AWS 서비스**를 선택합니다. **사용 사례**에서 **RDS**를 선택하고 사용 사례에서 **RDS - 데이터베이스에 역할 추가**를 선택합니다.

1. **권한 정책**에서 사용자가 만든 정책을 선택합니다.

1. **신뢰할 수 있는 엔터티 선택**에서 역할에 대해 신뢰할 수 있는 정책을 다음과 같이 입력합니다.

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

### AWS CLI
<a name="rds-proxy-iam-e2e-cli"></a>

AWS CLI를 사용하여 역할을 만들려면 다음 요청을 보냅니다.

```
aws iam create-role \
  --role-name my_e2e_iam_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 my_e2e_iam_role_name \
  --policy-name e2e_iam_db_connect_policy \
  --policy-document '{

    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "rds-db:connect",
            "Resource": [
                "arn:aws:rds-db:us-east-2:account_id:dbuser:db_instance_resource_id/db_user_name_1",
                "arn:aws:rds-db:us-east-2:account_id:dbuser:db_instance_resource_id/db_user_name_2"
            ]
        }
    ]
}'
```

엔드 투 엔드 IAM 인증을 위해 구성된 IAM 역할 및 권한을 사용하여 `DefaultAuthScheme`이 `IAM_AUTH`로 설정된 프록시를 생성할 수 있습니다. 이 프록시는 Secrets Manager 보안 암호 없이 IAM을 사용하여 데이터베이스에 직접 인증합니다. 지침은 [Amazon Aurora용 프록시 만들기](rds-proxy-creating.md) 섹션을 참조하세요.

엔드 투 엔드 IAM 인증을 사용하는 경우 [IAM 인증을 사용하여 데이터베이스 계정 생성](UsingWithRDS.IAMDBAuth.DBAccounts.md)에 설명된 대로 데이터베이스 사용자가 IAM 인증을 위해 구성되어 있는지 확인합니다.

## Secrets Manager 액세스를 위한 IAM 정책 만들기
<a name="rds-proxy-iam-setup-steps"></a>

RDS 프록시가 Secrets Manager에서 데이터베이스 자격 증명을 검색하도록 허용하려면 필수 권한을 부여하는 정책을 사용하여 IAM 역할을 만듭니다.

## 콘솔
<a name="rds-proxy-iam-console"></a>

**프록시와 함께 사용할 보안 암호에 액세스하는 IAM 정책을 만들려면 다음과 같이 합니다.**

1. AWS Management Console에 로그인하여 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)에서 IAM 콘솔을 엽니다.

1. 역할에 대한 권한 정책을 만듭니다. 일반적인 단계는 [IAM 정책 생성(콘솔)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html)을 참조하시기 바랍니다.

   이 정책을 JSON 편집기에 붙여넣고 다음 변경 사항을 적용합니다.
   + 자신의 계정 ID를 대체합니다.
   + 프록시가 상주할 리전으로 `us-east-2`를 대체합니다.
   + 보안 암호 이름을 사용자가 만든 이름으로 대체합니다. 자세한 내용은 [Specifying KMS keys in IAM policy statements](https://docs.aws.amazon.com/kms/latest/developerguide/cmks-in-iam-policies.html)를 참조하시기 바랍니다.
   + KMS 키 ID를 기본 키 또는 자체 키인 Secrets Manager 보안 암호를 암호화하는 데 사용한 ID로 대체합니다.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "secretsmanager:GetSecretValue",
               "Resource": [
                   "arn:aws:secretsmanager:us-east-2:111122223333:secret:secret_name_1",
                   "arn:aws:secretsmanager:us-east-2:111122223333:secret:secret_name_2"
               ]
           },
           {
               "Effect": "Allow",
               "Action": "kms:Decrypt",
               "Resource": "arn:aws:kms:us-east-2:111122223333:key/key_id",
               "Condition": {
                   "StringEquals": {
                       "kms:ViaService": "secretsmanager.us-east-2.amazonaws.com"
                   }
               }
           }
       ]
   }
   ```

------

1. 역할을 만들고 역할에 권한 정책을 연결합니다. 일반적인 단계는 [AWS 서비스에 대한 권한을 위임할 역할 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)을 참조하시기 바랍니다.

   **신뢰할 수 있는 엔터티 유형**에서 **AWS 서비스**를 선택합니다. **사용 사례**에서 **RDS**를 선택하고 사용 사례에서 **RDS - 데이터베이스에 역할 추가**를 선택합니다.

1. **권한 정책**에서 사용자가 만든 정책을 선택합니다.

1. **신뢰할 수 있는 엔터티 선택**에서 역할에 대해 신뢰할 수 있는 정책을 다음과 같이 입력합니다.

------
#### [ JSON ]

****  

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

------

## AWS CLI
<a name="rds-proxy-iam-cli"></a>

AWS CLI를 사용하여 역할을 만들려면 다음 요청을 보냅니다.

```
aws iam create-role \
  --role-name my_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 my_role_name \
  --policy-name secret_reader_policy \
  --policy-document '{
    "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"
                }
            }
        }
    ]
}'
```

IAM 역할 및 권한이 구성된 상태에서 이제 프록시를 만들고 이 역할과 연결할 수 있습니다. 이렇게 하면 프록시가 AWS Secrets Manager에서 데이터베이스 자격 증명을 안전하게 검색하고 애플리케이션에 대한 IAM 인증을 사용 설정할 수 있습니다. 지침은 [Amazon Aurora용 프록시 만들기](rds-proxy-creating.md) 섹션을 참조하세요.

# Amazon Aurora용 프록시 만들기
<a name="rds-proxy-creating"></a>

Amazon RDS Proxy를 사용하면 연결을 풀링하고 데이터베이스 장애 조치를 더욱 효율적으로 관리하여 데이터베이스 애플리케이션의 확장성, 가용성 및 보안을 개선할 수 있습니다. 이 주제에서는 프록시를 만드는 절차를 살펴봅니다. 시작하기 전에 데이터베이스가 IAM 권한 및 VPC 구성을 포함하여 필요한 사전 조건을 충족하는지 확인합니다.

프록시를 Aurora MySQL 또는 Aurora PostgreSQL DB 클러스터와 연결할 수 있습니다.

## 콘솔
<a name="rds-proxy-creating.console"></a>

**프록시를 생성하려면**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. 탐색 창에서 **Proxies(프록시)**를 선택합니다.

1. **Create proxy(프록시 생성)**를 선택합니다.

1. 프록시에 대한 다음 설정을 구성합니다.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/AuroraUserGuide/rds-proxy-creating.html)

1.  **Create proxy(프록시 생성)**를 선택합니다.

## AWS CLI
<a name="rds-proxy-creating.CLI"></a>

 AWS CLI를 사용하여 프록시를 생성하려면 다음 필수 파라미터와 함께 [create-db-proxy](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-proxy.html) 명령을 호출합니다.
+ `--db-proxy-name`
+ `--engine-family`
+ `--role-arn`
+ `--vpc-subnet-ids`

`--engine-family` 값은 대소문자를 구분합니다.

**Example**  
대상 LinuxmacOS, 또는Unix:  

```
aws rds create-db-proxy \
    --db-proxy-name proxy_name \
    --engine-family { MYSQL | POSTGRESQL | SQLSERVER } \
    --role-arn iam_role \
    --vpc-subnet-ids space_separated_list \
    [--default-auth-scheme { NONE | IAM_AUTH }] \
    [--auth ProxyAuthenticationConfig_JSON_string] \
    [--vpc-security-group-ids space_separated_list] \
    [--require-tls | --no-require-tls] \
    [--idle-client-timeout value] \
    [--debug-logging | --no-debug-logging] \
    [--endpoint-network-type { IPV4 | IPV6 | DUAL }] \
    [--target-connection-network-type { IPV4 | IPV6 }] \
    [--tags comma_separated_list]
```
Windows의 경우:  

```
aws rds create-db-proxy ^
    --db-proxy-name proxy_name ^
    --engine-family { MYSQL | POSTGRESQL | SQLSERVER } ^
    --role-arn iam_role ^
    --vpc-subnet-ids space_separated_list ^
    [--default-auth-scheme { NONE | IAM_AUTH }] ^
    [--auth ProxyAuthenticationConfig_JSON_string] ^
    [--vpc-security-group-ids space_separated_list] ^
    [--require-tls | --no-require-tls] ^
    [--idle-client-timeout value] ^
    [--debug-logging | --no-debug-logging] ^
    [--endpoint-network-type { IPV4 | IPV6 | DUAL }] ^
    [--target-connection-network-type { IPV4 | IPV6 }] ^
    [--tags comma_separated_list]
```

다음은 `--auth` 옵션의 JSON 값 예시입니다. 이 예시는 각 보안 암호에 서로 다른 클라이언트 인증 유형을 적용합니다.

```
[
  {
    "Description": "proxy description 1",
    "AuthScheme": "SECRETS",
    "SecretArn": "arn:aws:secretsmanager:us-west-2:123456789123:secret/1234abcd-12ab-34cd-56ef-1234567890ab",
    "IAMAuth": "DISABLED",
    "ClientPasswordAuthType": "POSTGRES_SCRAM_SHA_256"
  },
  
  {
    "Description": "proxy description 2",
    "AuthScheme": "SECRETS",
    "SecretArn": "arn:aws:secretsmanager:us-west-2:111122223333:secret/1234abcd-12ab-34cd-56ef-1234567890cd",
    "IAMAuth": "DISABLED",
    "ClientPasswordAuthType": "POSTGRES_MD5"
    
  },
  
  {
    "Description": "proxy description 3",
    "AuthScheme": "SECRETS",
    "SecretArn": "arn:aws:secretsmanager:us-west-2:111122221111:secret/1234abcd-12ab-34cd-56ef-1234567890ef",
    "IAMAuth": "REQUIRED"
  }
  
]
```

`--endpoint-network-type` 파라미터는 클라이언트가 프록시에 연결하는 데 사용하는 프록시 엔드포인트의 IP 버전을 지정합니다. 유효한 값은 다음과 같습니다.
+ `IPV4` - 프록시 엔드포인트는 IPv4 주소만 사용합니다(기본값).
+ `IPV6` - 프록시 엔드포인트는 IPv6 주소만 사용합니다.
+ `DUAL` - 프록시 엔드포인트는 IPv4 및 IPv6 주소를 모두 지원합니다.

`--target-connection-network-type` 파라미터는 프록시가 대상 데이터베이스에 연결하는 데 사용하는 IP 버전을 지정합니다. 유효한 값은 다음과 같습니다.
+ `IPV4` - 프록시는 IPv4 주소(기본값)를 사용하여 데이터베이스에 연결합니다.
+ `IPV6` - 프록시는 IPv6 주소를 사용하여 데이터베이스에 연결합니다.

IPv6 또는 듀얼 스택 엔드포인트 네트워크 유형을 사용하려면 선택한 네트워크 유형을 지원하도록 VPC 및 서브넷을 구성해야 합니다. IPv6 대상 연결 네트워크 유형을 사용하려면 데이터베이스가 듀얼 스택 모드를 지원해야 합니다.

**작은 정보**  
 `--vpc-subnet-ids` 파라미터에 사용할 서브넷 ID를 아직 모르는 경우, [RDS 프록시에 대한 네트워크 사전 조건 설정](rds-proxy-network-prereqs.md)에서 서브넷 ID를 찾는 방법의 예를 참조하세요.

**참고**  
보안 그룹은 프록시가 연결하는 데이터베이스에 대한 액세스를 허용해야 합니다. 동일한 보안 그룹이 애플리케이션에서 프록시로 수신하고 프록시에서 데이터베이스로 발신하는 데 사용됩니다. 예를 들어 데이터베이스와 프록시에 대해 동일한 보안 그룹을 사용한다고 가정합니다. 이 경우 해당 보안 그룹의 리소스가 동일한 보안 그룹의 다른 리소스와 통신할 수 있도록 지정해야 합니다.  
공유 VPC를 사용하는 경우 VPC에 대한 기본 보안 그룹이나 다른 계정에 속한 보안 그룹을 사용할 수 없습니다. 본인 계정에 속한 보안 그룹을 선택합니다. 없으면 새로 생성합니다. 이 제한 사항에 대한 자세한 내용은 [공유 VPC 작업](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-sharing.html#vpc-share-limitations)을 참조하세요.

 프록시에 적합한 연결을 생성하려면 [register-db-proxy-targets](https://docs.aws.amazon.com/cli/latest/reference/rds/register-db-proxy-targets.html) 명령을 사용합니다. 대상 그룹 이름 `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)
```

## RDS API
<a name="rds-proxy-creating.API"></a>

 RDS 프록시를 생성하려면 Amazon RDS API 작업 [CreateDBProxy](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBProxy.html)를 호출합니다. [AuthConfig](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_AuthConfig.html) 데이터 구조와 함께 파라미터를 전달합니다.

 RDS Proxy는 각 프록시를 생성할 때 `default`라는 대상 그룹을 자동으로 생성합니다. [RegisterDBProxyTargets](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RegisterDBProxyTargets.html) 함수를 호출하여 Aurora DB 클러스터를 대상 그룹에 연결합니다.

**중요**  
기본 **인증 체계에 대해 IAM** 인증을 선택하는 경우:  
프록시가 성공적으로 연결되기 전에 대상 데이터베이스 인스턴스 또는 클러스터에서 IAM 데이터베이스 인증을 활성화해야 합니다.
**IAM 역할 생성**을 선택하는 경우 **IAM 인증을 위한 데이터베이스 계정** 필드가 필요합니다.
기존 IAM 역할을 선택하면 콘솔이 데이터베이스 연결 권한으로 역할을 자동으로 업데이트하지 않습니다. 역할에 필요한 `rds-db:connect` 권한이 있는지 확인합니다.

# 프록시 보기
<a name="rds-proxy-viewing"></a>

 하나 이상의 RDS 프록시를 생성한 후 AWS Management Console, AWS CLI 또는 RDS API에서 해당 프록시를 보고 관리할 수 있습니다. 구성 세부 정보를 검토하고, 성능을 모니터링하고, 필요에 따라 수정하거나 삭제할 프록시를 결정할 수 있습니다.

데이터베이스 애플리케이션이 프록시를 통해 트래픽을 라우팅하도록 하려면 연결 문자열에 프록시 엔드포인트를 지정해야 합니다.

## 콘솔
<a name="rds-proxy-viewing.console"></a>

**콘솔에서 프록시를 확인하려면**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. 탐색 창에서 **Proxies(프록시)**를 선택합니다.

1. 세부 정보를 볼 프록시 이름을 선택합니다.

1. 세부 정보 페이지의 **대상 그룹** 섹션에 프록시가 특정 Aurora DB 클러스터에 어떻게 연결되는지 표시됩니다. 기본 대상 그룹 페이지로 이동하여 프록시를 만드는 중에 정의된 구성 설정을 포함하여 이 연결을 더 자세히 볼 수 있습니다. 이러한 설정에는 최대 연결 비율, 연결 대여 시간 초과, 엔진 패밀리, 세션 고정 필터 등이 포함됩니다.

## CLI
<a name="rds-proxy-viewing.cli"></a>

 CLI를 사용하여 프록시를 보려면 [describe-db-proxy](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-proxies.html) 명령을 사용합니다. 기본적으로 요청은 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](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-proxies.html)를 실행합니다.

1.  프록시에서 사용할 수 있는 최대 연결 비율과 같은 연결 파라미터를 표시하려면 [describe-db-proxy-target-groups](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-proxy-target-groups.html) `--db-proxy-name`을 실행합니다. 프록시의 이름을 파라미터 값으로 사용합니다.

1.  반환된 대상 그룹과 연결된 Aurora DB 클러스터의 세부 정보를 보려면 [describe-db-proxy-targets](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-proxy-targets.html)를 실행합니다.

## RDS API
<a name="rds-proxy-viewing.api"></a>

 RDS API를 사용하여 프록시를 보려면 [DescribeDBProxies](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBProxies.html) 작업을 사용합니다. 이 작업은 [DBProxy](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DBProxy.html) 데이터 형식의 값을 반환합니다.

 프록시 연결 설정의 세부 정보를 보려면 [DescribeDBProxyTargetGroups](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBProxyTargetGroups.html) 작업을 사용하여 이 반환 값의 프록시 식별자를 사용합니다. 이 작업은 [DBProxyTargetGroup](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DBProxyTargetGroup.html) 데이터 형식의 값을 반환합니다.

 프록시와 연결된 RDS 인스턴스 또는 Aurora DB 클러스터를 보려면 [DescribeDBProxyTargets](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBProxyTargets.html) 작업을 사용합니다. 이 작업은 [DBProxyTarget](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DBProxyTarget.html) 데이터 형식의 값을 반환합니다.

# RDS Proxy를 통해 데이터베이스에 연결
<a name="rds-proxy-connecting"></a>

일반적으로 데이터베이스에 직접 연결하는 것과 동일한 방식으로 프록시를 통해 Aurora DB 또는 Aurora Serverless v2를 사용하는 클러스터에 연결합니다. 가장 큰 차이점은 클러스터 엔드포인트 대신 프록시 엔드포인트를 지정한다는 것입니다. 기본적으로 모든 프록시 연결은 읽기/쓰기 기능이 있으며 라이터 인스턴스를 사용합니다. 읽기 전용 연결에 리더 엔드포인트를 일반적으로 사용하는 경우, 프록시를 위한 추가 읽기 전용 엔드포인트를 생성할 수 있습니다. 이 엔드포인트도 같은 방식으로 사용할 수 있습니다. 자세한 내용은 [프록시 엔드포인트 개요](rds-proxy-endpoints.md#rds-proxy-endpoints-overview) 섹션을 참조하세요.

**Topics**
+ [데이터베이스 자격 증명을 사용하여 데이터베이스에 연결](#rds-proxy-connecting-native)
+ [IAM 인증을 사용하여 데이터베이스에 연결](#rds-proxy-connecting-iam)
+ [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 인증을 통해 Aurora DB 클러스터에 연결하는 것과 동일한 일반 연결 프로시저를 따르면 됩니다. IAM 사용에 대한 일반적인 정보는 [ Amazon Aurora의 보안](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 및 암호 인증 방법을 혼합하면 연결 불안정이 발생할 수 있습니다.

## 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/)을 참조하십시오.