새 SSL/TLS 인증서를 사용해 Aurora PostgreSQL DB 클러스터에 연결할 애플리케이션 업데이트
2023년 1월 13일부터 Amazon RDS는 보안 소켓 계층(SSL) 또는 전송 계층 보안(TLS)을 사용해 Aurora DB 클러스터에 연결하기 위한 용도의 새 인증 기관(CA) 인증서를 게시하였습니다. 아래에서 새 인증서를 사용하기 위해 애플리케이션을 업데이트하는 방법에 관한 정보를 찾으실 수 있습니다.
이 주제는 클라이언트 애플리케이션에서 SSL/TLS를 사용해 DB 클러스터에 연결하는지 여부를 판단하는 데 도움이 됩니다. SSL/TLS를 사용해 연결한다면 이 애플리케이션에서 연결 시 인증서 확인이 필요한지 여부를 추가로 확인할 수 있습니다.
참고
어떤 애플리케이션은 서버에서 인증서를 성공적으로 확인할 수 있는 경우에만 Aurora PostgreSQL DB 클러스터에 연결하도록 구성되어 있습니다.
이러한 애플리케이션의 경우 클라이언트 애플리케이션 트러스트 스토어를 업데이트하여 새 CA 인증서를 포함해야 합니다.
클라이언트 애플리케이션 트러스트 스토어에서 CA 인증서를 업데이트한 후에는 DB 클러스터에서 인증서를 교환할 수 있습니다. 이 절차를 프로덕션 환경에서 구현하기 전에 개발 또는 스테이징 환경에서 테스트해볼 것을 적극 권장합니다.
인증서 교환에 대한 자세한 내용은 SSL/TLS 인증서 교체 단원을 참조하십시오. 인증서 다운로드에 대한 자세한 내용은 SSL/TLS를 사용하여 DB 클러스터에 대한 연결 암호화 단원을 참조하십시오. PostgreSQL DB 클러스터에서 SSL/TLS를 사용하는 방법에 관한 자세한 내용은 SSL/TLS를 이용한 Aurora PostgreSQL 데이터 보안 단원을 참조하십시오.
주제
애플리케이션에서 SSL을 사용해 Aurora PostgreSQL DB 클러스터에 연결하는지 여부 확인
rds.force_ssl
파라미터의 값에 대한 DB 클러스터 구성을 확인하십시오. 기본적으로 rds.force_ssl
파라미터는 0
(해제)으로 설정됩니다. rds.force_ssl
파라미터가 1
(켜짐)로 설정된 경우 클라이언트는 연결 시 SSL/TLS를 사용해야 합니다. 파라미터 그룹에 대한 자세한 내용은 Amazon Aurora의 파라미터 그룹 단원을 참조하십시오.
rds.force_ssl
이 1
(켜짐)로 설정되지 않은 경우 pg_stat_ssl
보기를 쿼리하여 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
모드는 서로 다릅니다. libpq 기반 클라이언트는 prefer
로 기본 설정되어 있고, JDBC 클라이언트는 verify-full
로 기본 설정되어 있습니다. 서버의 인증서는 sslrootcert
에서 sslmode
가 verify-ca
또는 verify-full
로 설정된 경우에만 확인됩니다. 인증서가 잘못된 경우 오류가 발생합니다.
PGSSLROOTCERT
를 사용하여 PGSSLMODE
가 verify-ca
또는 verify-full
로 설정된 PGSSLMODE
환경 변수로 인증서를 확인하세요.
PGSSLMODE=verify-full PGSSLROOTCERT=/fullpath/
ssl-cert.pem
psql -h pgdbidentifier.cxxxxxxxx.us-east-2.rds.amazonaws.com -U primaryuser -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=primaryuser dbname=postgres"
예를 들어 앞의 사례에서 잘못된 루트 인증서를 사용하는 경우 클라이언트에서 다음과 비슷한 오류가 발생합니다.
psql: SSL error: certificate verify failed
애플리케이션 트러스트 스토어 업데이트
PostgreSQL 애플리케이션에 대한 트러스트 스토어 업데이트에 대한 자세한 내용은 PostgreSQL 문서의 SSL을 이용한 TCP/IP 연결의 보안
참고
트러스트 스토어를 업데이트할 때 새 인증서를 추가할 뿐 아니라 이전 인증서를 유지할 수도 있습니다.
JDBC를 위한 애플리케이션 트러스트 스토어 업데이트
SSL/TLS 연결을 위해 JDBC를 사용하는 애플리케이션에 대해 트러스트 스토어를 업데이트할 수 있습니다.
루트 인증서 다운로드에 대한 자세한 내용은 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 문서의 데이터베이스에 연결
단원을 참조하십시오. SSL/TLS을 이용한 PostgreSQL 문서의 클라이언트 구성 단원을 참조하십시오. -
Python
PostgreSQL 데이터베이스에 연결하기 위해 많이 사용되는 인기 있는 Python 라이브러리는
psycopg2
입니다.psycopg2
사용에 대한 자세한 내용은 psycopg2 설명서를 참조하십시오. PostgreSQL 데이터베이스에 연결하는 방법에 대한 짧은 자습서는 Psycopg2 자습서 를 참조하십시오. psycopg2 모듈 콘텐츠 에서 연결 명령이 수락하는 옵션에 대한 정보를 얻을 수 있습니다.
중요
데이터베이스 연결에서 SSL/TLS를 사용함을 확인하고 애플리케이션 트러스트 스토어를 업데이트한 후에는 데이터베이스에서 rds-ca-rsa2048-g1 인증서를 사용하도록 업데이트할 수 있습니다. 지침은 DB 인스턴스를 수정하여 CA 인증서 업데이트의 3단계를 참조하십시오.