RDS 프록시를 사용하여 Amazon RDS DB 또는 Amazon Aurora DB 인스턴스에 연결할 수 없는 이유는 무엇인가요?

최종 업데이트 날짜: 2020년 12월 3일

RDS 프록시를 통해 Amazon Relational Database Service(Amazon RDS) 또는 Amazon Aurora DB 인스턴스에 연결할 수 없습니다. 데이터베이스에 연결할 수 없는 이유는 무엇인가요?

간략한 설명

RDS 프록시가 사용 가능 상태임에도 불구하고 RDS 프록시를 사용한 연결에 실패하는 이유는 여러 가지가 있습니다. RDS 프록시 연결 실패의 원인은 다음과 같습니다.

  • DB 인스턴스 또는 RDS 프록시의 보안 그룹 규칙으로 인해 연결이 차단됨
  • RDS 프록시는 현재 VPC 내에서만 작동하므로 프라이빗 네트워크 외부에서 연결하는 경우 실패함
  • 수정했거나 사용할 수 없는 상태이기 때문에 DB 인스턴스에서 연결을 허용하지 않음
  • 잘못된 인증 자격 증명이 사용됨(기본 사용자 이름 및 암호 모드가 사용되는 경우)
  • 클라이언트와 연결된 IAM 사용자 또는 역할에 RDS 프록시에 연결할 수 있는 권한이 없음(IAM DB 인증을 사용하는 경우)

이 문서의 문제 해결 단계를 사용하여 이러한 문제를 해결해보세요.

해결 방법

클라이언트가 VPC의 프라이빗 네트워크 내에서 RDS 프록시에 연결할 수 있는지 확인

RDS 프록시는 VPC 내에서만 사용할 수 있으며 퍼블릭 액세스는 불가능합니다(단, DB 인스턴스는 액세스 가능함). 프라이빗 네트워크 외부에서 연결하는 경우 연결 제한 시간이 초과됩니다.

  • 클라이언트가 동일한 VPC에 있는 경우 RDS 프록시의 보안 그룹은 데이터베이스 엔진에 따라 기본 포트(MySQL의 경우3306, PostgreSQL의 경우 5432)를 사용하는 클라이언트의 연결을 허용하는지 확인합니다. VPC와 연결된 보안 그룹에 규칙을 추가하여 필요한 트래픽을 허용합니다.
  • 클라이언트가 다른 VPC에 있는 경우 VPC 피어링을 사용할 수 있습니다. 보안 그룹 및 라우팅 테이블을 검토하여 다른 VPC의 트래픽을 관리합니다.
  • 클라이언트가 기업 네트워크에 있는 경우 Direct Connect 또는 Site-to-Site VPN을 사용하여 VPC에 직접 연결합니다.
  • 클라이언트가 퍼블릭 인터넷을 통해 연결해야 하는 경우 SSH 터널링을 중간 호스트로 사용하여 동일한 VPC 내 RDS 프록시에 연결합니다.

RDS 프록시가 DB 인스턴스와 연결할 수 있는지 확인

RDS 프록시는 연결 풀을 관리하기 위해 DB 인스턴스와의 연결을 설정해야 합니다. 그리고 Secret Manager에 저장된 사용자 이름과 암호를 사용한 다음 연결을 설정합니다. 아래의 모범 사례를 사용하여 RDS 프록시가 DB 인스턴스와 연결할 수 있는지 확인합니다.

  • Secret Manager의 자격 증명이 유효하며 DB 인스턴스에 연결할 수 있는지 확인합니다.
  • DB 인스턴스의 보안 그룹이 RDS 프록시의 트래픽을 허용하는지 확인합니다.
    • RDS 프록시와 DB 인스턴스의 보안 그룹이 다르면 DB 인스턴스의 보안 그룹 인바운드 규칙에서 RDS 프록시의 보안 그룹을 언급할 수 있습니다.
Inbound rules for the RDS instance in order to allow connections from RDS proxy:
Protocol : TCP
Port range : Port on which the DB engine is running on the DB instance
Source : Security group of RDS Proxy
    • RDS 프록시와 DB 인스턴스가 모두 동일한 보안 그룹을 사용하는 경우 보안 그룹의 상속 규칙이 인바운드 규칙에 언급되어 있는지 확인합니다.
Inbound rules for the RDS instance in order to allow connections from RDS proxy:
Protocol : TCP
Port Range : Port on which the DB engine is running on the RDS instance
Source : Common security group (for self referencing the security group)
  • RDS 프록시가 풀 관리를 위해 연결을 시작하므로 아웃바운드 트래픽이 DB 인스턴스에 도달할 수 있어야 합니다. 보안 그룹은 아웃바운드 규칙에서 필요한 트래픽을 허용해야 합니다.
Outbound rules for the RDS Proxy in order to allow traffic reach the RDS instance:
Protocol : TCP
Port range : Port on which the DB engine is running on the RDS instance
Destination : Security group of DB instance

Note: If you already have the following outbound rules attached to the security group of the RDS Proxy, then there is no need to explicitly add the security group. 
Outbound rules: ALL --- 0.0.0.0/0
  • RDS 프록시와 연결된 IAM 역할이 연결에 필요한 자격 증명을 가져오고 사용하는 데 필요한 액세스 권한을 보유하는지 확인합니다.
    • rds.amazonaws.com에 대한 신뢰 정책이 IAM 역할에 있는지 확인합니다.
    • 보안 암호에서 secretsmanager:GetSecretValue 작업을 호출할 권한이 IAM 정책에 있는지 확인합니다.
    • 보안 암호를 암호화하는 데 사용된 AWS Key Management Service(AWS KMS) 키에서 kms:Decrypt 작업을 호출할 권한이 IAM 정책에 있는지 확인합니다. AWS KMS 콘솔에서 AWS Secrets Manager가 사용한 KMS 키의 세부 정보를 가져올 수 있습니다. [리소스(Resource)] 섹션에 대해 KMS 키 ID를 사용해야 합니다.
    Example Policy:
    
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": "secretsmanager:GetSecretValue",
                "Resource": [
                    "arn:aws:secretsmanager:region:account_id:secret:secret_name"
                ]
            },
            {
                "Effect": "Allow",
                "Action": "kms:Decrypt",
                "Resource": "arn:aws:kms:region:account_id:key/key_id",
                "Condition": {
                    "StringEquals": {
                        "kms:ViaService": "secretsmanager.region.amazonaws.com"
                    }
                }
            }
        ]
    }
  • 프록시를 DB 인스턴스에 연결할 수 없는 이유에 대한 자세한 내용을 보려면 describe-db-proxy-targets 명령의 출력에서 TargetHealth 구조를 검토합니다. RDS 프록시 대상의 연결 상태에 대한 자세한 내용은 상태, 이유 및 설명 필드를 검토합니다.
  • aws rds describe-db-proxy-targets --db-proxy-name $DB_PROXY_NAME

    자세한 내용은 프록시에 대한 연결 확인을 참조하세요.

    DB 인스턴스가 현재 연결을 허용하는지 확인

    DB 인스턴스의 현재 상태를 검토하고 [사용 가능(AVAILABLE)] 상태인지 확인합니다. DB 인스턴스의 상태 검토에 대한 자세한 내용은 DB 인스턴스 상태에 대한 RDSAurora 설명서를 참조하세요.

    필요한 권한이 있는 클라이언트와 IAM 사용자 및 역할이 연결되어 있는지 확인

    참고: 이 단계는 RDS 프록시에서 IAM DB 인증을 활성화한 경우에만 필요합니다.

    클라이언트는 연결 요청을 인증하기 위해 토큰을 생성해야 합니다. 이렇게 하려면 이 클라이언트와 연결된 IAM 사용자 및 IAM 역할에 rds-db:connect IAM 정책이 있어야 합니다. 또한 정책의 리소스 특성에 대해 ARN에서 RDS 프록시 ID를 사용해야 합니다.

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

    RDS 프록시 로그 검토

    RDS 프록시의 [향상된 로깅(Enhanced Logging)] 기능을 활성화합니다. 로깅을 활성화하면 SQL 문에 대한 자세한 정보가 제공됩니다. 이러한 로그는 특정 인증 문제를 이해하는 데 도움이 되는 유용한 리소스입니다. 이러한 로그는 성능에 오버헤드를 더하기 때문에 디버깅에 대해서만 활성화해야 합니다. 오버헤드를 최소화하기 위해 RDS 프록시는 이 설정을 활성화한 후 24시간이 지나면 이 설정을 자동으로 해제합니다.