Menggunakan SSL dengan instans DB PostgreSQL - Layanan Basis Data Relasional Amazon

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menggunakan SSL dengan instans DB PostgreSQL

Amazon RDS mendukung enkripsi Secure Socket Layer (SSL) untuk instans DB PostgreSQL. Dengan menggunakan SSL, Anda dapat mengenkripsi koneksi PostgreSQL antara aplikasi Anda dan instans DB PostgreSQL Anda. Secara default, RDS for PostgreSQL menggunakan dan mengharapkan semua klien untuk terhubung menggunakan SSL/TLS, tetapi Anda juga dapat memerlukannya. RDS untuk PostgreSQL mendukung Transport Layer Security (TLS) versi 1.1, 1.2, dan 1.3.

Untuk informasi umum tentang dukungan SSL dan basis data PostgreSQL, lihat SSL support dalam dokumentasi PostgreSQL. Untuk informasi tentang menggunakan koneksi SSL melalui JDBC, lihat Configuring the client dalam dokumentasi PostgreSQL.

Dukungan SSL tersedia di semua AWS Wilayah untuk PostgreSQL. Amazon RDS membuat sertifikat SSL untuk instans DB PostgreSQL Anda ketika instans dibuat. Jika Anda mengaktifkan verifikasi sertifikat SSL, maka sertifikat SSL mencakup titik akhir instans DB sebagai Nama Umum (CN) untuk sertifikat SSL untuk melindungi dari serangan spoofing.

Menghubungkan ke instans DB PostgreSQL melalui SSL

Untuk menghubungkan ke instans DB PostgreSQL melalui SSL
  1. Unduh sertifikatnya.

    Untuk informasi tentang mengunduh sertifikat, lihat .

  2. Hubungkan instans DB PostgreSQL Anda melalui SSL.

    Saat Anda menghubungkan menggunakan SSL, klien Anda dapat memilih untuk memverifikasi rantai sertifikat. Jika parameter koneksi Anda menentukan sslmode=verify-ca atau sslmode=verify-full, kemudian klien Anda mengharuskan sertifikat RDS CA berada di penyimpanan terpercaya atau dirujuk di URL koneksi. Persyaratan ini untuk memverifikasi rantai sertifikat yang menandatangani sertifikat basis data Anda.

    Ketika klien, seperti psql atau JDBC, dikonfigurasikan dengan dukungan SSL, klien pertama kali mencoba untuk terhubung ke basis data dengan SSL secara default. Jika klien tidak dapat terhubung dengan SSL, maka akan kembali ke koneksi tanpa SSL. Mode sslmode default yang digunakan berbeda antara klien berbasis libpq (seperti psql) dan JDBC. Klien berbasis libpq dan JDBC default ke. prefer

    Gunakan parameter sslrootcert untuk mereferensikan sertifikat, misalnya sslrootcert=rds-ssl-ca-cert.pem.

Berikut ini adalah contoh penggunaan psql untuk terhubung ke instans DB PostgreSQL menggunakan SSL dengan verifikasi sertifikat.

$ psql "host=db-name.555555555555.ap-southeast-1.rds.amazonaws.com port=5432 dbname=testDB user=testuser sslrootcert=rds-ca-rsa2048-g1.pem sslmode=verify-full"

Mewajibkan koneksi SSL ke instans DB PostgreSQL

Anda dapat mewajibkan koneksi tersebut ke instans DB RDS for PostgreSQL Anda dengan SSL menggunakan parameter rds.force_ssl. Nilai default rds.force_ssl parameter adalah 1 (on) untuk RDS untuk PostgreSQL versi 15 dan yang lebih baru. Untuk semua RDS lainnya untuk PostgreSQL mayor versi 14 dan yang lebih lama, nilai default parameter ini adalah 0 (off). Anda dapat mengatur parameter rds.force_ssl ke 1 (aktif) untuk meminta SSL/TLS koneksi ke klaster DB Anda. Anda dapat mengatur parameter rds.force_ssl ke 1 (aktif) guna mewajibkan SSL untuk koneksi dengan instans basis data Anda.

Untuk mengubah nilai parameter ini, Anda perlu membuat grup parameter DB kustom. Anda kemudian mengubah nilai untuk rds.force_ssl dalam grup parameter DB kustom Anda menjadi 1 untuk mengaktifkan fitur ini. Jika Anda menyiapkan grup parameter DB kustom sebelum membuat RDS untuk instans DB PostgreSQL, Anda dapat memilihnya (bukan grup parameter default) selama proses pembuatan. Jika Anda melakukan ini setelah instans DB RDS for PostgreSQL Anda sudah berjalan, Anda perlu mem-boot ulang instans sehingga instans Anda menggunakan grup parameter kustom. Untuk informasi selengkapnya, lihat Grup parameter untuk RDS.

Ketika fitur rds.force_ssl aktif pada instans DB Anda, upaya koneksi yang tidak menggunakan SSL ditolak dengan pesan berikut:

$ psql -h db-name.555555555555.ap-southeast-1.rds.amazonaws.com port=5432 dbname=testDB user=testuser psql: error: FATAL: no pg_hba.conf entry for host "w.x.y.z", user "testuser", database "testDB", SSL off

Menentukan status koneksi SSL

Status terenkripsi dari koneksi Anda ditunjukkan pada banner logon saat Anda terhubung ke instans DB:

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

Anda juga dapat memuat ekstensi sslinfo, lalu memanggil fungsi ssl_is_used() untuk menentukan apakah SSL digunakan. Fungsi akan kembali t jika koneksi menggunakan SSL, jika tidak akan menghasilkan f.

postgres=> CREATE EXTENSION sslinfo; CREATE EXTENSION postgres=> SELECT ssl_is_used(); ssl_is_used --------- t (1 row)

Untuk informasi lebih rinci, Anda dapat menggunakan kueri berikut untuk mendapatkan informasi dari pg_settings:

SELECT name as "Parameter name", setting as value, short_desc FROM pg_settings WHERE name LIKE '%ssl%'; Parameter name | value | short_desc ----------------------------------------+-----------------------------------------+------------------------------------------------------- ssl | on | Enables SSL connections. ssl_ca_file | /rdsdbdata/rds-metadata/ca-cert.pem | Location of the SSL certificate authority file. ssl_cert_file | /rdsdbdata/rds-metadata/server-cert.pem | Location of the SSL server certificate file. ssl_ciphers | HIGH:!aNULL:!3DES | Sets the list of allowed SSL ciphers. ssl_crl_file | | Location of the SSL certificate revocation list file. ssl_dh_params_file | | Location of the SSL DH parameters file. ssl_ecdh_curve | prime256v1 | Sets the curve to use for ECDH. ssl_key_file | /rdsdbdata/rds-metadata/server-key.pem | Location of the SSL server private key file. ssl_library | OpenSSL | Name of the SSL library. ssl_max_protocol_version | | Sets the maximum SSL/TLS protocol version to use. ssl_min_protocol_version | TLSv1.2 | Sets the minimum SSL/TLS protocol version to use. ssl_passphrase_command | | Command to obtain passphrases for SSL. ssl_passphrase_command_supports_reload | off | Also use ssl_passphrase_command during server reload. ssl_prefer_server_ciphers | on | Give priority to server ciphersuite order. (14 rows)

Anda juga dapat mengumpulkan semua informasi tentang penggunaan SSL instans DB RDS for PostgreSQL Anda berdasarkan proses, klien, dan aplikasi menggunakan kueri berikut:

SELECT datname as "Database name", usename as "User name", ssl, client_addr, application_name, backend_type FROM pg_stat_ssl JOIN pg_stat_activity ON pg_stat_ssl.pid = pg_stat_activity.pid ORDER BY ssl; Database name | User name | ssl | client_addr | application_name | backend_type ---------------+-----------+-----+----------------+------------------------+------------------------------ | | f | | | autovacuum launcher | rdsadmin | f | | | logical replication launcher | | f | | | background writer | | f | | | checkpointer | | f | | | walwriter rdsadmin | rdsadmin | t | 127.0.0.1 | | client backend rdsadmin | rdsadmin | t | 127.0.0.1 | PostgreSQL JDBC Driver | client backend postgres | postgres | t | 204.246.162.36 | psql | client backend (8 rows)

Untuk mengidentifikasi penyandian yang digunakan untuk koneksi SSL Anda, Anda dapat melakukan kueri sebagai berikut:

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

Untuk informasi tentang opsi sslmode, lihat Database connection control functions dalam dokumentasi PostgreSQL.

Rangkaian penyandian SSL di RDS for PostgreSQL

Parameter konfigurasi PostgreSQL ssl_ciphers menentukan kategori cipher suite yang diizinkan untuk koneksi SSL ke database saat menggunakan TLS 1.2 dan yang lebih rendah.

Dalam RDS untuk PostgreSQL 16 dan yang lebih baru, Anda dapat memodifikasi parameter untuk menggunakan nilai tertentu ssl_ciphers dari suite cipher allowlisted. Ini adalah parameter dinamis yang tidak memerlukan reboot instance database. Untuk melihat rangkaian cipher yang diizinkan, gunakan konsol Amazon RDS atau perintah CLI berikut: AWS

aws rds describe-db-parameters --db-parameter-group-name <your-parameter-group> --region <region> --endpoint-url <endpoint-url> --output json | jq '.Parameters[] | select(.ParameterName == "ssl_ciphers")'

Tabel berikut mencantumkan suite cipher default dan suite cipher yang diizinkan untuk versi yang mendukung konfigurasi kustom.

Versi mesin PostgreSQL Nilai suite ssl_cipher default Nilai suite ssl_cipher kustom yang diizinkan
17 HIGH:!aNULL:!3DES

TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384

TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256

TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256

TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384

TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256

16 HIGH:!aNULL:!3DES

TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384

TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256

TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256

TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384

TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256

15 HIGH:!aNULL:!3DES

Ssl_ciphers kustom tidak didukung

14 HIGH:!aNULL:!3DES

Ssl_ciphers kustom tidak didukung

13 HIGH:!aNULL:!3DES

Ssl_ciphers kustom tidak didukung

12 HIGH:!aNULL:!3DES

Ssl_ciphers kustom tidak didukung

11.4 dan versi minor yang lebih tinggi HIGH:MEDIUM:+3DES:!aNULL:!RC4

Ssl_ciphers kustom tidak didukung

11.1, 11.2 HIGH:MEDIUM:+3DES:!aNULL

Ssl_ciphers kustom tidak didukung

10.9 dan versi minor yang lebih tinggi HIGH:MEDIUM:+3DES:!aNULL:!RC4

Ssl_ciphers kustom tidak didukung

10.7 dan versi minor yang lebih rendah HIGH:MEDIUM:+3DES:!aNULL

Ssl_ciphers kustom tidak didukung

Untuk mengonfigurasi semua koneksi instance untuk menggunakan TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 cipher suite, ubah grup parameter Anda seperti yang ditunjukkan pada contoh berikut:

aws rds modify-db-parameter-group --db-parameter-group-name <your-parameter-group> --parameters "ParameterName='ssl_ciphers',ParameterValue='TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384',ApplyMethod=immediate"

Contoh ini menggunakan sandi ECDSA, yang mengharuskan instans Anda menggunakan otoritas sertifikat dengan kriptografi kurva elips (ECC) untuk membuat koneksi. Untuk informasi tentang otoritas sertifikat yang disediakan oleh Amazon RDS, lihat Otoritas sertifikat.

Anda dapat memverifikasi cipher yang digunakan melalui metode yang dijelaskan dalam Menentukan status koneksi SSL.

Cipher mungkin memiliki nama yang berbeda tergantung pada konteksnya:

  • Cipher yang diizinkan yang dapat Anda konfigurasikan dalam grup parameter Anda dirujuk dengan nama IANA mereka.

  • Spanduk sslinfo dan psql logon mengacu pada cipher menggunakan nama OpenSSL mereka.

Secara default, nilai ssl_max_protocol_version dalam RDS untuk PostgreSQL 16 dan yang lebih baru adalah TLS v1.3. Anda harus mengatur nilai parameter ini ke TLS v1.2 karena TLS v1.3 tidak menggunakan konfigurasi sandi yang ditentukan dalam parameter. ssl_ciphers Ketika Anda menetapkan nilai sebagai TLS v1.2, koneksi hanya menggunakan cipher yang Anda tentukan. ssl_ciphers

aws rds modify-db-parameter-group --db-parameter-group-name <your-parameter-group> --parameters "ParameterName='ssl_max_protocol_version',ParameterValue='TLSv1.2',ApplyMethod=immediate"

Untuk memastikan koneksi database menggunakan SSL, atur rds.force_ssl parameter ke 1 di grup parameter Anda. Untuk informasi selengkapnya tentang parameter dan grup parameter, lihat Grup parameter untuk Amazon RDS.