

# Amazon Aurora DSQL 中的数据保护
<a name="data-protection"></a>

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

出于数据保护目的，我们建议您使用 AWS IAM Identity Center 或 AWS Identity and Access Management 来保护凭证和设置各个用户。这样，每个用户只获得履行其工作职责所需的权限。还建议您通过以下方式保护数据：
+ 对每个账户使用多重身份验证（MFA）。
+ 使用 SSL/TLS 与 资源进行通信。我们要求使用 TLS 1.2，建议使用 TLS 1.3。
+ 使用 AWS CloudTrail 设置 API 和用户活动日记账记录。有关使用跟踪来捕获活动的信息，请参阅《User Guide》**中的 [Working with trails](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-trails.html)。
+ 使用加密解决方案以及 AWS 服务中的所有默认安全控制。
+ 使用高级托管安全服务（例如 Amazon Macie），它有助于发现和保护存储在 Amazon S3 中的敏感数据。

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



## 数据加密
<a name="data-encryption"></a>

Amazon Aurora DSQL 提供了专为任务关键型和主要数据存储设计的高度持久的存储基础设施。在 Aurora DSQL 区域中，数据以冗余方式存储在多个设施间的多个设备中。

### 传输中加密
<a name="encryption-transit"></a>

默认情况下，为您配置了传输中加密。Aurora DSQL 使用 TLS 来加密 SQL 客户端和 Aurora DSQL 之间的所有流量。

对 AWS CLI、SDK 或 API 客户端与 Aurora DSQL 端点之间的传输中数据进行加密和签名：
+ Aurora DSQL 为加密传输中数据提供了 HTTPS 端点。
+ 为了保护向 Aurora DSQL 发出的 API 请求的完整性，API 调用必须由调用方签名。调用由 X.509 证书或客户的 AWS 秘密访问密钥根据前面版本 4 签名流程 (Sigv4) 签名。有关更多信息，请参阅《AWS 一般参考》**中的[签名版本 4 签名流程](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html)。
+  使用 AWS CLI 或 AWS 开发工具包之一向 AWS 发出请求。这些工具会自动使用您在配置工具时指定的访问密钥为您签署请求。

#### FIPS 合规性
<a name="fips-compliance"></a>

默认情况下，Aurora DSQL 数据面板端点（用于数据库连接的集群端点）使用经 FIPS 140-2 验证的加密模块。集群连接不需要单独的 FIPS 端点。

对于控制面板操作，Aurora DSQL 在支持的区域中提供专用 FIPS 端点。有关控制面板 FIPS 端点的详细信息，请参阅《AWS 一般参考》**中的 [Aurora DSQL endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/dsql.html)。

有关静态加密，请参阅 [Aurora DSQL 中的静态加密](data-encryption.md#encryption-at-rest)。

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

Aurora DSQL 与本地应用程序之间以及 Aurora DSQL 与同一 AWS 区域内的其它 AWS 资源之间的连接均受到保护。

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

## 见证区域中的数据保护
<a name="witness-regions"></a>

创建多区域集群时，见证区域通过参与加密事务的同步复制来协助实现自动故障恢复。如果对等集群变为不可用，则见证区域保持可用于验证和处理数据库写入，从而确保不丢失可用性。

见证区域通过以下这些设计功能保护和保障您的数据：
+ 见证区域仅接收和存储加密的事务日志。它从不托管、存储或传输您的加密密钥。
+ 见证区域只重点关注写入事务日志记录和仲裁函数。根据设计，它无法读取您的数据。
+ 见证区域在没有集群连接端点或查询处理器的情况下运行。这会阻止用户访问数据库。

有关见证区域的更多信息，请参阅[配置多区域集群](configuring-multi-region-clusters.md)。

# 为 Aurora DSQL 连接配置 SSL/TLS 证书
<a name="configure-root-certificates"></a><a name="ssl-certificate-overview"></a>

Aurora DSQL 要求所有连接均使用传输层安全性协议（TLS）加密。要建立安全连接，客户端系统必须信任 Amazon 根证书颁发机构（Amazon Root CA 1）。此证书预安装在许多操作系统上。本节提供在各种操作系统上验证预安装的 Amazon Root CA 1 证书的说明，并指导您完成手动安装证书的过程（如果证书尚不存在）。

建议使用 PostgreSQL 版本 17。

**重要**  
对于生产环境，建议使用 `verify-full` SSL 模式，以确保最高级别的连接安全性。此模式验证服务器证书是否由受信任的证书颁发机构签名，以及服务器主机名是否与证书匹配。

## 验证预安装证书
<a name="verify-installed-certificates"></a>

在大多数操作系统中，已经预安装了 **Amazon Root CA 1**。要验证这一点，您可以按照以下步骤操作。

### Linux（RedHat/CentOS/Fedora）
<a name="verify-linux"></a>

在终端中运行以下命令：

```
trust list | grep "Amazon Root CA 1"
```

如果证书已安装，将显示以下输出：

```
label: Amazon Root CA 1
```

### macOS
<a name="verify-macos"></a>

1. 打开 Spotlight 搜索（**Command** \$1 **空格**）

1. 搜索 **Keychain Access**

1. 在**系统密钥链**下选择**系统根**

1. 在证书列表中查找 **Amazon Root CA 1**

### Windows
<a name="verify-windows"></a>

**注意**  
由于 psql Windows 客户端存在一个已知问题，因此使用系统根证书 (`sslrootcert=system`) 可能会返回以下错误：`SSL error: unregistered scheme`。您可以采用[从 Windows 进行连接](#connect-windows)作为使用 SSL 连接到集群的替代方法。

如果操作系统中未安装 **Amazon Root CA 1**，请按照以下步骤操作。

## 安装证书
<a name="install-certificates"></a>

 如果操作系统上未预安装 `Amazon Root CA 1` 证书，则需要手动安装该证书，以便与 Aurora DSQL 集群建立安全连接。

### Linux 证书安装
<a name="install-linux"></a>

按照以下步骤在 Linux 系统上安装 Amazon 根 CA 证书。

1. 下载根证书：

   ```
   wget https://www.amazontrust.com/repository/AmazonRootCA1.pem
   ```

1. 将证书复制到信任存储：

   ```
   sudo cp ./AmazonRootCA1.pem /etc/pki/ca-trust/source/anchors/
   ```

1. 更新 CA 信任存储：

   ```
   sudo update-ca-trust
   ```

1. 验证安装：

   ```
   trust list | grep "Amazon Root CA 1"
   ```

### macOS 证书安装
<a name="install-macos"></a>

这些证书安装步骤是可选的。[Linux 证书安装](#install-linux)也适用于 macOS。

1. 下载根证书：

   ```
   wget https://www.amazontrust.com/repository/AmazonRootCA1.pem
   ```

1. 将证书添加到系统密钥链：

   ```
   sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain AmazonRootCA1.pem
   ```

1. 验证安装：

   ```
   security find-certificate -a -c "Amazon Root CA 1" -p /Library/Keychains/System.keychain
   ```

## 使用 SSL/TLS 验证进行连接
<a name="connect-using-certificates"></a>

 在配置 SSL/TLS 证书以便与 Aurora DSQL 集群建立安全连接之前，请确保满足以下先决条件。
+ 已安装 PostgreSQL 版本 17
+ 使用适当的凭证配置了 AWS CLI
+ Aurora DSQL 集群端点信息

### 从 Linux 进行连接
<a name="connect-linux"></a>

1. 生成并设置身份验证令牌：

   ```
   export PGPASSWORD=$(aws dsql generate-db-connect-admin-auth-token --region=your-cluster-region --hostname your-cluster-endpoint)
   ```

1. 使用系统证书（如果已预安装）进行连接：

   ```
   PGSSLROOTCERT=system \
   PGSSLMODE=verify-full \
   psql --dbname postgres \
   --username admin \
   --host your-cluster-endpoint
   ```

1. 或者，使用下载的证书进行连接：

   ```
   PGSSLROOTCERT=/full/path/to/root.pem \
   PGSSLMODE=verify-full \
   psql --dbname postgres \
   --username admin \
   --host your-cluster-endpoint
   ```

**注意**  
 有关 PGSSLMODE 设置的更多信息，请参阅 PostgresQL 17 [Database Connection Control Functions](https://www.postgresql.org/docs/current/libpq-connect.html) 文档中的 [sslmode](https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNECT-SSLMODE)。

### 从 macOS 进行连接
<a name="connect-macos"></a>

1. 生成并设置身份验证令牌：

   ```
   export PGPASSWORD=$(aws dsql generate-db-connect-admin-auth-token --region=your-cluster-region --hostname your-cluster-endpoint)
   ```

1. 使用系统证书（如果已预安装）进行连接：

   ```
   PGSSLROOTCERT=system \
   PGSSLMODE=verify-full \
   psql --dbname postgres \
   --username admin \
   --host your-cluster-endpoint
   ```

1. 或者，下载根证书并将其另存为 `root.pem`（如果未预安装证书）

   ```
   PGSSLROOTCERT=/full/path/to/root.pem \
   PGSSLMODE=verify-full \
   psql —dbname postgres \
   --username admin \
   --host your_cluster_endpoint
   ```

1. 使用 psql 进行连接：

   ```
   PGSSLROOTCERT=/full/path/to/root.pem \
   PGSSLMODE=verify-full \
   psql —dbname postgres \
   --username admin \
   --host your_cluster_endpoint
   ```

### 从 Windows 进行连接
<a name="connect-windows"></a>

#### 使用命令提示符
<a name="windows-command-prompt"></a>

1. 生成身份验证令牌：

   ```
   aws dsql generate-db-connect-admin-auth-token ^
   --region=your-cluster-region ^
   --expires-in=3600 ^
   --hostname=your-cluster-endpoint
   ```

1. 设置密码环境变量：

   ```
   set "PGPASSWORD=token-from-above"
   ```

1. 设置 SSL 配置：

   ```
   set PGSSLROOTCERT=C:\full\path\to\root.pem
   set PGSSLMODE=verify-full
   ```

1. 连接到数据库：

   ```
   "C:\Program Files\PostgreSQL\17\bin\psql.exe" --dbname postgres ^
   --username admin ^
   --host your-cluster-endpoint
   ```

#### 使用 PowerShell
<a name="windows-powershell"></a>

1. 生成并设置身份验证令牌：

   ```
   $env:PGPASSWORD = (aws dsql generate-db-connect-admin-auth-token --region=your-cluster-region --expires-in=3600 --hostname=your-cluster-endpoint)
   ```

1. 设置 SSL 配置：

   ```
   $env:PGSSLROOTCERT='C:\full\path\to\root.pem'
   $env:PGSSLMODE='verify-full'
   ```

1. 连接到数据库：

   ```
    "C:\Program Files\PostgreSQL\17\bin\psql.exe" --dbname postgres `
   --username admin `
   --host your-cluster-endpoint
   ```

## 其他资源
<a name="additional-resources"></a>
+  [PostgreSQL SSL 文档](https://www.postgresql.org/docs/current/libpq-ssl.html) 
+  [Amazon Trust Services](https://www.amazontrust.com/repository/) 