

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

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

Amazon Aurora MySQL 的安全性是以三個層級來管理：
+ 若要控制誰可以在 Aurora MySQL 資料庫叢集和資料庫執行個體上執行 Amazon RDS 管理動作，您可以使用 AWS Identity and Access Management (IAM)。當您 AWS 使用 IAM 登入資料連線至 時， AWS 您的帳戶必須具有授予執行 Amazon RDS 管理操作所需許可的 IAM 政策。如需詳細資訊，請參閱[Amazon Aurora 的 Identity and access management](UsingWithRDS.IAM.md)

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

  支援的 VPC 租用取決於您的 Aurora MySQL 資料庫叢集所使用的資料庫執行個體類別。使用 `default` VPC 租用時，VPC 在共用硬體上執行。使用 `dedicated` VPC 租用時，VPC 會在專用硬體執行個體上執行。爆量效能資料庫執行個體類別僅支援預設的 VPC 租用。爆量效能資料庫執行個體類別包括 db.t2、db.t3 和 db.t4g 資料庫執行個體類別。其他所有 Aurora MySQL 資料庫執行個體類別都支援預設和專用的 VPC 租用。
**注意**  
建議您在開發、測試伺服器或其他非生產伺服器時，僅使用 T 資料庫執行個體類別。如需詳細了解 T 執行個體類別，請參閱 [使用 T 執行個體類別進行開發和測試](AuroraMySQL.BestPractices.Performance.md#AuroraMySQL.BestPractices.T2Medium)。

  如需執行個體類別的詳細資訊，請參閱[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 MySQL 資料庫叢集的登入資訊與許可，您可採取下列任一方式，或搭配使用多種方法：
  + 您可採用與 MySQL 獨立執行個體相同的驗證方式。

    `CREATE USER`、`RENAME USER`、`GRANT`、`REVOKE` 及 `SET PASSWORD` 等命令的運作方式與現場部署資料庫所使用的命令相同，會直接修改資料庫結構描述資料表。如需詳細資訊，請參閱 MySQL 文件中的[存取控制和帳戶管理](https://dev.mysql.com/doc/refman/8.0/en/access-control.html)。
  + 您也可以使用 IAM 資料庫身分驗證。

    透過 IAM 資料庫身分驗證，您可以使用 IAM 使用者或 IAM 角色以及身分驗證字符，驗證您的資料庫叢集。*身分驗證字符*是不重複的值，由 Signature 第 4 版簽署程序所產生。透過使用 IAM 資料庫身分驗證，您可以使用相同的登入資料來控制對 AWS 資源和資料庫的存取。如需詳細資訊，請參閱[ IAM 資料庫身分驗證](UsingWithRDS.IAMDBAuth.md)。

**注意**  
如需詳細資訊，請參閱[ Amazon Aurora 的安全性](UsingWithRDS.md)。

在下列各節中，請參閱 Aurora MySQL 的使用者許可以及使用 Aurora MySQL 資料庫叢集進行 TLS 連線的相關資訊。

**Topics**
+ [Amazon Aurora MySQL 的主要使用者權限](#AuroraMySQL.Security.MasterUser)
+ [Aurora MySQL 資料庫叢集的 TLS 連線](#AuroraMySQL.Security.SSL)

## Amazon Aurora MySQL 的主要使用者權限
<a name="AuroraMySQL.Security.MasterUser"></a>

在您建立 Amazon Aurora MySQL 資料庫執行個體後，主要使用者具有 [主要使用者帳戶權限](UsingWithRDS.MasterAccounts.md) 中列出的預設權限：

若要為每個資料庫叢集提供管理服務，建立資料庫執行個體時，系統會一併建立 `admin` 和 `rdsadmin` 使用者。若企圖移除、重新命名 `rdsadmin` 帳戶或變更其密碼或權限，皆會導致發生錯誤。

在 Aurora MySQL 第 2 版資料庫叢集中，`admin` 和 `rdsadmin` 使用者會在建立資料庫叢集時一併建立。在 Aurora MySQL 第 3 版資料庫叢集中，會建立 `admin`、`rdsadmin` 和 `rds_superuser_role` 使用者。

**重要**  
我們強烈建議您不要直接在您的應用程式中使用主要使用者。而是遵循最佳實務，使用以應用程式所需的最低權限建立的資料庫使用者。

在管理 Aurora MySQL 資料庫叢集時，標準 `kill` 與 `kill_query` 命令均限制使用。請改用 Amazon RDS 命令 `rds_kill` 與 `rds_kill_query`，以終止 Aurora MySQL 資料庫執行個體上的使用者工作階段或查詢。

**注意**  
中國 (寧夏) 區域不支援資料庫執行個體和快照的加密。

## Aurora MySQL 資料庫叢集的 TLS 連線
<a name="AuroraMySQL.Security.SSL"></a>

如果應用程式使用與 RDS for MySQL 資料庫執行個體相同的程序和公有金鑰，Amazon Aurora MySQL 資料庫叢集支援來自這些應用程式的 Transport Layer Security (TLS) 連線。

在 Amazon RDS​ 佈建執行個體時，Amazon RDS​ 會建立 TLS 憑證，並將該憑證安裝在資料庫執行個體上。憑證由憑證授權機構簽署。TLS 憑證會以一般名稱 (CN) 納入資料庫執行個體端點，讓 TLS 憑證免於詐騙攻擊。因此，只有當您的用戶端支援主體別名 (SAN) 時，您才能透過 TLS 使用資料庫叢集端點以連線至資料庫叢集。否則，您必須使用寫入器執行個體的執行個體端點。

如需有關下載憑證的詳細資訊，請參閱[使用 SSL/TLS 加密與資料庫叢集的連線](UsingWithRDS.SSL.md)。

我們建議 AWS JDBC 驅動程式做為支援 SAN 搭配 TLS 的用戶端。如需 AWS JDBC 驅動程式的詳細資訊和完整的使用說明，請參閱 [Amazon Web Services (AWS) JDBC 驅動程式 GitHub 儲存庫](https://github.com/aws/aws-advanced-jdbc-wrapper)。

**Topics**
+ [需要以 TLS 連線至 Aurora MySQL 資料庫叢集](#AuroraMySQL.Security.SSL.RequireSSL)
+ [適用於 Aurora MySQL 的 TLS 版本](#AuroraMySQL.Security.SSL.TLS_Version)
+ [為 Aurora MySQL 資料庫叢集的連線設定密碼套件](#AuroraMySQL.Security.SSL.ConfiguringCipherSuites)
+ [加密 Aurora MySQL 資料庫叢集的連線](#AuroraMySQL.Security.SSL.EncryptingConnections)

### 需要以 TLS 連線至 Aurora MySQL 資料庫叢集
<a name="AuroraMySQL.Security.SSL.RequireSSL"></a>

您可以要求連線至 Aurora MySQL 資料庫叢集的所有使用者，藉由使用 `require_secure_transport` 資料庫叢集參數，來使用 TLS。依預設，`require_secure_transport` 參數設為 `OFF`。您可以將 `require_secure_transport` 參數設為 `ON`，以要求對資料庫叢集的連線使用 TLS。

您可以更新資料庫叢集的資料庫叢集參數群組，以設定 `require_secure_transport` 參數值。您不需要重新啟動資料庫叢集，變更即可生效。如需參數群組的詳細資訊，請參閱[Amazon Aurora 的參數群組](USER_WorkingWithParamGroups.md)。

**注意**  
`require_secure_transport` 參數適用於 Aurora MySQL 第 2 版和第 3 版。您可以在自訂資料庫叢集參數群組中設定此參數。該參數不適用於資料庫執行個體參數群組。

當資料庫叢集的 `require_secure_transport` 參數設為 `ON` 時，如果可以建立加密的連線，則資料庫用戶端即可連線到該資料庫叢集。否則，類似下列內容的錯誤訊息會傳回至用戶端：

```
MySQL Error 3159 (HY000): Connections using insecure transport are prohibited while --require_secure_transport=ON.
```

### 適用於 Aurora MySQL 的 TLS 版本
<a name="AuroraMySQL.Security.SSL.TLS_Version"></a>

Aurora MySQL 支援 Transport Layer Security (TLS) 1.0、1.1、1.2 和 1.3 版。從 Aurora MySQL 3.04.0 及更新版本開始，您可以使用 TLS 1.3 通訊協定來保護您的連線。下表顯示 Aurora MySQL 版本的 TLS 支援。


****  

| Aurora MySQL version | TLS 1.0 | TLS 1.1 | TLS 1.2 | TLS 1.3 | 預設 | 
| --- | --- | --- | --- | --- | --- | 
|  Aurora MySQL 第 2 版  | 已棄用 | 已棄用 |  支援  | 不支援 | 所有支援的 TLS 版本 | 
|  Aurora MySQL 第 3 版 (早於 3.04.0 的版本)  | 已棄用 | 已棄用 | 支援 | 不支援 | 所有支援的 TLS 版本 | 
|  Aurora MySQL 第 3 版 (3.04.0 和更新版本)  | 不支援  | 不支援  | 支援 | 支援 | 所有支援的 TLS 版本 | 

**重要**  
如果您在版本 2 和版本低於 3.04.0 的 Aurora MySQL 叢集上使用自訂參數群組，我們建議您使用 TLS 1.2，因為 TLS 1.0 和 1.1 的安全性較低。MySQL 8.0.26 和 Aurora MySQL 3.03 的社群版本及其次要版本已淘汰對 TLS 版本 1.1 和 1.0 的支援。  
MySQL 8.0.28 和相容的 Aurora MySQL 3.04.0 及更新版本的社群版本不支援 TLS 1.1 和 TLS 1.0。如果您使用的是極 Aurora MySQL 3.04 或及更新版本，請勿在自訂參數群組中將 TLS 通訊協定設定為 1.0 和 1.1。  
對於 Aurora MySQL 3.04.0 及更新版本，預設設定為 TLS 1.3 和 TLS 1.2。

您可以使用 `tls_version` 資料庫叢集參數來指示允許的通訊協定版本。大多數用戶端工具或資料庫驅動程式都有類似的用戶端參數 某些較舊的用戶端可能不支援較新的 TLS 版本。預設情況下，資料庫叢集會嘗試使用伺服器和用戶端配置允許的最高 TLS 通訊協定版本。

將 `tls_version` 資料庫叢集參數設定為下值之一：
+ `TLSv1.3` 
+ `TLSv1.2` 
+ `TLSv1.1`
+ `TLSv1`

您也可以設定 `tls_version` 參數作為逗號分隔的字符串列表。如果您想要同時使用 TLS 1.2 和 TLS 1.3 通訊協定，`tls_version` 參數必須包括從最低到最高協議的所有協議。在這種情況下，`tls_version` 設定為：

```
tls_version=TLSv1.2,TLSv1.3
```

如需修改資料庫叢集參數群組中的參數之相關資訊，請參閱 [在 Amazon Aurora 中修改資料庫叢集參數群組中的參數](USER_WorkingWithParamGroups.ModifyingCluster.md)。如果您使用 `tls_version` AWS CLI 修改資料庫叢集參數，`ApplyMethod`則必須將 設定為 `pending-reboot`。當套用方法是 `pending-reboot`，在停止並重新啟動與參數群組相關聯的資料庫叢集之後，都會套用至參數變更。

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

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

Aurora MySQL 3 版和 Aurora MySQL 2 版支援可設定的密碼套件。要指定用於加密連線的許可 TLS 1.2、TLS 1.1、TLS 1.0 密碼列表，請修改 `ssl_cipher` 叢集參數。在使用 AWS 管理主控台、 AWS CLI或 RDS API 的叢集參數群組中設定 `ssl_cipher` 參數。

將 `ssl_cipher` 參數設定為 TLS 版本以逗號分隔的密碼值字串。對於用戶端應用程式，您可在連線至資料庫時使用 `--ssl-cipher` 選項指定用於加密連線的密碼套件。如需有關連線至資料庫的詳細資訊，請參閱 [連接至 Amazon Aurora MySQL 資料庫叢集](Aurora.Connecting.md#Aurora.Connecting.AuroraMySQL)。

從 Aurora MySQL 3.04.0 及更新版本開始，您可以指定 TLS 1.3 加密套件。若要指定許可的 TLS 1.3 加密套件，請修改 `tls_ciphersuites` 參數群組中的參數。TLS 1.3 已減少可用加密套件的數量，因為命名慣例中的變更會移除金鑰交換機制和使用的憑證。將 `tls_ciphersuites` 設定為以逗號分隔的 TLS 1.3 密碼值字串。

下表顯示支援的密碼及 TLS 加密通訊協定，及每個密碼的有效 Aurora MySQL 引擎版本。


| 加密 | 加密通訊協定 | 支援的 Aurora MySQL 版本 | 
| --- | --- | --- | 
| `ECDHE-RSA-AES128-SHA` | TLS 1.0 | 3.04.0 版和更新版本、2.11.0 版和更新版本 | 
| `ECDHE-RSA-AES128-SHA256` | TLS 1.2 | 3.04.0 版和更新版本、2.11.0 版和更新版本 | 
| `ECDHE-RSA-AES128-GCM-SHA256` | TLS 1.2 | 3.04.0 版和更新版本、2.11.0 版和更新版本 | 
| `ECDHE-RSA-AES256-SHA` | TLS 1.0 | 3.04.0 版和更新版本、2.11.0 版和更新版本 | 
| `ECDHE-RSA-AES256-GCM-SHA384` | TLS 1.2 | 3.04.0 版和更新版本、2.11.0 版和更新版本 | 
| `ECDHE-RSA-CHACHA20-POLY1305` | TLS 1.2 | 3.04.0 版和更新版本、2.11.0 版和更新版本 | 
| `ECDHE-ECDSA-AES128-SHA` | TLS 1.0 | 3.04.0 版和更新版本、2.11.0 版和更新版本 | 
| `ECDHE-ECDSA-AES256-SHA` | TLS 1.0 | 3.04.0 版和更新版本、2.11.0 版和更新版本 | 
| `ECDHE-ECDSA-AES128-GCM-SHA256` | TLS 1.2 | 3.04.0 版和更新版本、2.11.0 版和更新版本 | 
| `ECDHE-ECDSA-AES256-GCM-SHA384` | TLS 1.2 | 3.04.0 版和更新版本、2.11.0 版和更新版本 | 
| `ECDHE-ECDSA-CHACHA20-POLY1305` | TLS 1.2 | 3.04.0 版和更新版本、2.11.0 版和更新版本 | 
| `TLS_AES_128_GCM_SHA256` | TLS 1.3 | 3.04.0 及更新版本 | 
| `TLS_AES_256_GCM_SHA384` | TLS 1.3 | 3.04.0 及更新版本 | 
| `TLS_CHACHA20_POLY1305_SHA256` | TLS 1.3 | 3.04.0 及更新版本 | 

如需修改資料庫叢集參數群組中的參數之相關資訊，請參閱 [在 Amazon Aurora 中修改資料庫叢集參數群組中的參數](USER_WorkingWithParamGroups.ModifyingCluster.md)。若您使用 CLI 修改 `ssl_cipher` 資料庫叢集參數，請務必將 `ApplyMethod` 設定為 `pending-reboot`。當套用方法是 `pending-reboot`，在停止並重新啟動與參數群組相關聯的資料庫叢集之後，都會套用至參數變更。

您也可以使用 [describe-engine-default-cluster-parameters](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-engine-default-cluster-parameters.html) CLI 命令決定特定參數群組系列目前支援哪些密碼套件。下列範例顯示如何取得適用於 Aurora MySQL 第 2 版的 `ssl_cipher` 叢集參數允許值。

```
aws rds describe-engine-default-cluster-parameters --db-parameter-group-family aurora-mysql5.7

        ...some output truncated...
	{
        "ParameterName": "ssl_cipher",
        "ParameterValue": "ECDHE-RSA-AES128-SHA,ECDHE-RSA-AES128-SHA256,ECDHE-RSA-AES128-GCM-SHA256,ECDHE-RSA-AES256-SHA,ECDHE-RSA-AES256-GCM-SHA384,ECDHE-RSA-CHACHA20-POLY1305,ECDHE-ECDSA-AES256-SHA,ECDHE-ECDSA-CHACHA20-POLY1305,ECDHE-ECDSA-AES256-GCM-SHA384,ECDHE-ECDSA-AES128-GCM-SHA256,ECDHE-ECDSA-AES128-SHA",
        "Description": "The list of permissible ciphers for connection encryption.",
        "Source": "system",
        "ApplyType": "static",
        "DataType": "list",
        "AllowedValues": "ECDHE-RSA-AES128-SHA,ECDHE-RSA-AES128-SHA256,ECDHE-RSA-AES128-GCM-SHA256,ECDHE-RSA-AES256-SHA,ECDHE-RSA-AES256-GCM-SHA384,ECDHE-RSA-CHACHA20-POLY1305,ECDHE-ECDSA-AES256-SHA,ECDHE-ECDSA-CHACHA20-POLY1305,ECDHE-ECDSA-AES256-GCM-SHA384,ECDHE-ECDSA-AES128-GCM-SHA256,ECDHE-ECDSA-AES128-SHA",
        "IsModifiable": true,
        "SupportedEngineModes": [
            "provisioned"
        ]
    },
       ...some output truncated...
```

如需有關密碼的詳細資訊，請參閱 MySQL 文件中的 [ssl\$1cipher](https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_ssl_cipher) 變數。如需有關密碼套件格式的詳細資訊，請在 OpenSSL 網站上參閱 [openssl-ciphers 列表格式](https://www.openssl.org/docs/manmaster/man1/openssl-ciphers.html#CIPHER-LIST-FORMAT)和 [openssl-ciphers 字串格式](https://www.openssl.org/docs/manmaster/man1/openssl-ciphers.html#CIPHER-STRINGS)文件。

### 加密 Aurora MySQL 資料庫叢集的連線
<a name="AuroraMySQL.Security.SSL.EncryptingConnections"></a>

如要使用預設的 `mysql` 用戶端來加密連線，請使用 `--ssl-ca` 參數公有金鑰，以啟動 mysql 用戶端，例如：

MySQL 5.7 和 8.0 適用：

```
mysql -h myinstance.123456789012.rds-us-east-1.amazonaws.com
--ssl-ca=full_path_to_CA_certificate --ssl-mode=VERIFY_IDENTITY
```

MySQL 5.6 適用：

```
mysql -h myinstance.123456789012.rds-us-east-1.amazonaws.com
--ssl-ca=full_path_to_CA_certificate --ssl-verify-server-cert
```

用憑證授權單位 (CA) 憑證的完整路徑取代 *full\$1path\$1to\$1CA\$1certificate*。如需有關下載憑證的資訊，請參閱 [使用 SSL/TLS 加密與資料庫叢集的連線](UsingWithRDS.SSL.md)。

您可以要求特定使用者帳戶使用 TLS 連線。例如，您可以根據 MySQL 版本，使用下列任一陳述式，要求使用者帳戶 `encrypted_user` 使用 TLS 連線。

MySQL 5.7 和 8.0 適用：

```
ALTER USER 'encrypted_user'@'%' REQUIRE SSL;            
```

MySQL 5.6 適用：

```
GRANT USAGE ON *.* TO 'encrypted_user'@'%' REQUIRE SSL;
```

 使用 RDS Proxy 時，您會連線到代理端點，而不是一般叢集端點。您可以使用直接連線到 Aurora 資料庫叢集一樣的方式，將 SSL/TLS 做為連線至代理的必要或選用條件。如需有關使用 RDS Proxy 的資訊，請參閱 [Amazon RDS Proxy for Aurora](rds-proxy.md)。

**注意**  
如需有關對 MySQL 使用 TLS 連線的詳細資訊，請參閱 [MySQL 說明文件](https://dev.mysql.com/doc/refman/5.7/en/using-encrypted-connections.html)。