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

5분 분량
0

Amazon RDS 프록시를 통해 Amazon Relational Database Service(RDS) 또는 Amazon Aurora DB 인스턴스에 연결할 수 없습니다.

간략한 설명

여러 가지 이유로 RDS 프록시에서 연결 장애가 발생할 수 있습니다. 다음 문제는 RDS 프록시가 사용 가능 상태인 경우에도 RDS 프록시 연결 장애가 발생하는 일반적인 원인입니다.

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

해결 방법

참고: IAM 인증을 사용하는 RDS DB 인스턴스 또는 Aurora DB 클러스터에 RDS 프록시를 사용하는 경우 모든 사용자가 연결을 인증해야 합니다. 프록시를 통해 연결하는 모든 사용자가 사용자 이름과 암호로 연결을 인증해야 합니다. RDS 프록시의 IAM 지원에 대한 자세한 내용은 IAM 정책 설정을 참조하세요.

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

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

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

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

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

  • Secrets Manager의 보안 인증 정보가 유효하며 DB 인스턴스에 연결할 수 있는지 확인합니다.
  • DB 인스턴스의 보안 그룹에서 RDS 프록시의 트래픽을 허용하는지 확인합니다. 이렇게 하려면 먼저 DB 인스턴스와 RDS 프록시의 보안 그룹을 확인해야 합니다.

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 인스턴스가 서로 다른 보안 그룹을 사용하는 경우 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 인스턴스에 도달하도록 허용해야 합니다. 이렇게 하려면 RDS 프록시 보안 그룹이 아웃바운드 규칙에서 필요한 트래픽을 허용해야 합니다.

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

IAM 역할에 rds.amazonaws.com에 대한 신뢰 정책이 있어야 합니다.

보안 암호에 대해 secretsmanager:GetSecretValue 작업을 호출할 수 있는 액세스 권한이 IAM 정책에 있어야 합니다.

보안 암호를 암호화하는 데 사용된 AWS Key Management Service(AWS KMS) 키에 대해 kms:Decrypt 작업을 호출할 권한이 IAM 정책에 있어야 합니다. AWS KMS 콘솔에서 Secrets Manager가 사용한 KMS 키의 세부 정보를 가져올 수 있습니다. Resource(리소스) 섹션에 KMS 키 ID를 사용해야 합니다. 다음 예제 정책을 참조하세요.

{
  "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"
        }
      }
    }
  ]
}

참고: account_id, secret_name, region, account_idkey_id를 해당하는 실제 값으로 바꾸세요.

  • 프록시를 DB 인스턴스에 연결할 수 없는 이유에 대한 자세한 내용을 보려면 describe-db-proxy-targets 명령을 실행합니다. 그런 다음 출력에서 TargetHealth 구조를 검토합니다. RDS 프록시 대상의 연결 상태에 대한 자세한 정보를 보려면 State(상태), Reason(이유) 및 Description(설명) 필드를 검토합니다.
aws rds describe-db-proxy-targets --db-proxy-name $DB_PROXY_NAME

자세한 내용은 Verifying connectivity for a proxy(프록시에 대한 연결 확인)를 참조하세요.

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

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

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

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

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

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

자세한 내용은 Creating and using an IAM policy for IAM database access(IAM 데이터베이스 액세스를 위해 IAM 정책 생성 및 사용)를 참조하세요.

RDS 프록시 로그 검토

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


관련 정보

Amazon RDS 프록시 사용

Amazon RDS 프록시를 사용하여 공유 데이터베이스 연결 설정

AWS 공식
AWS 공식업데이트됨 한 달 전