

# Amazon RDS 中的数据保护
<a name="DataDurability"></a>

AWS [责任共担模式](https://aws.amazon.com/compliance/shared-responsibility-model/)适用于 Amazon Relational Database Service 中的数据保护。如该模式中所述，AWS 负责保护运行所有 AWS 云 的全球基础结构。您负责维护对托管在此基础结构上的内容的控制。您还负责您所使用的 AWS 服务 的安全配置和管理任务。有关数据隐私的更多信息，请参阅[数据隐私常见问题](https://aws.amazon.com/compliance/data-privacy-faq/)。有关欧洲数据保护的信息，请参阅 *AWS Security Blog* 上的 [AWS Shared Responsibility Model and GDPR](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/) 博客文章。

出于数据保护目的，建议您保护 AWS 账户 凭证并使用 AWS IAM Identity Center 或 AWS Identity and Access Management（IAM）设置单个用户。这样，每个用户只获得履行其工作职责所需的权限。还建议您通过以下方式保护数据：
+ 对每个账户使用多重身份验证（MFA）。
+ 使用 SSL/TLS 与 AWS 资源进行通信。我们要求使用 TLS 1.2，建议使用 TLS 1.3。
+ 使用 AWS CloudTrail 设置 API 和用户活动日记账记录。有关使用 CloudTrail 跟踪来捕获 AWS 活动的信息，请参阅《AWS CloudTrail 用户指南》**中的[使用 CloudTrail 跟踪](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-trails.html)。
+ 使用 AWS 加密解决方案以及 AWS 服务中的所有默认安全控制。
+ 使用高级托管安全服务（例如 Amazon Macie），它有助于发现和保护存储在 Amazon S3 中的敏感数据。
+ 如果在通过命令行界面或 API 访问 AWS 时需要经过 FIPS 140-3 验证的加密模块，请使用 FIPS 端点。有关可用的 FIPS 端点的更多信息，请参阅[《美国联邦信息处理标准（FIPS）第 140-3 版》](https://aws.amazon.com/compliance/fips/)。

强烈建议您切勿将机密信息或敏感信息（如您客户的电子邮件地址）放入标签或自由格式文本字段（如**名称**字段）。这包括当您通过控制台、API、AWS CLI 或 AWS SDK 使用 Amazon RDS 或其他 AWS 服务 时。在用于名称的标签或自由格式文本字段中输入的任何数据都可能会用于计费或诊断日志。如果您向外部服务器提供网址，强烈建议您不要在网址中包含凭证信息来验证对该服务器的请求。

**Topics**
+ [使用加密保护数据](Encryption.md)
+ [互联网络流量隐私](inter-network-traffic-privacy.md)

# 使用加密保护数据
<a name="Encryption"></a>

您可以为数据库资源启用加密。您也可以加密与数据库实例的连接。

**Topics**
+ [加密 Amazon RDS 资源](Overview.Encryption.md)
+ [AWS KMS key 管理](Overview.Encryption.Keys.md)
+ [使用 SSL/TLS 加密与数据库实例或集群的连接](UsingWithRDS.SSL.md)
+ [轮换 SSL/TLS 证书](UsingWithRDS.SSL-certificate-rotation.md)

# 加密 Amazon RDS 资源
<a name="Overview.Encryption"></a>

Amazon RDS 可以加密您的 Amazon RDS 数据库实例。静态加密的数据包括数据库实例的底层存储、其日志、自动备份、只读副本和快照。

Amazon RDS 加密的数据库实例使用行业标准 AES-256 加密算法，对托管 Amazon RDS 数据库实例的服务器上的数据进行加密。

在加密数据后，Amazon RDS 将以透明方式处理访问的身份验证和数据的解密，并且对性能产生的影响最小。您无需修改数据库客户端应用程序来使用加密。

**注意**  
对于加密和未加密数据库实例，将对在源与只读副本之间发送的数据进行加密，即使在 AWS 区域之间复制时也是如此。

**Topics**
+ [Amazon RDS 资源加密概览](#Overview.Encryption.Overview)
+ [加密数据库实例](#Overview.Encryption.Enabling)
+ [确定是否为数据库实例启用加密](#Overview.Encryption.Determining)
+ [Amazon RDS 加密的可用性](#Overview.Encryption.Availability)
+ [传输中加密](#Overview.Encryption.InTransit)
+ [Amazon RDS 加密的数据库实例的限制](#Overview.Encryption.Limitations)

## Amazon RDS 资源加密概览
<a name="Overview.Encryption.Overview"></a>

Amazon RDS 加密的数据库实例通过保护您的数据免受未经授权的访问来为基础存储提供额外一层数据保护。您可以使用 Amazon RDS 加密来增强对云中部署的应用程序的数据保护，并满足静态数据加密的合规性要求。可为 Amazon RDS 加密的数据库实例加密所有日志、备份和快照。有关加密功能的可用性和限制的更多信息，请参阅 [Amazon RDS 加密的可用性](#Overview.Encryption.Availability)和 [Amazon RDS 加密的数据库实例的限制](#Overview.Encryption.Limitations)。

Amazon RDS 使用 AWS Key Management Service 密钥加密这些资源。AWS KMS 将安全、高度可用的硬件和软件结合起来，提供面向云端扩展的密钥管理系统。您可以使用 AWS 托管式密钥，也可以创建客户托管的密钥。

创建加密数据库实例时，您可以为 Amazon RDS 选择客户托管密钥或 AWS 托管式密钥 来加密您的数据库实例。如果您没有为客户托管密钥指定密钥标识符，则 Amazon RDS 会将 AWS 托管式密钥 用于您的新数据库实例。Amazon RDS 为您的 AWS 账户创建用于 Amazon RDS 的 AWS 托管式密钥。您的 AWS 账户在每个 AWS 区域都有用于 Amazon RDS 的不同 AWS 托管式密钥。

要管理用于加密和解密 Amazon RDS 资源的客户自主管理型密钥，您可以使用 [AWS Key Management Service（AWS KMS）](https://docs.aws.amazon.com/kms/latest/developerguide/)。

利用 AWS KMS，您可创建客户自主管理型密钥，并定义策略来控制这些客户自主管理型密钥的使用方式。AWS KMS 支持 CloudTrail，因此，您可审核 KMS 密钥使用情况以验证客户自主管理型密钥是否使用得当。可以将客户托管密钥与 Amazon Aurora 和支持的 AWS 服务（例如 Amazon S3、Amazon EBS 和 Amazon Redshift）结合使用。有关与 AWS KMS 集成的服务的列表，请参阅 [AWS 服务集成](https://aws.amazon.com/kms/features/#AWS_Service_Integration)。关于使用 KMS 密钥的一些注意事项：
+ 创建加密的数据库实例后，您无法更改该数据库实例使用的 KMS 密钥。因此，请确保先确定您的 KMS 密钥要求，然后再创建加密的数据库实例。

  如果您必须更改数据库实例的加密密钥，请创建实例的手动快照，然后在复制快照时启用加密。有关更多信息，请参阅 [re:Post 知识文章](https://repost.aws/knowledge-center/update-encryption-key-rds)。
+ 如果复制加密快照，则可以使用不同于用于加密源快照的 KMS 密钥来加密目标快照。
+ Amazon RDS 加密实例的只读副本必须使用与主数据库实例相同的 KMS 密钥进行加密，前提是两者在相同的 AWS 区域中。
+ 如果主数据库实例和只读副本位于不同的 AWS 区域中，则使用该 AWS 区域的 KMS 密钥对只读副本进行加密。
+ 如果快照已使用共享该快照的 AWS 托管式密钥 账户的 AWS 进行加密，则您无法共享该快照。
+ Amazon RDS 还支持利用透明数据加密 (TDE) 对 Oracle 或 SQL Server 数据库实例进行加密。TDE 可以与 RDS 静态加密一起使用，但同时使用 TDE 和 RDS 静态加密可能会稍微影响数据库的性能。您必须为每种加密方法管理不同的密钥。有关 TDE 的更多信息，请参阅 [Oracle 透明数据加密](Appendix.Oracle.Options.AdvSecurity.md) 或 [SQL Server 中的透明数据加密支持](Appendix.SQLServer.Options.TDE.md)。

**重要**  
禁用 KMS 密钥后，Amazon RDS 会失去对数据库实例的 KMS 密钥的访问权限。如果您失去了对 KMS 密钥的访问权限，则在启用备份的情况下，加密的数据库实例会在检测后的 2 小时进入 `inaccessible-encryption-credentials-recoverable` 状态。数据库实例将保持此状态七天时间，在此期间实例停止运行。在此期间对该数据库实例进行的 API 调用可能不会成功。要恢复数据库实例，请启用 KMS 密钥并重新启动该数据库实例。从 AWS 管理控制台、AWS CLI 或 RDS API 启用 KMS 密钥。使用 AWS CLI 命令 [start-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/start-db-instance.html) 或 AWS 管理控制台重新启动数据库实例。  
`inaccessible-encryption-credentials-recoverable` 状态仅适用于可以停止的数据库实例。这种可恢复的状态不适用于无法停止的实例，例如只读副本和带有只读副本的实例。有关更多信息，请参阅 [停止数据库实例的限制](USER_StopInstance.md#USER_StopInstance.Limitations)。  
如果数据库实例未在七天内恢复，则该实例会进入终端 `inaccessible-encryption-credentials` 状态。在此状态下，数据库实例将无法再使用，您只能从备份还原数据库实例。强烈建议您始终对加密的数据库实例启用备份以防止数据库中的加密数据丢失。  
在数据库实例创建期间，Amazon RDS 会检查发出调用的主体是否有权访问 KMS 密钥，并从 KMS 密钥中生成授权，该授权将在数据库实例的整个生命周期内使用。撤消发出调用的主体对 KMS 密钥的访问权限，不会影响正在运行的数据库。在跨账户场景中使用 KMS 密钥时，例如将快照复制到其他账户，需要与其他账户共享 KMS 密钥。如果您从快照创建数据库实例但未指定不同的 KMS 密钥，则新实例将使用源账户中的 KMS 密钥。创建数据库实例后，撤消密钥访问权限不会影响实例。但是，禁用某个密钥会影响使用该密钥加密的所有数据库实例。为防止出现这种情况，请在快照复制操作期间指定不同的密钥。  
在实例修改或恢复期间，具有禁用备份的数据库实例将一直可用，直到卷与主机分离。如果适用，RDS 会将实例移至 `inaccessible-encryption-credentials-recoverable` 状态或 `inaccessible-encryption-credentials` 状态。

有关 KMS 密钥的更多信息，请参阅《AWS Key Management Service 开发人员指南》**中的 [AWS KMS keys](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#kms_keys) 和[AWS KMS key 管理](Overview.Encryption.Keys.md)。

## 加密数据库实例
<a name="Overview.Encryption.Enabling"></a>

要加密新数据库实例，请在 Amazon RDS 控制台上，选择 **Enable encryption**（启用加密）。想要了解有关创建数据库实例的信息，请参阅[创建 Amazon RDS 数据库实例](USER_CreateDBInstance.md)。

如果使用 [create-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html) AWS CLI 命令创建加密的数据库实例，请设置 `--storage-encrypted` 参数。如果使用 [CreateDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html) API 操作，请将 `StorageEncrypted` 参数设置为 true。



如果使用 AWS CLI `create-db-instance` 命令创建带有客户托管密钥的加密数据库实例，请将 `--kms-key-id` 参数设置为 KMS 密钥的任何密钥标识符。如果您使用 Amazon RDS API `CreateDBInstance` 操作，请将 `KmsKeyId` 参数设置为 KMS 密钥的任何密钥标识符。要在其他 AWS 账户中使用客户托管密钥，请指定密钥 ARN 或别名 ARN。

## 确定是否为数据库实例启用加密
<a name="Overview.Encryption.Determining"></a>

您可以使用 AWS 管理控制台、AWS CLI 或 RDS API 确定是否为数据库实例开启静态加密。

### 控制台
<a name="Overview.Encryption.Determining.CON"></a>

**要确定是否为数据库实例开启静态加密**

1. 登录AWS 管理控制台并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择 **Databases (数据库)**。

1. 选择要检查的数据库实例的名称以显示其详细信息。

1. 选择 **Configuration**（配置）选项卡，然后检查 **Storage**（存储）下的 **Encryption**（加密）值。

   它显示 **Enabled**（已启用）或 **Not enabled**（未启用）。  
![\[检查数据库实例的静态加密\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/encryption-check-db-instance.png)

### AWS CLI
<a name="Overview.Encryption.Determining.CLI"></a>

要使用 AWS CLI 确定是否已为数据库实例启用静态加密，请使用以下选项调用 [describe-db-instances](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) 命令：
+ `--db-instance-identifier` – 数据库实例的名称。

下面的示例使用查询就 `mydb` 数据库实例的静态加密返回 `TRUE` 或 `FALSE`。

**Example**  

```
1. aws rds describe-db-instances --db-instance-identifier mydb --query "*[].{StorageEncrypted:StorageEncrypted}" --output text
```

### RDS API
<a name="Overview.Encryption.Determining.API"></a>

要使用 Amazon RDS API 确定是否已为数据库实例启用静态加密，请使用以下参数调用 [DescribeDBInstances](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBInstances.html) 操作：
+ `DBInstanceIdentifier` – 数据库实例的名称。

## Amazon RDS 加密的可用性
<a name="Overview.Encryption.Availability"></a>

Amazon RDS 加密当前可用于所有数据库引擎和存储类型。

Amazon RDS 加密适用于大多数数据库实例类。下表列出了*不支持* Amazon RDS 加密的数据库实例类：


| 实例类型 | 实例类 | 
| --- | --- | 
| 通用型（M1） |  db.m1.small db.m1.medium db.m1.large db.m1.xlarge  | 
| 内存优化（M2） |  db.m2.xlarge db.m2.2xlarge db.m2.4xlarge  | 
| 突增型（T2） |  db.t2.micro  | 

## 传输中加密
<a name="Overview.Encryption.InTransit"></a>

**物理层加密**  
所有在 AWS 全球网络上跨 AWS 区域流动的数据在离开受 AWS 保护的设施之前，都会在物理层自动加密。可用区之间的所有流量均已加密。其它加密层（包括本节中列出的加密层）可能会提供额外保护。

**Amazon VPC 对等连接和 Transit Gateway 跨区域对等连接提供的加密**  
使用 Amazon VPC 和 Transit Gateway 对等连接的所有跨区域流量在退出区域时都会自动批量加密。所有流量在离开受 AWS 保护的设施之前，均会在物理层自动提供额外一层加密。

**实例之间的加密**  
AWS 在所有类型的数据库实例之间提供安全的私有连接。此外，某些实例类型使用底层 Nitro 系统硬件的卸载功能，自动加密实例之间的传输中流量。此加密使用关联数据的身份验证加密（AEAD）算法，采用 256 位加密。这对网络性能没有影响。要在实例之间支持这种额外的传输中流量加密，必须满足以下要求：  
+ 使用以下实例类型：
  + **通用型：**M6i、M6id、M6in、M6idn、M7g
  + **内存优化型：**R6i、R6id、R6in、R6idn、R7g、X2idn、X2iedn、X2iezn
+ 这些实例位于同一 AWS 区域。
+ 这些实例位于相同 VPC 或对等的 VPC 中，并且流量不会通过虚拟网络设备或服务（如负载均衡器或中转网关）传输。

## Amazon RDS 加密的数据库实例的限制
<a name="Overview.Encryption.Limitations"></a>

Amazon RDS 加密的数据库实例存在以下限制：
+ 您只能在创建 Amazon RDS 数据库实例时而不是创建该数据库实例之后加密该数据库实例。

  不过，由于您可以加密未加密快照的副本，因此，您可以高效地为未加密的数据库实例添加加密。也就是说，您可以创建数据库实例快照，然后创建该快照的加密副本。然后，您可以从加密快照还原数据库实例，从而获得原始数据库实例的加密副本。有关更多信息，请参阅 [复制 Amazon RDS 的数据库快照](USER_CopySnapshot.md)。
+ 您无法在加密的数据库实例上关闭加密。
+ 您无法创建未加密数据库实例的加密快照。
+ 加密数据库实例的快照必须使用与数据库实例相同的 KMS 密钥进行加密。
+ 您无法拥有未加密数据库实例的加密只读副本或加密数据库实例的未加密只读副本。
+ 如果加密的只读副本位于同一 AWS 区域，则它们的 KMS 密钥必须与源数据库实例的相同。
+ 您不能将未加密的备份或快照还原到加密的数据库实例。
+ 要将已加密快照从一个 AWS 区域复制到另一个区域，您必须指定目标 AWS 区域的 KMS 密钥。这是因为 KMS 密钥特定于在其中创建它们的 AWS 区域。

  源快照在复制过程中保持加密状态。Amazon RDS 使用信封加密在复制过程中保护数据。有关信封加密的更多信息，请参阅*AWS Key Management Service开发人员指南*中的[信封加密](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#enveloping)。
+ 您无法对加密数据库实例取消加密。但是，您可以从加密的数据库实例中导出数据，然后将数据导入未加密的数据库实例。

# AWS KMS key 管理
<a name="Overview.Encryption.Keys"></a>

 Amazon RDS 自动与 [AWS Key Management Service（AWS KMS）](https://docs.aws.amazon.com/kms/latest/developerguide/)集成以进行密钥管理。Amazon RDS 使用信封加密。有关信封加密的更多信息，请参阅 *AWS Key Management Service 开发人员指南*中的[信封加密](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#enveloping)。

您可以使用两种类型的 AWS KMS 密钥来加密数据库实例。
+ 要完全控制 KMS 密钥，您必须创建*客户托管密钥*。有关客户托管密钥的更多信息，请参阅 *AWS Key Management Service 开发人员指南*中的[客户托管密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)。
+  *AWS 托管式密钥* 是由与 AWS KMS 集成的 AWS 服务代表您在账户中创建、管理和使用的 KMS 密钥。默认情况下，RDS AWS 托管式密钥（`aws/rds`）用于加密。您无法管理、轮换或删除 RDS AWS 托管式密钥。有关 AWS 托管式密钥 的更多信息，请参阅《AWS Key Management Service 开发人员指南》**中的 [AWS 托管式密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk)。

要管理用于 Amazon RDS 加密数据库实例的 KMS 密钥，您可以使用 [AWS KMS 控制台](https://console.aws.amazon.com/kms)中的 [AWS Key Management Service（AWS KMS）](https://docs.aws.amazon.com/kms/latest/developerguide/)、AWS CLI 或 AWS KMS API。要查看利用 AWS 托管式或客户托管密钥执行的每个操作的审计日志，请使用 [AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/)。有关密钥轮换的更多信息，请参阅[轮换 AWS KMS 密钥](https://docs.aws.amazon.com/kms/latest/developerguide/rotate-keys.html)。

## 授权使用客户托管密钥
<a name="Overview.Encryption.Keys.Authorizing"></a>

RDS 在加密操作中使用客户自主管理型密钥时，其代表创建或更改 RDS 资源的用户执行操作。

要使用客户自主管理型密钥创建 RDS 资源，用户必须具有对客户自主管理型密钥调用以下操作的权限：
+  `kms:CreateGrant` 
+  `kms:DescribeKey` 

您可以在密钥策略中指定这些所需权限，或者在密钥策略允许的情况下在 IAM 策略中指定这些权限。

**重要**  
当您在 Amazon RDS 等托管式服务的 AWS KMS 密钥策略中对所有资源（\$1）使用显式拒绝语句时，您必须指定一个条件来支持拥有资源的账户。如果没有此条件，操作可能会失败，即使拒绝规则中包含针对您的 IAM 用户的例外情况也是如此。

**提示**  
为遵循最小特权原则，请不要允许对 `kms:CreateGrant` 拥有完全访问权限。而是仅当 AWS 服务代表用户创建授权时，才使用 [kms:ViaService 条件密钥](https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-via-service)来支持用户对 KMS 密钥创建授权。

您可以通过各种方式使 IAM 策略更严格。例如，如果您要支持将客户自主管理型密钥仅用于源自 RDS 的请求，请将 [kms:ViaService 条件密钥](https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-via-service)与 `rds.<region>.amazonaws.com` 值结合使用。此外，您可以使用[Amazon RDS 加密上下文](#Overview.Encryption.Keys.encryptioncontext)中的密钥或值作为使用客户托管密钥进行加密的条件。

有关更多信息，请参阅《AWS Key Management Service 开发人员指南》**中的[允许其他账户中的用户使用 KMS 密钥](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying-external-accounts.html)和 [AWS KMS 中的密钥策略](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies)。

## Amazon RDS 加密上下文
<a name="Overview.Encryption.Keys.encryptioncontext"></a>

当 RDS 使用您的 KMS 密钥时，或者当 Amazon EBS 代表 RDS 使用 KMS 密钥时，服务会指定[加密上下文](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context)。加密上下文是 AWS KMS 用于确保数据完整性而使用的[额外的身份验证数据](https://docs.aws.amazon.com/crypto/latest/userguide/cryptography-concepts.html#term-aad) (AAD)。在为加密操作指定加密上下文时，该服务必须为解密操作指定同一加密上下文。否则，解密将失败。加密上下文还将写至您的 [AWS CloudTrail](https://aws.amazon.com/cloudtrail/) 日志中，以帮助您了解为什么使用给定的 KMS 密钥。您的 CloudTrail 日志可能包含多个描述 KMS 密钥使用情况的条目，但每个日志条目中的加密上下文可以帮助您确定该特定使用的原因。

至少，Amazon RDS 始终将数据库实例 ID 用于加密上下文，如以下 JSON 格式的示例所示：

```
{ "aws:rds:db-id": "db-CQYSMDPBRZ7BPMH7Y3RTDG5QY" }
```

此加密上下文可以帮助您确定使用您的 KMS 密钥的数据库实例。

当您的 KMS 密钥用于特定的数据库实例和特定的 Amazon EBS 卷时，数据库实例 ID 和 Amazon EBS 卷 ID 将用于加密上下文，如以下 JSON 格式的示例所示：

```
{
  "aws:rds:db-id": "db-BRG7VYS3SVIFQW7234EJQOM5RQ",
  "aws:ebs:id": "vol-ad8c6542"
}
```

# 使用 SSL/TLS 加密与数据库实例或集群的连接
<a name="UsingWithRDS.SSL"></a>

您可以使用应用程序中的安全套接字层（SSL）或传输层安全性协议（TLS）来加密与运行 Db2、MariaDB、Microsoft SQL Server、MySQL、Oracle 或 PostgreSQL 的数据库的连接。

SSL/TLS 连接对在客户端和数据库实例或集群之间移动的数据进行加密，从而提供一层额外的安全性。（可选）您的 SSL/TLS 连接可以通过验证安装在数据库上的服务器证书来执行服务器身份验证。要请求服务器身份验证，请遵循以下一般流程：

1. 为数据库选择对**数据库服务器证书**进行签名的**证书颁发机构（CA）**。有关证书颁发机构的更多信息，请参阅[证书颁发机构](#UsingWithRDS.SSL.RegionCertificateAuthorities)。

1. 下载证书包，以便在连接到数据库时使用。要下载证书捆绑包，请参阅。。[按 AWS 区域列出的证书捆绑包](#UsingWithRDS.SSL.CertificatesAllRegions)。
**注意**  
只能使用 SSL/TLS 连接下载所有证书。

1. 使用数据库引擎用于实现 SSL/TLS 连接的过程连接到数据库。每个数据库引擎都有自己的用于实施 SSL/TLS 的过程。要了解如何为您的数据库实施 SSL/TLS，请使用对应于您的数据库引擎的链接：
   +  [对 Amazon RDS for Db2 数据库实例使用 SSL/TLS](Db2.Concepts.SSL.md) 
   +  [Amazon RDS 上 MariaDB 数据库实例的 SSL/TLS 支持](MariaDB.Concepts.SSLSupport.md) 
   +  [将 SSL 与 Microsoft SQL Server 数据库实例结合使用](SQLServer.Concepts.General.SSL.Using.md) 
   +  [Amazon RDS 上 MySQL 数据库实例的 SSL/TLS 支持](MySQL.Concepts.SSLSupport.md) 
   +  [对 RDS for Oracle 数据库实例使用 SSL](Oracle.Concepts.SSL.md) 
   +  [将 SSL 与 PostgreSQL 数据库实例结合使用](PostgreSQL.Concepts.General.SSL.md) 

## 证书颁发机构
<a name="UsingWithRDS.SSL.RegionCertificateAuthorities"></a>

**证书颁发机构（CA）**是用于标识证书链顶部的根 CA 的证书。CA 签署安装在每个数据库实例上的**数据库服务器证书**。数据库服务器证书将数据库实例标识为可信服务器。

![\[证书颁发机构概述\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/certificate-authority-overview.png)


Amazon RDS 提供以下 CA 来签署数据库的数据库服务器证书。


****  

| 证书颁发机构（CA） | 说明 | 公用名 (CN) | 
| --- | --- | --- | 
|  rds-ca-rsa2048-g1  |  在大多数 AWS 区域中，使用具有 RSA 2048 私有密钥算法和 SHA256 签名算法的证书颁发机构。 在 AWS GovCloud (US) Regions中，此 CA 使用具有 RSA 2048 私有密钥算法和 SHA384 签名算法的证书颁发机构。 此 CA 支持服务器证书自动轮换。  | Amazon RDS region-identifier Root CA RSA2048 G1 | 
|  rds-ca-rsa4096-g1  |  使用具有 RSA 4096 私有密钥算法和 SHA384 签名算法的证书颁发机构。此 CA 支持服务器证书自动轮换。  | Amazon RDS region-identifier Root CA RSA4096 G1 | 
|  rds-ca-ecc384-g1  |  使用具有 ECC 384 私有密钥算法和 SHA384 签名算法的证书颁发机构。此 CA 支持服务器证书自动轮换。  | Amazon RDS region-identifier Root CA ECC384 G1 | 

**注意**  
如果您使用的是 AWS CLI，则可以使用 [describe-certificates](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-certificates.html) 查看上面列出的证书颁发机构的有效性。

这些 CA 证书包含在区域和全球证书捆绑包中。当您将 rds-ca-rsa2048-g1、rds-ca-rsa4096-g1 或 rds-ca-ecc384-g1 CA 用于数据库时，RDS 会管理数据库上的数据库服务器证书。RDS 会在数据库服务器证书过期之前自动轮换此证书。

### 为数据库设置 CA
<a name="UsingWithRDS.SSL.RegionCertificateAuthorities.Selection"></a>

您可以在执行以下任务时为数据库设置 CA：
+ 创建数据库实例或多可用区数据库集群 – 您可以在创建数据库实例或集群时设置 CA。有关说明，请参阅[创建 Amazon RDS 数据库实例](USER_CreateDBInstance.md)或[创建 Amazon RDS 的多可用区数据库集群](create-multi-az-db-cluster.md)。
+ 修改数据库实例或多可用区数据库集群 - 您可以通过修改数据库实例或集群为其设置 CA。有关说明，请参阅[修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)或[修改 Amazon RDS 的多可用区数据库集群](modify-multi-az-db-cluster.md)。

**注意**  
 默认 CA 设置为 rds-ca-rsa2048-g1。您可以使用 [modify-certificates](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-certificates.html) 命令为您的 AWS 账户覆盖默认 CA。

可用的 CA 取决于数据库引擎和数据库引擎版本。使用 AWS 管理控制台时，您可以使用 **Certificate authority**（证书颁发机构）设置选择 CA，如下图所示。

![\[证书颁发机构选项\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/certificate-authority.png)


控制台仅显示可用于数据库引擎和数据库引擎版本的 CA。如果您使用的是 AWS CLI，则可以使用 [create-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html) 或 [modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) 命令为数据库实例设置 CA。您可以使用 [create-db-cluster](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-cluster.html) 或 [modify-db-cluster](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-cluster.html) 命令为多可用区数据库集群设置 CA。

如果您使用的是 AWS CLI，则可以使用 [describe-certificates](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-certificates.html) 命令查看您账户的可用 CA。此命令还在输出的 `ValidTill` 中显示每个 CA 的到期日期。您可以使用 [describe-db-engine-versions](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-engine-versions.html) 命令找到适用于特定数据库引擎和数据库引擎版本的 CA。

以下示例显示了可用于默认 RDS for PostgreSQL 数据库引擎版本的 CA。

```
aws rds describe-db-engine-versions --default-only --engine postgres
```

输出类似于以下内容。`SupportedCACertificateIdentifiers` 中列出了可用的 CA。输出还显示数据库引擎版本是否支持在 `SupportsCertificateRotationWithoutRestart` 中不重新启动的情况下轮换证书。

```
{
    "DBEngineVersions": [
        {
            "Engine": "postgres",
            "MajorEngineVersion": "13",
            "EngineVersion": "13.4",
            "DBParameterGroupFamily": "postgres13",
            "DBEngineDescription": "PostgreSQL",
            "DBEngineVersionDescription": "PostgreSQL 13.4-R1",
            "ValidUpgradeTarget": [],
            "SupportsLogExportsToCloudwatchLogs": false,
            "SupportsReadReplica": true,
            "SupportedFeatureNames": [
                "Lambda"
            ],
            "Status": "available",
            "SupportsParallelQuery": false,
            "SupportsGlobalDatabases": false,
            "SupportsBabelfish": false,
            "SupportsCertificateRotationWithoutRestart": true,
            "SupportedCACertificateIdentifiers": [
                "rds-ca-rsa2048-g1",
                "rds-ca-ecc384-g1",
                "rds-ca-rsa4096-g1"
            ]
        }
    ]
}
```

### 数据库服务器证书有效期
<a name="UsingWithRDS.SSL.RegionCertificateAuthorities.DBServerCert"></a>

数据库服务器证书的有效期取决于数据库引擎和数据库引擎版本。如果数据库引擎版本支持在不重启的情况下轮换证书，则数据库服务器证书的有效期为 1 年。否则，有效期为 3 年。

有关数据库服务器证书轮换的更多信息，请参阅[自动服务器证书轮换](UsingWithRDS.SSL-certificate-rotation.md#UsingWithRDS.SSL-certificate-rotation-server-cert-rotation)。

### 查看数据库实例的 CA
<a name="UsingWithRDS.SSL.RegionCertificateAuthorities.Viewing"></a>

您可以通过查看控制台中的**连接性和安全性**选项卡来查看有关数据库的 CA 的详细信息，如下图所示。

![\[证书颁发机构详细信息\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/certificate-authority-details.png)


如果您使用的是 AWS CLI，您可以使用 [describe-db-instances](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) 命令，查看有关数据库实例的 CA 的详细信息。您可以使用 [describe-db-clusters](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-clusters.html) 命令查看有关多可用区数据库集群的 CA 的详细信息。

## 下载 Amazon RDS 的证书捆绑包
<a name="UsingWithRDS.SSL.CertificatesDownload"></a>

当您使用 SSL 或 TLS 连接到数据库时，数据库实例需要来自 Amazon RDS 的信任证书。在下表中选择相应的链接，来下载与托管数据库的 AWS 区域相对应的捆绑包。

### 按 AWS 区域列出的证书捆绑包
<a name="UsingWithRDS.SSL.CertificatesAllRegions"></a>

所有 AWS 区域和 GovCloud（美国）区域的证书捆绑包均包含以下根 CA 证书：
+  `rds-ca-rsa2048-g1` 
+  `rds-ca-rsa4096-g1` 
+  `rds-ca-ecc384-g1` 

`rds-ca-rsa4096-g1` 和 `rds-ca-ecc384-g1` 证书在以下区域不可用：
+ 亚太地区（孟买）
+ 亚太地区（墨尔本）
+ 加拿大西部（卡尔加里）
+ 欧洲（苏黎世）
+ 欧洲（西班牙）
+ 以色列（特拉维夫）

您的应用程序信任存储只需要注册根 CA 证书。请勿将中间 CA 证书注册到您的信任存储区，因为当 RDS 自动轮换您的数据库服务器证书时，这可能会导致连接问题。

**注意**  
Amazon RDS 代理使用来自 AWS Certificate Manager（ACM）的证书。如果您使用的是 RDS 代理，则无需下载 Amazon RDS 证书或更新使用 RDS 代理连接的应用程序。有关更多信息，请参阅 [将 TLS/SSL 与 RDS 代理结合使用](rds-proxy.howitworks.md#rds-proxy-security.tls)。

要下载 AWS 区域的证书捆绑包，请在下表中选择与托管数据库的 AWS 区域相对应的链接。


|  **AWS 区域**  |  **证书捆绑包 (PEM)**  |  **证书捆绑包 (PKCS7)**  | 
| --- | --- | --- | 
| 任何商业 AWS 区域 |  [global-bundle.pem](https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem)  |  [global-bundle.p7b](https://truststore.pki.rds.amazonaws.com/global/global-bundle.p7b)  | 
| 美国东部（弗吉尼亚州北部） |  [us-east-1-bundle.pem](https://truststore.pki.rds.amazonaws.com/us-east-1/us-east-1-bundle.pem)  |  [us-east-1-bundle.p7b](https://truststore.pki.rds.amazonaws.com/us-east-1/us-east-1-bundle.p7b)  | 
| US East (Ohio) |  [us-east-2-bundle.pem](https://truststore.pki.rds.amazonaws.com/us-east-2/us-east-2-bundle.pem)  |  [us-east-2-bundle.p7b](https://truststore.pki.rds.amazonaws.com/us-east-2/us-east-2-bundle.p7b)  | 
| 美国西部（加利福尼亚北部） |  [us-west-1-bundle.pem](https://truststore.pki.rds.amazonaws.com/us-west-1/us-west-1-bundle.pem)  |  [us-west-1-bundle.p7b](https://truststore.pki.rds.amazonaws.com/us-west-1/us-west-1-bundle.p7b)  | 
| 美国西部（俄勒冈州） |  [us-west-2-bundle.pem](https://truststore.pki.rds.amazonaws.com/us-west-2/us-west-2-bundle.pem)  |  [us-west-2-bundle.p7b](https://truststore.pki.rds.amazonaws.com/us-west-2/us-west-2-bundle.p7b)  | 
| Africa (Cape Town) |  [af-south-1-bundle.pem](https://truststore.pki.rds.amazonaws.com/af-south-1/af-south-1-bundle.pem)  |  [af-south-1-bundle.p7b](https://truststore.pki.rds.amazonaws.com/af-south-1/af-south-1-bundle.p7b)  | 
| Asia Pacific (Hong Kong) |  [ap-east-1-bundle.pem](https://truststore.pki.rds.amazonaws.com/ap-east-1/ap-east-1-bundle.pem)  |  [ap-east-1-bundle.p7b](https://truststore.pki.rds.amazonaws.com/ap-east-1/ap-east-1-bundle.p7b)  | 
| 亚太地区（海得拉巴） |  [ap-south-2-bundle.pem](https://truststore.pki.rds.amazonaws.com/ap-south-2/ap-south-2-bundle.pem)  |  [ap-south-2-bundle.p7b](https://truststore.pki.rds.amazonaws.com/ap-south-2/ap-south-2-bundle.p7b)  | 
| 亚太地区（雅加达） |  [ap-southeast-3-bundle.pem](https://truststore.pki.rds.amazonaws.com/ap-southeast-3/ap-southeast-3-bundle.pem)  |  [ap-southeast-3-bundle.p7b](https://truststore.pki.rds.amazonaws.com/ap-southeast-3/ap-southeast-3-bundle.p7b)  | 
| 亚太地区（马来西亚） |  [ap-southeast-5-bundle.pem](https://truststore.pki.rds.amazonaws.com/ap-southeast-5/ap-southeast-5-bundle.pem)  |  [ap-southeast-5-bundle.p7b](https://truststore.pki.rds.amazonaws.com/ap-southeast-5/ap-southeast-5-bundle.p7b)  | 
| 亚太地区（墨尔本） |  [ap-southeast-4-bundle.pem](https://truststore.pki.rds.amazonaws.com/ap-southeast-4/ap-southeast-4-bundle.pem)  |  [ap-southeast-4-bundle.p7b](https://truststore.pki.rds.amazonaws.com/ap-southeast-4/ap-southeast-4-bundle.p7b)  | 
| 亚太地区（孟买） |  [ap-south-1-bundle.pem](https://truststore.pki.rds.amazonaws.com/ap-south-1/ap-south-1-bundle.pem)  |  [ap-south-1-bundle.p7b](https://truststore.pki.rds.amazonaws.com/ap-south-1/ap-south-1-bundle.p7b)  | 
| 亚太地区（大阪） |  [ap-northeast-3-bundle.pem](https://truststore.pki.rds.amazonaws.com/ap-northeast-3/ap-northeast-3-bundle.pem)  |  [ap-northeast-3-bundle.p7b](https://truststore.pki.rds.amazonaws.com/ap-northeast-3/ap-northeast-3-bundle.p7b)  | 
| 亚太地区（泰国） |  [ap-southeast-7-bundle.pem](https://truststore.pki.rds.amazonaws.com/ap-southeast-7/ap-southeast-7-bundle.pem)  |  [ap-southeast-7-bundle.p7b](https://truststore.pki.rds.amazonaws.com/ap-southeast-7/ap-southeast-7-bundle.p7b)  | 
| 亚太区域（东京） |  [ap-northeast-1-bundle.pem](https://truststore.pki.rds.amazonaws.com/ap-northeast-1/ap-northeast-1-bundle.pem)  |  [ap-northeast-1-bundle.p7b](https://truststore.pki.rds.amazonaws.com/ap-northeast-1/ap-northeast-1-bundle.p7b)  | 
| 亚太地区（首尔） |  [ap-northeast-2-bundle.pem](https://truststore.pki.rds.amazonaws.com/ap-northeast-2/ap-northeast-2-bundle.pem)  |  [ap-northeast-2-bundle.p7b](https://truststore.pki.rds.amazonaws.com/ap-northeast-2/ap-northeast-2-bundle.p7b)  | 
| 亚太地区（新加坡） |  [ap-southeast-1-bundle.pem](https://truststore.pki.rds.amazonaws.com/ap-southeast-1/ap-southeast-1-bundle.pem)  |  [ap-southeast-1-bundle.p7b](https://truststore.pki.rds.amazonaws.com/ap-southeast-1/ap-southeast-1-bundle.p7b)  | 
| 亚太地区（悉尼） |  [ap-southeast-2-bundle.pem](https://truststore.pki.rds.amazonaws.com/ap-southeast-2/ap-southeast-2-bundle.pem)  |  [ap-southeast-2-bundle.p7b](https://truststore.pki.rds.amazonaws.com/ap-southeast-2/ap-southeast-2-bundle.p7b)  | 
| 加拿大（中部） |  [ca-central-1-bundle.pem](https://truststore.pki.rds.amazonaws.com/ca-central-1/ca-central-1-bundle.pem)  |  [ca-central-1-bundle.p7b](https://truststore.pki.rds.amazonaws.com/ca-central-1/ca-central-1-bundle.p7b)  | 
| 加拿大西部（卡尔加里） |  [ca-west-1-bundle.pem](https://truststore.pki.rds.amazonaws.com/ca-west-1/ca-west-1-bundle.pem)  |  [ca-west-1-bundle.p7b](https://truststore.pki.rds.amazonaws.com/ca-west-1/ca-west-1-bundle.p7b)  | 
| 欧洲地区（法兰克福） |  [eu-central-1-bundle.pem](https://truststore.pki.rds.amazonaws.com/eu-central-1/eu-central-1-bundle.pem)  |  [eu-central-1-bundle.p7b](https://truststore.pki.rds.amazonaws.com/eu-central-1/eu-central-1-bundle.p7b)  | 
| 欧洲地区（爱尔兰） |  [eu-west-1-bundle.pem](https://truststore.pki.rds.amazonaws.com/eu-west-1/eu-west-1-bundle.pem)  |  [eu-west-1-bundle.p7b](https://truststore.pki.rds.amazonaws.com/eu-west-1/eu-west-1-bundle.p7b)  | 
| 欧洲地区（伦敦） |  [eu-west-2-bundle.pem](https://truststore.pki.rds.amazonaws.com/eu-west-2/eu-west-2-bundle.pem)  |  [eu-west-2-bundle.p7b](https://truststore.pki.rds.amazonaws.com/eu-west-2/eu-west-2-bundle.p7b)  | 
| 欧洲地区（米兰） |  [eu-south-1-bundle.pem](https://truststore.pki.rds.amazonaws.com/eu-south-1/eu-south-1-bundle.pem)  |  [eu-south-1-bundle.p7b](https://truststore.pki.rds.amazonaws.com/eu-south-1/eu-south-1-bundle.p7b)  | 
| 欧洲地区（巴黎） |  [eu-west-3-bundle.pem](https://truststore.pki.rds.amazonaws.com/eu-west-3/eu-west-3-bundle.pem)  |  [eu-west-3-bundle.p7b](https://truststore.pki.rds.amazonaws.com/eu-west-3/eu-west-3-bundle.p7b)  | 
| 欧洲（西班牙） |  [eu-south-2-bundle.pem](https://truststore.pki.rds.amazonaws.com/eu-south-2/eu-south-2-bundle.pem)  |  [eu-south-2-bundle.p7b](https://truststore.pki.rds.amazonaws.com/eu-south-2/eu-south-2-bundle.p7b)  | 
| 欧洲地区（斯德哥尔摩） |  [eu-north-1-bundle.pem](https://truststore.pki.rds.amazonaws.com/eu-north-1/eu-north-1-bundle.pem)  |  [eu-north-1-bundle.p7b](https://truststore.pki.rds.amazonaws.com/eu-north-1/eu-north-1-bundle.p7b)  | 
| 欧洲（苏黎世） |  [eu-central-2-bundle.pem](https://truststore.pki.rds.amazonaws.com/eu-central-2/eu-central-2-bundle.pem)  |  [eu-central-2-bundle.p7b](https://truststore.pki.rds.amazonaws.com/eu-central-2/eu-central-2-bundle.p7b)  | 
| 以色列（特拉维夫） |  [il-central-1-bundle.pem](https://truststore.pki.rds.amazonaws.com/il-central-1/il-central-1-bundle.pem)  |  [il-central-1-bundle.p7b](https://truststore.pki.rds.amazonaws.com/il-central-1/il-central-1-bundle.p7b)  | 
| 墨西哥（中部） |  [mx-central-1-bundle.pem](https://truststore.pki.rds.amazonaws.com/mx-central-1/mx-central-1-bundle.pem)  |  [mx-central-1-bundle.p7b](https://truststore.pki.rds.amazonaws.com/mx-central-1/mx-central-1-bundle.p7b)  | 
| 中东（巴林） |  [me-south-1-bundle.pem](https://truststore.pki.rds.amazonaws.com/me-south-1/me-south-1-bundle.pem)  |  [me-south-1-bundle.p7b](https://truststore.pki.rds.amazonaws.com/me-south-1/me-south-1-bundle.p7b)  | 
| 中东（阿联酋） |  [me-central-1-bundle.pem](https://truststore.pki.rds.amazonaws.com/me-central-1/me-central-1-bundle.pem)  |  [me-central-1-bundle.p7b](https://truststore.pki.rds.amazonaws.com/me-central-1/me-central-1-bundle.p7b)  | 
| 南美洲（圣保罗） |  [sa-east-1-bundle.pem](https://truststore.pki.rds.amazonaws.com/sa-east-1/sa-east-1-bundle.pem)  |  [sa-east-1-bundle.p7b](https://truststore.pki.rds.amazonaws.com/sa-east-1/sa-east-1-bundle.p7b)  | 
| 任何 AWS GovCloud (US) Region |  [global-bundle.pem](https://truststore.pki.us-gov-west-1.rds.amazonaws.com/global/global-bundle.pem)  |  [global-bundle.p7b](https://truststore.pki.us-gov-west-1.rds.amazonaws.com/global/global-bundle.p7b)  | 
| AWS GovCloud（美国东部） |  [us-gov-east-1-bundle.pem](https://truststore.pki.us-gov-west-1.rds.amazonaws.com/us-gov-east-1/us-gov-east-1-bundle.pem)  |  [us-gov-east-1-bundle.p7b](https://truststore.pki.us-gov-west-1.rds.amazonaws.com/us-gov-east-1/us-gov-east-1-bundle.p7b)  | 
| AWS GovCloud（美国西部） |  [us-gov-west-1-bundle.pem](https://truststore.pki.us-gov-west-1.rds.amazonaws.com/us-gov-west-1/us-gov-west-1-bundle.pem)  |  [us-gov-west-1-bundle.p7b](https://truststore.pki.us-gov-west-1.rds.amazonaws.com/us-gov-west-1/us-gov-west-1-bundle.p7b)  | 

### 查看 CA 证书的内容
<a name="UsingWithRDS.SSL.CertificatesDownload.viewing"></a>

要检查您的 CA 证书包的内容，请使用以下命令：

```
keytool -printcert -v -file global-bundle.pem
```

# 轮换 SSL/TLS 证书
<a name="UsingWithRDS.SSL-certificate-rotation"></a>

Amazon RDS 证书颁发机构证书 rds-ca-2019 于 2024 年 8 月到期。如果您使用或计划使用带有证书验证的安全套接字层（SSL）或传输层安全性协议（TLS）来连接您的 RDS 数据库实例或多可用区数据库集群，则考虑使用新的 CA 证书之一：rds-ca-rsa2048-g1、rds-ca-rsa4096-g1 或 rds-ca-ecc384-g1。如果您当前未将 SSL/TLS 用于证书验证，则可能仍有过期的 CA 证书，如果您计划为证书验证使用 SSL/TLS 连接到 RDS 数据库，则必须将它们更新为新的 CA 证书。

Amazon RDS 提供新 CA 证书作为AWS最佳安全实践。有关新证书和受支持的 AWS 区域的信息，请参阅[使用 SSL/TLS 加密与数据库实例或集群的连接](UsingWithRDS.SSL.md)。

要更新数据库的 CA 证书，请使用以下方法：
+  [通过修改数据库实例或集群来更新 CA 证书](#UsingWithRDS.SSL-certificate-rotation-updating) 
+  [通过应用维护来更新 CA 证书](#UsingWithRDS.SSL-certificate-rotation-maintenance-update) 

更新数据库实例或多可用区数据库集群来使用新的 CA 证书之前，请确保更新连接到 RDS 数据库的客户端或应用程序。

## 轮换证书的注意事项
<a name="UsingWithRDS.SSL-certificate-rotation-considerations"></a>

在轮换证书之前，请考虑以下情况：
+ Amazon RDS 代理使用来自 AWS Certificate Manager（ACM）的证书。如果您使用的是 RDS 代理，当您轮换 SSL/TLS 证书时，您不需要更新使用 RDS 代理连接的应用程序。有关更多信息，请参阅 [将 TLS/SSL 与 RDS 代理结合使用](rds-proxy.howitworks.md#rds-proxy-security.tls)。
+ 如果您将 Go 版本 1.15 应用程序与在 2020 年 7 月 28 日之前创建或更新到 rds-ca-2019 证书的数据库实例或多可用区数据库集群一起使用，则必须再次更新证书。将证书更新为 rds-ca-rsa2048-g1、rds-ca-rsa4096-g1 或 rds-ca-ecc384-g1，具体取决于您的引擎。

  使用新的 CA 证书标识符，对数据库实例运行 `modify-db-instance` 命令，或对多可用区数据库集群运行 `modify-db-cluster` 命令。您可以使用 `describe-db-engine-versions` 命令找到适用于特定数据库引擎和数据库引擎版本的 CA。

  如果您在 2020 年 7 月 28 日之后创建了数据库或更新了其证书，则无需执行任何操作。有关更多信息，请参阅 [Go GitHub 问题 \$139568](https://github.com/golang/go/issues/39568)。

## 通过修改数据库实例或集群来更新 CA 证书
<a name="UsingWithRDS.SSL-certificate-rotation-updating"></a>

以下示例将您的 CA 证书从 *rds-ca-2019* 更新为 *rds-ca-rsa2048-g1*。您可以选择其他证书。有关更多信息，请参阅 [证书颁发机构](UsingWithRDS.SSL.md#UsingWithRDS.SSL.RegionCertificateAuthorities)。

更新您的应用程序信任存储，以减少任何与更新 CA 证书相关的停机时间。有关与 CA 证书轮换相关的重启的更多信息，请参阅[自动服务器证书轮换](#UsingWithRDS.SSL-certificate-rotation-server-cert-rotation)。

**通过修改数据库实例或集群来更新 CA 证书**

1. 下载新的 SSL/TLS 证书，如[使用 SSL/TLS 加密与数据库实例或集群的连接](UsingWithRDS.SSL.md)中所述。

1. 更新应用程序以使用新的 SSL/TLS 证书。

   更新应用程序以使用新 SSL/TLS 证书的方法取决于特定的应用程序。请与应用程序开发人员一起更新应用程序的 SSL/TLS 证书。

   有关检查 SSL/TLS 连接和更新每个数据库引擎的应用程序的信息，请参阅以下主题：
   +  [更新应用程序以使用新的 SSL/TLS 证书连接到 MariaDB 实例](ssl-certificate-rotation-mariadb.md) 
   +  [更新应用程序以使用新的 SSL/TLS 证书连接到 Microsoft SQL Server 数据库实例](ssl-certificate-rotation-sqlserver.md) 
   +  [更新应用程序以使用新的 SSL/TLS 证书连接到 MySQL 数据库实例](ssl-certificate-rotation-mysql.md) 
   +  [更新应用程序以使用新的 SSL/TLS 证书连接到 Oracle 数据库实例](ssl-certificate-rotation-oracle.md) 
   +  [更新应用程序以使用新的 SSL/TLS 证书连接到 PostgreSQL 数据库实例](ssl-certificate-rotation-postgresql.md) 

   有关更新 Linux 操作系统信任存储的示例脚本，请参阅[将证书导入信任存储的示例脚本](#UsingWithRDS.SSL-certificate-rotation-sample-script)。
**注意**  
证书捆绑包包含新旧 CA 证书，因此您可以安全地升级应用程序并在转换期间保持连接。如果您正在使用 AWS Database Migration Service 将数据库迁移到数据库实例或集群，我们建议您使用证书捆绑包来确保迁移期间的连接性。

1. 修改数据库实例或多可用区数据库集群，以便将 CA 从 **rds-ca-2019** 更改为 **rds-ca-rsa2048-g1**。要检查您的数据库是否需要重启才能更新 CA 证书，请使用 [describe-db-engine-versions](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-engine-versions.html) 命令并检查 `SupportsCertificateRotationWithoutRestart` 标志。
**重要**  
如果您在证书到期后遇到连接问题，请通过在控制台中指定 **Apply immediately (立即应用)** 或者 使用 `--apply-immediately` 指定 AWS CLI 选项来使用“立即应用”选项。默认情况下，此操作安排在您的下个维护时段运行。  
对于 RDS for Oracle 数据库实例，建议您重新启动 Oracle 数据库以防止出现任何连接错误。  
对于启用了 AlwaysOn 或镜像选项的 RDS for SQL Server 多可用区实例，在证书轮换后重启实例时，预计会进行失效转移。  
要为与默认 RDS CA 不同的实例 CA 设置覆盖，请使用 [modify-certificates](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-certificates.html) CLI 命令。

您可以使用 AWS 管理控制台或 AWS CLI，对于数据库实例或多可用区数据库集群，将 CA 证书从 **rds-ca-2019** 更改为 **rds-ca-rsa2048-g1**。

------
#### [ Console ]

1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择**数据库**，然后选择要修改的数据库实例或多可用区数据库集群。

1. 选择 **Modify**(修改)。  
![\[修改数据库实例或多可用区数据库集群\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/ssl-rotate-cert-modify.png)

1. 在**连接**部分中，选择 **rds-ca-rsa2048-g1**。  
![\[选择 CA 证书\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/ssl-rotate-cert-ca-rsa2048-g1.png)

1. 选择**继续**，查看修改摘要。

1. 要立即应用更改，请选择**立即应用**。

1. 在确认页面上，检查您的更改。如果更改正确无误，请选择**修改数据库实例**或**修改集群**以保存更改。
**重要**  
安排此操作时，请确保已预先更新客户端信任存储。

   也可以选择 **Back** 编辑您的更改，或选择 **Cancel** 取消更改。

------
#### [ AWS CLI ]

要使用 AWS CLI 将数据库实例或多可用区数据库集群的 CA 从 **rds-ca-2019** 更改为 **rds-ca-rsa2048-g1**，请调用 [modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) 或 [modify-db-cluster](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-cluster.html) 命令。指定数据库实例或集群标识符和 `--ca-certificate-identifier` 选项。

使用 `--apply-immediately` 参数可立即应用更新。默认情况下，此操作安排在您的下个维护时段运行。

**重要**  
安排此操作时，请确保已预先更新客户端信任存储。

**Example**  
 **数据库实例**   
以下示例通过将 CA 证书设置为 `rds-ca-rsa2048-g1` 来修改 `mydbinstance`。  
对于 Linux、macOS 或 Unix：  

```
aws rds modify-db-instance \
    --db-instance-identifier mydbinstance \
    --ca-certificate-identifier rds-ca-rsa2048-g1
```
对于：Windows  

```
aws rds modify-db-instance ^
    --db-instance-identifier mydbinstance ^
    --ca-certificate-identifier rds-ca-rsa2048-g1
```
如果您的实例需要重启，可以使用 [modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) CLI 命令并指定 `--no-certificate-rotation-restart` 选项。

**Example**  
 **多可用区数据库集群**   
以下示例通过将 CA 证书设置为 `rds-ca-rsa2048-g1` 来修改 `mydbcluster`。  
对于 Linux、macOS 或 Unix：  

```
aws rds modify-db-cluster \
    --db-cluster-identifier mydbcluster \
    --ca-certificate-identifier rds-ca-rsa2048-g1
```
对于：Windows  

```
aws rds modify-db-cluster ^
    --db-cluster-identifier mydbcluster ^
    --ca-certificate-identifier rds-ca-rsa2048-g1
```

------

## 通过应用维护来更新 CA 证书
<a name="UsingWithRDS.SSL-certificate-rotation-maintenance-update"></a>

完成以下步骤，通过应用维护来更新 CA 证书。

------
#### [ Console ]

**通过应用维护来更新 CA 证书**

1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择**证书更新**。  
![\[证书轮换导航窗格选项\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/ssl-rotate-cert-certupdate.png)

   将显示**需要更新证书的数据库**页面。  
![\[更新数据库的 CA 证书\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/ssl-rotate-cert-update-multiple.png)
**注意**  
该页面仅显示当前 AWS 区域的数据库实例和集群。如果您在多个 AWS 区域中有数据库，请检查每个 AWS 区域中的该页面，以查看具有旧 SSL/TLS 证书的所有数据库实例。

1. 选择要更新的数据库实例或多可用区数据库集群。

   您可以通过选择**计划**来计划下一维护时段的证书轮换。通过选择**立即应用**来立即应用轮换。
**重要**  
如果您在证书到期后遇到连接问题，请使用**立即应用**选项。

1. 

   1. 如果您选择**计划**，系统会提示您确认 CA 证书轮换。此提示还说明更新的计划时段。  
![\[确认证书轮换\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/ssl-rotate-cert-confirm-schedule.png)

   1. 如果您选择**立即应用**，系统会提示您确认 CA 证书轮换。  
![\[确认证书轮换\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/ssl-rotate-cert-confirm-now.png)
**重要**  
在计划数据库上的 CA 证书轮换之前，请更新使用 SSL/TLS 和服务器证书进行连接的所有客户端应用程序。这些更新特定于您的数据库引擎。更新这些客户端应用程序后，可以确认 CA 证书轮换。

   要继续，请选中该复选框，然后选择 **Confirm (确认)**。

1. 对要更新的每个数据库实例和集群重复步骤 3 和 4。

------

## 自动服务器证书轮换
<a name="UsingWithRDS.SSL-certificate-rotation-server-cert-rotation"></a>

如果根 CA 支持自动服务器证书轮换，RDS 会自动处理数据库服务器证书的轮换。RDS 使用相同的根 CA 进行自动轮换，因此您无需下载新的 CA 服务包。请参阅[证书颁发机构](UsingWithRDS.SSL.md#UsingWithRDS.SSL.RegionCertificateAuthorities)。

数据库服务器证书的轮换和有效期取决于您的数据库引擎：
+ 如果您的数据库引擎支持无需重启即可轮换，则 RDS 会自动轮换数据库服务器证书，而无需您执行任何操作。RDS 尝试在您首选的维护时段中，在数据库服务器证书的半生命周期轮换您的数据库服务器证书。新的数据库服务器证书的有效期为 12 个月。
+ 如果您的数据库引擎不支持无需重启的证书轮换，Amazon RDS 会在证书有效期过半时或至少在到期前 3 个月，通过 Describe-pending-maintenance-actions API 显示 `server-certificate-rotation` 待处理的维护操作。您可以使用 apply-pending-maintenance-action API 来应用轮换。新的数据库服务器证书的有效期为 36 个月。

使用 [describe-db-engine-versions](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-engine-versions.html) 命令并检查 `SupportsCertificateRotationWithoutRestart`标志，以确定数据库引擎版本是否支持无需重启即可轮换证书。有关更多信息，请参阅 [为数据库设置 CA](UsingWithRDS.SSL.md#UsingWithRDS.SSL.RegionCertificateAuthorities.Selection)。

## 将证书导入信任存储的示例脚本
<a name="UsingWithRDS.SSL-certificate-rotation-sample-script"></a>

以下是将证书捆绑包导入信任存储的示例 shell 脚本。

每个示例 Shell 脚本都使用 keytool，它是 Java 开发工具包 (JDK) 的一部分。有关安装 JDK 的信息，请参阅 [JDK 安装指南](https://docs.oracle.com/en/java/javase/17/install/overview-jdk-installation.html)。

------
#### [ Linux ]

下面是一个示例 Shell 脚本，它将证书捆绑包导入 Linux 操作系统上的信任存储。

```
mydir=tmp/certs
if [ ! -e "${mydir}" ]
then
mkdir -p "${mydir}"
fi truststore=${mydir}/rds-truststore.jks storepassword=changeit

curl -sS "https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem"> ${mydir}/global-bundle.pem
awk 'split_after == 1 {n++;split_after=0} /-----END CERTIFICATE-----/ {split_after=1}{print > "rds-ca-" n+1 ".pem"}' < ${mydir}/global-bundle.pem

for CERT in rds-ca-*; do alias=$(openssl x509 -noout -text -in $CERT | perl -ne 'next unless /Subject:/; s/.*(CN=|CN = )//; print')
  echo "Importing $alias"
  keytool -import -file ${CERT} -alias "${alias}" -storepass ${storepassword} -keystore ${truststore} -noprompt
  rm $CERT
done

rm ${mydir}/global-bundle.pem

echo "Trust store content is: "

keytool -list -v -keystore "$truststore" -storepass ${storepassword} | grep Alias | cut -d " " -f3- | while read alias 
do expiry=`keytool -list -v -keystore "$truststore" -storepass ${storepassword} -alias "${alias}" | grep Valid | perl -ne 'if(/until: (.*?)\n/) { print "$1\n"; }'`
   echo " Certificate ${alias} expires in '$expiry'" 
done
```

------
#### [ macOS ]

下面是一个示例 Shell 脚本，它将证书捆绑包导入 macOS 上的信任存储。

```
mydir=tmp/certs
if [ ! -e "${mydir}" ]
then
mkdir -p "${mydir}"
fi truststore=${mydir}/rds-truststore.jks storepassword=changeit

curl -sS "https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem"> ${mydir}/global-bundle.pem
split -p "-----BEGIN CERTIFICATE-----" ${mydir}/global-bundle.pem rds-ca-

for CERT in rds-ca-*; do alias=$(openssl x509 -noout -text -in $CERT | perl -ne 'next unless /Subject:/; s/.*(CN=|CN = )//; print')
  echo "Importing $alias"
  keytool -import -file ${CERT} -alias "${alias}" -storepass ${storepassword} -keystore ${truststore} -noprompt
  rm $CERT
done

rm ${mydir}/global-bundle.pem

echo "Trust store content is: "

keytool -list -v -keystore "$truststore" -storepass ${storepassword} | grep Alias | cut -d " " -f3- | while read alias 
do expiry=`keytool -list -v -keystore "$truststore" -storepass ${storepassword} -alias "${alias}" | grep Valid | perl -ne 'if(/until: (.*?)\n/) { print "$1\n"; }'`
   echo " Certificate ${alias} expires in '$expiry'" 
done
```

------

# 互联网络流量隐私
<a name="inter-network-traffic-privacy"></a>

Amazon RDS 与本地应用程序之间以及 Amazon RDS 与同一 AWS 区域内的其他 AWS 资源之间的连接都受到保护。

## 服务与本地客户端和应用之间的流量
<a name="inter-network-traffic-privacy-on-prem"></a>

在您的私有网络和 AWS 之间有两个连接选项：
+ 一个AWS Site-to-Site VPN 连接。有关更多信息，请参阅[什么是 AWS Site-to-Site VPN？](https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html) 
+ 一个 Direct Connect 连接。有关更多信息，请参阅[什么是 Direct Connect？](https://docs.aws.amazon.com/directconnect/latest/UserGuide/Welcome.html) 

您可使用 AWS 发布的 API 操作，通过网络获取对 Amazon RDS 的访问权限。客户端必须支持以下内容：
+ 传输层安全性协议（TLS）。我们要求使用 TLS 1.2，建议使用 TLS 1.3。
+ 具有完全向前保密（PFS）的密码套件，例如 DHE（临时 Diffie-Hellman）或 ECDHE（临时椭圆曲线 Diffie-Hellman）。大多数现代系统（如 Java 7 及更高版本）都支持这些模式。

此外，必须使用访问密钥 ID 和与 IAM 主体关联的秘密访问密钥来对请求进行签名。或者，您可以使用 [AWS Security Token Service](https://docs.aws.amazon.com/STS/latest/APIReference/Welcome.html)（AWS STS）生成临时安全凭证来对请求进行签名。