RDS Proxy를 통해 데이터베이스에 연결하기

RDS Proxy를 통해 데이터베이스에 연결하기 (Connecting to a database through RDS Proxy)

프록시를 통해 RDS DB 인스턴스에 연결하는 방법은 데이터베이스에 직접 연결하는 방법과 대체로 같아요. 이 페이지에서 연결 방법을 설명해요.

출처: 문서

본문

프록시를 통해 RDS DB 인스턴스에 연결하거나 데이터베이스에 직접 연결하는 방법은 대체로 같아요. 자세한 내용은 프록시 엔드포인트 개요(Overview of proxy endpoints)를 참조하세요.

Topics
  • 데이터베이스 자격 증명을 사용해 데이터베이스에 연결하기 (Connecting to a database using database credentials)
  • IAM 인증을 사용해 데이터베이스에 연결하기 (Connecting to a database using IAM authentication)
  • Microsoft SQL Server 연결 시 고려 사항 (Considerations for connecting to Microsoft SQL Server)
  • PostgreSQL 연결 시 고려 사항 (Considerations for connecting to PostgreSQL)

데이터베이스 자격 증명을 사용해 데이터베이스에 연결하기 (Connecting to a database using database credentials)

다음 단계를 사용해 데이터베이스 자격 증명으로 프록시에 연결해요.

  1. 프록시 엔드포인트를 찾아요. AWS Management Console에서는 해당 프록시의 세부 정보 페이지에서 엔드포인트를 찾을 수 있어요. AWS CLI에서는 describe-db-proxies 명령을 사용할 수 있어요. 다음 예시가 그 방법을 보여줘요.

    # 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"
            }
        ]
    ]
    
  2. 클라이언트 애플리케이션의 연결 문자열에서 엔드포인트를 host 파라미터로 지정해요. 예를 들어 mysql -h 옵션 또는 psql -h 옵션의 값으로 프록시 엔드포인트를 지정해요.

  3. 평소와 같은 데이터베이스 사용자 이름과 암호를 제공해요.

IAM 인증을 사용해 데이터베이스에 연결하기 (Connecting to a database using IAM authentication)

RDS Proxy에서 IAM 인증을 사용할 때 클라이언트와 프록시 사이의 인증에는 두 가지 옵션이 있어요.

  • 데이터베이스 사용자가 일반 사용자 이름과 암호로 인증하도록 설정해요. RDS Proxy는 Secrets Manager에서 사용자 이름과 암호 자격 증명을 검색해요. RDS Proxy에서 기본 데이터베이스로의 연결은 IAM을 거치지 않아요.
  • 데이터베이스 자격 증명 없이 IAM을 사용해 프록시를 통해 데이터베이스에 연결하는 엔드투엔드 IAM 인증을 사용할 수도 있어요.

IAM 인증을 사용해 RDS Proxy에 연결하려면 RDS DB 인스턴스에 대한 IAM 인증과 동일한 일반 연결 절차를 사용해요. IAM 사용에 대한 일반적인 내용은 Amazon RDS의 보안(Security in Amazon RDS)을 참조하세요. 엔드투엔드 IAM 인증을 사용한다면 DB 사용자에게 IAM 인증 플러그인을 제공해요. IAM 인증을 사용해 데이터베이스 계정 생성하기(Creating a database account using IAM authentication)를 참조하세요.

RDS Proxy에 대한 IAM 사용의 주요 차이점은 다음과 같아요.

  • 표준 IAM 인증에서 데이터베이스 사용자는 데이터베이스 내에 일반 자격 증명을 가져요. 이 사용자 이름과 암호를 담은 Secrets Manager 시크릿을 설정하고 RDS Proxy가 Secrets Manager에서 자격 증명을 검색하도록 승인해요. IAM 인증은 클라이언트 프로그램과 프록시 사이의 연결에 적용돼요. 그런 다음 프록시는 Secrets Manager에서 검색한 사용자 이름과 암호 자격 증명을 사용해 데이터베이스에 인증해요.
  • 엔드투엔드 IAM 인증에서는 데이터베이스 자격 증명을 위한 Secrets Manager 시크릿을 구성할 필요가 없어요. IAM 인증은 클라이언트에서 프록시로, 프록시에서 데이터베이스로의 연결에 적용돼요.
  • 인스턴스, 클러스터 또는 리더 엔드포인트 대신 프록시 엔드포인트를 지정해요. 프록시 엔드포인트에 대한 자세한 내용은 IAM 인증을 사용해 DB 인스턴스에 연결하기(Connecting to your DB instance using IAM authentication)를 참조하세요.
  • IAM 인증으로 프록시에 연결할 때는 반드시 TLS(Transport Layer Security)/SSL(Secure Sockets Layer)을 사용해야 해요.

IAM 정책을 수정해 특정 사용자에게 프록시 접근 권한을 부여할 수 있어요. 예시는 다음과 같아요.

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

팁

RDS Proxy 연결을 위한 IAM 인증을 구성할 때 연결 문제를 피하려면 다음 중요한 지침을 따르세요.

  • 같은 데이터베이스 사용자 또는 역할에 일반 암호 인증을 유지하면서 rds_iam 역할을 부여하지 마세요.
  • 클라이언트가 IAM 인증을 사용해 RDS Proxy에 연결하는 동안 RDS Proxy는 항상 Secrets Manager를 통한 암호 인증으로 데이터베이스에 연결한다는 점을 기억하세요.
  • 연결 종료와 재연결이 잦다면 사용자나 역할에서 기존 rds_iam 권한을 제거하고 암호 인증만 사용하세요.
  • 암호 정책이 SCRAM-SHA-256 안전 문자 요구 사항을 충족하는지 확인하세요.

같은 데이터베이스 사용자에 IAM과 암호 인증 방법을 혼합하면 연결이 불안정해질 수 있어요.

Microsoft SQL Server 연결 시 고려 사항 (Considerations for connecting to Microsoft SQL Server)

IAM 인증을 사용해 프록시에 연결할 때는 password 필드를 사용하지 않아요. 대신 각 데이터베이스 드라이버 유형에 적합한 토큰 속성을 token 필드에 제공해요. 예를 들어 JDBC에서는 accessToken 속성을, ODBC에서는 sql_copt_ss_access_token을 사용해요. .NET SqlClient 드라이버의 AccessToken 속성을 사용할 수도 있어요. 토큰 속성을 지원하지 않는 클라이언트에서는 IAM 인증을 사용할 수 없어요.

일부 조건에서는 프록시가 데이터베이스 연결을 공유할 수 없고 클라이언트 애플리케이션부터 프록시까지의 연결을 전용 데이터베이스 연결에 고정(pin)해요. 이러한 조건에 대한 자세한 내용은 RDS Proxy 고정 방지하기(Avoiding pinning an RDS Proxy)를 참조하세요.

PostgreSQL 연결 시 고려 사항 (Considerations for connecting to PostgreSQL)

RDS Proxy에 연결할 새 PostgreSQL 데이터베이스 사용자를 만들 때는 사용자에게 데이터베이스에 대한 CONNECT 권한을 부여해야 해요. 이 권한이 없으면 사용자가 연결을 설정할 수 없어요. 자세한 내용은 RDS Proxy 사용 시 PostgreSQL 데이터베이스에 새 데이터베이스 사용자 추가하기(Adding a new database user to a PostgreSQL database when using RDS Proxy)를 참조하세요.

클라이언트가 PostgreSQL 데이터베이스에 연결을 시작하면 시작 메시지를 보내요. 이 메시지에는 파라미터 이름과 값 문자열의 쌍이 포함돼요. 자세한 내용은 PostgreSQL 설명서의 PostgreSQL 메시지 형식의 StartupMessage를 참조하세요.

RDS 프록시를 통해 연결할 때 시작 메시지에는 현재 인식되는 다음 파라미터가 포함될 수 있어요.

  • user
  • database

시작 메시지에는 다음 추가 런타임 파라미터도 포함될 수 있어요.

  • application_name
  • client_encoding
  • DateStyle
  • TimeZone
  • extra_float_digits
  • search_path

PostgreSQL 메시징에 대한 자세한 내용은 PostgreSQL 설명서의 프론트엔드/백엔드(Frontend/Backend) 프로토콜을 참조하세요.

PostgreSQL에서 JDBC를 사용한다면 고정을 피하기 위해 다음을 권장해요.

  • JDBC 연결 파라미터 assumeMinServerVersion을 최소 9.0으로 설정해 고정을 피하세요. 이렇게 하면 JDBC 드라이버가 SET extra_float_digits = 3을 실행할 때 연결 시작 중 추가 라운드 트립을 수행하지 않아요.
  • JDBC 연결 파라미터 ApplicationName을 any/your-application-name으로 설정해 고정을 피하세요. 이렇게 하면 JDBC 드라이버가 SET application_name = "PostgreSQL JDBC Driver"를 실행할 때 연결 시작 중 추가 라운드 트립을 수행하지 않아요. JDBC 파라미터는 ApplicationName이지만 PostgreSQL StartupMessage 파라미터는 application_name이라는 점에 유의하세요.

자세한 내용은 RDS Proxy 고정 방지하기(Avoiding pinning an RDS Proxy)를 참조하세요. JDBC 연결에 대한 자세한 내용은 PostgreSQL 설명서의 데이터베이스에 연결하기(Connecting to the database)를 참조하세요.

더 알아보기 (Learn more)