Amazon Aurora용 프록시 만들기 - Amazon Aurora

Amazon Aurora용 프록시 만들기

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

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

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

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

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

  4. 프록시에 대한 다음 설정을 구성합니다.

    설정 설명
    엔진 패밀리. 프록시가 데이터베이스와 주고받는 네트워크 트래픽을 해석할 때 인식하는 데이터베이스 네트워크 프로토콜입니다.
    참고

    Aurora PostgreSQL을 사용하려면 인스턴스에서 postgres 데이터베이스를 유지해야 합니다. 삭제된 postgres 데이터베이스 문제 해결을(를) 참조하세요.

    프록시 식별자 AWS 계정 ID와 현재 AWS 리전 내에서 고유한 이름입니다.
    유휴 클라이언트 연결 시간 초과

    프록시는 설정된 기간 동안 유휴 상태로 유지되면 클라이언트 연결을 닫습니다. 기본값은 1,800초(30분)입니다. 애플리케이션이 이전 요청을 완료한 후 지정된 시간 내에 새 요청을 제출하지 않으면 연결은 유휴 상태입니다. 프록시는 기본 데이터베이스 연결을 열어 두고 연결 풀로 반환하여 새 클라이언트 연결에 사용할 수 있도록 합니다.

    기간 경과 연결을 사전에 제거하려면 유휴 클라이언트 연결 제한 시간을 줄이세요. 워크로드가 급증하는 동안 연결 비용을 최소화하려면 제한 시간을 늘립니다.

    데이터베이스 이 프록시를 통해 액세스할 Aurora DB 클러스터입니다. 이 목록에는 호환되는 데이터베이스 엔진, 엔진 버전 및 기타 설정이 있는 DB 인스턴스 또는 클러스터만 포함됩니다. 목록이 비어 있으면 RDS Proxy와 호환되는 새 DB 인스턴스 또는 클러스터를 생성합니다. 이 작업을 수행하려면 Amazon Aurora DB 클러스터 생성의 절차를 수행합니다. 그런 다음 프록시를 다시 생성해 보세요.
    연결 풀 최대 연결 RDS Proxy가 사용할 수 있는 max_connections 한도의 백분율을 정의하기 위한 1~100 사이의 값입니다. 이 DB 인스턴스 또는 클러스터에 하나의 프록시만 사용하려는 경우 이 값을 100으로 설정합니다. RDS Proxy가 이 설정을 사용하는 방법에 대한 자세한 내용은 MaxConnectionsPercent 섹션을 참조하세요.
    세션 고정 필터

    RDS 프록시가 멀티플렉싱 연결에 대한 기본 안전 조치를 우회하는 감지된 특정 세션 상태를 고정하지 못하도록 합니다. 현재 PostgreSQL은 이 설정을 지원하지 않으며 사용 가능한 유일한 옵션은 EXCLUDE_VARIABLE_SETS입니다. 이를 활성화하면 한 연결의 세션 변수가 다른 연결의 세션 변수에 영향을 줄 수 있으며, 쿼리가 현재 트랜잭션 외부에 설정된 세션 변수에 의존하는 경우 오류 또는 정확성 문제가 발생할 수 있습니다. 애플리케이션이 데이터베이스 연결을 안전하게 공유할 수 있는지 확인한 후에만 이 옵션을 사용합니다.

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

    • 유효 세션 변수 값에 변경 사항이 없는 SET 문입니다. 즉, 세션 변수에 변경 사항이 없습니다.

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

    자세한 내용은 RDS 프록시 고정 방지 섹션을 참조하세요.

    연결 대여 시간 초과 프록시가 사용 가능한 모든 데이터베이스 연결을 사용할 것으로 예상되는 경우 제한 시간 오류가 반환되기 전에 대기 시간을 설정합니다. 최대 5분을 지정할 수 있습니다. 이 설정은 프록시가 최대 연결 수에 도달했으며 모두 사용 중인 경우에만 적용됩니다.
    초기화 쿼리

    (선택 사항) 초기화 쿼리를 추가하거나 현재 쿼리를 수정합니다. 각 새 데이터베이스 접속을 열 때 실행할 프록시에 대한 하나 이상의 SQL 문을 지정할 수 있습니다. 이 설정은 일반적으로 각 접속에 동일한 설정이 있는지 확인하기 위해 SET 문과 함께 사용됩니다. 추가하는 쿼리가 유효한지 확인합니다. 단일 SET 문에 여러 변수를 포함하려면 쉼표 구분자를 사용합니다. 예:

    SET variable1=value1, variable2=value2

    여러 문의 경우 세미콜론을 구분 기호로 사용합니다.

    중요

    대상 그룹 구성의 일부로 초기화 쿼리에 액세스할 수 있으므로 이는 인증 또는 암호화 방법으로 보호되지 않습니다. 프록시 대상 그룹 구성을 보거나 관리할 수 있는 액세스 권한이 있는 사람은 누구나 초기화 쿼리를 볼 수 있습니다. 암호 또는 수명이 긴 암호화 키와 같은 민감한 데이터를 이 옵션에 추가해서는 안 됩니다.

    AWS Identity and Access Management(IAM) 역할

    프록시가 사용할 수 있는 데이터베이스 사용자 계정의 자격 증명을 나타내는 Secrets Manager 보안 암호에 액세스할 수 있는 권한이 있는 IAM 역할입니다. 또는 AWS Management 콘솔에서 IAM 역할을 만들 수 있습니다.

    Secrets Manager 보안 암호

    프록시를 사용할 수 있는 데이터베이스 사용자 계정의 자격 증명을 나타내는 Secrets Manager 암호를 생성하거나 선택합니다.

    기본 인증 체계없음으로 설정된 경우이 필드는 필수입니다. 기본 인증 체계IAM 인증으로 설정된 경우 이 필드는 선택 사항이 되며 콘솔에서 이와 같이 표시됩니다.

    드롭다운에서 하나 이상의 보안 암호를 선택하거나 새 보안 암호 생성 링크를 사용하여 새 보안 암호를 생성할 수 있습니다.

    클라이언트 인증 유형 프록시가 클라이언트로부터의 연결에 사용하는 인증 유형입니다. 선택 사항은 이 프록시와 연결된 모든 Secrets Manager 비밀에 적용됩니다. 비밀마다 다른 클라이언트 인증 유형을 지정해야 하는 경우 AWS CLI 또는 API를 대신 사용하여 프록시를 생성합니다. 클라이언트 연결에서 인증에 데이터베이스 자격 증명을 사용하는 경우에만 이 옵션을 지정합니다.
    IAM 인증 프록시 연결에 대한 IAM 인증에 필요 또는 허용되지 않음을 지정합니다. 선택 사항은 이 프록시와 연결된 모든 Secrets Manager 비밀에 적용됩니다. 암호마다 다른 IAM 인증을 지정해야 하는 경우 AWS CLI 또는 API를 대신 사용하여 프록시를 생성합니다.
    기본 인증 체계

    프록시가 클라이언트와 프록시 간 연결 및 프록시와 기본 데이터베이스 간 연결에 사용하는 기본 인증 유형을 선택합니다. 다음과 같은 옵션이 있습니다:

    • 없음(기본값) - 프록시가 Secrets Manager 보안 암호에서 데이터베이스 자격 증명을 검색합니다.

    • IAM 인증 - 프록시는 IAM 인증을 사용하여 데이터베이스에 연결하여 엔드 투 엔드 IAM 인증을 활성화합니다.

    IAM 인증을 선택하면 대상 그룹 구성의 데이터베이스에 대해 IAM 데이터베이스 인증을 활성화하라는 정보 알림이 나타납니다.

    참고

    이 옵션은 MySQL, PostgreSQL 및 MariaDB 엔진 패밀리에 대해서만 지원됩니다.

    IAM 인증을 위한 데이터베이스 계정

    이 필드는 기본 인증 체계IAM 인증으로 설정되고 Identity and Access Management(IAM) 역할IAM 역할 생성으로 설정된 경우에만 나타납니다.

    IAM 인증에 사용할 프록시의 데이터베이스 사용자 계정 이름을 지정합니다. 필수 필드입니다. 다음을 기준으로 여러 계정을 지정합니다.

    • 데이터베이스 사용자 이름을 입력하여 태그로 추가

    • 특정 데이터베이스 사용자 이름 사용(예: db_user, jane_doe)

    • 여러 사용자에 와일드카드 패턴 사용(예: db_test_*)

    각 계정은 X 아이콘을 클릭하여 삭제할 수 있는 이동식 태그로 표시됩니다. 콘솔은 이러한 값을 사용하여 IAM 역할 정책에서 적절한 rds-db:connect 권한을 생성합니다.

    전송 계층 보안 필요

    모든 클라이언트 연결에 TLS/SSL을 적용합니다. 클라이언트 연결의 암호화 여부와는 상관없이 프록시는 기본 데이터베이스에 연결할 때 동일한 암호화 설정을 사용합니다.

    대상 연결 네트워크 유형

    프록시가 대상 데이터베이스에 연결하는 데 사용하는 IP 버전입니다. 다음 옵션 중 하나를 선택합니다.

    • IPv4 - 프록시는 IPv4 주소를 사용하여 데이터베이스에 연결합니다.

    • IPv6 - 프록시는 IPv6 주소를 사용하여 데이터베이스에 연결합니다.

    기본값은 IPv4입니다. IPv6를 사용하려면 데이터베이스가 듀얼 스택 모드를 지원해야 합니다. 대상 연결에는 듀얼 스택 모드를 사용할 수 없습니다.

    엔드포인트 네트워크 유형

    클라이언트가 프록시에 연결하는 데 사용하는 프록시 엔드포인트의 IP 버전입니다. 다음 옵션 중 하나를 선택합니다.

    • IPv4 - 프록시 엔드포인트는 IPv4 주소만 사용합니다.

    • IPv6 - 프록시 엔드포인트는 IPv6 주소만 사용합니다.

    • 듀얼 스택 – 프록시 엔드포인트는 IPv4 및 IPv6 IP 주소를 모두 지원합니다.

    기본값은 IPv4입니다. IPv6 또는 듀얼 스택을 사용하려면 선택한 네트워크 유형을 지원하도록 VPC 및 서브넷을 구성해야 합니다.

    서브넷,

    이 필드는 VPC와 연결된 모든 서브넷으로 미리 채워집니다. 프록시에 필요하지 않은 서브넷은 제거할 수 있지만 서브넷은 두 개 이상 남겨 두어야 합니다. IPv6 또는 듀얼 스택 엔드포인트 네트워크 유형의 경우, 선택한 서브넷이 선택한 네트워크 유형을 지원하는지 확인합니다.

    VPC 보안 그룹

    기존 VPC 보안 그룹을 선택하거나 AWS Management 콘솔에서 새 보안 그룹을 만듭니다. 애플리케이션이 프록시에 액세스할 수 있도록 인바운드 규칙을 구성하고 데이터베이스 대상의 트래픽을 허용하도록 아웃바운드 규칙을 구성합니다.

    참고

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

    공유 VPC를 사용하는 경우 VPC에 대한 기본 보안 그룹이나 다른 계정과 연결된 보안 그룹을 사용하지 마세요. 대신 본인 계정에 속한 보안 그룹을 선택합니다. VPC가 없다면 만드세요. 자세한 내용은 공유 VPC 작업을 참조하세요.

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

    향상된 로깅 활성화

    프록시 호환성 또는 성능 문제를 해결하려면 이 설정을 활성화합니다. 활성화된 경우 RDS 프록시는 SQL 동작 또는 프록시 연결 성능 및 확장성을 디버깅하는 데 도움이 되는 자세한 성능 정보를 로깅합니다.

    디버깅에 대해서만 이 설정을 활성화하고 로그의 민감한 정보를 보호하기 위한 적절한 보안 조치가 마련되어 있는지 확인합니다. 오버헤드를 최소화하기 위해 RDS 프록시는 활성화 후 24시간이 지나면 이 설정을 자동으로 비활성화합니다. 특정 문제를 해결하기 위해 일시적으로 사용합니다.

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

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

  • --db-proxy-name

  • --engine-family

  • --role-arn

  • --vpc-subnet-ids

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

대상 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 프록시에 대한 네트워크 사전 조건 설정에서 서브넷 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 함수를 호출하여 Aurora DB 클러스터를 대상 그룹에 연결합니다.

중요

기본 인증 체계에 대해 IAM 인증을 선택하는 경우:

  • 프록시가 성공적으로 연결되기 전에 대상 데이터베이스 인스턴스 또는 클러스터에서 IAM 데이터베이스 인증을 활성화해야 합니다.

  • IAM 역할 생성을 선택하는 경우 IAM 인증을 위한 데이터베이스 계정 필드가 필요합니다.

  • 기존 IAM 역할을 선택하면 콘솔이 데이터베이스 연결 권한으로 역할을 자동으로 업데이트하지 않습니다. 역할에 필요한 rds-db:connect 권한이 있는지 확인합니다.