내용으로 건너뛰기

Aurora PostgreSQL 호환 DB 클러스터에 연결할 때 발생하는 문제를 해결하려면 어떻게 해야 합니까?

6분 분량
0

Amazon Aurora PostgreSQL 호환 버전 데이터베이스(DB) 클러스터의 연결 문제를 해결하고 싶습니다.

해결 방법

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI의 오류 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.

올바른 연결 파라미터를 구성했는지 확인

다음 단계를 완료하십시오.

  1. Amazon Relational Database Service(RDS) 콘솔을 엽니다.
  2. 탐색 창에서 데이터베이스를 선택합니다.
  3. Aurora PostgreSQL 호환 DB 클러스터를 선택합니다.
  4. 연결 및 보안 탭에서 다음 값을 기록해 둡니다.<br id=hardline_break/> 라이터 또는 리더 엔드포인트<br id=hardline_break/> 기본 포트 번호 5432
  5. 데이터베이스 이름, 사용자 이름 및 암호가 올바른지 확인합니다.

연결을 테스트하려면 다음 psql 명령을 실행합니다.

psql -h your-cluster-endpoint -p 5432 -U your-username -d your-database-name

참고: your-cluster-endpoint를 클러스터 엔드포인트로, your-username을 데이터베이스 사용자 이름으로, your-database-name을 데이터베이스 이름으로 바꾸십시오.

네트워크 연결 테스트

클라이언트가 Aurora PostgreSQL 호환 DB 클러스터 엔드포인트에 도달할 수 있는지 확인하려면 다음 명령을 실행합니다.

telnet 사용

다음 telnet 명령을 실행합니다.

telnet your-cluster-endpoint 5432

참고: your-cluster-endpoint를 클러스터 엔드포인트로 바꾸십시오.

연결에 성공하면 다음과 비슷한 결과가 출력됩니다.

Trying xxx.xxx.xxx.xxx...
Connected to your-cluster-endpoint.

netcat 사용

telnet을 사용할 수 없는 경우 다음 netcat 명령을 실행합니다.

nc -zv your-cluster-endpoint 5432

참고: your-cluster-endpoint를 클러스터 엔드포인트로 바꾸십시오.

연결에 성공하면 다음과 비슷한 결과가 출력됩니다.

Connection to your-cluster-endpoint 5432 port [tcp/postgresql] succeeded!

위의 명령이 제한 시간을 초과하거나 실패하면 네트워크 연결 문제가 있는 것입니다. 보안 그룹 인바운드 규칙을 올바르게 구성했는지 확인하십시오.

보안 그룹의 인바운드 규칙 확인

다음 단계를 완료하십시오.

  1. Amazon RDS 콘솔을 엽니다.
  2. 탐색 창에서 데이터베이스를 선택합니다.
  3. Aurora PostgreSQL 호환 DB 클러스터를 선택합니다.
  4. 연결 및 보안 섹션의 VPC 보안 그룹에서 보안 그룹 이름을 기록해 둡니다.
  5. Amazon Virtual Private Cloud(Amazon VPC) 콘솔을 엽니다.
  6. 탐색 창에서 보안 그룹을 선택합니다.
  7. 보안 그룹을 선택합니다.
  8. 인바운드 규칙을 선택합니다.
  9. 다음과 같이 설정된 규칙이 있는지 확인합니다.<br id=hardline_break/> 유형이 PostgreSQL 또는 사용자 지정 TCP입니다.<br id=hardline_break/> 포트가 5432입니다.<br id=hardline_break/> 소스는 클라이언트의 IP 주소 또는 적절한 CIDR 블록입니다.

Amazon VPC 콘솔을 사용하여 보안 그룹에 인바운드 규칙을 추가하려면 보안 그룹 규칙 구성을 참조하십시오.

AWS CLI를 사용하여 인바운드 규칙을 추가하려면 다음과 같은 authorize-security-group-ingress 명령을 실행합니다.

aws ec2 authorize-security-group-ingress \
  --group-id your-group-id \
  --protocol tcp \
  --port 5432 \
  --cidr your-IP-address/32 \
  --region your-region

참고: your-group-id를 보안 그룹 ID로, your-IP-address/32를 IP 주소 또는 CIDR 블록으로, your-region을 AWS 리전으로 바꾸십시오.

VPC 네트워크 ACL 인바운드 규칙 확인

네트워크 ACL 규칙을 확인하려면 다음 단계를 완료하십시오.

  1. Amazon VPC 콘솔을 엽니다.
  2. 탐색 창에서 네트워크 ACL을 선택합니다.
  3. DB 서브넷과 연결된 네트워크 ACL을 선택합니다.
  4. 인바운드 규칙 탭을 선택합니다.
  5. 다음과 같이 설정된 규칙이 있는지 확인합니다.<br id=hardline_break/> 유형이 PostgreSQL(5432) 또는 모든 트래픽입니다.<br id=hardline_break/> 소스가 클라이언트의 IP 주소 범위 또는 0.0.0.0/0입니다.

네트워크 ACL 규칙을 추가하려면 규칙 추가를 참조하십시오.

서브넷 및 라우팅 구성 확인

서브넷 구성을 확인하려면 다음 단계를 완료하십시오.

  1. Amazon RDS 콘솔을 엽니다.
  2. 탐색 창에서 데이터베이스를 선택합니다.
  3. Aurora PostgreSQL 호환 DB 클러스터를 선택합니다.
  4. 연결 및 보안 탭에서 DB 서브넷 그룹 이름을 기록해 둡니다.
  5. 서브넷 그룹 링크를 선택합니다.
  6. 서브넷이 올바른 가용 영역과 VPC에 있는지 확인합니다.

라우팅 테이블 구성을 확인하려면 서브넷의 라우팅 테이블 확인을 참조하십시오.

데이터베이스 수준 권한 확인

데이터베이스 사용자에게 데이터베이스 연결에 필요한 권한이 있는지 확인합니다.

기본 사용자로 연결

다음 psql 명령을 실행합니다.

psql -h your-cluster-endpoint -p 5432 -U primary-username -d postgres

참고: your-cluster-endpoint를 클러스터 엔드포인트로, primary-username을 기본 사용자 이름으로 바꾸십시오.

사용자 권한 확인

기본 사용자로 연결한 후 다음 SQL 쿼리를 실행하여 사용자 권한을 확인합니다.

모든 데이터베이스 사용자를 나열하려면 다음 명령을 실행합니다.

SELECT usename, usesuper, usecreatedb, useconnlimit FROM pg_user ORDER BY usename;

특정 사용자 권한을 확인하려면 다음 명령을 실행합니다.

SELECT usename, usesuper, usecreatedb, useconnlimit FROM pg_user WHERE usename = 'your-username';

참고: your-username을 권한을 확인하려는 사용자의 사용자 이름으로 바꾸십시오.

데이터베이스와 데이터베이스 소유자를 나열하려면 다음 명령을 실행합니다.

SELECT datname, datowner, datacl FROM pg_database WHERE datname NOT IN ('template0', 'template1');

사용자 권한 생성 또는 수정

사용자가 존재하지 않거나 충분한 권한이 없는 경우 다음 명령을 실행하십시오.

새 사용자를 생성하려면 다음 명령을 실행합니다.

CREATE USER your_username WITH PASSWORD 'your_password';

참고: your_username을 생성하려는 사용자의 사용자 이름으로 바꾸고 your_password를 보안 암호로 바꾸십시오.

사용자에게 데이터베이스 연결 권한을 부여하려면 다음 명령을 실행합니다.

GRANT CONNECT ON DATABASE your_database_name TO your_username;

참고: your_database_name을 데이터베이스 이름으로, your_username을 권한을 부여하려는 사용자의 사용자 이름으로 바꾸십시오.

사용자에게 스키마 사용 권한을 부여하려면 다음 명령을 실행합니다.

GRANT USAGE ON SCHEMA public TO your_username;

참고: your_username을 권한을 부여하려는 사용자의 사용자 이름으로 바꾸십시오.

사용자에게 테이블에 대한 권한을 부여하려면 다음 명령을 실행합니다.

GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO your_username;

참고: your_username을 권한을 부여하려는 사용자의 사용자 이름으로 바꾸십시오.

연결 할당량 모니터링

DB 클러스터가 최대 연결 할당량에 도달했는지 확인합니다.

현재 연결 확인

DB 클러스터에 연결한 후 다음 SQL 쿼리를 실행합니다.

현재 연결 수를 확인하려면 다음 명령을 실행합니다.

SELECT count(*) as current_connections FROM pg_stat_activity WHERE state = 'active';

최대 연결 설정을 확인하려면 다음 명령을 실행합니다.

SHOW max_connections;

사용자별 활성 연결을 보려면 다음 명령을 실행합니다.

SELECT usename, count(*) as connection_count FROM pg_stat_activity GROUP BY usename ORDER BY connection_count DESC;

max_connections 파라미터 수정

max_connections 파라미터를 수정하려면 Amazon Aurora의 DB 클러스터 파라미터 그룹에서 파라미터 수정을 참조하십시오.

SSL/TLS 연결 테스트

Aurora PostgreSQL 호환은 암호화된 연결을 지원합니다. 암호화된 연결과 암호화되지 않은 연결을 모두 테스트합니다.

SSL을 사용하지 않고 테스트

SSL을 사용하지 않고 연결을 테스트하려면 다음 psql 명령을 실행합니다.

psql "host=your-cluster-endpoint port=5432 dbname=your-database user=your-username sslmode=disable"

참고: your-cluster-endpoint를 클러스터 엔드포인트로, your-database를 데이터베이스 이름으로, your-username을 사용자 이름으로 바꾸십시오.

SSL을 사용하여 테스트

SSL을 사용하여 연결을 테스트하려면 다음 psql 명령을 실행합니다.

psql "host=your-cluster-endpoint port=5432 dbname=your-database user=your-username sslmode=require"

참고: your-cluster-endpoint.cluster를 클러스터 엔드포인트로, your-database를 데이터베이스 이름으로, your-username을 사용자 이름으로 바꾸십시오.

RDS CA 인증서 다운로드 및 사용

RDS 인증 기관(CA) 인증서를 다운로드하려면 다음 wget 명령을 실행합니다.

wget https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem

인증서를 사용하려면 다음 psql 명령을 실행합니다.

psql "host=your-cluster-endpoint port=5432 dbname=your-database user=your-username sslmode=verify-full sslrootcert=global-bundle.pem"

참고: your-cluster-endpoint를 클러스터 엔드포인트로, your-database를 데이터베이스 이름으로, your-username을 사용자 이름으로 바꾸십시오.

IAM 데이터베이스 인증 문제 해결

AWS Identity and Access Management(IAM) 데이터베이스 인증을 사용하는 경우 다음 단계를 완료하십시오.

인증 토큰 생성

인증 토큰을 생성하려면 다음 generate-db-auth-token AWS CLI 명령을 실행합니다.

aws rds generate-db-auth-token \
  --hostname your-cluster-endpoint \
  --port 5432 \
  --region your-region \
  --username your-iam-username

참고: your-cluster-endpoint를 클러스터 엔드포인트로, your-region을 리전으로, your-iam-username을 IAM 데이터베이스 사용자 이름으로 바꾸십시오.

IAM 인증을 사용하여 연결

다음 psql 명령을 실행합니다.

psql "host=your-cluster-endpoint port=5432 dbname=your-database user=your-iam-username password=your-generated-token"

참고: your-cluster-endpoint를 클러스터 엔드포인트로, your-database를 데이터베이스 이름으로, your-iam-username을 IAM 지원 사용자 이름으로 바꾸십시오. 또한 your-generated-token을 생성한 토큰으로 바꾸십시오.

IAM 정책 권한 확인

IAM 사용자 또는 역할에 다음 정책을 연결했는지 확인하십시오.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "rds-db:connect"
      ],
      "Resource": [
        "arn:aws:rds-db:region:account-id:dbuser:cluster-resource-id/your-iam-username"
      ]
    }
  ]
}

참고: region을 리전으로, account-id를 AWS 계정 ID로, cluster-resource-id를 DB 클러스터 리소스 ID로, your-iam-username을 IAM 데이터베이스 사용자 이름으로 바꾸십시오.

추가 연결 문제를 해결하려면 PostgreSQL 인스턴스용 RDS 연결 문제 해결을 참조하십시오.

관련 정보

보안 그룹을 사용하여 AWS 리소스에 대한 트래픽 제어

네트워크 액세스 제어 목록으로 서브넷 트래픽 제어

AWS 공식업데이트됨 5달 전
댓글 없음