

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

# Amazon Aurora PostgreSQL 的安全性
<a name="AuroraPostgreSQL.Security"></a>

如需有關 Aurora 安全性的一般概觀，請參閱 [ Amazon Aurora 的安全性](UsingWithRDS.md)。您可在幾個不同的層級管理 Amazon Aurora PostgreSQL 的安全性：
+ 若要控制誰可以在 Aurora PostgreSQL 資料庫叢集和資料庫執行個體上執行 Amazon RDS 管理動作，請使用 AWS Identity and Access Management (IAM)。IAM 在使用者可存取服務之前處理使用者身分的身分驗證。其還會處理授權，亦即，是否允許使用者去做其想做的事情。IAM 資料庫身分驗證是一種額外的身分驗證方法，您可在建立 Aurora PostgreSQL 資料庫叢集時選擇該方法。如需詳細資訊，請參閱[Amazon Aurora 的 Identity and access management](UsingWithRDS.IAM.md)。

  若您是將 IAM 與 Aurora PostgreSQL 資料庫叢集搭配使用，請先使用您的 IAM 憑證登入 AWS 管理主控台 ，然後才於 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/) 開啟 Amazon RDS 主控台。
+ Aurora 資料庫叢集必須在以 Amazon VPC 服務為基礎的虛擬私有雲端 (VPC) 中建立。若要控制哪些裝置和 Amazon EC2 執行個體可以開放對 VPC 中 Aurora 資料庫叢集的資料庫執行個體端點和連接埠的連線，可以使用 VPC 安全群組。您可使用 Secure Sockets Layer (SSL) 對這些端點和連接埠建立連線。此外，貴公司的防火牆規則可控管在公司內執行的裝置是否可開啟與資料庫執行個體的連線。如需 VPC 的詳細資訊，請參閱[Amazon VPC 和 Amazon Aurora](USER_VPC.md)。

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

  如需執行個體類別的詳細資訊，請參閱[Amazon Aurora 資料庫執行個體類別](Concepts.DBInstanceClass.md)。如需 `default` 和 `dedicated` VPC 租用的詳細資訊，請參閱《Amazon Elastic Compute Cloud 使用者指南》**中的[專用執行個體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-instance.html)。
+ 如要對 Amazon Aurora 資料庫叢集上執行的 PostgreSQL 資料庫授予權限，您可採取與 PostgreSQL 獨立執行個體相同的通用方法。`CREATE ROLE`、`ALTER ROLE`、`GRANT` 和 `REVOKE` 等命令的運作方式與內部部署資料庫所使用的命令相同，會直接修改資料庫、結構描述，和資料表。

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

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

## 使用 SSL/TLS 保護 Aurora PostgreSQL 資料的安全
<a name="AuroraPostgreSQL.Security.SSL"></a>

對於 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 支援](https://www.postgresql.org/docs/current/libpq-ssl.html)。如需透過 JDBC 使用 SSL/TLS 連線的相關資訊，請參閱 PostgreSQL 文件中的[設定用戶端](https://jdbc.postgresql.org/documentation/head/ssl-client.html)。

**Topics**
+ [需要使用 SSL/TLS 連線至 Aurora PostgreSQL 資料庫叢集](#AuroraPostgreSQL.Security.SSL.Requiring)
+ [判斷 SSL/TLS 連線狀態](#AuroraPostgreSQL.Security.SSL.Status)
+ [為 Aurora PostgreSQL 資料庫叢集的連線設定密碼套件](#AuroraPostgreSQL.Security.SSL.ConfiguringCipherSuites)

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 加密與資料庫叢集的連線](UsingWithRDS.SSL.md)。

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

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

   當您使用 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 資料庫叢集的範例。

```
$ 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 資料庫叢集
<a name="AuroraPostgreSQL.Security.SSL.Requiring"></a>

若需要連至 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 的參數群組](USER_WorkingWithParamGroups.md)。

更新 `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 連線狀態
<a name="AuroraPostgreSQL.Security.SSL.Status"></a>

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

```
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 文件中的[資料庫連線控制函數](https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNECT-SSLMODE)。

### 為 Aurora PostgreSQL 資料庫叢集的連線設定密碼套件
<a name="AuroraPostgreSQL.Security.SSL.ConfiguringCipherSuites"></a>

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

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

要指定用於加密連線的許可密碼列表，請修改 `ssl_ciphers` 叢集參數。使用 AWS CLI、 或 RDS API AWS 管理主控台，將 `ssl_ciphers` 參數設定為叢集參數群組中逗號分隔密碼值的字串。要設定叢集參數，請參閱 [在 Amazon Aurora 中修改資料庫叢集參數群組中的參數](USER_WorkingWithParamGroups.ModifyingCluster.md)。

下表顯示有效 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\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1GCM\$1SHA256 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1GCM\$1SHA384 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1GCM\$1SHA256 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1GCM\$1SHA384 TLS\$1RSA\$1WITH\$1AES\$1256\$1GCM\$1SHA384 TLS\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA TLS\$1RSA\$1WITH\$1AES\$1128\$1GCM\$1SHA256 TLS\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA TLS\$1ECDHE\$1RSA\$1WITH\$1CHACHA20\$1POLY1305\$1SHA256 | 是 否 是 否 是 否 是 否 否 是 否 是 否 | 是 是 是 是 是 是 是 是 是 是 是 是 是 | 否 否 否 否 否 否 否 否 否 否 否 否 否 | 
| 10.22、11.17、12.12、13.8、14.5 和 15.2 |  TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA256 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1GCM\$1SHA256 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1GCM\$1SHA384 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA256 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1GCM\$1SHA256 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1GCM\$1SHA384 TLS\$1RSA\$1WITH\$1AES\$1256\$1GCM\$1SHA384 TLS\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA TLS\$1RSA\$1WITH\$1AES\$1128\$1GCM\$1SHA256 TLS\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA256 TLS\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA TLS\$1ECDHE\$1RSA\$1WITH\$1CHACHA20\$1POLY1305\$1SHA256 |  是 否 否 是 否 是 否 否 是 否 否 是 否 是 是 否  | 是 是 是 是 是 是 是 是 是 是 是 是 是 是 是 是 | 否 否 否 否 否 否 否 否 否 否 否 否 否 否 否 否 | 
| 11.20、12.15、13.11、14.8、15.3、16.1 及更新版本 | TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA256 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1GCM\$1SHA256 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1GCM\$1SHA384 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA256 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1GCM\$1SHA256 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1GCM\$1SHA384 TLS\$1RSA\$1WITH\$1AES\$1256\$1GCM\$1SHA384 TLS\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA TLS\$1RSA\$1WITH\$1AES\$1128\$1GCM\$1SHA256 TLS\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA256 TLS\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA TLS\$1ECDHE\$1RSA\$1WITH\$1CHACHA20\$1POLY1305\$1SHA256 TLS\$1AES\$1128\$1GCM\$1SHA256 TLS\$1AES\$1256\$1GCM\$1SHA384  | 是 否 否 是 否 是 否 否 是 否 否 是 否 是 是 否 否 否 | 是 是 是 是 是 是 是 是 是 是 是 是 是 是 是 是 否 否 |  否 否 否 否 否 否 否 否 否 否 否 否 否 否 否 否 是 是  | 

您也可以使用 [describe-engine-default-cluster-parameters](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-engine-default-cluster-parameters.html) 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\$1cipher](https://www.postgresql.org/docs/current/runtime-config-connection.html#GUC-SSL-CIPHERS) 變數。