Amazon Aurora PostgreSQL 的安全性 - Amazon Aurora

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Amazon Aurora PostgreSQL 的安全性

如需有關 Aurora 安全性的一般概觀,請參閱 Amazon Aurora 中的安全。您可在幾個不同的層級管理 Amazon Aurora PostgreSQL 的安全性:

  • 若要控制誰可以在 Aurora PostgreSQL 資料庫叢集和資料庫執行個體上執行 Amazon RDS 管理動作,請使用 AWS Identity and Access Management (IAM)。IAM 在使用者可存取服務之前處理使用者身分的身分驗證。其還會處理授權,亦即,是否允許使用者去做其想做的事情。IAM 資料庫身分驗證是一種額外的身分驗證方法,您可在建立 Aurora PostgreSQL 資料庫叢集時選擇該方法。如需詳細資訊,請參閱Amazon Aurora 的身分和存取管理

    若您是將 IAM 與 Aurora PostgreSQL 資料庫叢集搭配使用,請先使用您的 IAM 憑證登入 AWS Management Console ,然後才於 https://console.aws.amazon.com/rds/ 開啟 Amazon RDS 主控台。

  • Aurora 資料庫叢集必須在以 Amazon VPC 服務為基礎的虛擬私有雲端 (VPC) 中建立。若要控制哪些裝置和 Amazon EC2 執行個體可以開放對 VPC 中 Aurora 資料庫叢集的資料庫執行個體端點和連接埠的連線,可以使用 VPC 安全群組。您可使用 Secure Sockets Layer (SSL) 對這些端點和連接埠建立連線。此外,貴公司的防火牆規則可控管在公司內執行的裝置是否可開啟與資料庫執行個體的連線。如需 VPC 的詳細資訊,請參閱Amazon VPC 和 極光

    支援的 VPC 租用取決於您的 Aurora PostgreSQL 資料庫叢集所使用的資料庫執行個體類別。使用 default VPC 租用時,資料庫叢集在共用硬體上執行。使用 dedicated VPC 租用時,資料庫叢集會在專用硬體執行個體上執行。爆量效能資料庫執行個體類別僅支援預設的 VPC 租用。爆量效能資料庫執行個體類別包括 db.t3 和 db.t4g 資料庫執行個體類別。其他所有 Aurora PostgreSQL 資料庫執行個體類別都支援預設和專用的 VPC 租用。

    如需執行個體類別的詳細資訊,請參閱Amazon Aurora 資料庫執行個體類別。如需 defaultdedicated VPC 租用的詳細資訊,請參閱《Amazon Elastic Compute Cloud 使用者指南》中的專用執行個體

  • 如要對 Amazon Aurora 資料庫叢集上執行的 PostgreSQL 資料庫授予權限,您可採取與 PostgreSQL 獨立執行個體相同的通用方法。CREATE ROLEALTER ROLEGRANTREVOKE 等命令的運作方式與內部部署資料庫所使用的命令相同,會直接修改資料庫、結構描述,和資料表。

    PostgreSQL 會使用角色來管理權限。rds_superuser 角色是 Aurora PostgreSQL 資料庫叢集上權限最高的角色。此角色會自動建立,並授予建立資料庫叢集的使用者 (主要使用者帳户,依預設為 postgres)。如需進一步了解,請參閱 了解 PostgreSQL 角色和許可

所有可用的 Aurora PostgreSQL 版本 (包括第 10、11、12、13、14 版及更高版本) 支援密碼的 Salted Challenge Response Authentication Mechanism (SCRAM) 功能,作為訊息摘要 (MD5) 的替代方案。建議您使用 SCRAM,因為它比 MD5 更安全。如需詳細資訊,包括如何將資料庫使用者密碼從 MD5 遷移到 SCRAM,請參閱 使用 SCRAM 進行 PostgreSQL 密碼加密

使用 SSL/TLS 保護 Aurora PostgreSQL 資料的安全

對於 Aurora PostgreSQL 資料庫叢集,Amazon RDS 支援 Secure Sockets Layer (SSL) 和 Transport Layer Security (TLS) 加密。您可以使用 SSL/TLS,將應用程式與 Aurora PostgreSQL 資料庫叢集之間的連線加密。您也可以強制 Aurora PostgreSQL 資料庫叢集的所有連線都使用 SSL/TLS。Amazon Aurora PostgreSQL 現已支援 Transport Layer Security (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 會為您的 Aurora PostgreSQL 資料庫叢集建立 SSL/TLS 憑證。如果您啟用 SSL/TLS 憑證驗證,則 SSL/TLS 憑證會包含資料庫叢集端點,當作 SSL/TLS 憑證的通用名稱 (CN),以防範詐騙攻擊。

透過 SSL/TLS 連線至 Aurora PostgreSQL 資料庫叢集
  1. 下載憑證。

    如需有關下載憑證的詳細資訊,請參閱使用 SSL/TLS 加密與資料庫叢集的連線

  2. 將憑證匯入作業系統。

  3. 透過 SSL/TLS 連線至 Aurora PostgreSQL 資料庫叢集。

    當您使用 SSL/TLS 連線時,用戶端可以選擇是否驗證憑證鏈。如果您的連線參數指定 sslmode=verify-casslmode=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 資料庫叢集的範例。

$ 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"

需要使用 SSL/TLS 連線至 Aurora PostgreSQL 資料庫叢集

若要要求對 Aurora PostgreSQL 資料庫叢集進行 SSL/TLS 連線,請使用 rds.force_ssl 參數。

  • 若要要求 SSL/TLS 連線,請將rds.force_ssl參數值設定為 1 (開啟)。

  • 若要關閉所需的 SSL/TLS 連線,請將rds.force_ssl參數值設定為 0 (關閉)。

此參數的預設值取決於 Aurora PostgreSQL 版本:

  • 對於 Aurora PostgreSQL 第 17 版及更新版本:預設值為 1 (開啟)。

  • 對於 Aurora PostgreSQL 第 16 版及更舊版本:預設值為 0 (關閉)。

注意

當您從 Aurora PostgreSQL 第 16 版或更早版本升級至第 17 版或更新版本執行主要版本升級時,參數的預設值會從 0 (關閉) 變更為 1 (開啟)。此變更可能會導致未針對 SSL 設定的應用程式連線失敗。您可以將此參數設定為 0 (關閉),以還原至先前的預設行為。

如需處理參數的詳細資訊,請參閱 Amazon Aurora 的參數群組

更新 rds.force_ssl 參數也會將 PostgreSQL ssl 參數設為 1 (開啟),並修改資料庫叢集的 pg_hba.conf 檔案,以支援新的 SSL/TLS 組態。

當資料庫叢集的 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 連線狀態

當您連接至資料庫叢集時,登入橫幅中會顯示連線的加密狀態。

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 並重新啟動資料庫叢集,則非 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 資料庫叢集的連線設定密碼套件

透過使用可設定的密碼套件,您可以更進一步控制資料庫連線的安全性。您可以指定要允許的密碼套件清單,用以保護用戶端與資料庫之間的 SSL/TLS 連線的安全。您可以使用可設定的密碼套件來控制資料庫伺服器接受的連線加密。這樣做有助於避免使用不安全或已作廢的密碼。

Aurora PostgreSQL 11.8 版及更高版本支援可設定的密碼套件。

要指定用於加密連線的許可密碼列表,請修改 ssl_ciphers 叢集參數。使用 AWS CLI、 或 RDS API AWS Management Console,將 ssl_ciphers 參數設定為叢集參數群組中逗號分隔密碼值的字串。要設定叢集參數,請參閱 在 Amazon Aurora 中修改資料庫叢集參數群組中的參數

下表顯示有效 Aurora PostgreSQL 引擎版本支援的密碼。

Aurora PostgreSQL 引擎版本 受支援的密碼 TLS 1.1 TLS 1.2 TLS 1.3
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

ECDHE-RSA-AES128-SHATLS_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_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

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_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

11.20、12.15、13.11、14.8、15.3、16.1 及更高版本

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_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 變數。