Amazon RDS용 프록시 생성하기

Amazon RDS용 프록시 생성하기 (Creating a proxy for Amazon RDS)

프록시를 RDS for MariaDB, RDS for Microsoft SQL Server, RDS for MySQL, 또는 RDS for PostgreSQL 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. 프록시에 대해 다음 설정을 구성합니다.

    설정 설명
    Engine family(엔진 패밀리) 프록시가 데이터베이스와 주고받는 네트워크 트래픽을 해석할 때 인식하는 데이터베이스 네트워크 프로토콜.
    Proxy identifier(프록시 식별자) AWS 계정 ID와 현재 AWS 리전 내에서 고유한 이름.
    Idle client connection timeout(유휴 클라이언트 연결 시간 제한) 프록시는 클라이언트 연결이 설정된 기간 동안 유휴 상태로 남아 있으면 연결을 닫아요. 기본값은 1,800초(30분)예요. 애플리케이션이 이전 요청을 완료한 후 지정된 시간 내에 새 요청을 제출하지 않으면 연결이 유휴 상태가 돼요. 프록시는 기본 데이터베이스 연결을 열어 두고 이를 커넥션 풀로 되돌려 새 클라이언트 연결에 사용할 수 있게 해요. 오래된 연결을 적극적으로 제거하려면 유휴 클라이언트 연결 시간 제한을 줄이고, 워크로드 급증 시 연결 비용을 최소화하려면 시간 제한을 늘려요.
    Database(데이터베이스) 이 프록시를 통해 접근할 RDS DB 인스턴스. 목록에는 호환되는 데이터베이스 엔진, 엔진 버전 및 기타 설정이 있는 DB 인스턴스와 클러스터만 포함돼요. 목록이 비어 있으면 RDS Proxy와 호환되는 새 DB 인스턴스 또는 클러스터를 만들어요. 그러려면 Amazon RDS DB 인스턴스 생성하기(Creating an Amazon RDS DB instance)의 절차를 따라 한 다음 프록시 생성을 다시 시도해요.
    Connection pool maximum connections(연결 풀 최대 연결) RDS Proxy가 사용할 수 있는 max_connections 제한의 백분율을 정의하는 1~100 사이의 값. 이 DB 인스턴스 또는 클러스터와 프록시 하나만 사용하려면 이 값을 100으로 설정해요. RDS Proxy가 이 설정을 사용하는 방법에 대한 자세한 내용은 MaxConnectionsPercent를 참조하세요.
    Session pinning filters(세션 고정 필터) RDS Proxy가 감지한 특정 세션 상태를 고정하지 못하게 방지해요. 이는 다중화(multiplexing) 연결의 기본 안전 조치를 우회해요. 현재 PostgreSQL은 이 설정을 지원하지 않으며, 유일하게 사용 가능한 옵션은 EXCLUDE_VARIABLE_SETS예요. 이를 활성화하면 한 연결의 세션 변수가 다른 연결에 영향을 줄 수 있어요. 쿼리가 현재 트랜잭션 밖에서 설정된 세션 변수에 의존한다면 오류나 정확성 문제가 발생할 수 있어요. 애플리케이션이 데이터베이스 연결을 안전하게 공유할 수 있다는 것을 확인한 후에만 이 옵션을 사용하세요. 다음 패턴은 안전한 것으로 간주돼요:
    • 효과적인 세션 변수 값에 변화가 없는 SET 문 (즉, 세션 변수에 변화가 없음)
    • 같은 트랜잭션 안에서 세션 변수 값을 변경하고 문을 실행하는 경우
    자세한 내용은 RDS Proxy 고정 방지하기(Avoiding pinning an RDS Proxy)를 참조하세요.
    Connection borrow timeout(연결 대여 시간 제한) 프록시가 사용 가능한 모든 데이터베이스 연결을 사용할 것으로 예상된다면 시간 초과 오류를 반환하기 전 대기 시간을 설정해요. 최대 5분까지 지정할 수 있어요. 이 설정은 프록시가 최대 연결 수에 도달했고 모두 사용 중일 때만 적용돼요.
    Initialization query(초기화 쿼리) (선택 사항) 초기화 쿼리를 추가하거나 현재 쿼리를 수정해요. 프록시가 새 데이터베이스 연결을 열 때마다 실행할 SQL 문을 하나 이상 지정할 수 있어요. 이 설정은 각 연결에 동일한 설정이 적용되도록 보장하기 위해 일반적으로 SET 문과 함께 사용돼요. 추가하는 쿼리가 유효한지 확인하세요. 단일 SET 문에 여러 변수를 포함하려면 쉼표 구분 기호를 사용해요. 예:
    SET variable1=value1, variable2=value2
    여러 문을 사용하려면 세미콜론을 구분 기호로 사용해요.
    AWS Identity and Access Management (IAM) role(AWS IAM 역할) 프록시가 사용할 수 있는 데이터베이스 사용자 계정의 자격 증명을 나타내는 Secrets Manager 시크릿에 접근할 수 있는 권한이 있는 IAM 역할. 또는 AWS Management Console에서 새 IAM 역할을 만들 수 있어요.
    Secrets Manager secrets(Secrets Manager 시크릿) 프록시를 사용할 수 있는 데이터베이스 사용자 계정의 자격 증명을 나타내는 Secrets Manager 시크릿을 만들거나 선택해요. Default authentication scheme(기본 인증 체계)가 None으로 설정되면 이 필드는 필수예요. IAM authentication으로 설정되면 이 필드는 선택 사항이 되고 콘솔에서 그렇게 표시돼요. 드롭다운에서 시크릿을 하나 이상 선택하거나 Create a new secret(새 시크릿 생성) 링크를 사용해 새 시크릿을 만들 수 있어요.
    Client authentication type(클라이언트 인증 유형) 프록시가 클라이언트로부터의 연결에 사용하는 인증 유형. 선택은 이 프록시와 연결하는 모든 Secrets Manager 시크릿에 적용돼요. 시크릿마다 다른 클라이언트 인증 유형을 지정해야 한다면 AWS CLI나 API를 사용해 프록시를 만들어요. 이 옵션은 클라이언트 연결이 인증에 데이터베이스 자격 증명을 사용할 때만 지정해요.
    IAM authentication(IAM 인증) 프록시 연결에 대해 IAM 인증을 Required(필수), Allowed(허용), 또는 Not Allowed(허용 안 함)로 지정해요. Allowed 옵션은 RDS for SQL Server 프록시에서만 유효해요. 선택은 이 프록시와 연결하는 모든 Secrets Manager 시크릿에 적용돼요. 시크릿마다 다른 IAM 인증을 지정해야 한다면 AWS CLI나 API를 사용해 프록시를 만들어요.
    Default authentication scheme(기본 인증 체계) 프록시가 클라이언트의 프록시 연결과 프록시의 기본 데이터베이스 연결에 사용하는 기본 인증 유형을 선택해요. 다음 옵션이 있어요:
    • None (기본값) - 프록시가 Secrets Manager 시크릿에서 데이터베이스 자격 증명을 검색해요.
    • IAM authentication - 프록시가 IAM 인증을 사용해 데이터베이스에 연결해 엔드투엔드 IAM 인증을 활성화해요. IAM authentication을 선택하면 대상 그룹 구성의 데이터베이스에 IAM 데이터베이스 인증을 활성화하라는 정보 알림이 표시돼요.
    Database accounts for IAM authentication(IAM 인증용 데이터베이스 계정) 이 필드는 Default authentication scheme이 IAM authentication으로 설정되고 IAM role이 Create IAM role로 설정된 경우에만 나타나요. 프록시가 IAM 인증에 사용할 데이터베이스 사용자 계정을 지정해요. 필수 필드예요. 여러 계정을 지정하는 방법:
    • 데이터베이스 사용자 이름을 입력해 태그로 추가하기
    • 특정 데이터베이스 사용자 이름 사용하기(예: db_user, jane_doe)
    • 여러 사용자에 대한 와일드카드 패턴 사용하기(예: db_test_*)
    각 계정은 X 아이콘을 클릭해 삭제할 수 있는 제거 가능한 태그로 나타나요. 콘솔은 이 값을 사용해 IAM 역할 정책에 적절한 rds-db:connect 권한을 만들어요.
    Require Transport Layer Security(TLS 요구) 모든 클라이언트 연결에 TLS/SSL을 적용해요. 프록시는 클라이언트 연결이 암호화되든 아니든 기본 데이터베이스 연결에 동일한 암호화 설정을 사용해요.
    Target connection network type(대상 연결 네트워크 유형) 프록시가 대상 데이터베이스에 연결하는 데 사용하는 IP 버전. 다음 옵션 중에서 선택해요:
    • IPv4 – 프록시가 IPv4 주소를 사용해 데이터베이스에 연결해요.
    • IPv6 – 프록시가 IPv6 주소를 사용해 데이터베이스에 연결해요.
    기본값은 IPv4예요. IPv6를 사용하려면 데이터베이스가 듀얼 스택 모드를 지원해야 해요. 듀얼 스택 모드는 대상 연결에는 사용할 수 없어요.
    Endpoint network type(엔드포인트 네트워크 유형) 클라이언트가 프록시에 연결하는 데 사용하는 프록시 엔드포인트의 IP 버전. 다음 옵션 중에서 선택해요:
    • IPv4 – 프록시 엔드포인트가 IPv4 주소만 사용해요.
    • IPv6 – 프록시 엔드포인트가 IPv6 주소만 사용해요.
    • Dual-stack(듀얼 스택) – 프록시 엔드포인트가 IPv4와 IPv6 주소를 모두 지원해요.
    기본값은 IPv4예요. IPv6나 듀얼 스택을 사용하려면 VPC와 서브넷이 선택한 네트워크 유형을 지원하도록 구성되어야 해요.
    Subnets(서브넷) 이 필드는 VPC와 연결된 모든 서브넷으로 미리 채워져 있어요. 프록시에 필요하지 않은 서브넷은 제거할 수 있지만 최소 2개는 남겨야 해요. IPv6 또는 듀얼 스택 엔드포인트 네트워크 유형의 경우 선택한 서브넷이 선택한 네트워크 유형을 지원하는지 확인하세요.
    VPC security group(VPC 보안 그룹) 기존 VPC 보안 그룹을 선택하거나 AWS Management Console에서 새로 만들어요. 애플리케이션이 프록시에 접근할 수 있도록 인바운드 규칙을, 데이터베이스 대상의 트래픽을 허용하도록 아웃바운드 규칙을 구성해요. 보안 그룹은 프록시에서 데이터베이스로의 연결을 허용해야 해요. 애플리케이션에서 프록시로의 인그레스와 프록시에서 데이터베이스로의 이그레스 모두에 사용돼요. 예를 들어 데이터베이스와 프록시에 같은 보안 그룹을 사용한다면 그 보안 그룹 내 리소스들이 서로 통신할 수 있는지 확인하세요. 공유 VPC를 사용할 때는 VPC의 기본 보안 그룹이나 다른 계정과 연결된 보안 그룹을 사용하지 마세요. 대신 자신의 계정에 속한 보안 그룹을 선택해요. 없다면 만들어요. 자세한 내용은 공유 VPC 사용하기(Work with shared VPCs)를 참조하세요. RDS는 높은 가용성을 보장하기 위해 여러 가용 영역에 프록시를 배포해요. 크로스 AZ 통신을 활성화하려면 프록시 서브넷의 네트워크 액세스 제어 목록(ACL)이 엔진 포트에 대한 이그레스와 모든 포트에 대한 인그레스를 허용해야 해요. 네트워크 ACL에 대한 자세한 내용은 네트워크 ACL로 서브넷 트래픽 제어하기(Control traffic to subnets using network ACLs)를 참조하세요. 프록시와 대상의 네트워크 ACL이 동일하다면 Source가 VPC CIDR로 설정된 TCP 프로토콜 인그레스 규칙을 추가해야 해요. 또한 Destination이 VPC CIDR로 설정된 엔진 포트 특정 TCP 프로토콜 이그레스 규칙도 추가해야 해요.
    Activate enhanced logging(향상된 로깅 활성화) 프록시 호환성 또는 성능 문제를 해결하려면 이 설정을 활성화해요. 활성화하면 RDS Proxy가 SQL 동작 또는 프록시 연결 성능 및 확장성을 디버깅하는 데 도움이 되는 상세 성능 정보를 기록해요. 디버깅용으로만 이 설정을 활성화하고, 로그의 중요 정보를 보호하기 위한 적절한 보안 조치를 마련하세요. 오버헤드를 최소화하기 위해 RDS Proxy는 활성화 24시간 후 이 설정을 자동으로 비활성화해요. 특정 문제를 해결할 때 일시적으로 사용하세요.
  5. Create proxy(프록시 생성)를 선택합니다.

AWS CLI로 프록시를 만들려면 다음 필수 파라미터와 함께 create-db-proxy 명령을 호출해요.

  • --db-proxy-name
  • --engine-family
  • --role-arn
  • --vpc-subnet-ids

--engine-family 값은 대소문자를 구분해요.

예시

Linux, macOS 또는 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 Proxy를 위한 네트워크 사전 조건 설정하기(Setting up network prerequisites for RDS Proxy)에서 찾는 방법의 예시를 참조하세요.

참고

보안 그룹은 프록시가 연결하는 데이터베이스에 대한 접근을 허용해야 해요. 같은 보안 그룹이 애플리케이션에서 프록시로의 인그레스와 프록시에서 데이터베이스로의 이그레스에 사용돼요. 예를 들어 데이터베이스와 프록시에 같은 보안 그룹을 사용한다고 가정해 보아요. 이 경우 그 보안 그룹의 리소스가 같은 보안 그룹의 다른 리소스와 통신할 수 있도록 지정해야 해요.

공유 VPC를 사용할 때는 VPC의 기본 보안 그룹이나 다른 계정에 속한 보안 그룹을 사용할 수 없어요. 자신의 계정에 속한 보안 그룹을 선택해요. 없다면 만들어요. 이 제한에 대한 자세한 내용은 공유 VPC 사용하기(Work with shared VPCs)를 참조하세요.

프록시에 올바른 연결을 만들려면 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 인스턴스를 대상 그룹과 연관시켜요.

중요

기본 인증 체계로 IAM 인증을 선택할 때:

  • 프록시가 성공적으로 연결하려면 먼저 대상 데이터베이스 인스턴스 또는 클러스터에 IAM 데이터베이스 인증을 활성화해야 해요.
  • Create IAM role을 선택하면 Database accounts for IAM authentication(IAM 인증용 데이터베이스 계정) 필드가 필수예요.
  • 기존 IAM 역할을 선택하면 콘솔이 데이터베이스 연결 권한으로 역할을 자동으로 업데이트하지 않아요. 역할에 필요한 rds-db:connect 권한이 있는지 확인하세요.

더 알아보기 (Learn more)