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

5분 분량
0

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

간략한 설명

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

  • DB 인스턴스 또는 RDS 프록시의 보안 그룹 규칙은 연결을 차단합니다.
  • RDS 프록시는 Virtual Private Cloud(VPC) 내에서만 작동하므로 사설 네트워크 외부에서의 연결은 실패합니다.
  • DB 인스턴스가 수정되었거나 사용할 수 없는 상태이기 때문에 DB 인스턴스가 연결을 수락하지 않습니다.
  • 기본 사용자 이름 및 암호 모드의 경우: 잘못된 인증 보안 인증 정보를 사용했습니다.
  • AWS ID 및 액세스 관리(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 Proxy가 DB 인스턴스와의 연결을 설정해야 합니다. 이 연결은 AWS Secrets Manager에 저장된 사용자 이름과 암호를 사용합니다. 다음 모범 사례를 사용하여 RDS 프록시가 DB 인스턴스에 연결할 수 있는지 확인하세요.

  • Secrets Manager의 보안 인증 정보가 유효하고 DB 인스턴스에 연결할 수 있는지 확인하세요.
  • DB 인스턴스의 보안 그룹이 RDS 프록시로부터의 트래픽을 허용하는지 확인하세요. 이를 위해서는 먼저 DB 인스턴스와 RDS 프록시의 보안 그룹을 결정해야 합니다.

RDS Proxy와 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)

서로 다른 보안 그룹을 사용하는 경우 DB 인스턴스 보안 그룹의 인바운드 규칙에서 RDS Proxy의 보안 그룹을 언급하세요.

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 Proxy 보안 그룹이 아웃바운드 규칙에서 필요한 트래픽을 허용해야 합니다.

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에 대한 신뢰 정책이 있어야 합니다.

IAM 정책에는 시크릿에 대한 SecretsManager:GetSecretValue 작업을 호출할 수 있는 액세스 권한이 있어야 합니다.

IAM 정책에는 시크릿을 암호화한 AWS Key Management Service(AWS KMS) 키에서 kms:Decrypt 작업을 호출할 수 있는 액세스 권한이 있어야 합니다. AWS KMS 콘솔에서 Secrets Manager가 사용하는 KMS 키의 세부 정보를 얻을 수 있습니다. 참고: 리소스 섹션에는 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_id, key_id를 관련 값으로 대체하세요.

  • 프록시가 DB 인스턴스에 연결하지 못하게 하는 원인에 대한 자세한 내용은 describe-db-proxy-targets 명령을 실행하세요. 그런 다음 출력에서 TargetHealth 구조를 검토하세요. RDS 프록시 대상의 연결 상태에 대한 자세한 내용은 State, Reason, Description 필드를 검토하세요.
aws rds describe-db-proxy-targets --db-proxy-name $DB_PROXY_NAME

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

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"

자세한 내용은 IAM 데이터베이스 액세스를 위한 IAM 정책 생성 및 사용을 참조하세요.

RDS 프록시 로그 검토

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

관련 정보

Amazon RDS 프록시 사용

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