RDS 프록시 생성 - Amazon Relational Database Service

RDS 프록시 생성

지정된 DB 인스턴스 집합에 대한 연결을 관리하려면 프록시를 생성할 수 있습니다. 프록시를 RDS for MariaDB, RDS for Microsoft SQL Server, RDS for MySQL 또는 RDS for PostgreSQL DB 인스턴스와 연결할 수 있습니다.

프록시를 생성하려면
  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/rds/에서 Amazon RDS 콘솔을 엽니다.

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

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

  4. 프록시에 대한 모든 설정을 선택합니다.

    프록시 구성의 경우 다음에 대한 정보를 제공합니다.

    • 엔진 패밀리. 이 설정은 프록시가 데이터베이스와 주고받는 네트워크 트래픽을 해석할 때 인식하는 데이터베이스 네트워크 프로토콜을 결정합니다. RDS for MariaDB 또는 RDS for MySQL에서 MariaDB and MySQL(MariaDB 및 MySQL)을 선택합니다. RDS for PostgreSQL에서는 PostgreSQL을 선택합니다. RDS for SQL Server의 경우 SQL 서버를 선택합니다.

    • Proxy identifier(프록시 식별자). AWS 계정 ID와 현재 AWS 리전에서 고유한 이름을 지정합니다.

    • Idle client connection timeout(유휴 클라이언트 연결 시간 초과). 프록시가 연결을 종료하기 전에 클라이언트 연결이 유휴 상태를 유지할 수 있는 기간을 선택합니다. 기본값은 1,800초(30분)입니다. 애플리케이션이 이전 요청이 완료된 후 지정된 시간 내에 새 요청을 제출하지 않으면 클라이언트 연결이 유휴 상태로 간주됩니다. 기본 데이터베이스 연결은 열린 상태를 유지하고 연결 풀로 반환됩니다. 따라서 새 클라이언트 연결에 다시 사용할 수 있습니다.

      프록시가 기간 경과 연결을 사전에 제거하도록 하려면 유휴 클라이언트 연결 제한 시간을 줄이면 됩니다. 워크로드가 급증하는 경우 연결 설정 비용을 절약하려면 유휴 클라이언트 연결 제한 시간을 늘려야 합니다."

    대상 그룹 구성의 경우 다음에 대한 정보를 제공합니다.

    • 데이터베이스. 이 프록시를 통해 액세스할 RDS DB 인스턴스를 하나 선택합니다. 이 목록에는 호환되는 데이터베이스 엔진, 엔진 버전 및 기타 설정이 있는 DB 인스턴스 또는 클러스터만 포함됩니다. 목록이 비어 있으면 RDS Proxy와 호환되는 새 DB 인스턴스 또는 클러스터를 생성합니다. 이 작업을 수행하려면 Amazon RDS DB 인스턴스 생성의 프로시저를 따르세요. 그런 다음 프록시를 다시 생성해보십시오.

    • Connection pool maximum connections(연결 풀 최대 연결). 1과 100 사이의 값을 지정합니다. 이 설정은 RDS Proxy가 연결에 사용할 수 있는 max_connections 값의 백분율을 나타냅니다. 이 DB 인스턴스 또는 클러스터에 하나의 프록시만 사용하려는 경우 이 값을 100으로 설정할 수 있습니다. RDS Proxy가 이 설정을 사용하는 방법에 대한 자세한 내용은 MaxConnectionsPercent 단원을 참조하십시오.

    • Session pinning filters(세션 고정 필터). (선택 사항) 이 옵션을 사용하면 RDS 프록시가 특정 유형의 감지된 세션 상태를 고정하지 않도록 할 수 있습니다. 이렇게 하면 클라이언트 연결 간 데이터베이스 연결을 멀티플렉싱하기 위한 기본 안전 조치를 우회할 수 있습니다. 현재 PostgreSQL에서는 설정이 지원되지 않습니다. EXCLUDE_VARIABLE_SETS만 선택할 수 있습니다.

      이 설정을 활성화하면 어떤 연결의 세션 변수가 다른 연결에 영향을 줄 수 있습니다. 쿼리가 현재 트랜잭션 외부에 설정된 세션 변수 값에 의존하는 경우 이로 인해 오류나 정확성 문제가 발생할 수 있습니다. 애플리케이션이 클라이언트 연결 간에 데이터베이스 연결을 공유해도 안전한지 확인한 후 이 옵션을 사용하는 것이 좋습니다.

      다음과 같은 패턴이 나타나면 안전한 상태로 간주될 수 있습니다.

      • 유효 세션 변수 값에 변경 사항이 없는 SET 명령문이 있습니다(즉 세션 변수에 변경 사항이 없는 경우).

      • 세션 변수 값을 변경하고 동일한 트랜잭션에서 명령문을 실행합니다.

      자세한 내용은 RDS 프록시 고정 방지 단원을 참조하십시오.

    • Connection borrow timeout(연결 대여 시간 초과). 경우에 따라 프록시가 사용 가능한 모든 데이터베이스 연결을 사용하는 경우가 있습니다. 이러한 경우 시간 초과 오류를 반환하기 전에 프록시가 데이터베이스 연결을 사용할 수 있을 때까지 기다리는 시간을 지정할 수 있습니다. 최대 5분까지 기간을 지정할 수 있습니다. 이 설정은 프록시가 이미 최대 연결 수를 사용 중인 경우에만 적용됩니다.

    • 초기화 쿼리. (선택 사항) 각 새 데이터베이스 접속을 열 때 실행할 프록시에 대한 하나 이상의 SQL 문을 지정할 수 있습니다. 이 설정은 일반적으로 각 연결에 표준 시간대 및 문자 집합과 같은 동일한 설정이 있는지 확인하기 위해 SET 문과 함께 사용됩니다. 여러 문의 경우 세미콜론을 구분 기호로 사용합니다. SET x=1, y=2와 같은 단일 SET 문에 여러 변수를 포함할 수도 있습니다.

    인증에서 다음 정보를 제공합니다.

    • IAM 역할. 앞서 선택한 Secrets Manager 비밀에 액세스할 수 있는 권한이 있는 IAM 역할을 선택합니다. 또는 AWS Management Console에서 새 IAM 역할을 생성할 수 있습니다.

    • Secrets Manager 보안 암호 프록시가 RDS DB 인스턴스에 액세스할 수 있는 데이터베이스 사용자 보안 인증 정보를 포함하는 Secrets Manager 보안 암호를 하나 이상 선택합니다.

    • 클라이언트 인증 유형. 프록시가 클라이언트로부터의 연결에 사용하는 인증 유형을 선택합니다. 선택 사항은 이 프록시와 연결된 모든 Secrets Manager 비밀에 적용됩니다. 보안 암호마다 다른 클라이언트 인증 유형을 지정해야 하는 경우 AWS CLI 또는 API를 대신 사용하여 프록시를 생성합니다.

    • IAM 인증. 프록시 연결에 대해 IAM 인증을 요구할지, 허용할지 아니면 허용하지 않을지 선택합니다. 허용 옵션은 RDS for SQL Server 프록시에만 유효합니다. 선택 사항은 이 프록시와 연결된 모든 Secrets Manager 비밀에 적용됩니다. 암호마다 다른 IAM 인증을 지정해야 하는 경우 AWS CLI 또는 API를 대신 사용하여 프록시를 생성합니다.

    연결성에 대해 다음에 대한 정보를 제공합니다.

    • 전송 계층 보안 필요. 프록시가 모든 클라이언트 연결에 TLS/SSL을 적용하도록 하려면 이 설정을 선택합니다. 프록시에 암호화된 연결 또는 암호화되지 않은 연결을 사용하는 경우 프록시는 기본 데이터베이스에 연결할 때 동일한 암호화 설정을 사용합니다.

    • 서브넷. 이 필드는 VPC와 연결된 모든 서브넷으로 미리 채워집니다. 이 프록시에 필요하지 않은 서브넷을 모두 제거합니다. 서브넷은 두 개 이상 남겨 두어야 합니다.

    추가 연결 구성을 제공합니다.

    • VPC 보안 그룹. 기존 VPC 보안 그룹을 선택합니다. 또는 AWS Management Console에서 새 보안 그룹을 생성할 수 있습니다. 애플리케이션이 프록시에 액세스할 수 있도록 인바운드 규칙을 구성해야 합니다. 또한 DB 대상의 트래픽을 허용하도록 아웃바운드 규칙을 구성해야 합니다.

      참고

      이 보안 그룹은 프록시에서 데이터베이스로의 연결을 허용해야 합니다. 동일한 보안 그룹이 애플리케이션에서 프록시로 수신하고 프록시에서 데이터베이스로 발신하는 데 사용됩니다. 예를 들어 데이터베이스와 프록시에 대해 동일한 보안 그룹을 사용한다고 가정합니다. 이 경우 해당 보안 그룹의 리소스가 동일한 보안 그룹의 다른 리소스와 통신할 수 있도록 지정해야 합니다.

      공유 VPC를 사용하는 경우 VPC에 대한 기본 보안 그룹이나 다른 계정에 속한 보안 그룹을 사용할 수 없습니다. 본인 계정에 속한 보안 그룹을 선택합니다. 없으면 새로 생성합니다. 이 제한 사항에 대한 자세한 내용은 공유 VPC 작업을 참조하세요.

      RDS는 고가용성을 보장하기 위해 여러 가용 영역에 프록시를 배포합니다. 이러한 프록시에 대해 AZ 간 통신을 활성화하려면 프록시 서브넷의 네트워크 액세스 제어 목록(ACL)에서 엔진 포트별 송신 및 모든 포트의 수신을 허용해야 합니다. 네트워크 ACL에 대한 자세한 내용은 네트워크 ACL을 사용하여 서브넷에 대한 트래픽 제어를 참조하세요. 프록시와 대상의 네트워크 ACL이 동일한 경우 소스가 VPC CIDR로 설정된 TCP 프로토콜 수신 규칙을 추가해야 합니다. 또한 대상이 VPC CIDR로 설정된 엔진 포트별 TCP 프로토콜 송신 규칙을 추가해야 합니다.

    (선택 사항) 고급 구성을 제공합니다.

    • Enable enhanced logging(고급 로깅 사용). 프록시 호환성 또는 성능 문제를 해결하려면 이 설정을 사용하도록 설정할 수 있습니다.

      이 설정을 활성화하면 RDS 프록시는 프록시 성능에 대한 자세한 정보를 로그에 포함합니다. 이 정보는 SQL 동작 또는 프록시 연결의 성능 및 확장성과 관련된 문제를 디버깅하는 데 도움이 됩니다. 그러므로 디버깅을 해야 하는 경우와 로그에 표시되는 중요한 정보를 보호하는 데 필요한 보안 조치가 있는 경우에만 해당 설정을 활성화하세요.

      프록시와 연결된 오버헤드를 최소화하기 위해 RDS Proxy에서는 이 설정을 사용하도록 설정한 후 24시간 후에 자동으로 끕니다. 특정 문제를 해결하려면 일시적으로 활성화합니다.

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

AWS CLI를 사용하여 프록시를 생성하려면 다음 필수 파라미터와 함께 create-db-proxy 명령을 호출합니다.

  • --db-proxy-name

  • --engine-family

  • --role-arn

  • --auth

  • --vpc-subnet-ids

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

대상 LinuxmacOS, 또는Unix:

aws rds create-db-proxy \ --db-proxy-name proxy_name \ --engine-family { MYSQL | POSTGRESQL | SQLSERVER } \ --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 | SQLSERVER } ^ --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]

다음은 --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" } ]
작은 정보

--vpc-subnet-ids 파라미터에 사용할 서브넷 ID를 아직 모르는 경우, RDS 프록시에 대한 네트워크 사전 조건 설정에서 서브넷 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)

RDS 프록시를 생성하려면 Amazon RDS API 작업 CreateDBProxy를 호출합니다. AuthConfig 데이터 구조와 함께 파라미터를 전달합니다.

RDS Proxy는 각 프록시를 생성할 때 default라는 대상 그룹을 자동으로 생성합니다. RegisterDBProxyTargets 함수를 호출하여 RDS DB 인스턴스를 대상 그룹에 연결합니다.