새 SSL/TLS 인증서를 사용해 PostgreSQL DB 인스턴스에 연결할 애플리케이션 업데이트 - Amazon Relational Database Service

새 SSL/TLS 인증서를 사용해 PostgreSQL DB 인스턴스에 연결할 애플리케이션 업데이트

보안 소켓 계층 또는 전송 계층(SSL/TLS)에 사용되는 인증서는 일반적으로 설정된 수명을 가집니다. 서비스 공급자가 인증 기관(CA) 인증서를 업데이트할 때 클라이언트는 새 인증서를 사용하도록 애플리케이션을 업데이트해야 합니다. 다음은 클라이언트 애플리케이션에서 SSL/TLS를 사용하여 Amazon RDS for PostgreSQL DB 인스턴스에 연결하는지 판단하는 방법에 대한 정보를 확인할 수 있습니다. 또한 이러한 애플리케이션이 연결할 때 서버 인증서를 확인하는지 확인하는 방법에 대한 정보도 확인할 수 있습니다.

참고

SSL/TLS 연결 전에 서버 인증서를 확인하도록 구성된 클라이언트 애플리케이션은 클라이언트의 트러스트 스토어에 유효한 CA 인증서가 있어야 합니다. 새 인증서에 필요한 경우 클라이언트 트러스트 스토어를 업데이트합니다.

클라이언트 애플리케이션 트러스트 스토어에서 CA 인증서를 업데이트한 후에는 DB 인스턴스에서 인증서를 교환할 수 있습니다. 이 절차를 프로덕션 환경에서 구현하기 전에 비 프로덕션 환경에서 테스트해볼 것을 적극 권장합니다.

인증서 교환에 대한 자세한 내용은 SSL/TLS 인증서 교체 단원을 참조하십시오. 인증서 다운로드에 대한 자세한 내용은 SSL/TLS를 사용하여 DB 인스턴스 또는 클러스터에 대한 연결 암호화 단원을 참조하십시오. PostgreSQL DB 인스턴스에서 SSL/TLS를 사용하는 방법에 관한 자세한 내용은 PostgreSQL DB 인스턴스와 함께 SSL 사용 단원을 참조하십시오.

애플리케이션에서 SSL을 사용해 PostgreSQL DB 인스턴스에 연결하는지 여부 확인

rds.force_ssl 파라미터의 값에 대한 DB 인스턴스 구성을 확인하십시오. 기본적으로 이 rds.force_ssl 파라미터는 버전 15 이하의 PostgreSQL 버전을 사용하는 DB 인스턴스의 경우 0(꺼짐)으로 설정되어 있습니다. 기본적으로 이 rds.force_ssl 파라미터는 PostgreSQL 버전 15 이상의 메이저 버전을 사용하는 DB 인스턴스의 경우 1(켜짐)으로 설정되어 있습니다. rds.force_ssl 파라미터가 1(켜짐)로 설정된 경우 클라이언트는 연결 시 SSL/TLS를 사용해야 합니다. 파라미터 그룹에 대한 자세한 내용은 Amazon RDS의 파라미터 그룹 단원을 참조하십시오.

RDS PostgreSQL 버전 9.5 이상 메이저 버전을 사용 중이고 rds.force_ssl1(켜짐)로 설정되어 있지 않으면 SSL을 사용하여 연결을 확인하도록 pg_stat_ssl 보기를 쿼리하십시오. 예를 들어 다음 쿼리에서는 SSL 연결과 SSL을 사용하는 클라이언트에 관한 정보만 반환합니다.

SELECT datname, usename, ssl, client_addr FROM pg_stat_ssl INNER JOIN pg_stat_activity ON pg_stat_ssl.pid = pg_stat_activity.pid WHERE ssl is true and usename<>'rdsadmin';

SSL/TLS 연결을 사용하는 행만 연결에 관한 정보와 함께 표시됩니다. 다음은 출력 샘플입니다.

datname | usename | ssl | client_addr ----------+---------+-----+------------- benchdb | pgadmin | t | 53.95.6.13 postgres | pgadmin | t | 53.95.6.13 (2 rows)

이 쿼리에서는 쿼리 시점의 현재 연결만 표시합니다. 결과가 표시되지 않는다 해도 SSL 연결을 사용하는 애플리케이션이 없는 것은 아닙니다. 다른 SSL 연결이 다른 시점에 설정될 수 있습니다.

클라이언트에서 연결을 위해 인증서 확인이 필요한지 여부 확인

psql 또는 JDBC와 같은 클라이언트가 SSL을 지원하도록 구성되어 있는 경우 클라이언트는 먼저 SSL을 이용해 데이터베이스에 연결을 시도하도록 기본 설정되어 있습니다. SSL을 이용해 연결할 수 없는 경우 클라이언트는 SSL 없이 연결하는 방식으로 전환됩니다. libpq 기반 클라이언트(예: psql)와 JDBC 모두에 사용되는 기본 sslmode 모드는 prefer로 설정됩니다. 서버의 인증서는 sslrootcert에서 sslmodeverify-ca 또는 verify-full로 설정된 경우에만 확인됩니다. 인증서가 잘못된 경우 오류가 발생합니다.

PGSSLROOTCERT를 사용하여 PGSSLMODEverify-ca 또는 verify-full로 설정된 PGSSLMODE 환경 변수로 인증서를 확인하세요.

PGSSLMODE=verify-full PGSSLROOTCERT=/fullpath/ssl-cert.pem psql -h pgdbidentifier.cxxxxxxxx.us-east-2.rds.amazonaws.com -U masteruser -d postgres

sslrootcert 인수를 사용해 sslmode, verify-ca 또는 verify-full로 설정된 연결 문자열 형식의 sslmode로 인증서를 확인하세요.

psql "host=pgdbidentifier.cxxxxxxxx.us-east-2.rds.amazonaws.com sslmode=verify-full sslrootcert=/full/path/ssl-cert.pem user=masteruser dbname=postgres"

예를 들어 앞의 사례에서 잘못된 루트 인증서를 사용하는 경우 클라이언트에서 다음과 비슷한 오류가 발생합니다.

psql: SSL error: certificate verify failed

애플리케이션 트러스트 스토어 업데이트

PostgreSQL 애플리케이션에 대한 트러스트 스토어 업데이트에 대한 자세한 내용은 PostgreSQL 문서의 SSL을 이용한 TCP/IP 연결의 보안 단원을 참조하십시오.

루트 인증서 다운로드에 대한 자세한 내용은 SSL/TLS를 사용하여 DB 인스턴스 또는 클러스터에 대한 연결 암호화 단원을 참조하십시오.

인증서를 가져오는 샘플 스크립트는 트러스트 스토어로 인증서를 가져오기 위한 샘플 스크립트 섹션을 참조하세요.

참고

트러스트 스토어를 업데이트할 때 새 인증서를 추가할 뿐 아니라 이전 인증서를 유지할 수도 있습니다.

다양한 유형의 애플리케이션에 대해 SSL/TLS 연결 사용

아래에서는 다양한 유형의 애플리케이션에 대해 SSL/TLS 연결을 사용하는 방법에 대한 정보를 제공합니다.

  • psql

    클라이언트는 명령줄에서 옵션을 연결 문자열 또는 환경 변수로 지정하여 호출합니다. SSL/TLS 연결의 경우 관련 옵션은 sslmode(환경 변수 PGSSLMODE), sslrootcert(환경 변수 PGSSLROOTCERT)입니다.

    옵션 전체 목록은 PostgreSQL 문서의 파라미터 키 단어 단원을 참조하십시오. 환경 변수 전체 목록은 PostgreSQL 문서의 환경 변수 단원을 참조하십시오.

  • pgAdmin

    이 브라우저 기반 클라이언트는 PostgreSQL 데이터베이스 연결 시 사용할 수 있는 더 사용자 친화적인 인터페이스입니다.

    연결 구성에 대한 자세한 내용은 pgAdmin 설명서를 참조하십시오.

  • JDBC

    JDBC를 통해 Java 애플리케이션의 데이터베이스 연결을 활성화할 수 있습니다.

    JDBC를 이용한 PostgreSQL 데이터베이스 연결에 대한 자세한 내용은 PostgreSQL JDBC 드라이버 설명서의 데이터베이스에 연결 단원을 참조하십시오. SSL/TLS을 이용한 연결에 대한 자세한 내용은 PostgreSQL JDBC 드라이버 설명서의 클라이언트 구성 단원을 참조하십시오.

  • Python

    PostgreSQL 데이터베이스에 연결하기 위해 많이 사용되는 인기 있는 Python 라이브러리는 psycopg2입니다.

    psycopg2 사용에 대한 자세한 내용은 psycopg2 설명서를 참조하십시오. PostgreSQL 데이터베이스에 연결하는 방법에 대한 짧은 자습서는 Psycopg2 자습서를 참조하십시오. psycopg2 모듈 콘텐츠에서 연결 명령이 수락하는 옵션에 대한 정보를 얻을 수 있습니다.

중요

데이터베이스 연결에서 SSL/TLS를 사용함을 확인하고 애플리케이션 트러스트 스토어를 업데이트한 후에는 데이터베이스에서 rds-ca-rsa2048-g1 인증서를 사용하도록 업데이트할 수 있습니다. 지침은 DB 인스턴스 또는 클러스터를 수정하여 CA 인증서 업데이트의 3단계를 참조하십시오.