Amazon Aurora PostgreSQL를 사용한 보안 - Amazon Aurora

Amazon Aurora PostgreSQL를 사용한 보안

Aurora 보안에 대한 일반적인 개요는 Amazon Aurora의 보안 섹션을 참조하세요. 다음과 같은 몇 가지 수준에서 Amazon Aurora PostgreSQL의 보안을 관리할 수 있습니다.

  • Aurora PostgreSQL DB 클러스터 및 DB 인스턴스에서 Amazon RDS 관리 작업을 수행할 수 있는 사용자를 제어하려면 AWS Identity and Access Management(IAM)를 사용합니다. IAM은 사용자가 서비스에 액세스하기 전에 사용자 자격 증명 인증을 처리합니다. 또한 권한 부여, 즉 사용자가 원하는 작업을 수행할 수 있는지도 처리합니다. IAM 데이터베이스 인증은 Aurora PostgreSQL DB 클러스터를 생성할 때 선택할 수 있는 추가 인증 방법입니다. 자세한 내용은 Amazon Aurora의 자격 증명 및 액세스 관리 섹션을 참조하세요.

    Aurora PostgreSQL DB 클러스터에서 IAM을 사용하는 경우 https://console.aws.amazon.com/rds/에서 Amazon RDS 콘솔을 열기 전에 먼저 IAM 보안 인증 정보를 사용하여 AWS Management Console에 로그인합니다.

  • Aurora DB 클러스터는 Amazon VPC 서비스를 기반으로 Virtual Private Cloud(VPC)에 생성해야 합니다. Aurora DB 클러스터에서 DB 인스턴스의 엔드포인트 및 포트에 연결할 수 있는 디바이스 또는 Amazon EC2 인스턴스를 제어하려면 VPC 보안 그룹을 사용합니다. 이 엔드포인트와 포트는 보안 소켓 계층(SSL) 방식으로 연결할 수 있습니다. 그 밖에도 기업의 방화벽 규칙을 통해 기업에서 이용하는 디바이스의 DB 인스턴스 연결 여부를 제어하는 것도 가능합니다. VPC에 대한 자세한 내용은 Amazon VPC 및Amazon Aurora 단원을 참조하세요.

    지원되는 VPC 테넌시는 Aurora PostgreSQL DB 클러스터에서 사용하는 DB 인스턴스 클래스에 따라 다릅니다. default VPC 테넌시일 경우 DB 클러스터가 공유 하드웨어에서 실행됩니다. dedicated VPC 테넌시일 때는 DB 클러스터가 전용 하드웨어 인스턴스에서 실행됩니다. 확장 가능 성능 DB 인스턴스 클래스는 기본 VPC 테넌시만 지원합니다. 확장 성능 DB 인스턴스 클래스에는 db.t3 및 db.t4g DB 인스턴스 클래스가 포함됩니다. 다른 모든 Aurora PostgreSQL DB 인스턴스 클래스는 기본 및 전용 VPC 테넌시를 모두 지원합니다.

    인스턴스 클래스에 대한 자세한 내용은 Aurora DB 인스턴스 클래스 단원을 참조하세요. defaultdedicated VPC 테넌시에 대한 자세한 정보는 Amazon Elastic Compute Cloud 사용 설명서전용 인스턴스를 참조하세요.

  • Amazon Aurora DB 클러스터에서 실행 중인 PostgreSQL 데이터베이스에 사용 권한을 부여하려면 PostgreSQL의 독립 실행형 인스턴스와 동일한 일반적인 방법을 사용할 수 있습니다. CREATE ROLE, ALTER ROLE, GRANT, REVOKE 등의 명령은 온프레미스 데이터베이스에서 작동하는 것과 마찬가지로 작동하며, 데이터베이스와 스키마, 테이블을 직접 수정할 때도 동일합니다.

    PostgreSQL은 역할을 사용하여 권한을 관리합니다. rds_superuser 역할은 Aurora PostgreSQL DB 클러스터에서 가장 많은 권한을 가진 역할입니다. 이 역할은 자동으로 생성되며 DB 클러스터를 생성하는 사용자(마스터 사용자 계정, 기본적으로 postgres)에게 부여됩니다. 자세한 내용은 PostgreSQL 역할 및 권한 이해 단원을 참조하십시오.

버전 10, 11, 12, 13, 14 이상의 릴리스를 비롯하여 사용 가능한 모든 Aurora PostgreSQL 버전은 메시지 다이제스트(MD5)의 대안으로 암호에 대한 Salted Challenge Response Authentication Mechanism(SCRAM)을 지원합니다. SCRAM은 MD5보다 안전하기 때문에 SCRAM을 사용하는 것이 좋습니다. MD5에서 SCRAM으로 데이터베이스 사용자 암호를 마이그레이션하는 방법을 비롯한 자세한 내용은 SCRAM for PostgreSQL 암호 암호화 사용 섹션을 참조하세요.

SSL/TLS를 이용한 Aurora PostgreSQL 데이터 보안

Amazon RDS는 Aurora PostgreSQL DB 클러스터를 위한 보안 소켓 계층(SSL) 및 전송 계층 보안(TLS) 암호화를 지원합니다. SSL/TLS를 사용하여 애플리케이션과 Aurora PostgreSQL DB 클러스터 사이의 연결을 암호화할 수 있습니다. 또한 Aurora PostgreSQL DB 클러스터에 대한 모든 연결에서 SSL/TLS를 사용하도록 지정할 수도 있습니다. Amazon Aurora PostgreSQL은 전송 계층 보안(TLS) 버전 1.1 및 1.2를 지원합니다. TLS 1.2를 암호화 연결에 사용하는 것이 좋습니다. 다음 Aurora PostgreSQL 버전에서 TLSv1.3에 대한 지원을 추가했습니다.

  • 15.3 이상의 모든 버전

  • 14.8 이상의 14 버전

  • 13.11 이상의 13 버전

  • 12.15 이상의 12 버전

  • 11.20 이상의 11 버전

SSL/TLS 지원 및 PostgreSQL 데이터베이스에 대한 일반적인 정보는 PostgreSQL 설명서의 SSL 지원을 참조하세요. JDBC를 통한 SSL/TLS 연결 사용에 대한 자세한 내용은 PostgreSQL 설명서의 클라이언트 구성을 참조하세요.

Aurora PostgreSQL의 모든 AWS 리전에서 SSL/TLS 지원 기능을 사용할 수 있습니다. Amazon RDS는 DB 클러스터가 생성될 때 Aurora PostgreSQL DB 클러스터의 SSL/TLS 인증서를 생성합니다. SSL/TLS 인증서 확인을 활성화하는 경우에는 SSL/TLS 인증서에 스푸핑 공격으로부터 보호해주는 SSL/TLS 인증서를 위한 일반 이름(CN)으로 DB 클러스터 엔드포인트가 포함됩니다.

SSL/TLS를 통해 Aurora PostgreSQL DB 클러스터에 연결하기
  1. 인증서를 다운로드합니다.

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

  2. 다음과 같이 사용 중인 운영 체제로 인증서를 가져옵니다.

  3. SSL/TLS를 통해 Aurora PostgreSQL DB 클러스터에 연결합니다.

    SSL/TLS를 사용하여 연결하면 클라이언트가 인증서 체인을 확인할지 여부를 선택할 수 있습니다. 연결 파라미터가 sslmode=verify-ca 또는 sslmode=verify-full을 지정하면, 클라이언트는 RDS CA 인증서를 트러스트 스토어에 있거나 연결 URL에서 참조되게 할 것을 요구합니다. 이 요구 사항은 데이터베이스 인증서에 서명하는 인증서 체인을 확인하는 것입니다.

    psql 또는 JDBC와 같은 클라이언트가 SSL/TLS를 지원하도록 구성되어 있는 경우 클라이언트는 먼저 SSL/TLS를 이용해 데이터베이스에 연결을 시도하도록 기본 설정되어 있습니다. SSL/TLS를 이용해 연결할 수 없는 경우 클라이언트는 SSL/TLS 없이 연결하는 방식으로 전환됩니다. 기본적으로 JDBC 및 libpq 기반 클라이언트의 sslmode 옵션은 prefer로 설정됩니다.

    sslrootcert 파라미터를 사용하여 인증서를 참조합니다(예: sslrootcert=rds-ssl-ca-cert.pem).

다음은 psql을 사용해 Aurora PostgreSQL DB 클러스터에 연결하는 것의 예시입니다.

$ psql -h testpg.cdhmuqifdpib.us-east-1.rds.amazonaws.com -p 5432 \ "dbname=testpg user=testuser sslrootcert=rds-ca-2015-root.pem sslmode=verify-full"

Aurora PostgreSQL DB 클러스터에 대한 SSL/TLS 연결 요구

rds.force_ssl 파라미터를 사용하여 Aurora PostgreSQL DB 클러스터에 대한 연결 시 SSL/TLS를 사용하도록 요구할 수 있습니다. 기본적으로 rds.force_ssl 파라미터는 0(해제)으로 설정됩니다. rds.force_ssl 파라미터를 1(설정)로 설정하면 해당 DB 클러스터에 대한 연결 시 SSL/TLS를 요구합니다. rds.force_ssl 파라미터를 업데이트해도 PostgreSQL ssl 파라미터가 1(설정)로 설정되고, DB 클러스터의 pg_hba.conf 파일이 새로운 SSL/TLS 구성을 지원하도록 수정됩니다.

rds.force_ssl 파라미터 값은 DB 클러스터의 파라미터 그룹을 업데이트하여 설정할 수 있습니다. DB 클러스터의 파라미터 그룹이 기본 파라미터 그룹이 아니고 ssl 파라미터를 1로 설정할 때 rds.force_ssl 파라미터가 이미 1로 설정되어 있을 경우 DB 클러스터를 재부팅할 필요가 없습니다. 그렇지 않을 경우 변경 사항을 적용하려면 DB 클러스터를 재부팅해야 합니다. 파라미터 그룹에 대한 자세한 정보는 파라미터 그룹 작업 단원을 참조하세요.

DB 클러스터에 대해 rds.force_ssl 파라미터를 1로 설정하면 연결 시 다음과 같이 SSL/TLS가 요구된다는 출력이 표시됩니다.

$ psql postgres -h SOMEHOST.amazonaws.com -p 8192 -U someuser psql (9.3.12, server 9.4.4) WARNING: psql major version 9.3, server major version 9.4. Some psql features might not work. SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256) Type "help" for help. postgres=>

SSL/TLS 연결 상태 확인

DB 클러스터에 연결할 때 로그온 배너에 연결의 암호화된 상태가 표시됩니다.

Password for user master: psql (9.3.12) SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256) Type "help" for help.   postgres=>

또한, sslinfo 확장을 로드한 다음 ssl_is_used() 함수를 호출하여 SSL/TLS가 사용 중인지 확인할 수 있습니다. 이 함수는 연결이 SSL/TLS를 사용할 경우 t를 반환하고, 그렇지 않으면 f를 반환합니다.

postgres=> create extension sslinfo; CREATE EXTENSION postgres=> select ssl_is_used(); ssl_is_used --------- t (1 row)

select ssl_cipher() 명령을 사용하여 SSL/TLS 암호를 확인할 수 있습니다.

postgres=> select ssl_cipher(); ssl_cipher -------------------- DHE-RSA-AES256-SHA (1 row)

set rds.force_ssl을 활성화하고 DB 클러스터를 다시 시작하면 SSL이 아닌 연결은 다음 메시지와 함께 거부됩니다.

$ export PGSSLMODE=disable $ psql postgres -h SOMEHOST.amazonaws.com -p 8192 -U someuser psql: FATAL: no pg_hba.conf entry for host "host.ip", user "someuser", database "postgres", SSL off $

sslmode 옵션에 대한 자세한 내용은 PostgreSQL 설명서의 데이터베이스 연결 제어 기능을 참조하세요.

Aurora PostgreSQL DB 클러스터 연결을 위한 암호 그룹 구성

구성 가능한 암호 그룹을 사용하면 데이터베이스 연결의 보안을 더 잘 제어할 수 있습니다. 데이터베이스에 대한 클라이언트 SSL/TLS 연결을 보호하도록 허용할 암호 그룹 목록을 지정할 수 있습니다. 구성 가능한 암호 그룹을 사용하여 데이터베이스 서버가 허용하는 연결 암호화를 제어할 수 있습니다. 이렇게 하면 안전하지 않거나 사용되지 않는 암호의 사용을 방지하는 데 도움이 됩니다.

구성 가능한 암호 그룹은 Aurora PostgreSQL 버전 11.8 이상에서 지원됩니다.

연결을 암호화하는 데 허용되는 암호 목록을 지정하려면 ssl_ciphers 클러스터 파라미터를 수정합니다. AWS Management Console, AWS CLI, 또는 RDS API를 사용하여 클러스터 파라미터 그룹의 쉼표로 구분된 암호 값 문자열에 ssl_ciphers 파라미터를 설정합니다. 클러스터 파라미터를 설정하려면 DB 클러스터 파라미터 그룹의 파라미터 수정 섹션을 참조하세요.

다음 표에는 유효한 Aurora PostgreSQL 엔진 버전에 지원되는 암호가 나와 있습니다.

Aurora PostgreSQL 엔진 버전 지원되는 암호

9.6, 10.20 이하, 11.15 이하, 12.10 이하, 13.6 이하

  • DHE-RSA-AES128-SHA

  • DHE-RSA-AES128-SHA256

  • DHE-RSA-AES128-GCM-SHA256

  • DHE-RSA-AES256-SHA

  • DHE-RSA-AES256-SHA256

  • DHE-RSA-AES256-GCM-SHA384

  • ECDHE-ECDSA-AES256-SHA

  • ECDHE-ECDSA-AES256-GCM-SHA384

  • ECDHE-RSA-AES256-SHA384

  • ECDHE-RSA-AES128-SHA

  • ECDHE-RSA-AES128-SHA256

  • ECDHE-RSA-AES128-GCM-SHA256

  • ECDHE-RSA-AES256-SHA

  • ECDHE-RSA-AES256-GCM-SHA384

10.21, 11.16, 12.11, 13.7, 14.3, 14.4

  • DHE-RSA-AES128-SHA

  • DHE-RSA-AES128-SHA256

  • DHE-RSA-AES128-GCM-SHA256

  • DHE-RSA-AES256-SHA

  • DHE-RSA-AES256-SHA256

  • DHE-RSA-AES256-GCM-SHA384

  • ECDHE-ECDSA-AES256-SHA

  • ECDHE-ECDSA-AES256-GCM-SHA384

  • ECDHE-RSA-AES256-SHA384

  • ECDHE-RSA-AES128-SHA

  • ECDHE-RSA-AES128-GCM-SHA256

  • ECDHE-RSA-AES256-SHA

  • ECDHE-RSA-AES256-GCM-SHA384

  • TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA

  • TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384

  • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA

  • TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256

  • TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA

  • TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384

  • TLS_RSA_WITH_AES_256_GCM_SHA384

  • TLS_RSA_WITH_AES_256_CBC_SHA

  • TLS_RSA_WITH_AES_128_GCM_SHA256

  • TLS_RSA_WITH_AES_128_CBC_SHA

  • TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256

10.22 이상, 11.17 이상, 12.12 이상, 13.8 이상, 14.5 이상, 15.2 이상

  • DHE-RSA-AES128-SHA

  • DHE-RSA-AES128-SHA256

  • DHE-RSA-AES128-GCM-SHA256

  • DHE-RSA-AES256-SHA

  • DHE-RSA-AES256-SHA256

  • DHE-RSA-AES256-GCM-SHA384

  • ECDHE-ECDSA-AES256-SHA

  • ECDHE-ECDSA-AES256-GCM-SHA384

  • ECDHE-RSA-AES256-SHA384

  • ECDHE-RSA-AES128-SHA

  • ECDHE-RSA-AES128-SHA256

  • ECDHE-RSA-AES128-GCM-SHA256

  • ECDHE-RSA-AES256-SHA

  • ECDHE-RSA-AES256-GCM-SHA384

  • TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA

  • TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384

  • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA

  • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256

  • TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256

  • TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA

  • TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384

  • TLS_RSA_WITH_AES_256_GCM_SHA384

  • TLS_RSA_WITH_AES_256_CBC_SHA

  • TLS_RSA_WITH_AES_128_GCM_SHA256

  • TLS_RSA_WITH_AES_128_CBC_SHA256

  • TLS_RSA_WITH_AES_128_CBC_SHA

  • TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256

15.3, 14.8, 13.11, 12.15, 11.20

  • DHE-RSA-AES128-SHA

  • DHE-RSA-AES128-SHA256

  • DHE-RSA-AES128-GCM-SHA256

  • DHE-RSA-AES256-SHA

  • DHE-RSA-AES256-SHA256

  • DHE-RSA-AES256-GCM-SHA384

  • ECDHE-ECDSA-AES256-SHA

  • ECDHE-ECDSA-AES256-GCM-SHA384

  • ECDHE-RSA-AES256-SHA384

  • ECDHE-RSA-AES128-SHA

  • ECDHE-RSA-AES128-SHA256

  • ECDHE-RSA-AES128-GCM-SHA256

  • ECDHE-RSA-AES256-SHA

  • ECDHE-RSA-AES256-GCM-SHA384

  • TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA

  • TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384

  • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA

  • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256

  • TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256

  • TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA

  • TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384

  • TLS_RSA_WITH_AES_256_GCM_SHA384

  • TLS_RSA_WITH_AES_256_CBC_SHA

  • TLS_RSA_WITH_AES_128_GCM_SHA256

  • TLS_RSA_WITH_AES_128_CBC_SHA256

  • TLS_RSA_WITH_AES_128_CBC_SHA

  • TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256

  • TLS_AES_128_GCM_SHA256

  • TLS_AES_256_GCM_SHA384

describe-engine-default-cluster-parameters CLI 명령을 사용하여 특정 파라미터 그룹 제품군에 대해 현재 지원되는 암호 그룹을 결정할 수도 있습니다. 다음 예에서는 Aurora PostgreSQL 11에 대한 ssl_cipher 클러스터 파라미터에 대해 허용되는 값을 가져오는 방법을 보여줍니다.

aws rds describe-engine-default-cluster-parameters --db-parameter-group-family aurora-postgresql11 ...some output truncated... { "ParameterName": "ssl_ciphers", "Description": "Sets the list of allowed TLS ciphers to be used on secure connections.", "Source": "engine-default", "ApplyType": "dynamic", "DataType": "list", "AllowedValues": "DHE-RSA-AES128-SHA,DHE-RSA-AES128-SHA256,DHE-RSA-AES128-GCM-SHA256,DHE-RSA-AES256-SHA,DHE-RSA-AES256-SHA256,DHE-RSA-AES256-GCM-SHA384, ECDHE-RSA-AES128-SHA,ECDHE-RSA-AES128-SHA256,ECDHE-RSA-AES128-GCM-SHA256,ECDHE-RSA-AES256-SHA,ECDHE-RSA-AES256-SHA384,ECDHE-RSA-AES256-GCM-SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384, TLS_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_128_GCM_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA", "IsModifiable": true, "MinimumEngineVersion": "11.8", "SupportedEngineModes": [ "provisioned" ] }, ...some output truncated...

ssl_ciphers 파라미터는 허용되는 모든 암호 그룹으로 기본 설정됩니다. 암호에 대한 자세한 내용은 PostgreSQL 문서의 가변 ssl_cipher를 참조하세요.